原文:https://otexts.com/fppcn/holt-winters.html
Holt (1957) 和 Winters (1960) 将Holt方法进行拓展用来捕获季节因素。Holt-Winters季节性方法包括预测方程和三个平滑方程—一个用于水平 \(\ell_t\),一个用于趋势 \(b_t\),另一个用于季节性分量 \(s_t\),相应的平滑参数分别为 \(\alpha\),\(\beta^*\) 和 \(\gamma\)。我们用 \(m\) 来表示季节频率,即一年中包含的季节数。例如,季度数据的 \(m=4\),月度数据的 \(m=12\)。
这种方法有两种不同的季节性组成部分。当季节变化在该时间序列中大致保持不变时,通常选择加法模型;而当季节变化与时间序列的水平成比例变化时,通常选择乘法模型。在加法模型中,季节性分量在观测序列的尺度上以绝对值表示,在水平方程中,时间序列通过减去季节分量进行季节性调整,并且每年的季节性分量加起来大约为零。在乘法模型中,季节性分量用相对数(百分比)表示,时间序列通过除以季节性分量来进行季节性调整,并且每年的季节性分量加起来约为 \(m\)。
加法模型的分量形式是: \[\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\)。
乘法模型的分量形式是: \[\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))
图 7.6: 应用兼具加性和乘性季节性的Holt-Winters方法来预测澳大利亚每个季度国际游客过夜的天数。
\(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 |
\(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^{*}\) 意味着斜率分量几乎不会随时间变化(可以对应查看纵坐标)。加法模型的季节性分量越大,表明越不适合使用乘法模型。
图 7.7: 具有加性和乘性季节性分量的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方法也可以用于日数据 ,其中季节周期为 \(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
图 7.8: Hyndsight博客每日浏览量预测值
显然,模型已经确定了每周的季节模式和数据最后的增长趋势,并且预测值与测试数据非常接近。