## 7.3 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 the trend \(b_t\), and one for the seasonal component \(s_t\), with corresponding smoothing parameters \(\alpha\), \(\beta^*\) and \(\gamma\). We use \(m\) to denote the frequency 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*} \hat{y}_{t+h|t} &= \ell_{t} + hb_{t} + s_{t+h-m(k+1)} \\ \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 \(k\) is the integer part of \((h-1)/m\), which ensures that the estimates of the seasonal indices used for forecasting come from the final year of the sample. 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\).

### Holt-Winters’ multiplicative method

The component form for the multiplicative method is: \[\begin{align*} \hat{y}_{t+h|t} &= (\ell_{t} + hb_{t})s_{t+h-m(k+1)} \\ \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*}\]

### Example: International tourist visitor nights in Australia

We apply Holt-Winters’ method with both additive and multiplicative seasonality to forecast quarterly visitor nights in Australia spent by international tourists. Figure 7.6 shows the data from 2005, and the forecasts for 2016–2017. The data show an obvious seasonal pattern, with peaks observed in the March quarter of each year, corresponding to the Australian summer.

```
aust <- window(austourists,start=2005)
fit1 <- hw(aust,seasonal="additive")
fit2 <- hw(aust,seasonal="multiplicative")
autoplot(aust) +
autolayer(fit1, series="HW additive forecasts", PI=FALSE) +
autolayer(fit2, series="HW multiplicative forecasts",
PI=FALSE) +
xlab("Year") +
ylab("Visitor nights (millions)") +
ggtitle("International visitors nights in Australia") +
guides(colour=guide_legend(title="Forecast"))
```

\(t\) | \(y_t\) | \(\ell_t\) | \(b_t\) | \(s_t\) | \(\hat{y}_t\) | |
---|---|---|---|---|---|---|

2004 Q1 | -3 | 9.70 | ||||

2004 Q2 | -2 | -9.31 | ||||

2004 Q3 | -1 | -1.69 | ||||

2004 Q4 | 0 | 32.26 | 0.70 | 1.31 | ||

2005 Q1 | 1 | 42.21 | 32.82 | 0.70 | 9.50 | 42.66 |

2005 Q2 | 2 | 24.65 | 33.66 | 0.70 | -9.13 | 24.21 |

2005 Q3 | 3 | 32.67 | 34.36 | 0.70 | -1.69 | 32.67 |

2005 Q4 | 4 | 37.26 | 35.33 | 0.70 | 1.69 | 36.37 |

⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | |

2015 Q1 | 41 | 73.26 | 59.96 | 0.70 | 12.18 | 69.05 |

2015 Q2 | 42 | 47.70 | 60.69 | 0.70 | -13.02 | 47.59 |

2015 Q3 | 43 | 61.10 | 61.96 | 0.70 | -1.35 | 59.24 |

2015 Q4 | 44 | 66.06 | 63.22 | 0.70 | 2.35 | 64.22 |

\(h\) | \(\hat{y}_{T+h\vert T}\) | |||||

2016 Q1 | 1 | 76.10 | ||||

2016 Q2 | 2 | 51.60 | ||||

2016 Q3 | 3 | 63.97 | ||||

2016 Q4 | 4 | 68.37 | ||||

2017 Q1 | 5 | 78.90 | ||||

2017 Q2 | 6 | 54.41 | ||||

2017 Q3 | 7 | 66.77 | ||||

2017 Q4 | 8 | 71.18 |

\(t\) | \(y_t\) | \(\ell_t\) | \(b_t\) | \(s_t\) | \(\hat{y}_t\) | |
---|---|---|---|---|---|---|

2004 Q1 | -3 | 1.24 | ||||

2004 Q2 | -2 | 0.77 | ||||

2004 Q3 | -1 | 0.96 | ||||

2004 Q4 | 0 | 32.49 | 0.70 | 1.02 | ||

2005 Q1 | 1 | 42.21 | 33.51 | 0.71 | 1.24 | 41.29 |

2005 Q2 | 2 | 24.65 | 33.24 | 0.68 | 0.77 | 26.36 |

2005 Q3 | 3 | 32.67 | 33.94 | 0.68 | 0.96 | 32.62 |

2005 Q4 | 4 | 37.26 | 35.40 | 0.70 | 1.02 | 35.44 |

⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | |

2015 Q1 | 41 | 73.26 | 58.57 | 0.66 | 1.24 | 72.59 |

2015 Q2 | 42 | 47.70 | 60.42 | 0.69 | 0.77 | 45.62 |

2015 Q3 | 43 | 61.10 | 62.17 | 0.72 | 0.96 | 58.77 |

2015 Q4 | 44 | 66.06 | 63.62 | 0.75 | 1.02 | 64.38 |

\(h\) | \(\hat{y}_{T+h\vert T}\) | |||||

2016 Q1 | 1 | 80.09 | ||||

2016 Q2 | 2 | 50.15 | ||||

2016 Q3 | 3 | 63.34 | ||||

2016 Q4 | 4 | 68.18 | ||||

2017 Q1 | 5 | 83.80 | ||||

2017 Q2 | 6 | 52.45 | ||||

2017 Q3 | 7 | 66.21 | ||||

2017 Q4 | 8 | 71.23 |

The applications of both methods (with additive and multiplicative seasonality) are presented in Tables 7.3 and 7.4 respectively. Because both methods have exactly the same number of parameters to estimate, we can compare the training RMSE from both models. In this case, the method with multiplicative seasonality fits the data best. This was to be expected, as the time plot shows that 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 display larger and increasing seasonal variation as the level of the forecasts increases compared to the forecasts generated by the method with additive seasonality.

The estimated states for both models are plotted in Figure 7.7. The small value of \(\gamma\) for the multiplicative model means that the seasonal component hardly changes over time. The small value of \(\beta^{*}\) for the additive model means the slope component hardly changes over time (check the vertical scale). The increasing size of the seasonal component for the additive model suggests that the model is less appropriate than the multiplicative model.

### Holt-Winters’ damped method

Damping is possible with both additive and multiplicative Holt-Winters’ methods. A method that often provides accurate and robust forecasts for seasonal data is the Holt-Winters method with a damped trend and multiplicative seasonality: \[\begin{align*} \hat{y}_{t+h|t} &= \left[\ell_{t} + (\phi+\phi^2 + \dots + \phi^{h})b_{t}\right]s_{t+h-m(k+1)}. \\ \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*}\]

### Example: Holt-Winters method with daily data

The Holt-Winters method can also be used for daily type of data, where the seasonal period is \(m=7\), and the appropriate unit of time for \(h\) is in days. Here, we generate daily forecasts for the last five weeks for the `hyndsight`

data, which contains the daily pageviews on the Hyndsight blog for one year starting April 30, 2014.

```
fc <- hw(subset(hyndsight,end=length(hyndsight)-35),
damped = TRUE, seasonal="multiplicative", h=35)
autoplot(hyndsight) +
autolayer(fc, series="HW multi damped", PI=FALSE)+
guides(colour=guide_legend(title="Daily forecasts"))
```

Clearly the model has identified the weekly seasonal pattern and the increasing trend at the end of the data, and the forecasts are a close match to the test data.