我正在尝试学习 Holt-Winters 指数平滑。在该算法中,预测时涉及三个指标(level
、trend
、 )。seasonality
我的问题:
- 这三个指数的解释是什么?
- 如何区分这些指数的不同值?例如,100 级和 200 级之间有什么区别,或者趋势 2 和趋势 5 有什么区别?
- 我们如何启动这些价值观?
我正在尝试学习 Holt-Winters 指数平滑。在该算法中,预测时涉及三个指标(level
、trend
、 )。seasonality
我的问题:
如您所知,您将首先初始化所有三个指数,然后在历史期间更新它们,然后将它们外推到未来以从它们的外推值中得出预测。
在任何给定时间,水平指数都会给出此时数据生成过程 (DGP) 的局部平均值或“水平”的估计值。趋势指数给出了此时趋势的估计,即连续时间点之间的变化。最后,季节性指数估计由于季节性而与局部平均值的偏差。
因此,在预测中,水平将按“原样”推断,因为我们预计时间序列的未来变化将仅由其他两个指数驱动。趋势值也将“按原样”外推,或者如果您使用衰减趋势,趋势值将缓慢减小,这将导致预测时间序列的增长(或衰减)渐进变平。趋势抑制通常会提高长期的准确性。最后,通过准确回顾一个周期来推断季节性 - 对于明年 3 月,您将使用去年 3 月的季节性指数、明年 4 月的季节性指数、去年 4 月的季节性指数,等等。
如果在特定时间点,局部趋势为 100,这意味着模型估计 DGP 的局部平均值是 200 的一半。如果此时的趋势是 2,这意味着两个时间点之间的估计增长为 2(趋势指数为 5 表示估计增长为 5)。
有多种方法可以初始化这些值。您可以通过总体平均值、前几次观察的平均值或仅通过第一次观察来初始化平均值。您可以通过最后一个观察值和第一个观察值之间的差异来初始化趋势,如果您有观察值,则除以(因为观察值给您增量),或者除以回归趋势线。您可以通过第一年的观察结果与水平+趋势拟合之间的偏差来初始化季节性,或者取历史中所有年份的这些偏差的平均值。
如果您使用状态空间方法,您可以通过最大似然来初始化所有这些。然而,这通常在计算上非常繁重(每月数据需要 12 个季节指数 - 具有水平和趋势,您必须估计 14 个参数),预测准确性几乎没有提高,因此您的软件通常会像以前一样使用启发式段落。
绘制指数随时间的发展可能是最有用的信息。这是一个在 R 中使用的示例,forecast::ets
它实现了状态空间方法,我们强制使用具有加性趋势、季节性和误差的模型,所以这本质上是 Holt-Winters:
> library(Mcomp)
> library(forecast)
>
> model <- ets(M3[[1998]]$x,model="AAA")
> model
ETS(A,A,A)
Call:
ets(y = M3[[1998]]$x, model = "AAA")
Smoothing parameters:
alpha = 0.9947
beta = 4e-04
gamma = 1e-04
Initial states:
l = 3552.7263
b = 7.9458
s=154.906 -7.4477 98.1232 -14.7209 -79.7366 -117.3236
-154.2015 -9.4785 181.9343 216.3269 -152.2493 -116.1322
sigma: 139.8064
AIC AICc BIC
1886.317 1891.308 1931.697
> plot(model)
最后,我非常推荐这本免费的在线预测教科书,当然尤其是关于指数平滑的章节。forecast
其中一位作者是上面使用的 RI 包的作者和维护者。