	{"id":21214,"date":"2020-11-25T09:21:16","date_gmt":"2020-11-25T09:21:16","guid":{"rendered":"https:\/\/www.artefact.com\/?post_type=news&#038;p=21214"},"modified":"2024-09-20T17:45:14","modified_gmt":"2024-09-20T16:45:14","slug":"how-did-we-put-our-sales-forecasting-solution-for-croissants-into-production","status":"publish","type":"blog","link":"https:\/\/www.artefact.com\/br\/blog\/how-did-we-put-our-sales-forecasting-solution-for-croissants-into-production\/","title":{"rendered":"Como colocamos em produ\u00e7\u00e3o nossa solu\u00e7\u00e3o de previs\u00e3o de vendas para croissants?"},"content":{"rendered":"<p><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:0px;--awb-padding-right:0px;--awb-padding-bottom:0px;--awb-padding-left:0px;--awb-margin-bottom:40px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:calc( 1440px + 20px );margin-left: calc(-20px \/ 2 );margin-right: calc(-20px \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_2 1_2 fusion-flex-column avada-news-bloc-image\" style=\"--awb-bg-size:cover;--awb-width-large:50%;--awb-margin-top-large:0px;--awb-spacing-right-large:10px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:10px;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:10px;--awb-spacing-left-medium:10px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:10px;--awb-spacing-left-small:10px;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element\" style=\"text-align:left;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\"fusion-imageframe imageframe-none imageframe-1 hover-type-none\"><img decoding=\"async\" width=\"300\" height=\"74\" title=\"M\u00e9dio Blog\" src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/04\/Medium-Blog.png\" data-orig-src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/04\/Medium-Blog-300x74.png\" alt class=\"lazyload img-responsive wp-image-60582\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%274000%27%20height%3D%27992%27%20viewBox%3D%270%200%204000%20992%27%3E%3Crect%20width%3D%274000%27%20height%3D%27992%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/04\/Medium-Blog-200x50.png 200w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/04\/Medium-Blog-400x99.png 400w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/04\/Medium-Blog-600x149.png 600w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/04\/Medium-Blog-800x198.png 800w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/04\/Medium-Blog-1200x298.png 1200w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 640px) 100vw, 800px\" \/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-1 fusion_builder_column_1_2 1_2 fusion-flex-column\" style=\"--awb-padding-top:10px;--awb-padding-right:10px;--awb-padding-bottom:10px;--awb-padding-left:10px;--awb-bg-size:cover;--awb-width-large:50%;--awb-margin-top-large:0px;--awb-spacing-right-large:10px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:10px;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:10px;--awb-spacing-left-medium:10px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:10px;--awb-spacing-left-small:10px;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-text fusion-text-1\"><p>NOT\u00cdCIAS \/ TECNOLOGIA AI<\/p>\n<\/div><div class=\"fusion-text fusion-text-2\"><p>25 de novembro de 2020<br \/>\nNa Artefact, somos t\u00e3o franceses que decidimos aplicar o aprendizado de m\u00e1quina aos croissants. Este primeiro artigo de dois explica como decidimos usar o Catboost para prever as vendas de \u201cviennoiseries\u201d. Os recursos mais importantes que impulsionaram as vendas foram as \u00faltimas vendas semanais, o fato de o produto estar ou n\u00e3o em promo\u00e7\u00e3o e seu pre\u00e7o. Apresentaremos aos senhores alguns recursos interessantes de engenharia, inclusive a canibaliza\u00e7\u00e3o e por que \u00e0s vezes \u00e9 necess\u00e1rio atualizar a vari\u00e1vel de destino.<\/p>\n<\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-2 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-background-color:#ffffff;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:calc( 1440px + 20px );margin-left: calc(-20px \/ 2 );margin-right: calc(-20px \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-2 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-color:#ffffff;--awb-bg-color-hover:#ffffff;--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:10px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:10px;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:10px;--awb-spacing-left-medium:10px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:10px;--awb-spacing-left-small:10px;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-text fusion-text-3\" style=\"--awb-text-color:#000000;\"><p><span style=\"color: #ff0066;\"><strong class=\"jl kd\">O que \u00e9 isso?<\/strong><\/span><\/p>\n<p>Na Artefact, somos t\u00e3o franceses que decidimos aplicar o aprendizado de m\u00e1quina aos croissants. Este primeiro artigo de dois explica como decidimos usar o Catboost para prever as vendas de \u201cviennoiseries\u201d. Os recursos mais importantes que impulsionaram as vendas foram as \u00faltimas vendas semanais, o fato de o produto estar ou n\u00e3o em promo\u00e7\u00e3o e seu pre\u00e7o.<\/p>\n<p>Apresentaremos aos senhores alguns recursos interessantes de engenharia, incluindo canibaliza\u00e7\u00e3o e por que \u00e0s vezes \u00e9 necess\u00e1rio atualizar a vari\u00e1vel-alvo. Escolhemos a precis\u00e3o da previs\u00e3o e os biais como m\u00e9tricas de avalia\u00e7\u00e3o. Nosso segundo artigo explicar\u00e1 como colocamos esse modelo em produ\u00e7\u00e3o e algumas pr\u00e1ticas recomendadas de ML Ops.<\/p>\n<p><span style=\"color: #ff0066;\"><strong class=\"jl kd\">Para quem?<\/strong><\/span><\/p>\n<ul>\n<li>Cientista Data, engenheiro ML ou amantes Data<\/li>\n<\/ul>\n<p id=\"cb94\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\"><span style=\"color: #ff0066;\"><strong class=\"jl kd\">Conclus\u00f5es?<\/strong><\/span><\/p>\n<ul class=\"\">\n<li id=\"ead1\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Algoritmos de refor\u00e7o para previs\u00e3o de s\u00e9ries temporais<\/li>\n<li id=\"2597\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Como responder a um problema de previs\u00e3o com data com ru\u00eddo<\/li>\n<li id=\"a441\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Como lidar com as restri\u00e7\u00f5es operacionais na produ\u00e7\u00e3o<\/li>\n<\/ul>\n<p id=\"d9f7\" class=\"il im dn ce in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji ek\"><span style=\"color: #ff0066;\"><strong>Contexto<\/strong><\/span><\/p>\n<p id=\"730b\" class=\"jj jk dn jl b em jm iq jn ep jo iu jp jq jr js jt ju jv jw jx jy jz ka kb kc df ek\" data-selectable-paragraph=\"\">Recentemente, trabalhamos em um t\u00f3pico realmente interessante e desafiador para um grande varejista na Fran\u00e7a: Como prever a demanda di\u00e1ria de produtos frescos perec\u00edveis, como doces, incluindo nossos amados croissants.<\/p>\n<p class=\"jj jk dn jl b em jm iq jn ep jo iu jp jq jr js jt ju jv jw jx jy jz ka kb kc df ek\" data-selectable-paragraph=\"\">Esse varejista estava enfrentando um problema cl\u00e1ssico de cadeia de suprimentos: todos os dias, seus padeiros precisam assar uma certa quantidade de produtos frescos e perec\u00edveis: croissants, p\u00e3es de chocolate, baguetes, tortas de lim\u00e3o etc. A maioria desses produtos n\u00e3o dura mais de um dia e, se n\u00e3o forem vendidos, s\u00e3o considerados como receita perdida. Por outro lado, se n\u00e3o houver disponibilidade na prateleira durante o dia, os consumidores ficar\u00e3o insatisfeitos e haver\u00e1 perda de dinheiro. O desafio \u00e9 prever em n\u00edvel di\u00e1rio, com sete dias de anteced\u00eancia, a quantidade de cada produto perec\u00edvel para cada loja. Como resultado, esse projeto teve como objetivo melhorar a disponibilidade nas prateleiras e, ao mesmo tempo, reduzir o desperd\u00edcio de alimentos.<\/p>\n<p class=\"jj jk dn jl b em jm iq jn ep jo iu jp jq jr js jt ju jv jw jx jy jz ka kb kc df ek\" data-selectable-paragraph=\"\">Para prever as vendas com alguns dias de anteced\u00eancia, j\u00e1 era usada uma solu\u00e7\u00e3o interna que utilizava medidas estat\u00edsticas simples. No entanto, depois de nos reunirmos com os gerentes da padaria, entendemos que havia um espa\u00e7o claro para aprimoramento, aproveitando mais data e recursos como efeitos de sazonalidade, clima, feriados, efeitos de substitui\u00e7\u00e3o de produtos etc. Assim, decidimos usar a solu\u00e7\u00e3o atual como linha de base e experimentar algoritmos mais recentes para melhorar a precis\u00e3o da previs\u00e3o.<\/p>\n<p class=\"jj jk dn jl b em jm iq jn ep jo iu jp jq jr js jt ju jv jw jx jy jz ka kb kc df ek\" data-selectable-paragraph=\"\">E para concluir esta introdu\u00e7\u00e3o, uma ilustra\u00e7\u00e3o do desafio e do que queremos alcan\u00e7ar.<\/p>\n<p data-selectable-paragraph=\"\"><img decoding=\"async\" class=\"lazyload size-full wp-image-21368 aligncenter\" src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2020\/11\/0_tmryqg1LTyu3u_b8.jpeg\" data-orig-src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2020\/11\/0_tmryqg1LTyu3u_b8.jpeg\" alt=\"\" width=\"700\" height=\"393\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27700%27%20height%3D%27393%27%20viewBox%3D%270%200%20700%20393%27%3E%3Crect%20width%3D%27700%27%20height%3D%27393%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2020\/11\/0_tmryqg1LTyu3u_b8-200x112.jpeg 200w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2020\/11\/0_tmryqg1LTyu3u_b8.jpeg 700w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 700px) 100vw, 700px\" \/><\/p>\n<figure class=\"hn ho hp hq hr hd cx cy paragraph-image\">\n<div class=\"hu hv hw hx aj hy\" tabindex=\"0\" role=\"button\">\n<div class=\"cx cy kr\">\n<div class=\"ie s hw if\">\n<div class=\"ig ih s\">\n<div class=\"hz ia t u v ib aj bm ic id\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/figure>\n<\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-3 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-background-color:#ffffff;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:calc( 1440px + 20px );margin-left: calc(-20px \/ 2 );margin-right: calc(-20px \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-3 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-color:#ffffff;--awb-bg-color-hover:#ffffff;--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:10px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:10px;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:10px;--awb-spacing-left-medium:10px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:10px;--awb-spacing-left-small:10px;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-text fusion-text-4\" style=\"--awb-text-color:#000000;\"><p><span style=\"color: #ff0066;\"><strong>Desenvolvimento de modelos<\/strong><\/span><\/p>\n<p>Agora que temos um problema bem definido e alguns objetivos a serem alcan\u00e7ados, podemos finalmente come\u00e7ar a escrever um bom c\u00f3digo python em nossos notebooks - que comece a divers\u00e3o!<\/p>\n<p><span style=\"color: #ff0066;\"><strong>Solicita\u00e7\u00e3o de Data<\/strong><\/span><\/p>\n<p>Como em qualquer projeto cient\u00edfico data, tudo come\u00e7a com o data. Por experi\u00eancia pr\u00f3pria, recomendamos enfaticamente que o senhor solicite o data o mais r\u00e1pido poss\u00edvel. N\u00e3o tenha vergonha de pedir muitos data e, para cada fonte de data, certifique-se de identificar um referente, algu\u00e9m com quem o senhor possa entrar em contato facilmente e fazer suas perguntas sobre a cole\u00e7\u00e3o de data ou sobre como o data est\u00e1 estruturado.<\/p>\n<p>Gra\u00e7as \u00e0s diversas reuni\u00f5es, conseguimos fazer uma lista dos data que poder\u00edamos usar:<\/p>\n<ul>\n<li>Transacional data incluindo o pre\u00e7o dos produtos.<\/li>\n<li>Promo\u00e7\u00f5es: uma lista de todas as promo\u00e7\u00f5es futuras e seus pre\u00e7os associados.<\/li>\n<li>Informa\u00e7\u00f5es sobre o produto: diferentes caracter\u00edsticas relacionadas aos produtos.<\/li>\n<li id=\"8e84\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Informa\u00e7\u00f5es sobre a loja: localiza\u00e7\u00e3o, tamanho das lojas, concorrentes.<\/li>\n<li id=\"c5b6\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Tempo data.<\/li>\n<li id=\"ca97\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Res\u00edduos data: no final de cada dia, quantos produtos foram jogados fora.<\/li>\n<\/ul>\n<p id=\"aa80\" class=\"il im dn ce in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji ek\"><span style=\"color: #ff0066;\"><strong>An\u00e1lise explorat\u00f3ria Data (EDA) e detec\u00e7\u00e3o de outliers<\/strong><\/span><\/p>\n<p id=\"67bb\" class=\"jj jk dn jl b em jm iq jn ep jo iu jp jq jr js jt ju jv jw jx jy jz ka kb kc df ek\" data-selectable-paragraph=\"\">Depois que o data foi coletado, come\u00e7amos a fazer algumas an\u00e1lises. H\u00e1 sazonalidade em meu data? Uma tend\u00eancia? Quantos produtos eu tenho? Eles s\u00e3o consistentes ao longo do tempo? H\u00e1 produtos sazonais?<\/p>\n<p class=\"jj jk dn jl b em jm iq jn ep jo iu jp jq jr js jt ju jv jw jx jy jz ka kb kc df ek\" data-selectable-paragraph=\"\">Ao plotar as diferentes s\u00e9ries temporais, tamb\u00e9m identificamos alguns recursos interessantes:<\/p>\n<ul class=\"\">\n<li id=\"80a9\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Sazonalidade ao longo do ano, mas tamb\u00e9m durante a semana.<\/li>\n<li id=\"d0ce\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Pre\u00e7o e se o produto est\u00e1 em promo\u00e7\u00e3o ou n\u00e3o.<\/li>\n<li id=\"c317\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Canibaliza\u00e7\u00e3o de produtos e vendas adiadas durante a falta de estoque.<\/li>\n<li id=\"dd82\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">O padr\u00e3o de vendas difere de uma loja para outra.<\/li>\n<\/ul>\n<p id=\"e6a0\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\">Observe que criamos diferentes recursos relacionados ao pre\u00e7o. O pre\u00e7o absoluto, mas tamb\u00e9m os pre\u00e7os relativos em compara\u00e7\u00e3o com outros produtos da mesma subfam\u00edlia, fam\u00edlia ou loja. O pre\u00e7o relativo \u00e9 uma forma de quantificar a canibaliza\u00e7\u00e3o de pre\u00e7os entre produtos. Tamb\u00e9m criamos recursos que traduzem a varia\u00e7\u00e3o de pre\u00e7o de um produto ao longo do tempo.<\/p>\n<p class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\">Para essas tarefas de previs\u00e3o realistas, os dem\u00f4nios est\u00e3o nos detalhes e \u00e9 realmente importante procurar por exce\u00e7\u00f5es e anomalias e dedicar algum tempo para analisar seu data.<\/p>\n<p id=\"3dfd\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\">Mas, primeiro, por que dever\u00edamos nos preocupar com a detec\u00e7\u00e3o de outliers? Por v\u00e1rios motivos: pode indicar que o data \u00e9 ruim, erros nos ETLs, processos comerciais que o senhor n\u00e3o conhecia. Em segundo lugar, \u00e9 muito prov\u00e1vel que isso afete seu algoritmo e a parte de infer\u00eancia, portanto, \u00e9 definitivamente uma parte importante do desenvolvimento.<\/p>\n<p class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\">O senhor pode identificar outliers em diferentes momentos do projeto, seja durante a an\u00e1lise explorat\u00f3ria data (EDA) ou analisando os maiores erros de seus modelos.<\/p>\n<p class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\">Ao fazer a EDA, detectamos alguns data estranhos, como vendas B2B, por exemplo, 1800 vendas de um \u00fanico item em um \u00fanico recibo de compra. Os valores at\u00edpicos relacionados aos pre\u00e7os, principalmente devido a erros manuais do caixa: pre\u00e7os negativos ou um croissant que custa 250 euros!<\/p>\n<figure class=\"hn ho hp hq hr hd cx cy paragraph-image\">\n<div class=\"hu hv hw hx aj hy\" tabindex=\"0\" role=\"button\">\n<div class=\"cx cy ks\">\n<div class=\"ie s hw if\">\n<div class=\"kt ih s\">\n<div class=\"hz ia t u v ib aj bm ic id\"><\/div>\n<p><img decoding=\"async\" class=\"lazyload vl vm t u v ib aj c aligncenter\" src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2024\/09\/01TAXEHqr9CLKkcfH.png\" data-orig-src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2024\/09\/01TAXEHqr9CLKkcfH.png\" data-sizes=\"auto\" data-orig-sizes=\"700px\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27709%27%20height%3D%27348%27%20viewBox%3D%270%200%20709%20348%27%3E%3Crect%20width%3D%27709%27%20height%3D%27348%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2024\/09\/01TAXEHqr9CLKkcfH.png 276w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2024\/09\/01TAXEHqr9CLKkcfH.png 552w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2024\/09\/01TAXEHqr9CLKkcfH.png 640w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2024\/09\/01TAXEHqr9CLKkcfH.png 700w\" alt=\"Image for post\" width=\"709\" height=\"348\" \/><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/figure>\n<p id=\"fd19\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\">Percebemos que, \u00e0s vezes, nossas previs\u00f5es estavam totalmente erradas nos primeiros dias dos per\u00edodos de promo\u00e7\u00e3o. Ap\u00f3s algumas an\u00e1lises, percebemos que isso se devia ao fato de a promo\u00e7\u00e3o ter sido lan\u00e7ada um dia antes ou depois do dia oficial. De fato, \u00e0s vezes o gerente tomava alguma liberdade e decidia alterar o in\u00edcio ou o fim das promo\u00e7\u00f5es. Essas altera\u00e7\u00f5es podem ser detectadas e corrigidas no conjunto de treinamento data, mas podem levar a grandes erros de previs\u00e3o. De fato, as promo\u00e7\u00f5es podem atingir volumes de 4 a 5 vezes maiores do que os de uma n\u00e3o promo\u00e7\u00e3o.<\/p>\n<p class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\">Aqui est\u00e1 uma lista de alguns outros exemplos interessantes de processos e mecanismos que descobrimos gra\u00e7as a essa an\u00e1lise e que o senhor pode encontrar em seus projetos:<\/p>\n<ul class=\"\">\n<li id=\"2720\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">O sortimento nem sempre \u00e9 consistente ao longo dos dias devido a restri\u00e7\u00f5es operacionais, erros e gerenciamento de estoque.<\/li>\n<li id=\"1132\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Para algumas fontes do data, as datas indicadas eram os dias em que o data foi carregado, portanto, o senhor precisa remover um dia para obter o dia real.<\/li>\n<\/ul>\n<\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-4 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-background-color:#ffffff;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:calc( 1440px + 20px );margin-left: calc(-20px \/ 2 );margin-right: calc(-20px \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-4 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-color:#ffffff;--awb-bg-color-hover:#ffffff;--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:10px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:10px;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:10px;--awb-spacing-left-medium:10px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:10px;--awb-spacing-left-small:10px;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-text fusion-text-5\" style=\"--awb-text-color:#000000;\"><p><span style=\"color: #ff0066;\"><strong>Da previs\u00e3o de vendas \u00e0 previs\u00e3o ideal de vendas<\/strong><\/span><\/p>\n<p>Um desafio nos levou a atualizar nossa vari\u00e1vel de meta. \u00c0s vezes, devido a uma influ\u00eancia inesperada ou a uma previs\u00e3o ruim, o departamento esperava uma falta de produtos antes do final do dia. Ent\u00e3o, dois fen\u00f4menos podem ocorrer: o cliente que n\u00e3o consegue encontrar seu produto n\u00e3o compra nada ou compra um produto semelhante. Com base no hist\u00f3rico data, inferimos algumas leis de distribui\u00e7\u00e3o (estat\u00edsticas b\u00e1sicas) que nos ajudaram a modelar esse impacto e atualizamos nossa vari\u00e1vel-alvo para n\u00e3o prever as vendas hist\u00f3ricas, mas as vendas ideais para um determinado produto.<\/p>\n<p>Essa atualiza\u00e7\u00e3o da vari\u00e1vel de destino \u00e9 complicada porque \u00e9 realmente dif\u00edcil saber se a atualiza\u00e7\u00e3o fez sentido. O senhor realmente melhorou a qualidade do data ou a piorou? Uma maneira de quantificar nosso impacto foi pegar as vendas sem falta de estoque e criar uma falsa escassez, por exemplo, remover todas as vendas ap\u00f3s as 17 ou 18 horas e, em seguida, tentar reconstruir as vendas. Esse m\u00e9todo nos ajuda a voltar a um problema supervisionado cl\u00e1ssico que podemos avaliar objetivamente.<\/p>\n<p>Como resultado, conseguimos prever as vendas ideais e evitar que nosso algoritmo aprendesse padr\u00f5es de escassez.<\/p>\n<p><span style=\"color: #ff0066;\"><strong>Nossos modelos<\/strong><\/span><\/p>\n<p>Depois de limpar adequadamente nosso data, podemos finalmente testar e experimentar alguns modelos.<\/p>\n<p id=\"7083\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\">O senhor tem muitas possibilidades diferentes para lidar com um problema de previs\u00e3o: abordagens estat\u00edsticas cl\u00e1ssicas (SARIMA, suaviza\u00e7\u00e3o exponencial, Prophet etc.), abordagens de aprendizado de m\u00e1quina (regress\u00e3o linear, algoritmos de refor\u00e7o) ou aprendizado profundo (RNN, LSTM, CNN). Como escolher a abordagem certa \u00e9 uma quest\u00e3o complicada, mas aqui est\u00e3o alguns elementos que nos ajudaram a escolher:<\/p>\n<ul class=\"\">\n<li id=\"8a12\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">N\u00e3o uma, mas muitas s\u00e9ries temporais: ~10 000<\/li>\n<li id=\"80b8\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">S\u00e9ries temporais irregulares: pode acontecer de n\u00e3o haver vendas em alguns dias devido a escolhas do gerente, restri\u00e7\u00f5es comerciais ou operacionais.<\/li>\n<li id=\"6ae9\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">As promo\u00e7\u00f5es t\u00eam um impacto enorme e n\u00e3o s\u00e3o sazonais ou c\u00edclicas.<\/li>\n<li id=\"6ba6\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Observamos uma enorme correla\u00e7\u00e3o entre as vendas em J-0 e as vendas em J-7, J-14, J-21 para itens por loja e o estado de estar ou n\u00e3o em promo\u00e7\u00f5es.<\/li>\n<li id=\"6a82\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">data ex\u00f3genos t\u00eam um impacto sobre as vendas: pre\u00e7os, dias especiais, etc.<\/li>\n<\/ul>\n<p id=\"638a\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\">Por esses motivos, decidimos escolher o Catboost como modelo. O Catboost tem muitas vantagens, como lidar nativamente com valores categ\u00f3ricos e ausentes, pode lidar com muitos recursos, escalonar bem e inferir muitas s\u00e9ries temporais dentro do mesmo modelo. Al\u00e9m disso, ele fornece um bom gr\u00e1fico durante o treinamento e se integra muito facilmente ao\u00a0<em class=\"ku\">SHAP<\/em>\u00a0para a import\u00e2ncia do recurso.<\/p>\n<p class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\">Aqui est\u00e1, por exemplo, uma captura de tela do gr\u00e1fico interativo do algoritmo durante seu treinamento:<\/p>\n<figure class=\"hn ho hp hq hr hd cx cy paragraph-image\">\n<div class=\"hu hv hw hx aj hy\" tabindex=\"0\" role=\"button\">\n<div class=\"cx cy kv\">\n<div class=\"ie s hw if\">\n<div class=\"kw ih s\">\n<div class=\"hz ia t u v ib aj bm ic id\"><\/div>\n<p><img decoding=\"async\" class=\"lazyload vl vm t u v ib aj c aligncenter\" src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2024\/09\/0IHYfQrWymxriIbmh.png\" data-orig-src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2024\/09\/0IHYfQrWymxriIbmh.png\" data-sizes=\"auto\" data-orig-sizes=\"700px\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27714%27%20height%3D%27355%27%20viewBox%3D%270%200%20714%20355%27%3E%3Crect%20width%3D%27714%27%20height%3D%27355%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2024\/09\/0IHYfQrWymxriIbmh.png 276w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2024\/09\/0IHYfQrWymxriIbmh.png 552w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2024\/09\/0IHYfQrWymxriIbmh.png 640w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2024\/09\/0IHYfQrWymxriIbmh.png 700w\" alt=\"Image for post\" width=\"714\" height=\"355\" \/><\/p>\n<\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/figure>\n<p id=\"e5ba\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\">No entanto, uma das desvantagens das abordagens de ML puro \u00e9 a necessidade de codificar todos os recursos por conta pr\u00f3pria, especialmente os relacionados ao tempo. Sem uma forte engenharia de recursos, esses algoritmos n\u00e3o conseguir\u00e3o detectar os padr\u00f5es de tempo. Al\u00e9m disso, eles s\u00f3 podem inferir um per\u00edodo de tempo fixo, ao contr\u00e1rio do Sarima ou do Prophet, em que o usu\u00e1rio pode especificar o n\u00famero de dias a serem previstos usando o par\u00e2metro periods.<\/p>\n<p class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\">Por fim, \u00e9 preciso ter muito cuidado com o vazamento do data, especialmente quando o senhor constr\u00f3i seu recurso de atraso.<\/p>\n<p class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\">Uma das principais caracter\u00edsticas n\u00e3o era a defasagem semanal, mas a m\u00e9dia das defasagens: D-7, D-14, D-21, ... etc. nas \u00faltimas seis semanas. De fato, a caracter\u00edstica n\u00e3o regular de nossa s\u00e9rie temporal, combinada com o uso de promo\u00e7\u00e3o de tempos em tempos, induz a uma sazonalidade difusa, da\u00ed o uso de uma m\u00e9dia. \u00c9 importante observar que apenas o uso dessa m\u00e9dia como um modelo \u00fanico j\u00e1 proporciona um desempenho muito bom!<\/p>\n<p id=\"8cf2\" class=\"il im dn ce in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji ek\"><span style=\"color: #ff0066;\"><strong>Um modelo versus muitos modelos<\/strong><\/span><\/p>\n<p class=\"il im dn ce in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji ek\">Em resumo, usamos um algoritmo: Catboost, para prever todas as nossas 10.000 s\u00e9ries temporais, para cada produto e cada loja. Mas e se um item tiver um padr\u00e3o de vendas realmente particular ou uma loja espec\u00edfica? O algoritmo identificaria e aprenderia esse padr\u00e3o?<\/p>\n<p class=\"il im dn ce in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji ek\">Essas perguntas nos levam \u00e0 seguinte quest\u00e3o: devemos agrupar nossos produtos e lojas e treinar um algoritmo por agrupamento? Mesmo que o uso de algoritmos de \u00e1rvore de decis\u00e3o deva enfrentar esse desafio, observamos limita\u00e7\u00f5es em alguns casos espec\u00edficos.<\/p>\n<p class=\"il im dn ce in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji ek\">Os algoritmos de refor\u00e7o s\u00e3o algoritmos iterativos, baseados em aprendizes fracos que se concentrar\u00e3o em seus maiores erros. Obviamente, isso \u00e9 um pouco simplificado demais, mas me ajuda a apontar uma de suas limita\u00e7\u00f5es. Se o senhor n\u00e3o normalizar a vari\u00e1vel-alvo, o algoritmo se concentrar\u00e1 \u201capenas\u201d nos produtos com grandes erros, que provavelmente ser\u00e3o aqueles com as maiores vendas. Como resultado, o algoritmo pode se concentrar mais nos produtos ou lojas com maior volume de vendas.<\/p>\n<p class=\"il im dn ce in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji ek\">N\u00e3o encontramos a maneira perfeita de enfrentar esse desafio, mas observamos algumas melhorias ao agrupar nossos produtos\/lojas por fam\u00edlia ou frequ\u00eancia de vendas.<\/p>\n<p id=\"b5a4\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\">Uma das vantagens de treinar v\u00e1rios algoritmos \u00e9 a seguinte:<\/p>\n<ul class=\"\">\n<li id=\"6fdc\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Treinamento mais r\u00e1pido<\/li>\n<li id=\"9f1e\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Mais f\u00e1cil de ajustar<\/li>\n<li id=\"25e8\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Mais f\u00e1cil de depurar<\/li>\n<li id=\"9727\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">No caso de anomalias no data, nem todos os modelos dar\u00e3o errado<\/li>\n<li id=\"812c\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Dependendo dos produtos, o senhor pode brincar com a fun\u00e7\u00e3o de perda e promover a escassez ou o excesso de produ\u00e7\u00e3o<\/li>\n<\/ul>\n<p id=\"6381\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\">Mas, por outro lado, ser\u00e1 mais dif\u00edcil de manter!<\/p>\n<p class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\">No final, decidimos adotar essa abordagem, pois ela estava produzindo melhores resultados.<\/p>\n<\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-5 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-background-color:#ffffff;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:calc( 1440px + 20px );margin-left: calc(-20px \/ 2 );margin-right: calc(-20px \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-5 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-color:#ffffff;--awb-bg-color-hover:#ffffff;--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:10px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:10px;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:10px;--awb-spacing-left-medium:10px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:10px;--awb-spacing-left-small:10px;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-text fusion-text-6\" style=\"--awb-text-color:#000000;\"><p id=\"9fc2\" class=\"il im dn ce in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji ek\"><span style=\"color: #ff0066;\"><strong>Como avaliar nosso modelo?<\/strong><\/span><\/p>\n<p id=\"66f9\" class=\"jj jk dn jl b em jm iq jn ep jo iu jp jq jr js jt ju jv jw jx jy jz ka kb kc df ek\" data-selectable-paragraph=\"\">Discutimos muitos modelos e seus desempenhos nas se\u00e7\u00f5es anteriores. Mas como se avalia um algoritmo de previs\u00e3o? Obviamente, isso \u00e9 muito semelhante a qualquer problema de aprendizado de m\u00e1quina, mas, ainda assim, tem suas pr\u00f3prias especificidades:<\/p>\n<ol>\n<li>\u00a0Valida\u00e7\u00e3o cruzada<\/li>\n<\/ol>\n<p id=\"2a03\" class=\"jj jk dn jl b em jm iq jn ep jo iu jp jq jr js jt ju jv jw jx jy jz ka kb kc df ek\" data-selectable-paragraph=\"\">Conforme mencionado anteriormente, um dos desafios da previs\u00e3o de s\u00e9ries temporais \u00e9 evitar o vazamento de data. Isso pode acontecer durante a cria\u00e7\u00e3o de nossos recursos: defasagens, normaliza\u00e7\u00e3o de nossas vari\u00e1veis, etc.<\/p>\n<p id=\"8fa3\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\">Mas isso tamb\u00e9m pode acontecer ao fazer a valida\u00e7\u00e3o cruzada, dividida entre os conjuntos data de treinamento, valida\u00e7\u00e3o e teste.<\/p>\n<p id=\"bc69\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\">O senhor n\u00e3o pode usar o cl\u00e1ssico\u00a0<em class=\"ku\">train_test_split()<\/em>\u00a0do sklearn. Por qu\u00ea? Imagine que seu conjunto de data seja as vendas de 2019. Se o senhor dividir aleatoriamente, treinar\u00e1 com data de janeiro, fevereiro, ..., dezembro de 2019 e seu data de teste ter\u00e1 vendas das mesmas datas! Como resultado, seu algoritmo treinar\u00e1 em padr\u00f5es que ele n\u00e3o ter\u00e1 na produ\u00e7\u00e3o, o que resulta em um problema de vazamento de data. Para resolver isso, h\u00e1 outras maneiras de dividir seu data, como a fun\u00e7\u00e3o T<em class=\"ku\">imeSeriesSplit()<\/em>\u00a0tamb\u00e9m do sklearn.<\/p>\n<p id=\"8558\" class=\"kx im dn ce in ky kz eo ir la lb er iv es lc eu iz ev ld ex jd ey le fa jh lf ek\">2. A escolha da m\u00e9trica:<\/p>\n<p id=\"22a7\" class=\"jj jk dn jl b em jm iq jn ep jo iu jp jq jr js jt ju jv jw jx jy jz ka kb kc df ek\" data-selectable-paragraph=\"\">A previs\u00e3o de s\u00e9ries temporais \u00e9 um problema de regress\u00e3o e, como resultado, podemos usar as m\u00e9tricas cl\u00e1ssicas, como MSE, RMSE, mas outras tamb\u00e9m est\u00e3o dispon\u00edveis:<\/p>\n<ul class=\"\">\n<li id=\"08a5\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">MAPE ou Precis\u00e3o da previs\u00e3o<\/li>\n<li id=\"2012\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Um MAPE ponderado<\/li>\n<li id=\"7dfa\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Distor\u00e7\u00e3o din\u00e2mica do tempo<\/li>\n<\/ul>\n<p id=\"2f5b\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\">Otimizamos nosso algoritmo usando o RMSE, mas, para nos comunicarmos com nossos propriet\u00e1rios de neg\u00f3cios, usamos uma precis\u00e3o de previs\u00e3o ponderada:<\/p>\n<figure class=\"hn ho hp hq hr hd cx cy paragraph-image\">\n<div class=\"cx cy lg\">\n<div class=\"ie s hw if\">\n<div class=\"lh ih s\">\n<div class=\"hz ia t u v ib aj bm ic id\"><\/div>\n<p><img decoding=\"async\" class=\"lazyload vl vm t u v ib aj c aligncenter\" src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2024\/09\/1TMosktPGqo5c6MG4bQVw8g.png\" data-orig-src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2024\/09\/1TMosktPGqo5c6MG4bQVw8g.png\" data-sizes=\"auto\" data-orig-sizes=\"342px\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27342%27%20height%3D%2750%27%20viewBox%3D%270%200%20342%2050%27%3E%3Crect%20width%3D%27342%27%20height%3D%2750%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2024\/09\/1TMosktPGqo5c6MG4bQVw8g.png 276w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2024\/09\/1TMosktPGqo5c6MG4bQVw8g.png 342w\" alt=\"Image for post\" width=\"342\" height=\"50\" \/><\/p>\n<\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<\/figure>\n<p id=\"5685\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\">Primeiro, calculamos esse valor em n\u00edvel de dia\/loja e, em seguida, o agregamos por loja usando uma m\u00e9dia ponderada, sendo os pesos as vendas por dia das diferentes lojas. Obviamente, essa m\u00e9trica pode ser contestada, mas tem a vantagem de ter um valor para cada loja e, se em um dia o gerente realmente tiver um desempenho superior (ruim ou bom), ele n\u00e3o ser\u00e1 superestimado. Al\u00e9m disso, o FA \u00e9 uma m\u00e9trica realmente interpret\u00e1vel que se relaciona com o neg\u00f3cio, ao contr\u00e1rio do RMSE.<\/p>\n<p id=\"9603\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\">Por fim, outra m\u00e9trica interessante de se ter em mente \u00e9 o biais, que apresenta a tend\u00eancia geral do algoritmo de prever demais ou de menos. Dependendo do caso de neg\u00f3cios, o senhor pode querer promover uma ou outra. Em nosso caso, fizemos uma previs\u00e3o ligeiramente acima do esperado para garantir que o produto estivesse na prateleira e manter nosso cliente satisfeito!<\/p>\n<p id=\"f905\" class=\"il im dn ce in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji ek\"><span style=\"color: #ff0066;\"><strong>Palavras finais, alguns conselhos para qualquer projeto data<\/strong><\/span><\/p>\n<p id=\"8308\" class=\"jj jk dn jl b em jm iq jn ep jo iu jp jq jr js jt ju jv jw jx jy jz ka kb kc df ek\" data-selectable-paragraph=\"\">Achei que tamb\u00e9m seria bom compartilhar com os senhores algumas dicas e erros que cometemos em n\u00edvel de projeto.<\/p>\n<p id=\"8ff5\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\">Antes de mais nada, como desenvolvemos nossos modelos, a engenharia de recursos?<\/p>\n<p id=\"14f4\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\">Todas essas diferentes etapas e experimentos foram realizados em notebooks, mas o uso de notebooks n\u00e3o significa c\u00f3digo sujo! Pelo contr\u00e1rio, \u00e9 altamente recomend\u00e1vel que o senhor dedique tempo para escrever cadernos adequados com t\u00edtulos, nomes apropriados, fun\u00e7\u00f5es e eliminar linhas redundantes.<\/p>\n<p id=\"5708\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\">O uso de notebooks traz alguns desafios, especialmente quando muitos desenvolvedores trabalham juntos: conflitos no github, aus\u00eancia de c\u00f3digo replic\u00e1vel etc...<\/p>\n<p id=\"bc94\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\">Aqui est\u00e3o algumas dicas para reduzir esses problemas:<\/p>\n<ul class=\"\">\n<li id=\"e4b4\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Vers\u00e3o de seus notebooks usando remarca\u00e7\u00f5es<\/li>\n<li id=\"2bc5\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Evite trabalhar juntos nos mesmos notebooks<\/li>\n<li id=\"8f73\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Se ainda assim o fizer, para lidar com conflitos no notebook, use o\u00a0<em class=\"ku\">nbdev<\/em>\u00a0biblioteca de fastai<\/li>\n<li id=\"684e\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Empacote fun\u00e7\u00f5es comuns em arquivos .py para que todos usem as mesmas fun\u00e7\u00f5es<\/li>\n<li id=\"bec5\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Para versionar seu experimento, use ferramentas como\u00a0<a class=\"ck li\" href=\"https:\/\/mlflow.org\/\" rel=\"noopener nofollow\" target=\"_blank\">Fluxo de ML<\/a><\/li>\n<li id=\"1688\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Evite print() e use um registrador em vez disso, registre apenas informa\u00e7\u00f5es \u00fateis. Confira\u00a0<a class=\"ck li\" href=\"https:\/\/scikit-lego.readthedocs.io\/en\/latest\/pandas_pipeline.html#Logging-in-method-chaining\" rel=\"noopener nofollow\" target=\"_blank\">scikit-lego<\/a>\u00a0que tem recursos muito legais, decoradores.<\/li>\n<li id=\"3dbf\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Se o senhor realmente quiser imprimir coisas, tente a biblioteca\u00a0<a class=\"ck li\" href=\"https:\/\/github.com\/willmcgugan\/rich\" rel=\"noopener nofollow\" target=\"_blank\">rico<\/a>\u00a0o que o torna mais agrad\u00e1vel e tamb\u00e9m pode ser usado como uma ferramenta de registro. Aqui est\u00e1 um\u00a0<a class=\"ck li\" href=\"https:\/\/calmcode.io\/rich\/introduction.html\" rel=\"noopener nofollow\" target=\"_blank\">demonstra\u00e7\u00e3o r\u00e1pida<\/a>\u00a0de rich por calmcode.io<\/li>\n<\/ul>\n<p id=\"3ec0\" class=\"il im dn ce in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji ek\"><span style=\"color: #ff0066;\"><strong>Principais conclus\u00f5es<\/strong><\/span><\/p>\n<p id=\"1370\" class=\"jj jk dn jl b em jm iq jn ep jo iu jp jq jr js jt ju jv jw jx jy jz ka kb kc df ek\" data-selectable-paragraph=\"\">Gostar\u00edamos muito de compartilhar com os senhores nossos resultados, mas n\u00e3o nos foi permitido por motivos de privacidade, mas podemos dizer que, com essa metodologia, conseguimos:<\/p>\n<ul class=\"\">\n<li id=\"b9cf\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Ser t\u00e3o bom quanto o seu melhor planejador de demanda<\/li>\n<li id=\"2351\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Aumentar o FA de algumas lojas para at\u00e9 30%<\/li>\n<\/ul>\n<p id=\"5540\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc df ek\" data-selectable-paragraph=\"\">Mas, por outro lado, aqui est\u00e1 a lista dos nossos maiores aprendizados que, espero, ajudem o senhor a desenvolver sua pr\u00f3pria solu\u00e7\u00e3o:<\/p>\n<ul class=\"\">\n<li id=\"f872\" class=\"jj jk dn jl b em ke iq jn ep kf iu jp jq kg js jt ju kh jw jx jy ki ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Dedique tempo para entender seu problema, definir um objetivo claro e mensur\u00e1vel, uma m\u00e9trica de avalia\u00e7\u00e3o<\/li>\n<li id=\"683c\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Se o senhor n\u00e3o encontrou anomalias... n\u00e3o procurou o suficiente!<\/li>\n<li id=\"f77b\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Acompanhe rigorosamente seus experimentos<\/li>\n<li id=\"7685\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Escreva c\u00f3digo limpo, especialmente em notebooks, isso facilitar\u00e1 muito sua vida na implanta\u00e7\u00e3o<\/li>\n<li id=\"e5e1\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Sempre pense que a produ\u00e7\u00e3o e o vazamento de data s\u00e3o seus piores inimigos na previs\u00e3o de s\u00e9ries temporais<\/li>\n<li id=\"2864\" class=\"jj jk dn jl b em km iq jn ep kn iu jp jq ko js jt ju kp jw jx jy kq ka kb kc kj kk kl ek\" data-selectable-paragraph=\"\">Comece com um escopo pequeno, com modelos simples, teste, falhe, aprenda, melhore e tenha sucesso!<\/li>\n<\/ul>\n<\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-6 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--link_hover_color: #ff0066;--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:0px;--awb-padding-right:0px;--awb-padding-bottom:0px;--awb-padding-left:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:calc( 1440px + 20px );margin-left: calc(-20px \/ 2 );margin-right: calc(-20px \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-6 fusion_builder_column_1_2 1_2 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:50%;--awb-margin-top-large:0px;--awb-spacing-right-large:10px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:10px;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:10px;--awb-spacing-left-medium:10px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:10px;--awb-spacing-left-small:10px;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element\" style=\"text-align:center;--awb-margin-top:0px;--awb-margin-right:0px;--awb-margin-bottom:0px;--awb-margin-left:0px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\"fusion-imageframe imageframe-none imageframe-2 hover-type-none\"><img decoding=\"async\" width=\"1057\" height=\"591\" title=\"data-driven\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271057%27%20height%3D%27591%27%20viewBox%3D%270%200%201057%20591%27%3E%3Crect%20width%3D%271057%27%20height%3D%27591%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-orig-src=\"https:\/\/www.artefact.com\/wp-content\/uploads\/2020\/06\/Global-Newsletter-Data-Digest_LinkedIn_600x315_april.jpg\" alt class=\"lazyload img-responsive wp-image-30246\"\/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-7 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center fusion-column-inner-bg-wrapper\" style=\"--awb-inner-bg-size:cover;--awb-width-large:50%;--awb-margin-top-large:0px;--awb-spacing-right-large:10px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:10px;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:10px;--awb-spacing-left-medium:10px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:10px;--awb-spacing-left-small:10px;\"><span class=\"fusion-column-inner-bg hover-type-none\"><a class=\"fusion-column-anchor\" href=\"https:\/\/go.pardot.com\/l\/597421\/2020-05-06\/2k5zzj\" target=\"_blank\" rel=\"noopener\"><span class=\"fusion-column-inner-bg-image\"><\/span><\/a><\/span><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-column\"><div class=\"fusion-text fusion-text-7\"><p><b>O senhor tem interesse em digital e data marketing?<\/b><\/p>\n<p>Assine o Data Digest, o boletim informativo do Artefact, para receber conselhos pr\u00e1ticos, insights e opini\u00f5es em sua caixa de entrada todos os meses.<\/p>\n<p><b>O senhor pode me inscrever!<\/b><\/p>\n<\/div><\/div><\/div><\/div><\/div><\/p>","protected":false},"excerpt":{"rendered":"<p>25 de novembro de 2020<br \/>\nNa Artefact, somos t\u00e3o franceses que decidimos aplicar o aprendizado de m\u00e1quina aos croissants. Este primeiro artigo de dois explica como decidimos usar o Catboost para prever as vendas de \u201cviennoiseries\u201d. Os recursos mais importantes que impulsionaram as vendas foram as \u00faltimas vendas semanais, o fato de o produto estar ou n\u00e3o em promo\u00e7\u00e3o e seu pre\u00e7o. Apresentaremos aos senhores alguns recursos interessantes de engenharia, inclusive a canibaliza\u00e7\u00e3o e por que \u00e0s vezes \u00e9 necess\u00e1rio atualizar a vari\u00e1vel de destino.<\/p>","protected":false},"featured_media":21373,"parent":0,"template":"","meta":{"_acf_changed":false,"ep_exclude_from_search":false},"blog-category":[2995],"blog-language":[2991],"class_list":["post-21214","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog-category-ai-technology","blog-language-en"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.artefact.com\/br\/wp-json\/wp\/v2\/blog\/21214","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.artefact.com\/br\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.artefact.com\/br\/wp-json\/wp\/v2\/types\/blog"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.artefact.com\/br\/wp-json\/wp\/v2\/media\/21373"}],"wp:attachment":[{"href":"https:\/\/www.artefact.com\/br\/wp-json\/wp\/v2\/media?parent=21214"}],"wp:term":[{"taxonomy":"blog-category","embeddable":true,"href":"https:\/\/www.artefact.com\/br\/wp-json\/wp\/v2\/blog-category?post=21214"},{"taxonomy":"blog-language","embeddable":true,"href":"https:\/\/www.artefact.com\/br\/wp-json\/wp\/v2\/blog-language?post=21214"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}