statsmodels中ARIMA的样本外预测?

3 投票
1 回答
2249 浏览
提问于 2025-04-18 11:08

我有一个时间序列预测的问题,正在使用statsmodels这个Python包来解决。根据AIC标准评估,最优模型看起来相当复杂,像是ARIMA(27,1,8)这样的模型(我还没有对所有参数进行全面搜索,但似乎在这个范围内是最小值)。不过,我在用这个模型进行验证和预测时遇到了很大的困难,因为训练一个模型实例需要很长时间(几个小时),所以反复测试变得非常困难。

无论如何,我真正需要的,至少是能够在操作中使用statsmodels的一个机制,就是在新数据到达时能把它们纳入进来,以便进行下一组预测。我希望能够在现有数据上拟合一个模型,然后把它保存起来,等到下一个数据点到来时再把它取出来,并将其纳入更新的预测中。目前,我每次有新数据时都得重新拟合模型,正如我所说,这需要很长时间。

我看过这个问题,它基本上解决了我遇到的问题,但针对的是ARMA模型。不过对于ARIMA模型来说,数据需要进行差分处理,这增加了复杂性。我需要能够生成原始时间序列的新预测(参考ARIMAResultsWrapper.predict方法中的typ='levels'关键字)。我了解到,statsmodels目前无法做到这一点,但我需要使用现有功能中的哪些组件,才能自己编写一个实现这个功能的代码呢?

补充一下:我还在使用transparams=True,所以预测过程需要能够将预测结果转换回原始时间序列,这在自制方案中又增加了一个难度。

1 个回答

0

一个ARIMA(27,1,8)模型非常复杂。在大多数情况下,处理时间序列数据时,五个左右的参数就足够做出合理的预测。当然,这还得看具体的数据和领域,但我对27加8等于35个参数是否真的必要持怀疑态度。

AIC这个指标有时候对参数的数量要求太宽松了。我建议你可以试着用BIC来比较一下结果。

我还建议你看看你的数据是否有某种季节性。例如,可能这27个自回归(AR)项其实都没什么用,你可能只需要滞后1(lag=1)和滞后24(lag=24)这两个参数(比如说)。这在处理有日季节性的每小时数据时可能是个情况。

撰写回答