带有季节性和趋势的 ARIMA 预测,奇怪的结果

机器算法验证 r 时间序列 预测 有马 季节性
2022-03-16 16:31:27

当我开始使用 ARIMA 模型进行预测时,我试图了解如何改进基于 ARIMA 的预测以适应季节性和漂移。

我的数据是以下时间序列(超过 3 年,具有明显的上升趋势和明显的季节性,这似乎不受滞后 12、24、36 时的自相关的支持??)。

    > bal2sum3years.ts
             Jan     Feb     Mar     Apr     May     Jun     Jul     Aug          
    2010 2540346 2139440 2218652 2176167 2287778 1861061 2000102 2560729 
    2011 3119573 2704986 2594432 2362869 2509506 2434504 2680088 2689888 
    2012 3619060 3204588 2800260 2973428 2737696 2744716 3043868 2867416 
             Sep     Oct     Nov     Dec
    2010 2232261 2394644 2468479 2816287
    2011 2480940 2699780 2760268 3206372
    2012 2951516 3119176 3032960 3738256

建议的模型auto.arima(bal2sum3years.ts)给了我以下模型:

    Series: bal2sum3years.ts 
    ARIMA(0,0,0)(0,1,0)[12] with drift         

    Coefficients:
              drift
          31725.567
    s.e.   2651.693

    sigma^2 estimated as 2.43e+10:  log likelihood=-321.02
    AIC=646.04   AICc=646.61   BIC=648.39

但是,acf(bal2sum3years.ts,max.lag=35)没有显示出高于 0.3 的 acf 系数。然而,数据的季节性非常明显——每年年初都会出现峰值。这是该系列在图表上的样子: 原始时间序列

fit=Arima(bal2sum3years.ts,seasonal=list(order=c(0,1,0),period=12),include.drift=TRUE)使用函数调用的预测forecast(fit)导致未来 12 个月的平均值等于数据的最后 12 个月加上常数。这可以通过调用来查看plot(forecast(fit))

实际和预测数据

我还检查了残差,它们不是自相关但具有正平均值(非零)。

在我看来,拟合不能精确地模拟原始时间序列(蓝色是原始时间序列,红色是fitted(fit)

原始与合身

问题是,模型不正确吗?我错过了什么吗?如何改进模型?似乎该模型实际上需要过去 12 个月,并添加一个常数来实现接下来的 12 个月。

我是时间序列预测模型和统计的相对初学者。

2个回答

从您的数据的外观来看,在季节性差异之后,很可能没有实质性的剩余季节性。每年年初的那个高峰,以及随后在今年剩余时间里的模式都很好地被一个一世[12]型号该模型包含了“明显的季节性”。

是的,确实,建议的模型是“今年六月 = 去年六月 + 常数 + 错误”,其他月份也是如此。

这到底有什么问题?这似乎是对您的数据的极好描述。

您可能会发现时间序列分解更直观且更易于解释,甚至可能基于基本结构模型(具有季节性的模型),但这并不一定意味着模型的功能比您拥有的模型更好。仍然有一种或多种标准分解技术值得尝试——对于您理解良好的模型,有很多话要说。

我相信我们的问题是我们直接跳到 ARIMA 模型而不尝试传统模型。因此,您会发现模型没有给出所需的结果。在您的情况下,我测试了您的数据,我发现每 12 个月有一个季节性,这对您来说很清楚,但我还发现 3 项的简单移动平均值季节性调整:乘法是最好的模型。在我看来,在跳到任何高级技术之前,我们必须尝试传统的预测算法。 问题数据的 12 个月预测