Análise Exploratória e Preparação de Dados
registros de vendas
lojas únicas
anos (2013-2015)
integridade mantida
| Coluna | Nulos | Percentual | Estratégia de Tratamento |
|---|---|---|---|
| CompetitionDistance | 2.642 | 0.27% | Preencher com mediana |
| CompetitionOpenSinceMonth | 323.348 | 31.89% | Preencher com 0 |
| CompetitionOpenSinceYear | 323.348 | 31.89% | Preencher com 0 |
| Promo2SinceWeek | 508.031 | 50.17% | Preencher com 0 |
| PromoInterval | 508.031 | 50.17% | Preencher com 'None' |
+22% nas vendas quando promoções estão ativas
Segunda-feira é o dia de maior movimento
€7.200/dia
€3.800/dia
Dezembro apresenta picos significativos (festas de fim de ano)
| Tipo | Vendas Médias | Variação vs Média Geral | Característica |
|---|---|---|---|
| Tipo B | €7.800 | +35% | Alto desempenho, maior tráfego |
| Tipo A | €5.900 | +2% | Performance média estável |
| Tipo C | €5.200 | -10% | Volume menor, margem ok |
| Tipo D | €4.800 | -17% | Menor volume, maior margem |
Features temporais capturam sazonalidade e tendências cíclicas. Por exemplo, vendas aumentam no final do mês (dia do pagamento) e em dezembro (festas).
Vendas do dia anterior - captura tendência imediata
Vendas de 7 dias atrás - mesmo dia da semana anterior
Vendas de 14 dias atrás - 2 semanas antes
Média móvel de 7 dias - suaviza flutuações
Média móvel de 30 dias - tendência de longo prazo
Diferença entre lag_7 e lag_14 - direção da tendência
Em séries temporais, vendas passadas são o melhor preditor de vendas futuras. Uma loja que vendeu €10.000 ontem provavelmente venderá próximo disso hoje, exceto por eventos especiais (promoções, feriados).
| Rank | Feature | Correlação | Interpretação |
|---|---|---|---|
| 🥇 1º | Customers | 0.82 | Mais clientes = mais vendas (óbvio, mas importante!) |
| 🥈 2º | sales_lag_1 | 0.76 | Vendas de ontem preveem vendas de hoje |
| 🥉 3º | sales_rolling_7 | 0.74 | Tendência de curto prazo é importante |
| 4º | DayOfWeek | 0.43 | Dia da semana impacta significativamente |
| 5º | Promo | 0.38 | Promoções aumentam vendas consistentemente |
Estratégia: Preencher com mediana (75.000 metros)
Justificativa: Ausência indica provavelmente que não há competidor próximo, então usamos um valor alto (mediana) para representar isso.
Estratégia: Preencher com 0
Justificativa: 0 indica "sem informação de competidor", o que será tratado naturalmente pelos modelos de árvore.
Estratégia: Preencher com 0 e 'None'
Justificativa: Ausência significa que a loja não participa do programa Promo2.
Estratégia: Remover linhas (primeiros 14 dias por loja)
Justificativa: Não há como calcular lag de 14 dias para os primeiros registros. Representam apenas ~1.2% dos dados.
Em séries temporais, NÃO podemos usar split aleatório! Precisamos:
2013-01-01 até 2015-06-19
2015-06-20 até 2015-07-31
Carregados 3 datasets (train, test, store) com 1M+ registros de 1.115 lojas
Identificados padrões-chave: impacto de promoções (+22%), sazonalidade mensal, e diferenças por tipo de loja
Criadas 25 novas features: 9 temporais + 6 de lag + 10 derivadas
Tratados valores ausentes e removidos 1.2% de registros sem histórico suficiente
Divididos em 80% treino (801K) e 20% teste (200K) respeitando ordem temporal
Salvos datasets processados e lista de features para próxima etapa
Aumentam vendas em média 22%, com efeito ainda maior em fins de semana e lojas tipo B
Segunda-feira é o pico (€7.200), domingo é o vale (€3.800). Consistente em todas as lojas
Dezembro dispara (+45%), janeiro cai (-18%). Importante para planejamento de estoque
Features de lag têm correlação 0.76 com target. Vendas passadas preveem vendas futuras
Tipo B vende 35% acima da média. Importante para estratégia de expansão e otimização
Machine Learning para Previsão de Demanda
📅 Janeiro 2026 | 👨💻 Análise Completa de Dados
Desenvolver um modelo de Machine Learning capaz de prever com precisão as vendas diárias nas lojas da rede Rossmann, permitindo:
Ano, Mês, Dia, Dia da Semana, Semana do Ano, Dia do Ano, Trimestre, É Fim de Semana, É Início do Mês
Vendas dos últimos 1, 7, 14, 30 dias | Clientes dos últimos 1, 7 dias
Média de vendas janelas de 7, 14, 30 dias | Média de clientes 7 dias
Dias desde último feriado, Vendas por cliente, Intensidade promocional da loja
✓ Compreensão dos dados
✓ Identificação de padrões
✓ Análise de correlações
✓ Detecção de outliers
✓ Tratamento de valores nulos
✓ Remoção de dias fechados
✓ Filtro de vendas = 0
✓ Codificação de variáveis categóricas
✓ Criação de variáveis temporais
✓ Lags e médias móveis
✓ Features de negócio
✓ Transformações matemáticas
✓ Split temporal (não aleatório!)
✓ 80% treino / 20% teste
✓ Preservação da ordem temporal
✓ Validação da distribuição
✓ 4 algoritmos diferentes
✓ Baseline simples (Regressão Linear)
✓ Ensemble Methods (Random Forest)
✓ Gradient Boosting (XGBoost, LightGBM)
✓ Comparação de métricas
✓ Análise de resíduos
✓ Feature importance
✓ Escolha do campeão
| Ranking | Modelo | RMSE (€) | MAE (€) | MAPE (%) | R² | Tempo (s) |
|---|---|---|---|---|---|---|
| 🥇 | XGBoost | €685.42 | €492.18 | 7.95% | 0.9612 | 45.23s |
| 🥈 | LightGBM | €692.15 | €498.33 | 8.12% | 0.9604 | 12.87s |
| 🥉 | Random Forest | €731.56 | €528.91 | 8.89% | 0.9558 | 128.45s |
| 4️⃣ | Regressão Linear | €1,542.88 | €1,098.72 | 18.34% | 0.8012 | 2.15s |
XGBoost (Extreme Gradient Boosting) é um algoritmo de ensemble que constrói múltiplas árvores de decisão sequencialmente, onde cada nova árvore tenta corrigir os erros das anteriores. Suas vantagens incluem:
Em média, o modelo erra por €685 nas previsões. Para vendas médias de ~€6.000/dia, isso representa apenas 11% de erro!
O modelo explica 96.12% da variação nas vendas! Apenas 3.88% se deve a fatores não capturados (clima, eventos locais, etc.)
Em média, as previsões desviam apenas 7.95% dos valores reais. Considerado excelente para forecasting de vendas retail!
Vendas possuem forte componente sazonal. Dezembro apresenta picos significativos (festas de fim de ano), enquanto janeiro é mais fraco (período pós-festas).
Promoções aumentam as vendas em média 22%. Lojas com promoções ativas vendem significativamente mais, especialmente em fins de semana.
Segunda-feira é o dia de maior movimento (média €7.200/dia), enquanto domingo é o mais fraco (€3.800/dia). Padrão consistente em todas as lojas.
Lojas tipo 'b' têm vendas 35% superiores à média. Tipo 'd' apresenta menor volume mas maior margem. Importante para estratégia de expansão.
Menos desperdício
Custos operacionais
Melhor disponibilidade
Automação
Grid Search ou Bayesian Optimization para melhorar ainda mais a performance
Incluir dados de clima, eventos locais, tendências de mercado e sazonalidade específica
Combinar XGBoost + LightGBM via stacking para maximizar precisão
API REST + Dashboard interativo para consumo em tempo real
Sistema de tracking de performance e retreinamento automático
Python: 3.10+ | Pandas: 2.3.3 | NumPy: 2.4.1 | Scikit-learn: 1.5+ | XGBoost: 3.1.3 | LightGBM: 4.6.0 | Plotly: 5.24+ | Matplotlib/Seaborn: Para visualizações