7.5 Holt-Winters seasonal method

Holt (1957) and Winters (1960) extended Holt’s method to capture seasonality. The Holt-Winters seasonal method comprises the forecast equation and three smoothing equations — one for the level $\ell_t$, one for trend $b_t$, and one for the seasonal component denoted by $s_t$, with smoothing parameters $\alpha$, $\beta^*$ and $\gamma$. We use $m$ to denote the period of the seasonality, i.e., the number of seasons in a year. For example, for quarterly data $m=4$, and for monthly data $m=12$.

There are two variations to this method that differ in the nature of the seasonal component. The additive method is preferred when the seasonal variations are roughly constant through the series, while the multiplicative method is preferred when the seasonal variations are changing proportional to the level of the series. With the additive method, the seasonal component is expressed in absolute terms in the scale of the observed series, and in the level equation the series is seasonally adjusted by subtracting the seasonal component. Within each year the seasonal component will add up to approximately zero. With the multiplicative method, the seasonal component is expressed in relative terms (percentages) and the series is seasonally adjusted by dividing through by the seasonal component. Within each year, the seasonal component will sum up to approximately $m$.

Holt-Winters additive method

The component form for the additive method is:

\begin{align*} \pred{y}{t+h}{t} &= \ell_{t} + hb_{t} + s_{t-m+h_m^+} \\ \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}, \end{align*}

where $h_m^+=\lfloor(h-1)\mod~m\rfloor+1$, which ensures that the estimates of the seasonal indices used for forecasting come from the final year of the sample. (The notation $\lfloor u \rfloor$ means the largest integer not greater than $u$.) The level equation shows a weighted average between the seasonally adjusted observation $(y_{t} - s_{t-m})$ and the non-seasonal forecast $(\ell_{t-1}+b_{t-1})$ for time $t$. The trend equation is identical to Holt’s linear method. The seasonal equation shows a weighted average between the current seasonal index, $(y_{t}-\ell_{t-1}-b_{t-1})$, and the seasonal index of the same season last year (i.e., $m$ time periods ago).

The equation for the seasonal component is often expressed as

$$s_{t} = \gamma^* (y_{t}-\ell_{t})+ (1-\gamma^*)s_{t-m}. $$

If we substitute $\ell_t$ from the smoothing equation for the level of the component form above, we get

$$s_{t} = \gamma^*(1-\alpha) (y_{t}-\ell_{t-1}-b_{t-1})+ [1-\gamma^*(1-\alpha)]s_{t-m} $$

which is identical to the smoothing equation for the seasonal component we specify here with $\gamma=\gamma^*(1-\alpha)$. The usual parameter restriction is $0\le\gamma^*\le1$, which translates to $0\le\gamma\le 1-\alpha$.

The error correction form of the smoothing equations is:

\begin{align*} \ell_{t} &= \ell_{t-1} + b_{t-1}+\alpha e_{t}\\ b_{t} &= b_{t-1} + \alpha \beta^*e_{t}\\ s_{t} &= s_{t-m}+\gamma e_t. \end{align*}

where $e_t=y_{t} - (\ell_{t-1} + b_{t-1}+s_{t-m})=y_{t} - \pred{y}{t}{t-1}$ are the one-step training forecast errors.

Holt-Winters multiplicative method

The component form for the multiplicative method is:

\begin{align*} \pred{y}{t+h}{t} &= (\ell_{t} + hb_{t})s_{t-m+h_{m}^{+}}. \\ \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} \end{align*}

and the error correction representation is:

\begin{align*} \ell_{t} &= \ell_{t-1} + b_{t-1}+\alpha\frac{e_{t}}{s_{t-m}}\\ b_{t} &= b_{t-1}+\alpha\beta^*\frac{e_{t}}{s_{t-m}}\\ s_{t} &= s_{t}+\gamma \frac{e_{t}}{(\ell_{t-1} + b_{t-1})} \end{align*}

where $e_t=y_t-(\ell_{t-1}+b_{t-1})s_{t-m}$.

Example 7.4 International tourist visitor nights in Australia

Figure 7.6: Forecasting international visitor nights in Australia using Holt-Winters method with both additive and multiplicative seasonality.

R output
aust <- window(austourists,start=2005)
fit1 <- hw(aust,seasonal="additive")
fit2 <- hw(aust,seasonal="multiplicative")

plot(fit2,ylab="International visitor night in Australia (millions)",
     plot.conf=FALSE, type="o", fcol="white", xlab="Year")
lines(fitted(fit1), col="red", lty=2)
lines(fitted(fit2), col="green", lty=2)
lines(fit1$mean, type="o", col="red")
lines(fit2$mean, type="o", col="green")
legend("topleft",lty=1, pch=1, col=1:3,
  c("data","Holt Winters' Additive","Holt Winters' Multiplicative"))

In this example we employ the Holt-Winters method with both additive and multiplicative seasonality to forecast tourists visitor nights in Australia by international arrivals. Figure 7.6 shows the data alongside the within-sample one-step-ahead forecasts over the sample period 2005Q1–2010Q4 and the forecasts for the period 2011Q1–2012Q4. The data show an obvious seasonal pattern with peaks observed in the March quarter of each year as this corresponds to the Australian summer.

The application of the method with additive and multiplicative seasonality are presented in Tables 7.5 and 7.6 respectively. The results show that the method with the multiplicative seasonality fits the data best. This was expected as the time plot shows the seasonal variation in the data increases as the level of the series increases. This is also reflected in the two sets of forecasts; the forecasts generated by the method with the multiplicative seasonality portray larger and increasing seasonal variation as the level of the forecasts increases compared to the forecasts generated by the method with additive seasonality.

Qtr-Year $t$ $y_t$ $\ell_t$ $b_t$ $s_t$ $\hat{y}_t$
Mar-04 -3 - - - 10.7 -
Jun-04 -2 - - - -9.5 -
Sep-04 -1 - - - -2.6 -
Dec-04 0 - 33.8 0.65 1.4 -
Mar-05 1 41.7 34.4 0.57 10.7 45.1
Jun-05 2 24.0 34.9 0.53 -9.5 25.5
Sep-05 3 32.3 35.4 0.52 -2.6 32.9
Dec-05 4 37.3 35.9 0.52 1.4 37.3
Mar-06 5 46.2 36.4 0.50 10.7 47.1
Jun-06 6 29.3 37.0 0.54 -9.5 27.5
Sep-06 7 36.5 37.6 0.58 -2.6 35.0
Dec-06 8 43.0 38.2 0.66 1.4 39.5
Mar-07 9 48.9 38.9 0.64 10.7 49.6
Jun-07 10 31.2 39.6 0.67 -9.5 30.0
Sep-07 11 37.7 40.2 0.67 -2.6 37.7
Dec-07 12 40.4 40.9 0.63 1.4 42.3
Mar-08 13 51.2 41.5 0.61 10.7 52.1
Jun-08 14 31.9 42.0 0.59 -9.5 32.6
Sep-08 15 41.0 42.7 0.61 -2.6 40.1
Dec-08 16 43.8 43.2 0.59 1.4 44.7
Mar-09 17 55.6 43.9 0.62 10.7 54.5
Jun-09 18 33.9 44.4 0.59 -9.5 35.0
Sep-09 19 42.1 45.0 0.58 -2.6 42.5
Dec-09 20 45.6 45.6 0.55 1.4 47.0
Mar-10 21 59.8 46.2 0.62 10.7 56.8
Jun-10 22 35.2 46.8 0.57 -9.5 37.3
Sep-10 23 44.3 47.3 0.56 -2.6 44.8
Dec-10 24 47.9 47.8 0.53 1.4 49.3
$h$ $y_{T+h|T}$
Mar-11 1 59.0
Jun-11 2 39.4
Sep-11 3 46.9
Dec-11 4 51.3
Mar-12 5 61.1
Jun-12 6 41.5
Sep-12 7 49.0
Dec-12 8 53.4
Qtr-Year $t$ $y_t$ $\ell_t$ $b_t$ $s_t$ $\hat{y}_t$
Mar-04 -3 - - - 1.3 -
Jun-04 -2 - - - 0.8 -
Sep-04 -1 - - - 0.9 -
Dec-04 0 - 32.2 0.93 1.0 -
Mar-05 1 41.7 33.1 0.93 1.3 41.8
Jun-05 2 24.0 32.9 0.78 0.8 25.9
Sep-05 3 32.3 33.9 0.81 0.9 31.9
Dec-05 4 37.3 35.4 0.91 1.0 35.7
Mar-06 5 46.2 36.4 0.92 1.3 45.9
Jun-06 6 29.3 37.9 1.00 0.8 28.4
Sep-06 7 36.5 38.7 0.98 0.9 36.8
Dec-06 8 43.0 40.6 1.11 1.0 40.8
Mar-07 9 48.9 40.4 0.92 1.3 52.7
Jun-07 10 31.2 41.2 0.90 0.8 31.5
Sep-07 11 37.7 41.1 0.76 0.9 39.8
Dec-07 12 40.4 40.8 0.60 1.0 43.0
Mar-08 13 51.2 41.0 0.54 1.3 52.3
Jun-08 14 31.9 41.7 0.57 0.8 31.6
Sep-08 15 41.0 42.7 0.63 0.9 40.0
Dec-08 16 43.8 43.0 0.58 1.0 44.6
Mar-09 17 55.6 43.7 0.61 1.3 55.1
Jun-09 18 33.9 44.4 0.61 0.8 33.8
Sep-09 19 42.1 44.8 0.58 0.9 42.6
Dec-09 20 45.6 44.9 0.52 1.0 46.6
Mar-10 21 59.8 46.2 0.63 1.3 57.5
Jun-10 22 35.2 46.6 0.59 0.8 35.7
Sep-10 23 44.3 47.0 0.57 0.9 44.6
Dec-10 24 47.9 47.2 0.51 1.0 48.9
$h$ $y_{T+h|T}$
Mar-11 1 60.3
Jun-11 2 36.7
Sep-11 3 46.1
Dec-11 4 50.6
Mar-12 5 62.8
Jun-12 6 38.2
Sep-12 7 48.2
Dec-12 8 52.7

Figure 7.7: Estimated components for Holt-Winters method with additive and multiplicative seasonal components.

R output
states <- cbind(fit1\$model\$states[,1:3],fit2\$model\$states[,1:3])
colnames(states) <- c("level","slope","seasonal","level","slope","seasonal")
plot(states, xlab="Year")
fit1\$model\$state[,1:3]
fitted(fit1)
fit1\$mean

Holt-Winters damped method

A method that is often the single most accurate forecasting method for seasonal data is the Holt-Winters method with a damped trend and multiplicative seasonality:

\begin{align*} \pred{y}{t+h}{t} &= [\ell_{t} + (\phi+\phi^2 + \dots + \phi^{h})b_{t}]s_{t-m+h_m^+}. \\ \ell_{t} &= \alpha(y_{t} / s_{t-m}) + (1 - \alpha)(\ell_{t-1} + \phi b_{t-1})\\ b_{t} &= \beta^*(\ell_{t} - \ell_{t-1}) + (1 - \beta^*)\phi b_{t-1} \\ s_{t} &= \gamma \frac{y_{t}}{(\ell_{t-1} + \phi b_{t-1})} + (1 - \gamma)s_{t-m} \end{align*}