ARIMA时间序列模型,时间序列arima模型步骤spss
自回归综合移动平均模型是自回归移动平均模型。它属于最常见的统计模型,用于预测时间序列。原理是在将非平稳时间序列转化为平稳时间序列的过程中,因变量只回归其滞后值和随机误差项的现值和滞后值。
其实就是三大块的整合。
1.自回归模型
自回归模型是描述当前值与历史值之间关系的模型,是利用变量本身的历史事件数据进行自我预测的方法。公式如下:
其中yt是当前值;是常数项;p是顺序;是自相关系数,t是误差值。
自回归模型的使用有以下四个限制:
模型使用自己的数据进行预测,即用于建模的数据和用于预测的数据是同一组数据;使用的数据必须稳定;使用的数据必须具有自相关性。如果自相关系数小于0.5,则不应采用自回归模型。自回归模型只适用于预测与自身前期相关的现象。
2 .整合
ARIMA模型最重要的部分在于时间序列数据的平稳性。平稳性要求通过样本时间序列得到的拟合曲线在未来短时间内能够沿着已有的形态惯性继续,即数据的均值和方差理论上不要变化太大。流畅度可分为快速便捷和弱流畅。快速方便是指数据的分布不随时间变化;弱平稳性意味着数据的预期和方向关系(即依赖性)的数量不变。在实际应用过程中,快速过于理想化和理论化,大多数情况应该属于弱平稳性。对于不稳定的数据,要用平实的文化来处理数据。最常用的方法是差值法,计算时间序列中时间t和时间t-1的差值,从而得到新的更稳定的时间序列。
移动平均线
移动平均模型侧重于自回归模型中误差项的累积。它能有效地消除预测中的随机波动。
1 3=ARMA
在这个公式中,P和Q分别是自回归模型和移动平均模型的阶数,需要人工定义。i和i是两个模型的相关系数,需要求解。如果原始数据不满足平稳性要求,进行了差分,则是差分自相关滑动平均模型(ARIMA),差分后得到的新数据可以带入ARMA公式。
流程:
自相关函数(ACF)将有序随机变量序列与其自身进行比较,反映了不同时间序列中同一序列的值之间的相关性。
偏自相关函数(PACF)计算的是两个变量之间的严格相关性,是排除中间变量干扰后两个变量之间的相关程度。对于平稳的AR(p)模型,当得到滞后为K的自相关系数p(k)时,实际得到的结果并不是x(t)与x(t-k)之间的相关性。这是因为这两个变量之间还有k-1个变量,会对这个自相关系数产生一系列影响,而这个k-1变量本身又与x(t-k)相关。这对自相关系数p(k)的计算是一个很大的干扰。偏相关函数可以消除这些干扰。
p
:模型中包含的滞后观测值的数量,也称为滞后阶数。d
:原始观测值的差异次数,也称为差异程度。q
:移动平均线窗口的大小,也叫移动平均线的顺序。这样就可以看出有趋势性和不稳定性,所以需要有所区别(至少有一个区别,可以用adf检验得到更有统计学意义的结果,参考https://www . jinshu . com/p/4130 BAC 8 ebec)。
由于自回归图的长度是这样的,我们粗略选择滞后项为5(更准确的选择参考上面的链接)。
from pandas import read _ CSV from pandas import datetime from pandas import data frame from stats models . TSA . ARIMA _ model import ARIMA from matplotlib import p yplotdef parser(x):return datetime . strptime( 190 x, % Y-% m )series=read _ CSV( shampoo-sales . CSV ,header=0,parse_dates=[0],index_col=0,squeeze=True,date _ parser=parser)# fit model model=ARIMA(series,order=(5,1,0))
ARIMA模型结果
==============================================================================
离开可变:D。销售编号观察值:35
模型:ARIMA(5,1,0)对数似然-196.170
方法:创新的css-mle标准偏差64.241
日期:2016年12月12日星期一,AIC 406.340
时间:11时09分13秒BIC 417.227
样品:1901年1月2日HQIC 410.098
- 12-01-1903
=================================================================================
系数标准误差z Pz [95.0% Conf。里面的]
-
常数12.0649 3.652 3.304 0.003 4.908 19.222
ar。L1销售-1.1082 0.183-6.063 0.000-1.466-0.750
ar。L2销售-0.6203 0.282-2.203 0.036-1.172-0.068
ar。L3.D .销售-0.3606 0.295-1.222 0.231-0.939 0.218
ar。L4.D .销售-0.1252 0.280-0.447 0.658-0.674 0.424
ar。L5.D .销售0.1289 0.191 0.673 0.506-0.246 0.504
根
=============================================================================
实虚模频率
-
氩1 -1.0617 -0.5064j 1.1763 -0.4292
氩2 -1.0617 0.5064j 1.1763 0.4292
ar 3 0.0816-1.3804j 1.3828-0.2406
氩4 0.0816 1.3804j 1.3828 0.2406
ar 5 2.9315-0.0000j 2.9315-0.0000
-
最后,树根并没有真正理解它是什么。
以上是残差图,可以看出不会乱,所以我们的模型不是很好。
数35.000000
平均值-5.495213
标准68.132882
最小-133.296597
25% -42.477935
50% -7.186584
75% 24.748357
最大133.237980
残差不等于0,所以模型真的不好。
按理说,残差只有表现好才能预测。先假设残差表现好。
如果我们使用训练数据集中的100个观察值来拟合模型,则预测的下一时间步的索引将被分配给预测函数start=101和end=101。这将返回一个包含预测元素的数组。
如果在配置模型时执行任何不同的操作(d0 ),我们也希望预测值保持在原始比率。这可以通过将typ参数设置为值“级别”来指定:typ=“级别”。
此外,我们可以通过使用forecast()函数来避免所有这些规范,该函数使用模型来执行一步预测。我们可以将训练数据集分为训练集和测试集,使用训练集来拟合模型,并在测试集上为每个元素生成一个预测。
考虑到对差分和AR模型的依赖,需要滚动预测。执行滚动预测的粗略方法是在接收到每个新的观测值后重新创建ARIMA模型。
我们在一个名为history的列表中手动跟踪所有的观察值,该列表包含训练数据,并且每次迭代都会添加新的观察值。将这些放在一起,这里是一个在Python中使用ARIMA模型滚动预测的例子。
从pandas导入read _ CSV从pandas导入datetime从matplotlib导入pyplot从stats模型。运输安全管理局。ARIMA _模型从sk学习导入ARIMA。度量导入mean _ squared _ error定义解析器(X):返回日期时间。strptime( 190 X, % Y-% m )series=read _ CSV(洗发水-销售。CSV ,header=0,parse_dates=[0],index_col=0,squeeze=True,date _ parser=parser)X=int(len(X)*这里实现了滚动预测,应该是阿里马只能预测下一步而不能多步print(predicted=%f,expected=%f % (yhat,OBS))error=mean _ squared _ error(Test,predictions)print( Test MSE:%。3f“%错误)# plot py plot。绘图(测试)py图。plot(预测,color=red)pyplot.show()
效果图如上
https://机器学习掌握。com/ARIMA-用python进行时间序列预测/
使用建议:
https://机器学习掌握。com/gentle-简介-box-Jenkins-方法-时间序列-预测/
https://blog.csdn.net/qq_27123591/article/details/80272669
这里有两个具体的例子实现了阿里马
1.https://机器学习掌握。com/time-series-forecast-study-python-annual-water-usage-Baltimore/
2.https://机器学习掌握。com/时间序列-预测-案例研究-python-monthly-armed-Roberts-Boston/
这两个例子介绍了如何根据acf、pacf选择阿里马的立刻
这里我们用预测实现了阿里马的滚动预测,也可以手动实现(虽然不必要)可以参考:
https://机器学习掌握。com/make-manual-predictions-ARIMA-模型-python/