因为之前在学数据分析课程的时候老师讲到时间序列这里,但只是简单的对这个经典的时间序列案例介绍了一下,并没有涉及对差分次数d的查找、找ARIMA模型的p、q值和模型检验 这三个步骤。
后来我搜寻了整个网络,终于结合各个文章的解释,对代码进行了重新的梳理,下面就是详细的整个代码过程(如果问题,欢迎提出来指正!):
--------------------------------------------------我是修正线---------------------------------------------------
2021.11.24 第三次更新
大家对本文的疑问在👉最新一期时序的博客 👈中有提到相关解决方法,欢迎大家前去围观🤝。
--------------------------------------------------我是修正线---------------------------------------------------
--------------------------------------------------我是修正线---------------------------------------------------
2021.06.01再次更新
鉴于最近各位朋友提出的疑问(也感谢大家的提问 掌柜也学到很多😁),这里特再次更新🆑!!!
如果你遇到的时序是季节/周期性的时序,那么请移步👉最新博客!进行参考
如果你遇到的时序是季节/周期性的时序,那么请移步👉最新博客!进行参考
如果你遇到的时序是季节/周期性的时序,那么请移步👉最新博客!进行参考
重要事情说三遍😂,谢谢!
PS:本博客搭配👉这篇👈一起服用效果更佳!!!
--------------------------------------------------我是修正线---------------------------------------------------
--------------------------------------------------我是修正线---------------------------------------------------
10.20 更新
感谢网友提出的问题,进行了一个修正,当时的代码少了最后用ARIMA对原始序列的一个预测步骤。这里补充一下:
from statsmodels.tsa.arima_model import ARIMA
#感谢网友的指正,这里直接用data即可,之前想太多了😅
#还原到原始序列(不用这个!!!❌)
#ts_restored = pd.Series([data[0]], index=[data.index[0]]) .append(data1).cumsum()
#第六步:使用ARIMA模型进行预测
model = ARIMA(data,order=(7,0,0)) #导入ARIMA模型
result = model.fit(disp=-1)
#print(result.summary())
result.conf_int()#模型诊断,可以发现所有的系数置信区间都不为0;即在5%的置信水平下,所有的系数都是显著的,即模型通过检验。
#最后画出时序图
fig, ax = plt.subplots(figsize=(12, 10))
ax = data.loc['1901':].plot(ax=ax) #注意起点是从1901开始
fig = result.plot_predict(5, 100) #因为前面是90个数,所以加上预测的10个就是100
plt.show() #数据预测并画图
#预测原始序列的未来10年数据
pred = result.predict(start = 90, end = 99, dynamic = True)
pred
--------------------------------------------------我是修正线---------------------------------------------------
(完整的代码如下:)
# -*- coding: utf-8 -*-
# 用 ARIMA 进行时间序列预测
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
from statsmodels.tsa.arima_model import ARMA
from statsmodels.tsa.arima_model import ARIMA
from statsmodels.graphics.tsaplots import acf,pacf,plot_acf,plot_pacf
from statsmodels.graphics.api import qqplot
# 1.创建数据
data = [5922, 5308, 5546, 5975, 2704, 1767, 4111, 5542, 4726, 5866, 6183, 3199, 1471, 1325, 6618, 6644, 5337, 7064, 2912, 1456, 4705, 4579, 4990, 4331</