“利用ARIMA模型对时间序列进行分析的经典案例(详细代码)”一文中会遇到的问题总结(一)

最近有好几个朋友在问关于这篇博客的多个问题。这里掌柜打算做个总结,方便大家查阅。

  • 问题一:
    最后得到的时序预测是负值,怎样保证为正值?
    或者 如何还原原始序列以及用ARIMA对原始序列的一个预测?
    亦或遇到报错“KeyError: 0 During handling of the above exception, another exception occurred:xxx”

    这三个其实都是问的同一个问题,即如何用ARIMA模型预测原始数据。这个问题一开始掌柜确实考虑掉了,感谢评论区朋友提出来。后来研究后补上了解决方法,但是这里要注意一个地方!
    在还原差分数据到原始序列这一步的时候有两种情况

    • 第一种情况,如果初始时序值不为0,则采用下面的方法:
ts_restored = pd.Series([data[0]], index=[data.index[0]]) .append(data1).cumsum()
  • 第二种情况,如果初始值时序值为0,那么就直接把原始数据(这里是data)带入第六步里面。
    完整的代码如下:
from statsmodels.tsa.arima_model import ARIMA

#还原到原始序列:
#第一种情况,如果初始时序值不为0,则采用下面的方法:
ts_restored = pd.Series([data[0]], index=[data.index[0]]) .append(data1).cumsum()
#第二种情况,如果初始值为0,那么就直接把原始数据data带入第六步里面

#第六步:使用ARIMA模型进行预测
model = ARIMA(ts_restored,order=(7,1,0)) #第一种情况,导入ARIMA模型
#model = ARIMA(data,order=(7,1,0))   #第二种情况,导入ARIMA模型
result = model.fit(disp=-1)
#print(result.summary())
result.conf_int()#模型诊断,可以发现所有的系数置信区间都不为0;即在5%的置信水平下,所有的系数都是显著的,即模型通过检验。

#最后画出时序图
fig, ax = plt.subplots(figsize=(12, 10))
ax = ts_restored.loc['1901':].plot(ax=ax)   #注意起点是从1901开始
fig = result.plot_predict(5, 100)  #因为前面是90个数,所以加上预测的10个就是100
plt.show()   #数据预测并画图
  • 问题二:
    如何计算p、q值或 如何根据acf图和pacf图找到p、q值?

    解决办法:
    请看这篇博客,已经回答的比较详细了,谢谢。

  • 问题三:
    “The end argument could not be matched to a location related to the index of the data.’”
    或“The start argument could not be matched to a location related to the index of the data.’”

    解决办法:
    出现这两种情况都是因为你的预测起始或结尾参数写错了。
    有可能是格式错了(比如整数写成字符串格式);
    也有可能是时间点写错了(比如你预测的是2020之后10年的数据,应该起始数据包含2020,不是2021!!!);
    如果以上都不是,那么建议你打印出该索引位置的数据出来看看是多少。

  • 问题四:
    第五步预测出来的图像是一条直线???

    解决办法:
    这个也要具体情况具体分析,大致可能的原因掌柜估计有两种。
    第一种:你的原始数据本身包含多个含0的时序值,那么预测出来直线也是有可能的,这属于正常情况;
    第二种:该数据不适合用ARIMA模型来进行预测。

  • 问题五:
    换其他数据做预测时,代码除了date值还有哪里需要调整/注意??

    解决办法:
    如果你用其他数据进行预测,那么除了日期以外,还要注意就是p、q值以及模型的判断这三处要调整。谢谢

暂时大家的问题就这些,如果你还有其他新的问题,请继续评论或者私信提出来,大家一起解决✅,谢谢。

你可能感兴趣的:(Python,时间序列分析,python,时序模型,ARIMA,时序分析)