为什么默认的 auto.arima 会在 (5,2,5) 处停止?

机器算法验证 r 预测 有马
2022-03-22 21:40:38

包中auto.arima函数是一个强大的工具,可以识别给定数据系列的最佳 ARIMA(p,d,q) 模型。在 该函数的官方文档页面中,他们报告了以下内容:forecastR

auto.arima(y, d=NA, max.p=5, max.q=5, max.order=5, max.d=2, start.p=2, start.q=2, ...)

根据上述功能,默认情况下,它似乎auto.arima试图在所有组合中找到最佳模型:

  • p 等于或小于 5
  • q 等于或小于 5
  • d 等于或小于 2
  • 阶等于或小于 5,即p + q + d ≤ 5

但是,为什么默认代码会在这些条件下停止?为什么 p、q 和 d 应该等于或小于 5、5 和 2 并且它们的总和小于 5,有什么特别的原因吗?

1个回答

有几个原因:

限制搜索空间限制了所需的计算时间。如果您要对许多时间序列进行建模和预测,这是一个重要因素。

更复杂的 ARIMA 模型很难解释如果我们想做的只是预测,可解释性在我们的理想品质列表中可能并不高,但我们通常需要向非统计学家用户解释我们的模型。我宁愿不解释甚至第二个差异,更不用说第三个或更高的差异了。

预报员的经验是,大多数时间序列都可以由低阶 ARIMA 模型充分描述。让我们使用 819 非季节性 M3 系列建模auto.arima(,max.p=10,max.q=10,max.d=3)

library(Mcomp)
M3.nonseasonal <- M3[sapply(M3,"[[","period")%in%c("YEARLY","OTHER")]
models <- matrix(NA,nrow=length(M3.nonseasonal),ncol=3,
    dimnames=list(names(M3.nonseasonal),c("p","d","q")))
pb <- winProgressBar(max=length(M3.nonseasonal))
for ( ii in seq_along(M3.nonseasonal) ) {
    setWinProgressBar(pb,ii,paste(ii,"of",length(M3.nonseasonal)))
    fit <- auto.arima(M3.nonseasonal[[ii]]$x,max.p=10,max.q=10,max.d=3)
	models[ii,] <- fit$arma[c(1,6,2)]
}
close(pb)
sort(table(
  paste0( (",apply(models,1,paste0,collapse=","),")")),decreasing=TRUE)
summary(models)

输出:

> sort(table(paste0("(",apply(models,1,paste0,collapse=","),")")),decreasing=TRUE)

(0,1,0) (0,1,1) (0,2,0) (0,2,1) (1,0,0) (1,1,0) (0,0,0) (0,0,1) (2,0,0) (1,2,0) 
    413      80      65      60      31      29      23      19      15      13 
(1,1,1) (1,2,1) (2,1,0) (2,1,2) (0,3,0) (1,1,2) (2,2,1) (0,1,2) (0,2,2) (1,0,1) 
      6       6       6       6       5       5       5       4       3       3 
(1,3,0) (1,0,2) (1,2,2) (2,0,1) (2,1,1) (2,2,2) (3,0,0) (0,3,1) (1,3,1) (2,2,0) 
      3       2       2       2       2       2       2       1       1       1 
(2,3,1) (3,0,1) (3,1,0) (3,2,3) 
      1       1       1       1 
> summary(models)
       p                d             q         
 Min.   :0.0000   Min.   :0.0   Min.   :0.0000  
 1st Qu.:0.0000   1st Qu.:1.0   1st Qu.:0.0000  
 Median :0.0000   Median :1.0   Median :0.0000  
 Mean   :0.2393   Mean   :1.1   Mean   :0.2906  
 3rd Qu.:0.0000   3rd Qu.:1.0   3rd Qu.:1.0000  
 Max.   :3.0000   Max.   :3.0   Max.   :3.0000

在少数情况下,auto.arima()选择,但我对 3 阶的积分持怀疑态度,既因为它很难解释,又因为它会导致三次趋势,这几乎没有意义永远不会超过 3。d=3pq

最后,更复杂的 ARIMA 模型很少更准确。事实上,最简单的 ARIMA(0,0,0) 模型(即白噪声,最佳预测只是历史平均值)通常优于更复杂的 ARIMA 模型

据我所知,所选择的特定默认值并非源于任何特定研究,任何此类研究当然都存在普遍性问题。如果你真的对包作者如何得出这些数字感兴趣,你可以问他们(也许在这里报告你听到的消息?),但我强烈怀疑答案将是“经验”。