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.
Modelo | MAE | MAPE | RMSE |
---|---|---|---|
Random Forest Regressor | 732,62 +/- 120,76 | 0,11 +/- 0,02 | 1094,54 +/-183,61 |
LightGBM Regressor | 932,66 +/- 84,96 | 0,11 +/- 0,02 | 1333,97 +/- 122,36 |
XGBoost Regressor | 984,36 +/- 114,39 | 0,14 +/- 0,01 | 1425,7 +/- 179,24 |
Média (Baseline) | 1354,80 | 0,2064 | 1835,14 |
Linear Regression | 1905,59 +/- 100,99 | 0,29 +/- 0,01 | 2724,06 +/- 162,77 |
Lasso Regression | 1922,33 +/- 109,47 | 0,29 +/- 0,1 | 2745,56 +/- 195,84 |
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!