Criação de bot do Telegram para predição de vendas de lojas

Como aplicativo de mensagens pode ser usado para predição com machine learning

Neste projeto usei Python, Flask e Algoritmos de Regressão Linear para predição de vendas da Rossmann, uma rede de drogarias, nas seis semanas, seguintes para determinar a alocação de recursos para renovação de cada loja. O resultado foi o desenvolvimento de um bot no Telegram que retorna o valor previsto apenas com o número de identicação de cada loja, possibilitando o acesso aos resultados de qualquer lugar.

Se você quiser ver o projeto na integra, com detalhes de cada etapa e todos os arquivos desenvolvidos no projeto, você pode acessar meu GitHub com o link no final desse artigo.

O desafio

Rossmann, uma das maiores redes de drogarias da Europa, com mais de 3.000 lojas espalhadas por 7 países. Com o intuito de realizar investimentos e melhorias em suas lojas os gerentes receberam do CEO a tarefa de prever o faturamento de vendas das próximas 6 semanas.
Com milhares de gerentes fazendo previsões por conta própria, os resultados podem variar demais.

Assim surge a demanda de prever as vendas das próximas seis semanas para mais de 1.115 lojas, ajudando os gerentes e o CEO a tomarem decisões estratégicas de investimentos e melhorias.

O processo da solução

Para uma solução robusta, o projeto foi dividido nos 10 passos de um projeto de Ciência de Dados, passando pela coleta e limpeza dos dados, tratamento dos tipos de dados e decisões quanto a valores faltantes. Por exemplo, para lojas sem informações sobre a distância do competidor mais próximo, decidi preencher esses valores com um valor de distância três vezes o valor da maior distância presente nos dados. Com isso, assumi que essas lojas não tinham concorrentes próximos.

Insights

Um insight interessante descoberto durante a exploração dos dados foi que, ao contrário do esperado, lojas que aplicavam promoções consecutivas (uma promoção logo em seguida de outra) tendiam a vender menos. Essa informação pode levar a uma reavaliação de como as promoções são realizadas e talvez pensar em outras estratégias de marketing para a rede.

Todas as informações e descobertas dessa etapa são extremamente importantes para a construção de modelos preditivos eficazes.

Modelagem de Machine Learning

Nessa etapa testei 6 diferentes algoritmos: Random Forest, LightGBM, XGBoost, Linear Regression e Lasso Regression.

ModeloMAEMAPERMSE
Random Forest Regressor732,62 +/- 120,760,11 +/- 0,021094,54 +/-183,61
LightGBM Regressor932,66 +/- 84,960,11 +/- 0,021333,97 +/- 122,36
XGBoost Regressor984,36 +/- 114,390,14 +/- 0,011425,7 +/- 179,24
Média (Baseline)1354,800,20641835,14
Linear Regression1905,59 +/- 100,990,29 +/- 0,012724,06 +/- 162,77
Lasso Regression1922,33 +/- 109,470,29 +/- 0,12745,56 +/- 195,84
Tabela 1: Valores de performance para cada modelo testado

Apesar do modelo Random Forest ter apresentado a melhor performance inicial, o escolhido foi LightGBM. Essa escolha foi feita baseada na rapidez no treinamento e tamanho do modelo, e no que isso influencia? A velocidade foi importante para otimização, ou seja, além da performance inicial devemos validar de maneiras mais eficazes o nosso treinamento, assim quanto maior o tempo de treinamento do modelo, maior o tempo total para encontrarmos o melhor modelo.

Além disso, o Random Forest gera modelos muito mais pesados, pensando no caso de colocarmos nosso modelo em produção, talvez a pequena diferença de performance comparado ao modelo LightGBM não seja viável, o preço para hospedar um modelo mais pesado pode não compensar sua performance. Aqui assumi que a perda de performance era aceitável, pois o planejado foi usar uma plataforma na nuvem gratuita que tem limite reduzido de memória.

Após os ajustes necessários feitos ao modelo durante o treinamento, cheguei à um Erro Absoluto Médio (MAE) de 657, o que significa que a cada previsão feita, o modelo erra em média € 657, um número satisfatório para o projeto. Trazendo mais confiança aos gerentes nas tomadas de decisões.

Ferramentas e Acessibilidade

Um dos grandes destaques do projeto foi o deploy do modelo. Para facilitar o acesso as previsões, desenvolvi um bot no Telegram, que permite que os gerentes consultem as previsões enviando uma simples mensagem com o número da loja. Na hora já recebendo a previsão das próximas seis semanas, sem precisar acessar dashboards complexos.
Confira a interação com o bot no vídeo:

Resultados

Com as previsões, podemos calcular diferentes cenários, como o pior e melhor resultados das lojas, permitindo que a emprega e os gerentes de cada loja se preparem para diferentes possibilidades. O impacto é direto no planejamento financeiro.
Considerando todas as lojas, as previsões indicam um total de 286 milhões nas próximas 6 semanas.

Ferramentas utilizadas

  • Python, Pandas, Matplotlib, Seaborn e Sklearn.
  • Jupyter Notebook e VSCode.
  • Flask e API’s em Python.
  • Heroku e Telegram Bot.
  • Git e Github.
  • Medidas de Tendência Central e Dispersão.
  • Análise Exploratória de Dados.
  • Algoritmos de Regressão (Linear, Lasso, Random Forest, XGBoost, LightGBM).
  • Métodos de Cross-Validation, Otimização de Hiperparâmetros e Métricas de Performance de Algoritmos (RMSE, MAE, MAPE, R²).

O planejamento completo da solução, todos os insights, todos os notebooks desenvolvidos em cada etapa e muito mais estão disponíveis no meu GitHub. Fique a vontade para navegar pelo projeto e me enviar seus comentários!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Rolar para cima