如何确定时间序列的可预测性?

机器算法验证 时间序列 预测 最大熵 可预测性
2022-03-26 08:11:45

预测者面临的重要问题之一是给定序列是否 可以预测?

我偶然发现了 Peter Catt的一篇题为“熵作为可预测性的先验指标”的文章,该文章使用近似熵 (ApEn) 作为确定给定时间序列是否可预测的相对度量。

文章说,

“较小的 ApEn 值表明一组数据后面跟着相似数据(规则性)的可能性更大。相反,较大的 ApEn 值表明重复相似数据的可能性较低(不规则性)。因此,较大的值传达更多的无序,随机性和系统复杂性。”

然后是计算 ApEn 的数学公式。这是一种有趣的方法,因为它提供了一个数值,可用于评估相对意义上的可预测性。我不知道近似熵是什么意思,我正在阅读更多关于它的信息。

有一个名为pracma的包R,可让您计算 ApEn。出于说明目的,我使用了 3 个不同的时间序列并计算了 ApEn 数。

  1. 系列 1:著名的 AirPassenger 时间序列 - 具有高度确定性,我们应该能够轻松预测。
  2. 系列 2:太阳黑子时间序列 - 定义非常明确,但应该比系列 1 更难预测。
  3. 系列 3:随机数 无法预测这个系列。

所以如果我们计算 ApEn,系列 1 应该小于系列 2 应该非常非常少系列 3。

下面是计算所有三个系列的 ApEn 的 R 片段。

library("pracma")
> series1 <- approx_entropy(AirPassengers)
> series1
[1] 0.5157758
> series2 <- approx_entropy(sunspot.year)
> series2
[1] 0.762243
> series3 <- approx_entropy(rnorm(1:30))
> series3
[1] 0.1529609

这不是我所期望的。随机系列的数量低于定义明确的 AirPassenger 系列。即使我将随机数增加到 100,我仍然得到以下小于明确定义的系列 2/Sunspot.yealry 系列。

> series3 <- approx_entropy(rnorm(1:100))
> series3
[1] 0.747275

以下是我的问题:

  1. m计算 ApEn (和)时有 2 个参数r如何确定它们。R在上面的代码中使用了默认值。
  2. 我做错了什么,错误地表明 ApEn 对于随机数与定义明确的系列(如 sunspot.yearly)相比较低。
  3. 我是否应该对系列进行去季节化/去趋势化,然后估计 ApEn。然而,作者已将 ApEn 直接应用于该系列。
  4. 有没有其他方法可以确定该系列是否可预测?
2个回答

与计算时间序列的近似熵(ApEn)有关的参数m和,分别是窗口(序列)长度容差(过滤器值)事实上,就以及数据点的数量)而言,ApEn定义为“长度重复模式与长度重复模式的相对流行率的自然对数”(Balasis、Daglis、Anastasiadis 和 Eftaxias,2011 ,第 215 页):rmrNmm + 1

ApEn(m,r,N)=Φm(r)Φm+1(r),

where 

Φm(r)=ΣilnCim(r)/(Nm+1)

因此,似乎改变容差r允许控制确定时间序列熵的(时间)粒度尽管如此,在包的熵函数调用中使用默认值mr参数都可以正常工作。要查看所有三个时间序列的正确熵值关系pracma,唯一需要做的修复是增加随机数据向量的长度

 library(pracma)
 set.seed(10)
 all.series <- list(series1 = AirPassengers,
                    series2 = sunspot.year,
                    series3 = rnorm(500)) # <== size increased
 sapply(all.series, approx_entropy)
  series1   series2   series3 
  0.5157758 0.7622430 1.4741971 

结果与预期的一样——随着波动的可预测性从最确定的下降series1到最随机series 3的,它们的熵因此增加:ApEn(series1) < ApEn(series2) < ApEn(series3)

关于可预测性的其他度量您可能需要检查平均绝对比例误差 (MASE) - 有关更多详细信息,请参阅此讨论可预测成分分析似乎也是确定时间序列可预测性的一种有趣且新的方法。而且,可以预料的是,还有一个——ForeCAR

library(ForeCA)
sapply(all.series,
       Omega, spectrum.control = list(method = "wosa"))
 series1   series2   series3 
 41.239218 25.333105  1.171738 

这里是可预测性的度量,其中Ω[0,1]Ω(whitenoise)=0%Ω(sinusoid)=100%

参考

Balasis, G., Daglis, IA, Anastasiadis, A., & Eftaxias, K. (2011)。使用熵概念和重新缩放的范围分析检测 Dst 时间 sSeries 中的动态复杂性变化。载于 W. Liu 和 M. Fujimoto(Eds.),动态磁层,IAGA Special Sopron Book,系列 3,211. doi:10.1007/978-94-007-0501-2_12。施普林格。取自http://members.noa.gr/anastasi/papers/B29.pdf

Georg M. Goerg (2013):可预测成分分析。JMLR,W&CP (2) 2013:64-72。http://machinelearning.wustl.edu/mlpapers/papers/goerg13

每个时间序列都由 3 个部分组成:趋势、季节性和随机。如果数据表现出强烈的趋势或季节性很强,那么预测将相对容易。如果数据大多是随机的,那么根据定义,您无法预测任何事情。