7.3 Holt-Winters季节性方法

Holt (1957)Winters (1960) 将Holt方法进行拓展用来捕获季节因素。Holt-Winters季节性方法包括预测方程和三个平滑方程—一个用于水平 \(\ell_t\),一个用于趋势 \(b_t\),另一个用于季节性分量 \(s_t\),相应的平滑参数分别为 \(\alpha\)\(\beta^*\)\(\gamma\)。我们用 \(m\) 来表示季节频率,即一年中包含的季节数。例如,季度数据的 \(m=4\),月度数据的 \(m=12\)

这种方法有两种不同的季节性组成部分。当季节变化在该时间序列中大致保持不变时,通常选择加法模型;而当季节变化与时间序列的水平成比例变化时,通常选择乘法模型。在加法模型中,季节性分量在观测序列的尺度上以绝对值表示,在水平方程中,时间序列通过减去季节分量进行季节性调整,并且每年的季节性分量加起来大约为零。在乘法模型中,季节性分量用相对数(百分比)表示,时间序列通过除以季节性分量来进行季节性调整,并且每年的季节性分量加起来约为 \(m\)

Holt-Winters加法模型

加法模型的分量形式是: \[\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*}\] 其中 \(k\)\((h-1)/m\) 的整数部分,这保证了用于预测的季节性指数的估计值来自样本的最后一年。水平方程表示在 \(t\) 时刻,季节性调整的观察值 \((y_{t} - s_{t-m})\) 与非季节性预测值 \((\ell_{t-1}+b_{t-1})\) 之间的加权平均值。趋势方程与Holt线性方法相同。季节性方程表示当前季节性指数,\((y_{t}-\ell_{t-1}-b_{t-1})\),和去年同一季节(即 \(m\) 个时间段前)的季节性指数之间的加权平均值。

季节性分量的方程通常表示为 \[ s_{t} = \gamma^* (y_{t}-\ell_{t})+ (1-\gamma^*)s_{t-m}。 \] 如果我们用平滑方程中的 \(\ell_t\) 代替上述分量形式中的水平,我们可以得到 \[ s_{t} = \gamma^*(1-\alpha) (y_{t}-\ell_{t-1}-b_{t-1})+ [1-\gamma^*(1-\alpha)]s_{t-m}, \] 这与我们规定的季节性分量的平滑方程相同,其中 \(\gamma=\gamma^*(1-\alpha)\)。通常的参数限制是 \(0\le\gamma^*\le1\),可以将其转换为 \(0\le\gamma\le 1-\alpha\)

Holt-Winters的乘法模型

乘法模型的分量形式是: \[\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*}\]

示例:澳大利亚国际游客过夜的天数

在这个例子中,我们采用了兼具加性和乘性季节性的Holt-Winters方法来预测澳大利亚每个季度国际游客过夜的天数。图 7.6 显示了2005年的数据以及2016-2017年的预测值。该数据显示出明显的季节性模式,在每年第一季度出现高峰,相当于澳大利亚的夏季。

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("年份") + ylab("澳大利亚国际游客过夜的天数(百万)") +
  guides(colour=guide_legend(title="预测值"))+
  theme(text = element_text(family = "STHeiti"))+
  theme(plot.title = element_text(hjust = 0.5))
应用兼具加性和乘性季节性的Holt-Winters方法来预测澳大利亚每个季度国际游客过夜的天数。

图 7.6: 应用兼具加性和乘性季节性的Holt-Winters方法来预测澳大利亚每个季度国际游客过夜的天数。

表 7.4: 将加性季节性的Holt-Winters方法应用于预测澳大利亚每个季度国际游客过夜的天数。注意到加性季节分量总和大约为零,分量的平滑参数和初始估计值通过最小化RMSE (\(\alpha=0.306\), \(\beta^*=0.0003\), \(\gamma=0.426\) 且 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
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
表 7.5: 应用乘性季节性的Holt-Winters方法来预测澳大利亚每个季度国际游客过夜的天数。注意乘性季节性分量的总和大约为 \(m=4\),分量的平滑参数和初始估计值通过最小化RMSE (\(\alpha=0.441\), \(\beta^*=0.030\), \(\gamma=0.002\) 且 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
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
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

这两种方法的应用(具有加性和乘性季节性)分别在表 7.4 和 表 7.5 中给出。由于两种方法需要估计的参数个数完全相同,因此我们可以比较两种模型的训练RMSE。在这种情况下,具有乘性季节性的方法最适合数据。这也是在预料之中,因为时序图显示,数据的季节性变化随着时间序列的水平增加而增大。这也反映在两种预测结果中,随着预测水平的提高,与加性季节性方法产生的预测相比,乘性季节性方法产生的预测值更大,季节性变化也更大。

这两种模型的估计状态都绘制在图 7.7 中。在乘法模型中,较小的 \(\gamma\) 值意味着季节性分量几乎不随时间变化。在加法模型中,较小的 \(\beta^{*}\) 意味着斜率分量几乎不会随时间变化(可以对应查看纵坐标)。加法模型的季节性分量越大,表明越不适合使用乘法模型。

具有加性和乘性季节性分量的Holt-Winters方法的分量估计。

图 7.7: 具有加性和乘性季节性分量的Holt-Winters方法的分量估计。

Holt-Winters的衰减法

加性和乘性Holt-Winters方法都可以进一步使用衰减法 。带有衰减趋势和乘性季节性的Holt-Winters方法通常可以为季节数据提供准确的和稳健的预测值:

\[\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")

示例:Holt-Winters方法用于日数据

Holt-Winters方法也可以用于日数据 ,其中季节周期为 \(m=7\)\(h\) 的合适的时间单位为天。在这里,我们为“hyndsight”数据生成过去五周的每日预测值,数据中包含Hyndsight博客自2014年4月30日起的一年内的每日浏览量。

fc <- hw(subset(hyndsight,end=length(hyndsight)-35),
         damped = TRUE, seasonal="multiplicative", h=35)

autoplot(hyndsight) +
  autolayer(fc$mean, series="HW multi damped", PI=FALSE)+
  guides(colour=guide_legend(title="每日预测")) +
  xlab('天') +
  ylab('浏览量')
#> Warning: Ignoring unknown parameters: PI
Hyndsight博客每日浏览量预测值

图 7.8: Hyndsight博客每日浏览量预测值

显然,模型已经确定了每周的季节模式和数据最后的增长趋势,并且预测值与测试数据非常接近。

参考文献

Holt, C. E. (1957). Forecasting seasonals and trends by exponentially weighted averages (O.N.R. Memorandum No. 52). Carnegie Institute of Technology, Pittsburgh USA. https://doi.org/10.1016/j.ijforecast.2003.09.015

Winters, P. R. (1960). Forecasting sales by exponentially weighted moving averages. Management Science, 6, 324–342. https://doi.org/10.1287/mnsc.6.3.324