A Modelagem Matematica Nos Permite Representar - Apresentação Modelagem Matemática | PPTX
Apresentação Modelagem Matemática | PPTX

Como construir um modelo de previsão de demanda com Python e validar contra dados reais

a modelagem matematica nos permite representar sistemas complexos de forma simplificada, mas isso não significa que os resultados vão bater certo na primeira tentativa. O processo que descrevo aqui nasceu de um projeto real onde precisei prever vendas mensais de um produto sazonal com base em dados históricos de cinco anos. O setup básico usa pandas para tratamento, statsmodels ou sklearn para o modelo, e uma validação cruzada temporal para evitar vazamento de dados.

Por que a modelagem matematica nos permite representar o comportamento de sistemas físicos e econômicos

No cerne, você transforma variáveis observáveis em equações ou relações funcionais que reproduzem o comportamento do sistema. Isso exige três etapas obrigatórias: formulação, calibração e validação. A formulação é onde a maioria falha porque escolhe equações bonitas sem checar se os pressupostos são válidos para o domínio. A calibração ajusta parâmetros para minimizar erro nos dados de treino. A validação testa o modelo em dados que ele nunca viu, preferencialmente em um horizonte temporal posterior ao treinamento. O erro mais comum é overfitting. Eu mesma vi colegas ajustar modelos até que o erro de treino caísse perto de zero, só para descobrir que a predição em dados novos tinha um MAE cinco vezes maior. Isso acontece quando o número de parâmetros supera a informação contida nos dados. Um modelo com muitos graus de liberdade memora ruído, não sinal.

Passo a passo prático

Etapa 1: estruturar os dados

Colete séries temporais organizadas em colunas: data, variável-alvo, e covariáveis relevantes. Limpe outlier óbvios causados por erro de registro, não por evento real. Use datetime como index. Verifique estacionariedade com o teste ADF do statsmodels. Se a série não for estacionária, diferencie ou aplique transformação logarítmica antes de prosseguir.

Etapa 2: escolher a estrutura do modelo

Para séries temporais univariadas com sazonalidade, um SARIMA pode ser suficiente. Para múltiplas variáveis explicativas, um modelo de regressão com componentes temporais ou um Prophet da Meta funciona bem. Escolha com base na interpretabilidade que o stakeholder precisa, não no R² mais alto. Um modelo mais simples com boa generalização vale mais que um complexo que só brilha no treino. Um detalhe que poucos mencionam: a escolha da função de custo importa mais do que a arquitetura. Loss functions robustas como MAE ou huber reduzem a sensibilidade a outliers sem exigir limpeza agressiva dos dados. Isso economiza horas de pré-processamento.

👉 Clique no botão abaixo para saber mais sobre o assunto!

Etapa 3: treinar com validação temporal

Não use k-fold aleatório. Use time-based split. Separe os últimos 20% dos dados como teste, os 10% seguintes como validação, e o restante como treino. Treine o modelo no período mais antigo, ajuste hiperparâmetros no validador, e avalie no holdout final. Isso simula a condição real de uso: o modelo sempre prevê o futuro a partir do passado conhecido. No projeto que mencionei, o problema foi um evento pontual de promoção que gerou um pico artificial nas vendas. O modelo aprendeu aquele pico como padrão e passou a superestimar todas as previsões subsequentes. A solução foi criar uma variável dummy sinalizadora da promoção e excluir esses pontos da calibração dos coeficientes sazonais. Sem esse ajuste, o erro de previsão permanecia alto mesmo com cross-validation rigorosa.

Etapa 4: avaliar e documentar

Use métricas padrão: MAE, RMSE, MAPE. Calcule também o erro relativo em relação a um baseline ingênuo, como prever o próximo valor igual ao último observado. Se seu modelo não supera esse baseline, há algo errado na especificação ou nos dados. Registre todos os parâmetros, versões das bibliotecas, e splits usados. Reprodutibilidade não é luxo, é necessidade operacional.

Limitações que ninguém destaca

Modelos matemáticos dependem fortemente da qualidade dos dados de entrada. Se as covariáveis tiverem missing values sistemáticos ou medições enviesadas, o modelo vai produzir estimativas consistentemente erradas sem indicar nenhum alerta. Modelos também falham em capturar mudanças estruturais abruptas. Uma guerra, uma pandemia, ou uma mudança regulatória podem tornar qualquer modelo obsoleto em semanas. Nesse cenário, a melhor prática é manter um modelo ingênuo como baseline e monitorar a divergência entre as duas previsões como sinal de alerta. Outro ponto cego: a suposição de independência entre observações raramente se mantém em dados do mundo real. Autocorrelação residual é comum e indica que informações importantes foram deixadas na mesa. Um exame rápido do PAC e ACF dos resíduos revela isso. Se houver padrões, considere modelos com termos autorregressivos adicionais ou uma estrutura de erros correlacionados.

O código de exemplo abaixo demonstra a implementação básica com SARIMA e validação temporal. Não espere que copie e cole resolva seu problema específico, mas serve como ponto de partida funcional.

import pandas as pd
import numpy as np
from statsmodels.tsa.statespace.sarimax import SARIMAX
from sklearn.metrics import mean_absolute_error

Carregar dados
df = pd.read_csv('vendas_histricas.csv', parse_dates=['data'], index_col='data')

Separar períodos
split_valid = int(len(df) * 0.7)
split_test = int(len(df) * 0.85)

train = df.iloc[:split_valid]
valid = df.iloc[split_valid:split_test]
test = df.iloc[split_test:]

Treinar SARIMA
model = SARIMAX(train['vendas'], order=(1,1,1), seasonal_order=(1,1,1,12))
result = model.fit(disp=False)

Prever
pred_valid = result.predict(start=valid.index[0], end=valid.index[-1])
pred_test = result.predict(start=test.index[0], end=test.index[-1])

Avaliar
mae_valid = mean_absolute_error(valid['vendas'], pred_valid)
mae_test = mean_absolute_error(test['vendas'], pred_test)
print(f'MAE validação: {mae_valid:.2f}')
print(f'MAE teste: {mae_test:.2f}')

Se precisar de ajustes específicos para seu domínio, comece revisando a estrutura dos resíduos antes de trocar de modelo. A maior parte dos problemas de desempenho está em etapas anteriores ao treino, não na escolha do algoritmo em si.