Skip to content

augmatos/ForecastingDemanda

Repository files navigation

📈 Previsão de Demanda — Rossmann Store Sales

Forecasting de vendas diárias com Prophet e SARIMA, comparando performance entre os dois modelos sobre dados reais de varejo


📌 Sobre o Projeto

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).

Perguntas de negócio respondidas

# 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?

📊 Resultados

Série histórica — vendas diárias agregadas (2013–2015)

Série Completa

Mais de 900 dias de histórico, com picos sazonais recorrentes em dezembro (Natal) e queda abrupta nos domingos.


Sazonalidade semanal

Sazonalidade Semanal

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.


Prophet vs. SARIMA — previsão das últimas 6 semanas

Comparação de Modelos

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 (%).


🚀 Como Executar

1. Instalar dependências

python -m venv .venv
.venv\Scripts\activate          # Windows
pip install -r requirements.txt

2. Baixar o dataset

Acesse Kaggle — Rossmann Store Sales, baixe train.csv e store.csv e coloque-os na pasta data/.

3. Rodar o notebook

jupyter notebook notebooks/01_forecasting_vendas.ipynb

4. Regenerar as imagens do README

python generate_screenshots.py

📁 Estrutura do Projeto

ForecastingDemanda/
│
├── 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

🔍 Metodologia

📈 Análise Exploratória

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.

🔮 Prophet

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.

📐 SARIMA

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.

📏 Avaliação

Holdout das últimas 6 semanas (42 dias). Métricas: MAE, RMSE e MAPE (este último excluindo domingos, por causa do efeito de lojas fechadas).


🛠️ Tecnologias

Python Pandas Prophet statsmodels Plotly Jupyter


📚 Conceitos Aplicados

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

🔮 Próximas Etapas

  • Adicionar Promo e SchoolHoliday como 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

📖 Fonte dos Dados

Rossmann Store Sales kaggle.com/datasets/pratyushakar/rossmann-store-sales Dataset original da competição Kaggle "Rossmann Store Sales"


👨‍💻 Autor

Augusto Matos — Analista de Dados & Desenvolvedor Python

LinkedIn Outlook GitHub

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages