7.7 使用ETS模型预测

通过对 \(t=T+1,\dots,T+h\) 进行迭代,并设定 \(t>T\) 时所有的 \(\varepsilon_t=0\),可以从模型中获得点预测。

例如,对于模型ETS(M,A,N), \(y_{T+1} = (\ell_T + b_T )(1+ \varepsilon_{T+1})。\) 因此 \(\hat{y}_{T+1|T}=\ell_{T}+b_{T}。\) 类似地, \[\begin{align*} y_{T+2} &= (\ell_{T+1} + b_{T+1})(1 + \varepsilon_{T+1})\\ &= \left[ (\ell_T + b_T) (1+ \alpha\varepsilon_{T+1}) + b_T + \beta (\ell_T + b_T)\varepsilon_{T+1} \right] ( 1 + \varepsilon_{T+1}). \end{align*}\] 因此, \(\hat{y}_{T+2|T}= \ell_{T}+2b_{T},\) 等等。这些预测与Holt线性方法以及ETS(A,A,N)模型的预测结果相同。因此,从该方法得到的点预测与以该方法为基础的两个模型的点预测是相同的(假定使用相同的参数值)。

ETS点预测等于预测分布的中位数。对于只有加性成分的模型,预测分布是服从正态分布的,因此中位数和均值相等。对于具有乘性误差或乘性季节性的ETS模型,点预测将不等于预测分布的均值。

为了从ETS模型中得到预测,我们使用 forecast() 函数。

fit %>% forecast(h=8) %>%
  autoplot() +
  xlab("时间") +
  ylab("澳大利亚国际游客过夜天数(百万)")+
  ggtitle('基于ETS(M,A,M)模型的预测') +
  theme(text = element_text(family = "STHeiti"))+
  theme(plot.title = element_text(hjust = 0.5))
使用ETS(M,A,M)模型预测澳大利亚国际游客过夜的天数。

图 7.11: 使用ETS(M,A,M)模型预测澳大利亚国际游客过夜的天数。

预测区间

这些模型的一个很大的优点是也可以生成预测区间 — 这是使用这些方法无法实现的。加性和乘性方法的预测区间将有所不同。

对于大多数ETS模型,可将预测区间写作 \[ \hat{y}_{T+h|T} \pm c \sigma_h \] 其中 \(c\) 取决于覆盖率, \(\sigma_h^2\) 是预测方差。 \(c\) 的取值在表 3.1 中给出。对于ETS模型, \(\sigma_h^2\) 的公式可能很复杂;具体细节在第6章的 Hyndman et al. (2008) 中给出。在下表中,我们给出了最简单的加性ETS模型的公式。

表 7.9: 每个加性状态空间模型的预测方差表达式,其中 \(\sigma^2\) 是残差方差, \(m\) 是季节周期,\(k\)\((h-1) /m\) 的整数部分(即在时刻 \(T+h\) 之前预测期间的整数年数).
Model Forecast variance: \(\sigma_h^2\)
(A,N,N) \(\sigma_h^2 = \sigma^2\big[1 + \alpha^2(h-1)\big]\)
(A,A,N) \(\sigma_h^2 = \sigma^2\Big[1 + (h-1)\big\{\alpha^2 + \alpha\beta h + \frac16\beta^2h(2h-1)\big\}\Big]\)
(A,A\(_d\),N) \(\sigma_h^2 = \sigma^2\biggl[1 + \alpha^2(h-1) + \frac{\beta\phi h}{(1-\phi)^2} \left\{2\alpha(1-\phi) +\beta\phi\right\}\)
                    \(\mbox{} - \frac{\beta\phi(1-\phi^h)}{(1-\phi)^2(1-\phi^2)} \left\{ 2\alpha(1-\phi^2)+ \beta\phi(1+2\phi-\phi^h)\right\}\biggr]\)
(A,N,A) \(\sigma_h^2 = \sigma^2\Big[1 + \alpha^2(h-1) + \gamma k(2\alpha+\gamma)\Big]\)
(A,A,A) \(\sigma_h^2 = \sigma^2\Big[1 + (h-1)\big\{\alpha^2 + \alpha\beta h + \frac16\beta^2h(2h-1)\big\}\)
                    \(\mbox{} + \gamma k \big\{2\alpha+ \gamma + \beta m (k+1)\big\} \Big]\)
(A,A\(_d\),A) \(\sigma_h^2 = \sigma^2\biggl[1 + \alpha^2(h-1) + \gamma k(2\alpha+\gamma)\)
                    \(\mbox{} +\frac{\beta\phi h}{(1-\phi)^2} \left\{2\alpha(1-\phi) + \beta\phi \right\}\)
                    \(\mbox{} - \frac{\beta\phi(1-\phi^h)}{(1-\phi)^2(1-\phi^2)} \left\{ 2\alpha(1-\phi^2)+ \beta\phi(1+2\phi-\phi^h)\right\}\)
                    \(\mbox{} + \frac{2\beta\gamma\phi}{(1-\phi)(1-\phi^m)}\left\{k(1-\phi^m) - \phi^m(1-\phi^{mk})\right\}\biggr]\)

有一些ETS模型没有已知的预测区间的公式。在这些情况下, forecast() 函数使用模拟的未来样本路径,并根据这些模拟的未来路径的百分位数来计算预测区间。

使用 forecast()

下面的R代码显示了该函数应用于ETS模型时可能会用到的参数。下面我们会解释每个参数的含义。

forecast(object, h=ifelse(object$m>1, 2*object$m, 10),
level=c(80,95), fan=FALSE, simulate=FALSE, bootstrap=FALSE,
npaths=5000, PI=TRUE, lambda=object$lambda, biasadj=NULL, ...)

objectets() 函数返回的对象。

h : 预测时间范围 — 要预测的时间段的数量。

level : 预测区间的置信度。

fan : 如果 fan=TRUE,那么 level=seq(50,99,by=1)。这适用于扇形图。

simulate : 如果 simulate=TRUE,则预测区间通过模拟产生,而不是使用代数公式。如果没有可用于特定模型的代数公式,那么将使用模拟(即使 simulate=FALSE)。

bootstrap : 如果 bootstrap=TRUEsimulate=TRUE,则模拟预测区间会使用重新抽样误差而不是正态分布误差。

npaths : 用于计算模拟预测区间的样本路径数。

PI : 如果 ‘PI=TRUE’,则产生预测区间;否则只计算点预测。

lambda : Box-Cox转换参数。如果 lambda=NULL,它将被忽略。否则,预测将通过Box-Cox逆变换进行反向转换。

biasadj : 如果 lambda 不是 NULL,则反向变换的预测值(和预测区间)会被进行偏差调整。

参考文献

Hyndman, R. J., Koehler, A. B., Ord, J. K., & Snyder, R. D. (2008). Forecasting with exponential smoothing: The state space approach. Berlin: Springer-Verlag. http://www.exponentialsmoothing.net