Planejamento Pro Demand, Holt-Winters e XGboost

Habr, olá!

Existem muitos artigos no site sobre a previsão de vendas esgotadas de várias categorias de FMCG, enquanto outras categorias de produtos não são tão populares. Além disso, o varejo geralmente é investigado com uma previsão de vários dias de antecedência, mas não de um distribuidor com previsão de 2 meses de antecedência - embora este último esteja interessado em uma previsão qualitativa com mais frequência do que um varejista. Como um desafio adicional, vale a pena considerar o conservadorismo de uma parte significativa dos distribuidores no sentido de escolher as tecnologias de previsão. É fácil imaginar a prática de prever as vendas intermediárias da empresa: coletando vendas dos dados mestre do SAP + na ferramenta Excel criada pelo homem, a automação nesses casos é limitada por um método de previsão bastante simples, que não vai muito longe da tendência linear / linear da ciência de foguetes na forma de HoltWinters.

Aconteceu que, de plantão, me deparei com um fabricante de uma marca de cosméticos decorativos baratos (cerca de 500 SKU) e vi as tristes conseqüências da previsão conservadora na forma de baixos KPIs. Foi necessário fazer pequenas alterações no sistema de planejamento, incluindo o processo de previsão, e depois falarei sobre minha pesquisa.

Status Quo Ante Bellum


A principal dor de cabeça da marca em vários anos foi o nível extremamente baixo de serviço ( CSS = enviado / pedido ), significativamente inferior à média da empresa, agravada pela previsão com base nas vendas médias ( Forecast = Average sales ). O círculo vicioso: o cliente solicita volumes, não recebe as quantidades completas e da próxima vez vem com aumento da demanda, e planejamos o futuro apenas de acordo com a necessidade satisfeita.

Com base nisso, foi decidido prever não vendas, mas pedidos sem repetições (ou seja, se o cliente quiser 100 peças e pedidos toda semana, presumimos que a demanda por mês seja de 100 peças, e não de 400), então aqui Para vendas adicionais, ligaremos para pedidos sem duplicatas. Depois de melhorar o nível de serviço, a diferença entre os termos é nivelada. A empresa usa a fórmula ( Precisão da previsão = (1 - Soma dos módulos de discrepâncias entre fato e previsão) / Previsão ) para estimar a precisão da previsão na empresa e nós a usaremos. Um ponto importante: a previsão, neste caso, é uma previsão com atraso 2, ou seja, se avaliarmos a precisão em outubro, comparamos as vendas de outubro com a previsão feita em agosto. Acredita-se que um resultado superior a 35% possa ser interpretado como satisfatório. A propósito, vale a pena notar aqui que, na verdade, não esperávamos um aumento na precisão - esperávamos um aumento no nível de serviço e avaliaremos os resultados precisamente com base na qualidade das remessas de mercadorias para os clientes.

Não precisei suar muito sobre a amostra para treinamento - embora a empresa não tenha um DWH analítico, mas há um upload de pedidos por meses, que um pequeno ciclo Python coletou e limpou. Da mesma forma, obtivemos dados mestre. Eventos e promoções tiveram que ser ignorados nos cálculos devido ao ruído excessivo (tínhamos medo de adicionar mais ruído do que informações úteis), uma vez que o maior varejista conduzia promoções periodicamente sem acordo ou aviso prévio, estimava o volume de eventos etc.

Como modelo, decidimos usar 3 ramos - ingênuo, suavização exponencial e MachineLearning.

Previsão ingênua


A principal razão pela qual a previsão ingênua ainda está em uso é a facilidade de interpretação para seres humanos. De fato, se é costume uma empresa analisar cada código detalhadamente, usando a metodologia 5 Why, a previsão média se encaixa perfeitamente. O cliente encomenda 10 peças por mês em média? É lógico que ele encomendará 10 peças no próximo mês. O resultado não é o que esperávamos e o cliente encomendou 50 peças? Provavelmente, o cliente simplesmente não sabe prever / a ordem automática quebrou / o robô está furioso etc., você deve implementar a Previsão Conjunta e trocar arquivos para aliviar o estresse e melhorar a precisão da previsão (é claro, uma piada, mas com alguma verdade).

Para adicionar um pouco de relevância aos métodos, sugerimos que a sazonalidade dos produtos seja idêntica à sazonalidade da categoria (o pacote statmodels foi usado para identificar a sazonalidade, a imagem mostra 3 resultados principais).

imagem

Adotamos 4 métodos - a média e a mediana de todo o histórico de vendas (precisão de 0,32 e 0,30, respectivamente) e os últimos 6 pontos (0,36 e 0,26). 0,36 será a nossa referência - no futuro, devemos obter melhores resultados.

Previsão ESM


A suavização exponencial costuma ser o sonho final no planejamento da demanda e é fácil perceber o porquê. As estimativas de precisão na testa mostram os resultados menos comparáveis ​​para ESM e ML em termos de precisão, estão incluídas em todos os sistemas de previsão industrial (JDA, Oracle RDF, etc.), o cálculo é mais rápido e fácil de interpretar - é por isso que os clássicos são mais vivos do que todos os seres vivos. Por outro lado, o resultado pode não ser totalmente honesto devido à preparação insuficiente de recursos.

Para a previsão, usamos o mesmo pacote statmodels. Para começar, fizemos a aula de Holt durante todo o histórico de vendas, com a sazonalidade limpa do grupo e nos últimos 6 pontos (precisão 0,34 e 0,37).

Em seguida, dividimos o SKU em 2 grupos - produtos com um longo histórico foram previstos pela classe HoltWinters e, por um breve histórico, deixamos Holt em 6 pontos. O resultado foi muito melhor - 0,44, isso é facilmente explicado. Se no nível superior parece que todos os bens são irmãos gêmeos, então, descendo para a subcategoria, podemos ver as diferenças.

imagem

Previsão de ML


A principal desvantagem dos métodos padrão é a falta de profundidade dos cálculos, porque não usamos todas as informações disponíveis. Por exemplo, o histórico de eventos: geralmente, na abordagem clássica, devemos subtrair os canais ocorridos do histórico, fazer uma previsão de linha de base e adicionar os canais planejados com o calendário apropriado. No caso de registro de eventos insuficientemente preciso, o resultado pode ser decepcionante (no caso de Holt-Winters, conseguimos - 5 pp de precisão). Muitos motivos podem ser apresentados - por exemplo, as categorias KAM subestimam os volumes para mostrar excesso de fornecimento e receber bônus. Se passarmos da abordagem ( Forecast = Baseline + Pipes ) para uma previsão baseada em recursos, poderemos obter parte adicional das informações disponíveis. Para isso, compilamos uma lista de 50 recursos (preços, dados mestre, vendas, clientes divididos etc.). Na biblioteca Sklearn, pegamos a base Lasso / Ridge / KNN Regressor, que geralmente oferece ganhos rápidos, mas, no nosso caso, apenas a KNN estava satisfeita com uma precisão de 0,44. Uma floresta aleatória tem bom desempenho em amostras pequenas; no nosso caso, a precisão é de 0,48. Bem, é claro, não esquecemos o Xgboost, que após uma pequena validação cruzada produziu o melhor resultado - 0,51. Abaixo está um gráfico com a precisão de cada modelo

imagem

Preocupações


O que pode ser conservador em relação ao uso de ML na previsão de vendas? Por exemplo, feedback: vários varejistas offline e ecom usam redes neurais e aumento de gradiente e assustam-no periodicamente com pedidos malucos. Sim, é claro, se o varejista medir a precisão da previsão, o resultado poderá ser otimista, mas isso é, até certo ponto, uma profecia auto-realizável: se houver um erro, a venda / sexta-feira negra / aniversário da rede será ativada etc.

Portanto, é importante mostrar que o resultado do Xgboost não é apenas mais preciso, mas também mais estável (e não uma roleta aleatória, como pode parecer um planador despreparado). Para fazer isso, comparamos a distribuição das distribuições de erro HoltWinters e Xgboost e garantimos que os resultados tenham um centro mais denso em torno de zero e cauda clara

imagem

imagem

Resultados Intermediários


Desde o início da redação do artigo / previsão da primeira execução, mais duas marcas de cosméticos decorativos foram trocadas para o Xgboost, devido a resultados positivos. No final de novembro, o aumento médio no nível de serviço era de + 16%, ou seja, o nível médio da empresa foi atingido

MarcaNovember SL FY19November SL FY20SL Delta
Brand173%89%16%
Brand280%85%5%
Brand363%93%30%
Total73%89%16%

Source: https://habr.com/ru/post/pt479308/


All Articles