Modelo SARIMA

O SARIMA estende o ARIMA com operadores AR, de diferenciação e MA sazonais que capturam padrões que se repetem a cada \(s\) períodos. É o modelo padrão para dados mensais, trimestrais ou diários com ciclos sazonais regulares, como vendas no varejo, demanda de energia ou turismo.

Definição

Um modelo SARIMA(\(p,d,q\))(\(P,D,Q\))\(_s\) é escrito de forma compacta como:

\[\Phi_P(L^s)\,\phi_p(L)\,(1-L^s)^D(1-L)^d\,y_t = \Theta_Q(L^s)\,\theta_q(L)\,\varepsilon_t\]

em que:

  • \((p,d,q)\): ordem AR não sazonal, diferenciação, ordem MA não sazonal.
  • \((P,D,Q)\): ordem AR sazonal, diferenciação sazonal, ordem MA sazonal.
  • \(s\): duração da estação (12 para dados mensais, 4 para trimestrais, 7 para dados diários com ciclo semanal).
  • \(\phi_p(L) = 1 - \phi_1 L - \cdots - \phi_p L^p\): polinômio AR não sazonal.
  • \(\Phi_P(L^s) = 1 - \Phi_1 L^s - \cdots - \Phi_P L^{Ps}\): polinômio AR sazonal.
  • \(\theta_q(L)\), \(\Theta_Q(L^s)\): polinômios MA correspondentes.
  • \((1-L)^d\): diferenciação não sazonal; \((1-L^s)^D\): diferenciação sazonal.

O operador de diferenciação sazonal remove uma tendência sazonal estocástica:

\[(1-L^{12})y_t = y_t - y_{t-12}\]

Para dados mensais, isso calcula a variação ano a ano, eliminando o padrão sazonal.

Identificando ordens sazonais a partir da ACF e da PACF

A estrutura sazonal aparece como picos em múltiplos de \(s\) na ACF e na PACF. As regras de identificação espelham as do caso não sazonal, mas aplicadas às defasagens sazonais:

Padrão sazonal ACF nas defasagens \(s, 2s, 3s, \ldots\) PACF nas defasagens \(s, 2s, 3s, \ldots\)
SAR(\(P\)) Se atenua Se corta após a defasagem \(Ps\)
SMA(\(Q\)) Se corta após a defasagem \(Qs\) Se atenua
SARMA Ambas se atenuam Ambas se atenuam

ACF e PACF da série logarítmica de passageiros aéreos diferenciada sazonal e regularmente mostrando picos sazonais

As linhas pontilhadas laranjas marcam as defasagens sazonais (12, 24, 36). O pico significativo na defasagem 12 da ACF (mas não na 24) sugere SMA(1). O pico na defasagem 12 da PACF sugere SAR(1). Combinado com a estrutura não sazonal, isso aponta para SARIMA(0,1,1)(0,1,1)\(_{12}\) ou SARIMA(0,1,1)(1,1,0)\(_{12}\).

O modelo airline: SARIMA(0,1,1)(0,1,1)\(_{12}\)

O modelo SARIMA mais famoso, proposto por Box e Jenkins para os dados de passageiros aéreos:

\[\Delta\Delta_{12}\log y_t = (1 + \theta L)(1 + \Theta L^{12})\varepsilon_t\]

Expandido:

\[\Delta\Delta_{12}\log y_t = \varepsilon_t + \theta\varepsilon_{t-1} + \Theta\varepsilon_{t-12} + \theta\Theta\varepsilon_{t-13}\]

Apenas dois parâmetros (\(\theta\) e \(\Theta\)) capturam tanto a dinâmica de curto prazo quanto o padrão sazonal. A transformação logarítmica estabiliza a variância crescente; a diferenciação regular remove a tendência; a diferenciação sazonal remove a tendência sazonal.

SARIMA(0,1,1)(0,1,1)12 ajustado aos dados de passageiros aéreos com previsão de 24 meses mostrando o padrão sazonal preservado

A previsão (vermelho) preserva o padrão sazonal e a tendência de alta, com intervalos de previsão que se ampliam apropriadamente.

Diagnóstico de resíduos

ACF dos resíduos do modelo SARIMA de passageiros aéreos mostrando ruído branco sem estrutura sazonal remanescente

Nenhum pico significativo em qualquer defasagem, incluindo as sazonais 12 e 24. O modelo capturou toda a estrutura de autocorrelação.

⚠️ A diferenciação sazonal excessiva infla a variância da previsão

Aplicar \(D = 1\) quando \(D = 0\) é suficiente introduz uma raiz unitária no MA sazonal, tornando o modelo não inversível e produzindo previsões com variância explosiva. Sinais: a ACF da série diferenciada sazonalmente começa com um valor negativo grande na defasagem \(s\).

Um erro comum com dados mensais: aplicar tanto \(D = 1\) (sazonal) quanto \(d = 2\) (não sazonal) quando \(d = 1, D = 1\) é suficiente. Use forecast::nsdiffs(y) para determinar \(D\) e forecast::ndiffs(diff(y, 12)) para determinar \(d\) após a diferenciação sazonal.

💡 SARIMA em R

# Fit SARIMA(0,1,1)(0,1,1)[12] manually
arima(log(y), order = c(0,1,1),
      seasonal = list(order = c(0,1,1), period = 12))

# Automatic SARIMA selection
library(forecast)
auto.arima(y, seasonal = TRUE)   # default, searches seasonal orders too

# Determine differencing orders
nsdiffs(y)             # number of seasonal differences needed
ndiffs(diff(y, 12))   # non-seasonal differences after seasonal differencing

# Forecast and plot
fc <- forecast(fit, h = 24)
autoplot(fc)