Forecasting de vendas diárias com Prophet e SARIMA, comparando performance entre os dois modelos sobre dados reais de varejo
Projeto de séries temporais aplicado a varejo, utilizando o dataset público Rossmann Store Sales (Kaggle): vendas diárias de 1.115 lojas da rede alemã Rossmann entre janeiro/2013 e julho/2015.
O objetivo é prever a demanda agregada da rede para as próximas semanas, comparando uma abordagem moderna (Prophet, do Meta/Facebook) com uma abordagem estatística clássica (SARIMA, via auto_arima).
| # | Pergunta |
|---|---|
| 1 | Como evoluem as vendas agregadas da rede ao longo do tempo? |
| 2 | Qual a sazonalidade semanal e anual das vendas? |
| 3 | Qual modelo prevê melhor as próximas 6 semanas: Prophet ou SARIMA? |
| 4 | Como feriados e o fechamento de lojas nos domingos afetam a demanda? |
Mais de 900 dias de histórico, com picos sazonais recorrentes em dezembro (Natal) e queda abrupta nos domingos.
Segunda-feira é o dia de maior faturamento médio (R$ 8,4M). Aos domingos, apenas ~32 das 1.115 lojas abrem — a maioria fecha por lei/convenção local na Alemanha — e a receita cai para ~R$ 270 mil, um efeito que precisa ser tratado separadamente nas métricas de erro.
| Modelo | MAE | RMSE | MAPE* |
|---|---|---|---|
| Prophet | R$ 1.093.322 | R$ 1.367.959 | 15,60% |
| SARIMA | R$ 1.347.334 | R$ 1.671.778 | 13,16% |
* MAPE calculado excluindo domingos — incluí-los faz o erro percentual explodir por divisão por valores próximos de zero (vendas residuais das ~32 lojas abertas).
Prophet teve menor erro absoluto (MAE/RMSE), capturando melhor os picos de início de semana e promoções. SARIMA teve menor erro percentual médio, sendo mais consistente proporcionalmente. Não há um vencedor único — a escolha depende se o negócio prioriza erro absoluto (R$) ou relativo (%).
python -m venv .venv
.venv\Scripts\activate # Windows
pip install -r requirements.txtAcesse Kaggle — Rossmann Store Sales, baixe train.csv e store.csv e coloque-os na pasta data/.
jupyter notebook notebooks/01_forecasting_vendas.ipynbpython generate_screenshots.pyForecastingDemanda/
│
├── data/ # CSVs do Rossmann (não versionados)
│ └── .gitkeep
│
├── notebooks/
│ └── 01_forecasting_vendas.ipynb # EDA + Prophet + SARIMA + comparação
│
├── images/ # Gráficos exportados para o README
├── models/ # Modelos treinados (não versionados)
├── generate_screenshots.py # Gera os PNGs usados neste README
├── requirements.txt
└── README.md
Agregação das vendas de todas as lojas por dia, decomposição da série (tendência, sazonalidade semanal, resíduo) com statsmodels.seasonal_decompose.
Modelo aditivo com sazonalidade anual e semanal nativas, mais feriados alemães (make_holidays_df) — a forma mais simples de capturar o efeito de datas comemorativas sem engenharia manual de variáveis.
Seleção automática de parâmetros (p,d,q)(P,D,Q,m=7) via pmdarima.auto_arima, minimizando AIC. Abordagem estatística clássica, sem necessidade de especificar feriados.
Holdout das últimas 6 semanas (42 dias). Métricas: MAE, RMSE e MAPE (este último excluindo domingos, por causa do efeito de lojas fechadas).
| Conceito | Descrição |
|---|---|
| Decomposição de série temporal | Separação em tendência, sazonalidade e resíduo |
| Prophet | Modelo aditivo com sazonalidades múltiplas e feriados |
| SARIMA | Modelo estatístico clássico com seleção automática de parâmetros |
| Holdout temporal | Validação respeitando a ordem cronológica (sem data leakage) |
| Métricas de erro | MAE, RMSE e MAPE, com tratamento de valores próximos de zero |
- Adicionar
PromoeSchoolHolidaycomo regressores externos no Prophet - Forecasting por loja individual com agregação hierárquica
- Comparar com modelos de Machine Learning (XGBoost, LightGBM) usando features de calendário e lags
- Deploy do modelo vencedor como API de previsão
Rossmann Store Sales kaggle.com/datasets/pratyushakar/rossmann-store-sales Dataset original da competição Kaggle "Rossmann Store Sales"
Augusto Matos — Analista de Dados & Desenvolvedor Python


