3.5 预测区间

正如在 1.7中所讨论的,预测区间给出了一定置信度下的置信区。例如,假设预测误差为正态分布,则置信度为95%的h-step预测预测区间 \[ \hat{y}_{T+h|T} \pm 1.96 \hat\sigma_h, \] 其中, \(\hat\sigma_h\) 是h步预测标准差的预测分布的估计值,更一般地,可以将预测区间写为 \[ \hat{y}_{T+h|T} \pm k \hat\sigma_h \] 其中,乘子\(k\)取决于置信概率。在这本书中,我们通常计算置信度为80%和95%的置信区间,尽管任意百分比都有可能出现。下表给出了在不同正态分布预测误差范围(置信度)内对应乘子\(k\)值。

表 3.1: 预测区间中所用的乘子取值
百分比 乘子
50 0.67
55 0.76
60 0.84
65 0.93
70 1.04
75 1.15
80 1.28
85 1.44
90 1.64
95 1.96
96 2.05
97 2.17
98 2.33
99 2.58

预测区间的值表示的是预测中的不确定性。如果我们只做点预测,就无法得到这些预测的准确程度。然而,如果我们同时得到预测间隔,那么就会很清楚每个预测有多大的不确定性。由于这个原因,如果没有后续的预测区间,点预测几乎没有价值。

一步预测区间

在进行向前一步预测时,预测分布的标准差与残差的标准差几乎相同。(事实上,如果没有需要被估计的参数,这两个标准差是相同的,比如 naïve 方法。对于那些有需要估计参数的预测方法,预测分布的标准差略大于残差标准差,尽管这种差异经常被忽略。)

例如,我们参照一个用naïve预测方法的例子,谷歌的股票价格数据(GSP)goog200(图3.4)。所观察到的序列的最后一个值是531.48,因此对GSP的下一个值的预测是531.48。通过naïve方法计算的残差标准差为6.21,因此,GSP下一个值的置信度为95%的预测区间是 \[ 531.48 \pm 1.96(6.21) = [519.3, 543.6]. \] 类似地,置信度80%的预测区间是: \[ 531.48 \pm 1.28(6.21) = [523.5, 539.4]. \]

对应乘数的值 (1.96 or 1.28) 可以取自表 3.1.

多步预测区间

预测间隔的一个共同特点是随着预测时间的增加它们的长度也在增加。预测得越远,预测的不确定性越大,预测区间也越宽。也就是说, \(\sigma_h\) 通常随步数 \(h\) 的增加而增加(虽然有一些非线性预测方法不是这样)。

得到一个预测区间之前,必须先得到\(\sigma_h\)的估计值。正如已经指出的,一步预测(\(h=1\))对应的残差标准差可以很好地估计预测标准差\(\sigma_1\)。对于多步预测,则需要一种更复杂的计算方法。注意,这些计算都是假定以上残差不相关。

基准方法

对于四种基准方法,在残差不相关的前提下,通过数学推导得出预测标准差是可能的。如果令\(\hat{\sigma}_h\)表示h步预测的标准差,并令\(\hat{\sigma}\)为残差标准差,那么我们可以用下面的表达式:

均值预测a_h = $

Naïve 预测: \(\hat\sigma_h = \hat\sigma\sqrt{h}\)

季节性naïve预测 \(\hat\sigma_h = \hat\sigma\sqrt{\lfloor (h-1)/m \rfloor + 1}\).

漂移预测: \(\hat\sigma_h = \hat\sigma\sqrt{h(1+h/T)}\).

注意,当\(h = 1\)\(T\)很大时,这些方法都可以计算出相同的近似值 \(\hat\sigma\)

不论使用何种基准预测方法,都能计算出预测区间。例如,这是通过naïve方法预测谷歌股票价格(GSP)的结果:

naive(goog200)
#>     Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
#> 201          531.5 523.5 539.4 519.3 543.6
#> 202          531.5 520.2 542.7 514.3 548.7
#> 203          531.5 517.7 545.3 510.4 552.6
#> 204          531.5 515.6 547.4 507.1 555.8
#> 205          531.5 513.7 549.3 504.3 558.7
#> 206          531.5 512.0 551.0 501.7 561.3
#> 207          531.5 510.4 552.5 499.3 563.7
#> 208          531.5 509.0 554.0 497.1 565.9
#> 209          531.5 507.6 555.3 495.0 568.0
#> 210          531.5 506.3 556.6 493.0 570.0

当绘制图像时,用阴影区域表示预测区间,颜色的深度表示与该区间相关的概率。

autoplot(naive(goog200))

从自助(bootstrap)残差得到的预测区间

当预测误差服从正态分布是一个不合理的假定时,可以使用自举法(它只假定预测误差都是不相关的)。

预测误差被定义为 \(e_t = y_t - \hat{y}_{t|t-1}\) 。我们可以重新写成: \[ y_t = \hat{y}_{t|t-1} + e_t. \] 所以我们可以用如下公式模拟时间序列的下一个观测值: \[ y_{T+1} = \hat{y}_{T+1|T} + e_{T+1} \] 其中,\(\hat{y}_{T+1|T}\)是一步预测值,\(e_{T+1}\)是未来的未知误差。假设将来的错误与过去的错误相似,我们可以从过去看到的错误集合(即残差)中抽样来代替\(e_{T+1}\)。将新的模拟观察添加到我们的数据集中,重复此过程即可得到: \[ y_{T+2} = \hat{y}_{T+2|T+1} + e_{T+2} \] 其中\(e_{T+2}\)是从残差集合中提取的另一个值。以这种方式继续操作,我们可以为时间序列模拟一整套未来的值。

重复操作,我们获得了许多可能的未来预测值。然后我们可以通过计算每个预测区间的百分比来计算整个的预测区间,其结果我们称为“自助”的预测区间。“自助”是利用自己的力量,因为在这种方法中我们通过利用历史数据来测量未来的不确定性。

 为了生成这样的区间,我们可以简单地将bootstrap参数添加到预测函数中。例如:

naive(goog200, bootstrap=TRUE)
#>     Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
#> 201          531.5 525.7 537.8 522.9 542.9
#> 202          531.5 523.2 539.5 519.4 547.0
#> 203          531.5 520.9 541.2 516.7 552.3
#> 204          531.5 519.0 543.0 514.0 560.3
#> 205          531.5 517.5 544.6 511.8 582.1
#> 206          531.5 516.1 545.9 509.5 582.4
#> 207          531.5 514.8 547.3 508.0 583.5
#> 208          531.5 513.5 548.9 505.8 584.9
#> 209          531.5 512.3 549.8 503.9 586.6
#> 210          531.5 510.7 551.4 502.1 587.5

在这种情况下,它们与基于正态分布的预测区间非常相似(但不完全相同)。

包含变换过程的预测区间

如果使用了变换,则预测区间应该在转换后的测度里计算,再将最后一个点点逆转换到原来的测度后,给出预测区间。这种方法保留了预测区间的置信度,尽管它在点预测中不再是对称的。

如果在预测时使用lambda参数,则用R forecast 包中的函数可以自动完成预测区间的逆变换。