Método Holt-Winters

O método Holt-Winters estende a suavização exponencial para séries com tendência e sazonalidade ao manter três componentes suavizados: nível \(\ell_t\), tendência \(b_t\), e índice sazonal \(s_t\). Ele existe em variantes aditiva e multiplicativa, dependendo de como a sazonalidade interage com o nível.

Holt-Winters aditivo

Use quando as flutuações sazonais são aproximadamente constantes em termos absolutos, independentemente do nível da série.

\[\ell_t = \alpha(y_t - s_{t-m}) + (1-\alpha)(\ell_{t-1} + b_{t-1})\]

\[b_t = \beta(\ell_t - \ell_{t-1}) + (1-\beta)b_{t-1}\]

\[s_t = \gamma(y_t - \ell_{t-1} - b_{t-1}) + (1-\gamma)s_{t-m}\]

\[\hat{y}_{t+h} = \ell_t + h \cdot b_t + s_{t+h-m}\]

em que \(m\) é a duração da estação e \(\alpha, \beta, \gamma \in (0,1)\) são os parâmetros de suavização para nível, tendência e sazonalidade, respectivamente. O índice sazonal \(s_t\) é atualizado usando o desvio de \(y_t\) em relação ao nível sem tendência.

Holt-Winters multiplicativo

Use quando as flutuações sazonais crescem proporcionalmente ao nível (por exemplo, passageiros aéreos, vendas no varejo que escalam com o volume).

\[\ell_t = \alpha\frac{y_t}{s_{t-m}} + (1-\alpha)(\ell_{t-1} + b_{t-1})\]

\[b_t = \beta(\ell_t - \ell_{t-1}) + (1-\beta)b_{t-1}\]

\[s_t = \gamma\frac{y_t}{\ell_{t-1} + b_{t-1}} + (1-\gamma)s_{t-m}\]

\[\hat{y}_{t+h} = (\ell_t + h \cdot b_t) \cdot s_{t+h-m}\]

O modelo multiplicativo divide pelo índice sazonal em vez de subtraí-lo. Os índices sazonais flutuam em torno de 1 (valores acima de 1 indicam períodos acima da média; abaixo de 1, abaixo da média). Os índices do modelo aditivo flutuam em torno de 0.

Dois painéis comparando as previsões de Holt-Winters aditivo e multiplicativo na série de passageiros aéreos

O modelo aditivo (esquerda) prevê oscilações sazonais de tamanho constante. O modelo multiplicativo (direita) prevê oscilações que crescem com o nível, o que se ajusta melhor ao padrão histórico dos dados de passageiros aéreos.

Inicialização

A inicialização adequada é essencial: valores iniciais ruins podem levar muitos períodos para se corrigir. A abordagem padrão:

Nível \(\ell_m\): média da primeira estação completa: \[\ell_m = \frac{1}{m}\sum_{i=1}^m y_i\]

Tendência \(b_m\): média das mudanças da primeira para a segunda estação: \[b_m = \frac{1}{m}\left(\frac{y_{m+1}-y_1}{m} + \frac{y_{m+2}-y_2}{m} + \cdots + \frac{y_{2m}-y_m}{m}\right)\]

Índices sazonais \(s_1, \ldots, s_m\) (aditivo): desvio de cada período em relação à média da primeira estação: \[s_i = y_i - \ell_m, \quad i = 1, \ldots, m\]

Para o multiplicativo: \(s_i = y_i / \ell_m\).

Na prática, HoltWinters() e ets() do R estimam os valores iniciais em conjunto com os parâmetros de suavização, minimizando a SSE.

Holt-Winters com tendência amortecida

O Holt-Winters com tendência linear pode sobrestimar previsões em horizontes longos: a tendência é extrapolada indefinidamente. A variante de tendência amortecida introduz um parâmetro de amortecimento \(\phi \in (0,1)\) que aplaina a tendência ao longo do tempo:

\[\hat{y}_{t+h} = \ell_t + (\phi + \phi^2 + \cdots + \phi^h)b_t + s_{t+h-m}\]

Conforme \(h \to \infty\), a soma entre parênteses converge para \(\phi/(1-\phi)\), então a previsão se aproxima assintoticamente de um nível constante. A tendência amortecida geralmente tem melhor desempenho em horizontes médios e longos do que o Holt-Winters sem amortecimento.

Comparação de previsões de Holt-Winters padrão e amortecida mostrando como o amortecimento evita a extrapolação excessiva da tendência

A previsão sem amortecimento (vermelho) extrapola a tendência linearmente sem limite. A previsão amortecida (verde) se aplaina em direção a um nível constante, o que geralmente é mais realista em horizontes além de 1 a 2 estações.

Escolhendo entre aditivo e multiplicativo

Critério Aditivo Multiplicativo
Amplitude sazonal Constante ao longo do tempo Cresce com o nível
Dados transformados em log Ambos funcionam Aditivo em log \(\equiv\) multiplicativo no original
Valores negativos possíveis Sim Não (exige \(y_t > 0\))
Notação ETS ETS(A,A,A) ETS(M,A,M) ou ETS(A,A,M)

Uma regra prática: plote a série e verifique se as oscilações sazonais se ampliam conforme a série cresce. Se sim, use o multiplicativo (ou transforme em log e use o aditivo).

⚠️ O modelo multiplicativo exige dados estritamente positivos

O Holt-Winters multiplicativo divide por \(s_{t-m}\) e \(\ell_{t-1} + b_{t-1}\), o que exige que todos os valores sejam estritamente positivos. Se a série contém zeros ou valores negativos (contagens com zeros, temperatura em Celsius), use o modelo aditivo ou transforme os dados.

Além disso, o modelo multiplicativo pode se tornar instável se o nível se aproximar de zero durante a recursão, produzindo índices sazonais explosivos.

Ajustando Holt-Winters em R

Tanto a variante aditiva quanto a multiplicativa estão a uma chamada de função de distância, com o R base otimizando \(\alpha\), \(\beta\) e \(\gamma\) automaticamente:

# Base R
fit_add  <- HoltWinters(y, seasonal = "additive")
fit_mult <- HoltWinters(y, seasonal = "multiplicative")

# forecast package (recommended: automatic parameter optimization)
library(forecast)
fit <- hw(y, h = 24, seasonal = "multiplicative", damped = TRUE)
forecast(fit, h = 24)

# ETS framework (automatic model selection)
fit_ets <- ets(y)          # selects best ETS model by AIC
summary(fit_ets)           # shows selected model, e.g. ETS(M,Ad,M)
forecast(fit_ets, h = 24)

💡 Deixe o AIC escolher entre aditivo e multiplicativo

Em vez de escolher manualmente, ajuste ambos os modelos e compare o AIC:

fit_a <- ets(y, model = "AAA")   # additive
fit_m <- ets(y, model = "MAM")   # multiplicative (mult. error + seas.)
AIC(fit_a); AIC(fit_m)

Ou use ets(y), que busca automaticamente. O modelo selecionado é mostrado como ETS(error, trend, season), por exemplo ETS(M,Ad,M) significa erro multiplicativo, tendência aditiva amortecida, sazonalidade multiplicativa.