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-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)/m\rfloor+1\),13 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-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*}\]

Example: International tourist visitor nights in Australia

In this example we employ the Holt-Winters method with both additive and multiplicative seasonality to forecast quarterly visitor nights in Australia spent by international tourists. Figure 7.7 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) +
  forecast::autolayer(fit1, PI=FALSE, series="HW additive forecasts") +
  forecast::autolayer(fit2, PI=FALSE, series="HW multiplicative forecasts") +
  xlab("Year") + ylab("International visitor night in Australia (millions)") +
  guides(colour=guide_legend(title="Forecast"))
Forecasting international visitor nights in Australia using the Holt-Winters method with both additive and multiplicative seasonality.

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

Table 7.4: Applying Holt-Winters’ method with additive seasonality for forecasting international visitor nights in Australia. Notice that the additive seasonal component sums to approximately zero. The smoothing parameters and initial estimates for the components have been estimated by minimizing RMSE (\(\alpha=0.306\), \(\beta^*=0.0003\), \(\gamma=0.426\) and RMSE\(=1.763\)).
\(t\) \(y_t\) \(\ell_t\) \(b_t\) \(s_t\) \(\hat{y}_t\)
2004 Q1 -3 -1.69
2004 Q2 -2 -9.31
2004 Q3 -1 9.70
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
2006 Q1 5 45.24 35.94 0.70 9.38 45.54
2006 Q2 6 29.35 37.21 0.70 -8.35 27.52
2006 Q3 7 36.34 37.95 0.70 -1.64 36.21
2006 Q4 8 41.78 39.09 0.70 2.30 40.34
2007 Q1 9 49.28 39.83 0.70 9.42 49.17
2007 Q2 10 31.28 40.25 0.70 -8.73 32.18
2007 Q3 11 37.85 40.50 0.70 -2.26 39.31
2007 Q4 12 38.84 39.77 0.70 0.31 43.51
2008 Q1 13 51.24 40.89 0.70 9.99 49.90
2008 Q2 14 31.84 41.28 0.70 -9.17 32.85
2008 Q3 15 41.32 42.47 0.70 -1.58 39.71
2008 Q4 16 42.80 42.96 0.70 0.02 43.48
2009 Q1 17 55.71 44.29 0.70 10.87 53.66
2009 Q2 18 33.41 44.25 0.70 -10.20 35.83
2009 Q3 19 42.32 44.63 0.70 -2.03 43.38
2009 Q4 20 45.16 45.27 0.70 -0.06 45.35
2010 Q1 21 59.58 46.81 0.70 12.04 56.84
2010 Q2 22 34.84 46.75 0.70 -11.25 37.31
2010 Q3 23 44.84 47.27 0.70 -2.28 45.43
2010 Q4 24 46.97 47.69 0.70 -0.46 47.91
2011 Q1 25 60.02 48.26 0.70 11.86 60.42
2011 Q2 26 38.37 49.17 0.70 -10.97 37.71
2011 Q3 27 46.98 49.68 0.70 -2.54 47.59
2011 Q4 28 50.73 50.63 0.70 -0.11 49.92
2012 Q1 29 61.65 50.86 0.70 11.20 63.19
2012 Q2 30 39.30 51.16 0.70 -11.52 40.59
2012 Q3 31 52.67 52.89 0.70 -1.11 49.33
2012 Q4 32 54.33 53.85 0.70 0.25 53.48
2013 Q1 33 66.83 54.88 0.70 11.66 65.76
2013 Q2 34 40.87 54.61 0.70 -12.88 44.06
2013 Q3 35 51.83 54.58 0.70 -2.12 54.19
2013 Q4 36 57.49 55.88 0.70 1.09 55.53
2014 Q1 37 65.25 55.67 0.70 10.39 68.25
2014 Q2 38 43.06 56.24 0.70 -13.06 43.49
2014 Q3 39 54.76 56.92 0.70 -2.14 54.82
2014 Q4 40 59.83 57.97 0.70 1.57 58.71
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|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
Table 7.5: Applying Holt-Winters’ method with multiplicative seasonality for forecasting international visitor nights in Australia. Notice that the multiplicative seasonal component sums to approximately \(m=4\). The smoothing parameters and initial estimates for the components have been estimated by minimizing RMSE (\(\alpha=0.441\), \(\beta^*=0.030\), \(\gamma=0.002\) and RMSE\(=1.576\)).
\(t\) \(y_t\) \(\ell_t\) \(b_t\) \(s_t\) \(\hat{y}_t\)
2004 Q1 -3 0.96
2004 Q2 -2 0.77
2004 Q3 -1 1.24
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
2006 Q1 5 45.24 36.22 0.71 1.24 44.92
2006 Q2 6 29.35 37.44 0.72 0.77 28.44
2006 Q3 7 36.34 38.00 0.72 0.96 36.71
2006 Q4 8 41.78 39.64 0.74 1.02 39.64
2007 Q1 9 49.28 40.04 0.73 1.24 50.25
2007 Q2 10 31.28 40.70 0.73 0.77 31.41
2007 Q3 11 37.85 40.52 0.70 0.96 39.84
2007 Q4 12 38.84 39.77 0.66 1.02 42.21
2008 Q1 13 51.24 40.76 0.67 1.24 50.30
2008 Q2 14 31.84 41.39 0.67 0.77 31.91
2008 Q3 15 41.32 42.46 0.68 0.96 40.44
2008 Q4 16 42.80 42.55 0.66 1.02 44.16
2009 Q1 17 55.71 43.90 0.68 1.24 53.77
2009 Q2 18 33.41 44.05 0.67 0.77 34.34
2009 Q3 19 42.32 44.40 0.66 0.96 43.00
2009 Q4 20 45.16 44.64 0.65 1.02 46.13
2010 Q1 21 59.58 46.43 0.68 1.24 56.35
2010 Q2 22 34.84 46.28 0.65 0.77 36.29
2010 Q3 23 44.84 46.80 0.65 0.96 45.14
2010 Q4 24 46.97 46.76 0.63 1.02 48.57
2011 Q1 25 60.02 47.76 0.64 1.24 58.98
2011 Q2 26 38.37 49.03 0.66 0.77 37.28
2011 Q3 27 46.98 49.32 0.65 0.96 47.78
2011 Q4 28 50.73 49.79 0.64 1.02 51.14
2012 Q1 29 61.65 50.04 0.63 1.24 62.77
2012 Q2 30 39.30 50.82 0.64 0.77 39.03
2012 Q3 31 52.67 52.92 0.68 0.96 49.49
2012 Q4 32 54.33 53.37 0.67 1.02 54.86
2013 Q1 33 66.83 53.90 0.67 1.24 67.26
2013 Q2 34 40.87 53.90 0.65 0.77 42.03
2013 Q3 35 51.83 54.26 0.64 0.96 52.47
2013 Q4 36 57.49 55.46 0.66 1.02 56.19
2014 Q1 37 65.25 54.49 0.61 1.24 69.84
2014 Q2 38 43.06 55.46 0.62 0.77 42.44
2014 Q3 39 54.76 56.46 0.63 0.96 53.93
2014 Q4 40 59.83 57.69 0.65 1.02 58.43
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|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.4 and 7.5 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.8. 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).

Estimated components for the Holt-Winters method with additive and multiplicative seasonal components.

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

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-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*}\]
hw(x, damped=TRUE, seasonal="multiplicative")

Example: Holt-Winters method with daily data

The Holt-Winters method can also be used for daily type of data, where the seasonal pattern is of length 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) +
  forecast::autolayer(fc, PI=FALSE,series="HW multi damped")+
  guides(colour=guide_legend(title="Daily forecasts"))

References

Holt, Charles E. 1957. “Forecasting Seasonals and Trends by Exponentially Weighted Averages.” O.N.R. Memorandum 52. Carnegie Institute of Technology, Pittsburgh USA.

Winters, P R. 1960. “Forecasting Sales by Exponentially Weighted Moving Averages.” Management Science 6: 324–42.


  1. The notation \(\lfloor u \rfloor\) means the largest integer not greater than \(u\).