Previsão de Séries Temporais
Visão geral
Previsão de séries temporais (time series forecasting) é a tarefa de prever valores futuros de uma variável observada ao longo do tempo (por exemplo, demanda por dia, uso de CPU por minuto, preços de ações por segundo). Ela fica na interseção entre estatística e aprendizado de máquina (machine learning):
- Previsão clássica (classical forecasting) foca em suposições explícitas sobre tendência/sazonalidade/autocorrelação e frequentemente produz baselines fortes com componentes interpretáveis.
- Previsão baseada em aprendizado de máquina (ML-based forecasting) reformula a previsão como aprendizado supervisionado (supervised learning) com atributos engenheirados (engineered features) (defasagens (lags), estatísticas móveis (rolling stats), variáveis de calendário (calendar variables)) e pode lidar com não linearidades complexas e covariáveis de alta dimensionalidade.
- Modelos de sequência de aprendizado profundo (deep learning) aprendem representações diretamente a partir de sequências e são úteis quando você tem grandes conjuntos de dados, muitas séries relacionadas ou covariáveis ricas.
A previsão está intimamente relacionada à predição de sequência (sequence prediction), mas a previsão geralmente enfatiza:
- Ordenação temporal (temporal ordering) (nenhuma informação do futuro é permitida),
- Horizontes de múltiplos passos (multi-step horizons) (prevendo 1…H passos à frente),
- Incerteza (uncertainty) (intervalos de previsão (prediction intervals) e decisões sensíveis a risco),
- Avaliação operacional (operational evaluation) (teste retrospectivo (backtesting) consistente com a implantação).
Formulação do problema e notação
Uma série temporal univariada é uma sequência ({y_t}{t=1}^T), em que (y_t) é observado no índice de tempo (t) (frequentemente associado a timestamps). A previsão busca estimar valores futuros (y{T+1}, \dots, y_{T+H}) para um horizonte (H).
Variantes comuns:
- Previsão univariada: prever o futuro a partir do passado da mesma série.
- Previsão com variáveis exógenas (exogenous variables) (também conhecida como regressão dinâmica (dynamic regression)): prever (y_t) usando outras entradas (x_t) (preço, promoções, clima).
- Previsão multivariada: prever conjuntamente um vetor (\mathbf{y}_t) (por exemplo, múltiplos sensores).
- Previsão global: treinar um modelo para muitas séries relacionadas (por exemplo, milhares de SKUs) para compartilhar força estatística.
Distinção-chave:
- Um passo à frente (one-step-ahead): prever (y_{t+1}) dado o histórico até (t).
- Múltiplos passos à frente (multi-step-ahead): prever um caminho (y_{t+1:t+H}), frequentemente mais difícil porque a incerteza se acumula.
Conceitos centrais: padrões e suposições
Tendência, sazonalidade e ciclos
Muitas séries combinam:
- Tendência (trend): aumento/diminuição de longo prazo.
- Sazonalidade (seasonality): padrões repetidos em períodos fixos (diário/semanal/anual).
- Comportamento cíclico/irregular (cyclic/irregular behavior): oscilações menos regulares.
Uma decomposição conceitual comum é:
[ y_t = \text{trend}_t + \text{seasonal}_t + \text{remainder}_t ]
Essa ideia aparece em suavização exponencial, modelos em espaço de estados e engenharia de atributos.
Autocorrelação e estacionariedade
Autocorrelação (autocorrelation) significa que (y_t) depende de valores passados (y_{t-k}). Modelos clássicos frequentemente assumem alguma forma de estacionariedade (stationarity) — isto é, que as propriedades estatísticas não mudam ao longo do tempo (após remover tendência/sazonalidade).
Na prática, muitas séries reais são não estacionárias (non-stationary) devido a:
- mudanças no comportamento do usuário,
- mudanças de regime econômico,
- lançamentos de produto,
- recalibração de sensores,
- mudanças de plataforma.
Fluxos de trabalho modernos frequentemente priorizam avaliação robusta e retreinamento em vez de suposições estritas de estacionariedade.
Horizonte de previsão e restrições de informação
A dificuldade da previsão depende fortemente de:
- Frequência de amostragem (sampling frequency) (minuto vs. mensal),
- Horizonte (horizon) (próxima hora vs. próximo trimestre),
- Covariáveis (covariates) disponíveis (entradas futuras conhecidas como calendários vs. futuras desconhecidas como decisões futuras de preço).
Um bom modelo mental: prever é sobre o que será conhecido no momento da previsão. Atributos que usam informação futura causam vazamento de dados (data leakage) e falharão em produção.
Abordagens estatísticas clássicas
Métodos clássicos costumam ser baselines fortes, rápidos de treinar e interpretáveis. Eles são especialmente eficazes para uma única série ou pequenas coleções.
Baselines ingênuos e ingênuos sazonais
Antes de modelos complexos, estabeleça baselines:
- Ingênuo (naive): (\hat{y}_{t+1} = y_t)
- Ingênuo sazonal (seasonal naive): (\hat{y}{t+1} = y{t+1-s}) onde (s) é o período sazonal (por exemplo, 7 para sazonalidade semanal em dados diários)
Eles podem ser surpreendentemente difíceis de superar em horizontes curtos.
Suavização exponencial (ETS)
Modelos de suavização exponencial (exponential smoothing) atualizam nível/tendência/sazonalidade usando pesos que decaem exponencialmente. As variantes ETS incluem:
- Suavização exponencial simples (apenas nível),
- Tendência linear de Holt,
- Holt–Winters (tendência + sazonalidade).
Prós:
- Boa para padrões sazonais estáveis,
- Componentes interpretáveis,
- Frequentemente competitiva em séries de negócios.
Contras:
- Menos flexível com muitas covariáveis,
- Pode ter dificuldades com interações não lineares complexas.
ARIMA / SARIMA (Box–Jenkins)
Modelos ARIMA(p, d, q) modelam a série diferenciada (ordem (d)) com:
- AR(p): termos autorregressivos,
- MA(q): termos de média móvel.
SARIMA adiciona componentes sazonais, lidando com padrões como sazonalidade semanal.
Prós:
- Teoria e diagnósticos sólidos,
- Funciona bem para estruturas lineares de autocorrelação.
Contras:
- Seleção de parâmetros e diagnósticos exigem cuidado,
- Escalar para muitas séries pode ser trabalhoso,
- Modelagem não linear limitada.
Modelos em espaço de estados e o filtro de Kalman
Muitos métodos clássicos (incluindo ETS) podem ser escritos como modelos em espaço de estados (state space models), nos quais estados latentes evoluem ao longo do tempo e as observações são ruidosas.
Benefícios:
- Tratamento natural de observações ausentes,
- Previsões probabilísticas fundamentadas,
- Extensível a parâmetros que variam no tempo.
Isso se conecta à modelagem probabilística e à incerteza (ver Modelos Bayesianos (Bayesian Models)).
Modelos aditivos ao estilo Prophet
Modelos de regressão aditiva com termos para tendência + sazonalidade + feriados se popularizaram em previsão para negócios porque são:
- fáceis de especificar,
- robustos a dados ausentes/valores atípicos (dependendo da implementação),
- bons para efeitos de calendário.
Eles não são universalmente os melhores, mas costumam ser úteis quando há forte estrutura de calendário e você precisa de um baseline rápido e explicável.
Abordagens de aprendizado de máquina baseadas em atributos
Uma abordagem comum e poderosa é converter previsão em aprendizado supervisionado tabular:
[ \text{atributos no tempo } t \rightarrow \text{alvo } y_{t+h} ]
Isso viabiliza modelos como regressão linear, impulsionamento por gradiente e florestas aleatórias (ver Regressão Linear/Logística (Linear/Logistic Regression) e Árvores de Decisão e Conjuntos (Decision Trees & Ensembles)).
Atributos típicos
Atributos de defasagem
- (y_{t-1}, y_{t-2}, \dots, y_{t-L})
Estatísticas de janela móvel
- média/desvio padrão/mínimo/máximo móveis sobre os últimos 7/30/90 pontos
Atributos de calendário
- dia da semana, mês, feriados, hora do dia
- frequentemente codificados com codificação one-hot (one-hot) ou codificação cíclica (cyclical encoding) (sin/cos)
Variáveis exógenas
- preço, promoções, clima, investimento em marketing
- garanta disponibilidade no momento da previsão (futuro conhecido vs. futuro desconhecido)
Atributos hierárquicos/de grupo
- loja, região, categoria de produto (para modelos globais em muitas séries)
Previsão de múltiplos passos: direta vs. recursiva
Para horizonte (H), você pode:
Recursiva (recursive): treinar um modelo de um passo e realimentar as previsões para prever múltiplos passos.
- Prós: simples, um modelo
- Contras: o erro se acumula
Direta (direct): treinar modelos separados para cada horizonte (h\in{1,\dots,H}).
- Prós: evita erro de realimentação
- Contras: mais modelos, menos estrutura compartilhada
Multi-saída (multi-output): um modelo produz um vetor ((y_{t+1}, \dots, y_{t+H})).
- Prós: aprende correlações entre horizontes
- Contras: complexidade do modelo
Exemplo prático: regressão com defasagens e impulsionamento por gradiente
import pandas as pd
import numpy as np
from sklearn.model_selection import TimeSeriesSplit
from sklearn.metrics import mean_absolute_error
from sklearn.ensemble import HistGradientBoostingRegressor
def make_lagged(df, target="y", lags=(1, 2, 7, 14), rolls=(7, 28)):
df = df.copy()
for L in lags:
df[f"lag_{L}"] = df[target].shift(L)
for w in rolls:
df[f"roll_mean_{w}"] = df[target].shift(1).rolling(w).mean()
df[f"roll_std_{w}"] = df[target].shift(1).rolling(w).std()
# simple calendar features (assumes datetime index)
df["dow"] = df.index.dayofweek
df["month"] = df.index.month
return df.dropna()
# Example: df indexed by datetime with a column "y"
# df = pd.DataFrame({"y": ...}, index=pd.date_range(...))
Xy = make_lagged(df, target="y")
X = Xy.drop(columns=["y"])
y = Xy["y"]
tscv = TimeSeriesSplit(n_splits=5)
model = HistGradientBoostingRegressor(max_depth=6, learning_rate=0.05)
scores = []
for train_idx, test_idx in tscv.split(X):
model.fit(X.iloc[train_idx], y.iloc[train_idx])
pred = model.predict(X.iloc[test_idx])
scores.append(mean_absolute_error(y.iloc[test_idx], pred))
print("MAE:", np.mean(scores), "+/-", np.std(scores))
Esse estilo frequentemente tem desempenho extremamente bom em séries de negócios — especialmente quando você tem covariáveis úteis e muitas séries relacionadas.
Aprendizado profundo para previsão de sequências
Modelos profundos são atraentes quando você tem:
- muitas séries relacionadas (aprendizado global),
- dinâmicas não lineares complexas,
- covariáveis ricas,
- dependências de longo alcance,
- a necessidade de saídas multi-horizonte.
Em geral, eles são treinados com variantes da Descida do Gradiente (Gradient Descent) e se beneficiam de avaliação cuidadosa devido ao risco de sobreajuste (overfitting).
RNNs, LSTMs, GRUs
Redes neurais recorrentes (recurrent neural networks, RNNs) processam sequências passo a passo, com LSTMs/GRUs projetadas para mitigar gradientes que desaparecem (vanishing gradients).
Prós:
- Modelagem sequencial natural,
- Podem incorporar covariáveis em cada passo de tempo.
Contras:
- O treinamento pode ser mais lento do que em modelos feedforward/tabulares (feedforward/tabular models),
- Dependências de longo alcance ainda podem ser desafiadoras.
Redes Convolucionais Temporais (TCN)
Redes convolucionais temporais (Temporal Convolutional Networks, TCNs) usam convoluções dilatadas causais (causal dilated convolutions) para capturar contexto longo de forma eficiente.
Prós:
- Paralelizáveis no tempo (frequentemente mais rápidas do que RNNs),
- Boas para contexto longo.
Transformadores para previsão
Transformadores (Transformers) (ver Arquitetura de Transformers (Transformer Architecture)) usam o mecanismo de atenção (attention) para relacionar posições na sequência.
Prós:
- Capturam relações de longo alcance,
- Bons para previsão multivariada/global quando há dados suficientes.
Contras:
- Podem exigir muitos dados,
- Exigem cuidado com embeddings posicionais/de tempo (positional/time embeddings) e vazamento,
- Atenção pura pode ser ineficiente para sequências muito longas (existem muitas variantes).
Previsão profunda probabilística
Sistemas modernos frequentemente produzem distribuições (distributions) (por exemplo, parâmetros gaussianos, quantis) em vez de estimativas pontuais. Objetivos de treinamento incluem:
- Perda quantílica (quantile loss) (perda pinball) para intervalos de previsão,
- Log-verossimilhança negativa (negative log-likelihood) para distribuições paramétricas.
Isso é importante para tomada de decisão (buffers de estoque, dimensionamento de equipes, risco).
Processos Gaussianos e outros métodos probabilísticos
Processos Gaussianos (Gaussian Processes) fornecem uma abordagem bayesiana não paramétrica (Bayesian nonparametric): define-se um núcleo (kernel) que codifica suavidade/sazonalidade e infere-se uma distribuição a posteriori (posterior distribution) sobre funções.
Prós:
- Excelente quantificação de incerteza,
- Engenharia flexível de núcleos (núcleos sazonais + de tendência).
Contras:
- Computacionalmente caros para grandes conjuntos de dados (embora existam aproximações).
Previsão probabilística também se relaciona a Modelos Bayesianos de forma mais ampla.
Avaliação: teste retrospectivo e métricas
Validação sensível ao tempo (sem embaralhar)
A validação cruzada k-fold (k-fold cross-validation) padrão quebra a ordem temporal. Em vez disso, use:
- Validação de origem móvel (walk-forward) (rolling-origin): treina no histórico até o tempo (t), avalia em uma janela futura e desliza para frente.
- Janela expansiva (expanding window): o conjunto de treino cresce ao longo do tempo.
- Janela deslizante (sliding window): mantém uma janela recente de tamanho fixo para se adaptar à deriva.
Isso alinha a avaliação ao comportamento em produção.
Métricas comuns
Métricas para previsão pontual:
- MAE: robusta e interpretável nas unidades originais
- RMSE: penaliza mais erros grandes
- MAPE / sMAPE: independentes de escala, mas problemáticas perto de zero (MAPE explode)
- MASE: compara contra um baseline ingênuo (útil entre séries)
Métricas probabilísticas:
- Perda pinball para quantis (por exemplo, P10/P50/P90)
- CRPS para distribuições completas
- Cobertura (coverage) de intervalos de previsão (por exemplo, “intervalo de 90% contém a verdade ~90% do tempo”)
Escolha métricas que correspondam ao custo do negócio: rupturas de estoque vs. excesso de estoque, violações de SLA, penalidades de despacho de energia etc.
Avaliação multi-passo
Avalie previsões para cada horizonte (h) separadamente, porque o erro tipicamente aumenta com o horizonte. Muitos sistemas reportam uma curva de erro por horizonte (horizon-wise error curve).
Fluxo de trabalho prático de previsão
1) Defina a tarefa de previsão com precisão
- Qual(is) horizonte(s) importam?
- Quais restrições de latência existem?
- Quais covariáveis serão conhecidas no futuro (feriados, preço planejado) vs. desconhecidas?
2) Preparação de dados
- Reamostragem (resampling) para uma frequência consistente (horária/diária)
- Timestamps ausentes: decida se deve imputar, manter ausentes ou modelar amostragem irregular
- Valores atípicos (outliers): detectar e tratar (às vezes via perdas robustas ou pré-processamento)
- Divisão treino/teste por tempo, não aleatória
3) Comece com baselines fortes
- ingênuo sazonal
- ETS/SARIMA ou modelo aditivo
- regressão simples com defasagens (linear ou impulsionamento por gradiente)
Baselines dão uma verificação de realidade e ajudam a detectar vazamento.
4) Adicione complexidade apenas quando necessário
- variáveis exógenas
- modelo global em séries relacionadas
- aprendizado profundo quando houver escala e sinal
5) Faça deploy com monitoramento e retreinamento
Séries temporais são propensas a:
- deriva de conceito (concept drift) (as relações mudam),
- mudanças no pipeline de dados (data pipeline shifts) (novas definições, ausência de dados),
- anomalias (anomalies) (picos, indisponibilidades).
O monitoramento frequentemente se sobrepõe à Detecção de Anomalias (Anomaly Detection): picos repentinos podem quebrar modelos e também representar incidentes sobre os quais você quer alertar.
Lidando com incerteza: intervalos de previsão na prática
Muitas decisões exigem estimativas de incerteza:
- estoque: estoque de segurança depende da incerteza da demanda,
- energia: margens de reserva dependem da incerteza da previsão de carga,
- finanças: medidas de risco exigem comportamento de cauda.
Abordagens:
- Clássicas: ARIMA/espaço de estados fornecem intervalos analíticos sob suposições.
- Regressão quantílica (quantile regression): treinar modelos para prever P10/P50/P90 diretamente.
- Conjuntos (ensembles): usar a variação entre modelos para aproximar a incerteza.
- Predição conformal (conformal prediction): envolve um modelo para produzir intervalos com cobertura empírica sob suposições fracas (especialmente útil quando você não confia em suposições distribucionais).
Sempre valide a calibração dos intervalos em testes retrospectivos.
Aplicações
A previsão de séries temporais é amplamente usada em:
- Previsão de demanda (demand forecasting): varejo, cadeia de suprimentos, dimensionamento de equipes
- Finanças: previsão de volatilidade, risco, sinais algorítmicos (com ressalvas sobre não estacionariedade)
- Energia e utilities: previsões de carga e de geração renovável
- Observabilidade/DevOps (Observability/DevOps): planejamento de capacidade, previsão sensível a anomalias
- Saúde: previsão de sinais vitais de pacientes, admissões hospitalares
- IIoT industrial (Industrial IoT): manutenção preditiva (predictive maintenance) (frequentemente combinada com detecção de anomalias)
Para problemas de tempo até o evento (time-to-event) (por exemplo, “quando uma máquina vai falhar?”), considere Análise de Sobrevivência (Survival Analysis), que modela tempos de eventos em vez de valores futuros.
Armadilhas comuns e como evitá-las
Vazamento de dados
- Usar informação futura nos atributos (por exemplo, média móvel que inclui o tempo-alvo)
- Corrija deslocando janelas móveis e definindo cuidadosamente o que é “conhecido no momento da previsão”
Validação inadequada
- Divisões aleatórias inflacionam o desempenho
- Use validação walk-forward
Ignorar sazonalidade
- Leva a erros sistemáticos (por exemplo, fins de semana)
- Adicione termos sazonais ou atributos de calendário
Incompatibilidade de métricas
- Otimizar RMSE quando o custo do negócio é assimétrico
- Use perdas ponderadas ou objetivos quantílicos
Sobreajuste com modelos profundos
- Previsão com modelos profundos pode memorizar idiossincrasias
- Use baselines fortes, regularização e testes retrospectivos realistas
Não estacionariedade e deriva
- Um modelo treinado no ano passado pode falhar hoje
- Use cronogramas de retreinamento, detecção de deriva (drift detection) ou janelas deslizantes
Quando usar qual abordagem (regra prática)
- Poucas séries, necessidade de interpretabilidade, sazonalidade forte: ETS/SARIMA/espaço de estados.
- Muitas covariáveis, não linearidades, cenário favorável a dados tabulares: impulsionamento por gradiente com atributos de defasagem/janela móvel (Árvores de Decisão e Conjuntos).
- Muitas séries relacionadas, necessidade de aprendizado compartilhado, atributos ricos: modelos globais de aprendizado de máquina/aprendizado profundo.
- Necessidade de incerteza calibrada (calibrated uncertainty): modelos probabilísticos, regressão quantílica, intervalos conformais (conformal intervals) ou Processos Gaussianos em menor escala.
Resumo
A previsão de séries temporais combina estrutura temporal, incerteza e restrições operacionais. Métodos clássicos (ETS, ARIMA, espaço de estados) fornecem baselines fortes e interpretáveis; abordagens de aprendizado de máquina convertem previsão em aprendizado supervisionado via atributos de defasagem e de calendário; aprendizado profundo (RNNs/TCNs/Transformadores) se destaca quando a escala e a complexidade dos dados justificam. Em todas as abordagens, validação sensível ao tempo, prevenção de vazamento e métricas sensíveis à incerteza frequentemente são a diferença entre um modelo que parece bom offline e um que funciona de forma confiável em produção.