我试图弄清楚为什么 AIC 和其他类似的 IC 在尝试执行自动预测生成时充当样本外错误的代理。
因此,我对 AirPassengers 数据集进行了一项实验,该数据集与真实世界时间序列一样可预测。我使用 1958 年底的数据作为训练集,使用 1959 年和 1960 年的数据作为保留集。
我得到的结果令人惊讶:
使用 auto.arima()(stepwise=FALSE 和 approximation=FALSE),选择的最佳拟合模型是模型,AIC = 802.346,测试 RMSE = 69.235753。
然后我拟合一个带有极端参数的“over the top” ARIMA 模型. 正如预期的那样,这导致更高的 AIC 为 829.2997,但RMSE = 27.871115 更低。
然后我尝试了一个更合理的 ARIMA 模型(即在 auto.arima() 考虑的范围内),它给了我一个 AIC=804.56 和一个 RMSE = 42.051491。
从预测图中可以更清楚地看出,具有最高 AIC的模型是给出最佳预测的模型。AICc 和 BIC 给出了类似的反向行为,具有最高 IC 值的模型给出了最低的 RMSE 和 MAPE。
我的问题:
- 这不是与预期行为完全相反吗?我认为最小化 AIC(或任何其他 IC)给出了最好的模型,而不是最大化它?
- 我的实验有问题吗,这给了我反直觉的结果?
- 航空乘客时间序列非常规律和可预测的事实与此有关吗?AIC 会更好地处理非常嘈杂的数据吗?
- 如果不在这种情况下,AIC 和其他 IC 何时适合选择时间序列模型?
#Call the necessary libraries
library('ggplot2')
library('forecast')
library(zoo)
library(scales)
theme_set(theme_bw())
#load the airpassengers data
data("AirPassengers")
#Split the data into test and train
train <- window(AirPassengers, end = c(1958, 12))
test <- window(AirPassengers, start = c(1959, 1), end = c(1960,12))
#Fit the models
fit <- auto.arima(train, stepwise = FALSE, approximation = FALSE)
fit2 <- Arima(train, order=c(15, 1, 15), seasonal = list (order= c(4, 1, 4) , period = 12), method='ML')
fit3 <- Arima(train, order=c(2, 1, 2), seasonal = list (order= c(2, 1, 2) , period = 12), method='ML')
#Generate forecasts
#I am setting forecast intervals to 0 so that they are not displayed for better clarity
arima_fct <- forecast(fit,level = c (0,0), h=24)
arima_fct2 <- forecast(fit2,level = c (0,0), h=24)
arima_fct3 <- forecast(fit3,level = c (0,0), h=24)
fit$aic
fit2$aic
fit3$aic
accuracy(arima_fct,test)
accuracy(arima_fct2,test)
accuracy(arima_fct3,test)
#Plot results
autoplot(arima_fct , ylab = 'Passengers') + scale_x_yearmon() + autolayer(test, series="Test Data") + autolayer(arima_fct$mean, series="ARIMA(0,1,3)(0,1,0)[12]: AIC = 802.3461, Test RMSE = 69.235753") + autolayer(arima_fct3$mean, series="ARIMA(2,1,2)(2,1,2)[12]: AIC = 804.56, Test RMSE = 42.051491") + autolayer(arima_fct2$mean, series="ARIMA(15,1,15)(4,1,4)[12]: AIC = 829.2997, Test RMSE = 27.871115")
