python arima model预测问题

今天使用python做了arima model,其他都是没有问题的,但是在预测时遇到一个很大的问题,查了半天,中文英文都查了,文档也查了,似乎没有办法解决,可能是在python的statsmodels.tsa.arima_model设计过程中就是没有考虑这种情况吧。本文先讲一下使用python做arima model的一些基本情况和注意事项,然后讲一下存在的问题。

1. statsmodels.tsa.arima_model注意事项

关于这个arima package网上已经有很多很多的介绍了,这里给出几个传送门:python arima model1python arima model2官方文档英文的一份比较好的教程看这些就可以基本了解怎么使用了。我主要就讲一下我再操作的过程中遇到的一些需要注意的地方。

  1. 数据使用series就可以,首先对数据进行差分使得其平稳,得到阶数,也就是d,然后做出自相关图和偏自相关图,依次确定p和q,确定模型的基本形式arima(p,d,q)。
  2. 模型训练时就使用fit函数就行,注意fit函数存在一个参数是method ,里面包含3种训练模型的方法,分别是{‘css-mle’,’mle’,’css’},默认是mle,如果训练报错,可以试试css,一般css不容易训练失败。一般提示无法收敛,无法求逆等问题时就是训练方法不合适造成的,换一个试试。
  3. 预测有两种方式predict和forecast,一般predict就可以完成了吧,forecast就没去了解,不是很清楚,ARIMA.predict(params, start=None, end=None, exog=None, typ=‘linear’, dynamic=False),可以设置一个start和end,然后就会返回一个array,是从start到end的预测结果,这个预测可以是样本内的,也可以是样本外的。start和end可以是索引也可以是日期字符串。
  4. predict中有一个参数是typ,默认是’linear’,所以默认会输出差分后的数值,而不是原始level的数值,可以将这个参数设置为’levels’,就可以输出原始level的数值了。

2.存在的问题

为了更好的理解这个问题,先说一个现实中存在的需求。训练好一个arima模型,然后用它预测股票价格,但是不希望每天都去重新训练这个模型,上周的模型这周还是希望直接拿来用,但是我获得了这周的新数据,因此把这些新获取到的数据也作为输入去预测明天的数据。 而predict函数是无法实现这个功能的,因为predict进行多步预测时实际上是首先进行单步预测,然后将这个预测值作为输入来再做一次单步预测,得到二步预测值,而我上述所说的例子中需要实现的功能是:使用t0-t5的序列训练model,然后预测t6,然后给予真实的t6,预测t7,而不是用预测出来的t6去预测t7。那么没有这种功能就造成很多麻烦,比如我希望用arima model和一个机器学习模型去比较性能,如svm,我们将数据集划分为训练集和测试集,然后用训练集训练模型,此时模型就确定下来了,然后在测试集上测试,也就是输入测试集,得到预测值,可以计算出比如MSE,但是statsmodels.tsa.arima_model就无法做到这一点了,因为无法输入测试集去做预测。这个问题我进行很长时间的查询都没有解决,要是有大佬知道该怎么办还请留言,十分感谢!

猜你喜欢

转载自blog.csdn.net/qq_39805362/article/details/105349554