定义 ARIMA 顺序的问题

机器算法验证 预测 有马 模型选择 季节性 傅里叶变换
2022-02-02 18:13:29

这篇文章很长,希望大家多多包涵,有错误的地方请指正。

我的目标是根据 3 或 4 周的历史数据生成每日预测。

该数据是其中一条变压器线路的本地负载的 15 分钟数据。我无法找到季节性 ARIMA 过程的模型顺序。考虑电力需求时间序列:

原始时间序列 http://i.share.pho.to/80d86574_l.png

当将前 3 周作为子集并进行差分时,计算以下 ACF/PACF 图:

子集 http://i.share.pho.to/5c165aef_l.png

第一个区别 http://i.share.pho.to/b7300cc2_l.png

季节性和第一个差异 http://i.share.pho.to/570c5397_l.png

这看起来像这个系列有点固定。但季节性也可以是每周一次(请参阅季节性差异周和二阶差异 [此处] http://share.pho.to/3owoq,您怎么看?)

所以让我们得出结论,模型的形状为:

ARIMA(p,1,q)(P,1,Q)96

在最后一个图中,滞后 96 处的明显尖峰表明存在季节性 MA(1) 分量(也许 AR(1) 可能以及 PACF 中也存在明显尖峰)。滞后 1:4 处的尖峰表示 MA(4) 分量,它与 PACF 中的指数衰减相对应,具有一点想象力。 因此,手动选择的初始模型可能是:

ARIMA(0,1,4)(0,1,1)96

Series: x 
ARIMA(0,1,4)(0,1,1)[96] 

    Coefficients:
    ma1      ma2      ma3      ma4     sma1
    -0.2187  -0.2233  -0.0996  -0.0983  -0.9796
    s.e.   0.0231   0.0234   0.0257   0.0251   0.0804

    sigma^2 estimated as 364612:  log likelihood=-15138.91
    **AIC=30289.82   AICc=30289.87   BIC=30323.18**

auto.arima 函数计算以下模型(逐步逼近 TRUE,否则需要很长时间才能收敛): }

ARIMA(1,1,1)(2,0,2)96

Series: x 
ARIMA(1,1,1)(2,0,2)[96] 

    Coefficients:
    ar1      ma1    sar1    sar2     sma1     sma2
    0.7607  -1.0010  0.4834  0.4979  -0.3369  -0.4168
    s.e.  0.0163   0.0001  0.0033  0.0116   0.0216   0.0255

    sigma^2 estimated as 406766:  log likelihood=-15872.02
    **AIC=31744.99   AICc=31745.05   BIC=31784.25**

这意味着没有应用季节性差异。 是两个模型的残差。Ljung Box 统计量给出了一个非常小的 p 值,表明仍然存在一些自相关(如果我错了,请纠正我)。

预测

因此,要确定哪个更好,那么样本外准确度测试是最好的。因此,对于这两种模型,都会提前 24 小时进行预测,并相互比较。结果是: auto.arima http://i.share.pho.to/5d1dd934_l.png 手动模型 http://i.share.pho.to/7ca69c97_l.png

汽车:

                      ME     RMSE      MAE       MPE      MAPE      MASE        ACF1 Theil's U
Training set   -2.586653 606.3188 439.1367 -1.284165  7.599403 0.4914563 -0.01219792        NA
Test set     -330.144797 896.6998 754.0080 -7.749675 13.268985 0.8438420  0.70219229  1.617834

手动的

                       ME     RMSE      MAE        MPE      MAPE      MASE         ACF1 Theil's U
Training set 2.456596e-03 589.1267 435.6571 -0.7815229  7.509774 0.4875621 -0.002034122        NA
Test set     2.878919e+02 919.7398 696.0593  3.4756363 10.317420 0.7789892  0.731013599  1.281764

问题

您可以认为这是对数据集前三周的分析。我在脑海中挣扎着以下问题:

  1. 如何选择最好的 ARIMA 模型(通过尝试所有不同的顺序并检查最好的 MASE/MAPE/MSE?其中性能测量的选择可以自己讨论..)
  2. 如果我为每一天的预测(如在线预测)生成一个新模型和预测,我是否需要考虑年度趋势以及如何考虑?(因为在这么小的一个子集中,我的猜测是趋势可以忽略不计)
  3. 您是否期望模型顺序在整个数据集中保持不变,即当采用另一个子集时会给我相同的模型?
  4. 有什么好的方法,在这个方法内应付假期?或者为此需要带有外部假日假人的 ARIMAX 吗?
  5. 我是否需要使用傅里叶级数方法来尝试长季节性周期seasonality=672中讨论的模型
  6. 如果是这样fit<-Arima(timeseries,order=c(0,1,4), xreg=fourier(1:n,4,672)的话(函数傅立叶在 Hyndman 的博客文章中定义)
  7. 傅立叶级数中是否包含初始 P 和 Q 分量?

FPP获得的大部分理论知识,很棒的东西!

在建议使用指数平滑或(动态)线性回归之前,这也在进行比较。

数据

https://www.dropbox.com/sh/mzx61sskya5ze6x/Zq3A7Q6htH/trafo.txt

代码

data<-read.csv("file", sep=";")
load<-data[,3]

我在值前一周删除了几个零值

stepback<-672
load[is.na(load)] <- 0 # Assumed no 0's in first 672 values!
idx <- which(load == 0)
idx <- idx[which(idx>stepback)] 
load[idx] <- load[idx-stepback] 

ED<-ts(load,start=0, end=c(760,96),frequency=96)
x<-window(ED,start=0, end=c(20,96))

也可以发布一个可重现的示例,但这会使帖子更长,但如果需要,可以。所以如果有什么我应该提供的,请告诉我。

1个回答
  1. 如何选择最好的 ARIMA 模型(通过尝试所有不同的顺序并检查最好的 MASE/MAPE/MSE?其中性能测量的选择可以自己讨论..)

样本外风险估计是绩效评估的黄金标准,因此也是模型选择的黄金标准。理想情况下,您可以进行交叉验证,以便您的风险估计在更多数据上进行平均。FPP 解释了一种时间序列的交叉验证方法。有关其他方法的评论,请参见 Tashman:

LJ 塔什曼 (2000)。预测准确性的样本外测试:分析和审查。国际预测杂志,16(4),437–450。doi:10.1016/S0169-2070(00)00065-0

当然,交叉验证非常耗时,因此人们经常求助于使用样本内标准来选择模型,例如 AIC,这就是 auto.arima 选择最佳模型的方式。这种方法是完全有效的,即使可能不是最优的。

  1. 如果我为每一天的预测(如在线预测)生成一个新模型和预测,我是否需要考虑年度趋势以及如何考虑?(因为在这么小的一个子集中,我的猜测是趋势可以忽略不计)

我不确定你所说的年度趋势是什么意思。假设您的意思是每年的季节性,那么实际上没有任何方法可以将不到一年的数据考虑在内。

  1. 您是否期望模型顺序在整个数据集中保持不变,即当采用另一个子集时会给我相同的模型?

我希望除非对数据的生成方式进行一些更改,否则最正确的基础模型在整个数据集中都是相同的。但是,这与说任何程序(例如 auto.arima 使用的程序)选择的模型如果将该程序应用于数据的不同子集将是相同的不同。这是因为抽样引起的变异性会导致模型选择过程的结果发生变异性。

  1. 有什么好的方法,在这个方法内应付假期?或者为此需要带有外部假日假人的 ARIMAX 吗?

外部假期假人是最好的方法。

  1. 我是否需要使用傅里叶级数方法来尝试长季节性周期seasonality=672中讨论的模型

你需要做点什么,因为正如那篇文章中提到的,R 中的 arima 函数不支持大于 350 的季节性周期。我在傅里叶方法方面取得了相当大的成功。其他选项包括季节性分解后的预测(也包括在 FPP 中),以及指数平滑模型,例如 bats 和 tbats。

  1. 如果是这样fit<-Arima(timeseries,order=c(0,1,4), xreg=fourier(1:n,4,672)的话(函数傅立叶在 Hyndman 的博客文章中定义)

这看起来是正确的。您应该尝试不同数量的术语。请注意,现在fourier预测包中有一个函数,其规范略有不同,我假设它取代了 Hyndman 博客上的那个。有关语法,请参阅帮助文件。

  1. 傅立叶级数中是否包含初始 P 和 Q 分量?

我不确定你在这里问什么。P 和 Q 通常指的是 AR 和 MA 季节性分量的度数。使用傅立叶方法,没有季节性成分,而是有与季节相关的傅立叶项的协变量。它不再是季节性 ARIMA,而是协变量接近季节的 ARIMAX。