6.8 分解法预测

分解时间序列不仅本质上在学习时间序列中和在探索历史随之间变化中十分有用,它也可以应用在预测中。

假设一个加法分解,分解后的时间序列可以写为: \[ y_t = \hat{S}_t + \hat{A}_t, \] 其中\(\hat{A}_t = \hat{T}_t+\hat{R}_{t}\)是经季节调整后的部分。或者,如果使用乘法分解,分解后的时间序列可以写为: \[ y_t = \hat{S}_t\hat{A}_t, \] 其中 \(\hat{A}_t = \hat{T}_t\hat{R}_{t}\)

对于预测一个分解的时间序列,我们需要分别预测季节项\(\hat{S}_t\),和经季节调整后的\(\hat{A}_t\)。通常情况下我们假设季节项不变,或者变化得很慢,因此它可以通过简单地使用最后一年的季节项的估计来预测。换而言之,计算季节项使用了朴素季节法。

可以使用任意非季节性预测方法来预测季节调整后的分量。例如,可以使用带漂移项的随机游走法,也可以使用三次指数平滑法(Holt-Winters法,将在下一章中详细讲述),或者还可以用非季节性的ARIMA模型(将在章节 8 中详细讲述)。

例子: 电气设备制造

fit <- stl(elecequip, t.window=13, s.window="periodic", robust=TRUE)

fit %>% seasadj() %>% naive() %>% autoplot() + ylab("新订单指数") +
  ggtitle("季节调整数据的朴素预测")+
  theme(text = element_text(family = "STHeiti"))+
  theme(plot.title = element_text(hjust = 0.5))
由STL分解得到的经季节调整的电气设备订单数据的朴素预测。

图 6.14: 由STL分解得到的经季节调整的电气设备订单数据的朴素预测。

6.14 展示了对季节调整后的电气设备订单数据的朴素预测。通过将它加上朴素预测的季节项来使其季节化。

这可以通过对stl对象使用forecast()函数来简便地完成。你需要确定这个方法是用于季节调整后的数据,而这个函数可以帮你完成再季节化。如图 6.15 显示了对原始数据预测的结果。

fit %>% forecast(method="naive") %>% autoplot() + ylab("新订单指数")+
  theme(text = element_text(family = "STHeiti"))+
  theme(plot.title = element_text(hjust = 0.5))
电气设备订单数据的预测:基于STL分解得到的经季节调整数据的朴素预测和季节项的季节朴素预测。

图 6.15: 电气设备订单数据的预测:基于STL分解得到的经季节调整数据的朴素预测和季节项的季节朴素预测。

图中所示的的预测区间与点预测结构相同。也就是说,季节调整数据的预测区间的上限和下限通过加上季节项预测来季节化。在此计算中,季节项预测的不确定性被忽略了。这个选择的根据是季节项的不确定性远小于季节调整后数据的不确定性,因此忽略它是基本合理的。

一个简便方法是使用stlf()函数来预测。如下的代码可以用 STL 来分解时间序列,预测季节调整后的数据,并输出再季节化后的预测结果。

fcast <- stlf(elecequip, method='naive')

stlf()函数用mstl()执行分解,因此s.windowt.window有默认值。

正如帮助文档中所述,除了 naïve 方法,其他几个可能的预测方法也可以在stlf()中调用。如果没有指定的method,它将使用 ETS 法(将在下一章节中探讨)分析季节调整时间序列。它通常能较好地预测季节性时间序列,并且一些公司常常使用这个方法来对业务进行预测。