大家好,欢迎来到IT知识分享网。
ARIMA模型介绍
ARIMA模型(英语:Autoregressive Integrated Moving Average model),差分整合移动平均自回归模型,又称整合移动平均自回归模型(移动也可称作滑动),是时间序列预测分析方法之一。ARIMA(p,d,q)中,AR是“自回归”,p为自回归项数;MA为“滑动平均”,q为滑动平均项数,d为使之成为平稳序列所做的差分次数(阶数)。“差分”一词虽未出现在ARIMA的英文名称中,却是关键步骤。
它对平稳时间序列的预测只不过是一个线性(如线性回归)方程。预测因子取决于ARIMA模型的参数(p、d、q):
AR(自回归)项的个数(p):AR项只是相依变量的滞后项。或者,如果p为5,x(t)的预测因子将是x(t-1)。x(t-5)
移动平均项数(g):MA项是预测方程中的滞后预测误差。例如,如果q为5,x(t)的预测值将为e(t-1)。e(t-5),其中e(i)是瞬时移动平均值与实际值之间的差值。
差异数(d):这是非季节性差异的数量,也就是说,在这种情况下,我们取一阶差分,这样我们就可以传递该变量,并将d=0传递给原始变量,将d=1放入。两者都会产生相同的结果
ACF(Autocorrelation Function),自协方差或自相关函数。时间序列Xt的自协方差是信号与其经过时间平移的信号之间的协方差。例如将t1,t2与t1-5和t2-5 相比。将有序的随机变量序列与其自身相比较,它反映了同一序列在不同时序的取值之间的相关性。
偏自相关函数(PACF)计算的是严格的两个变量之间的相关性,是剔除了中间变量的干扰之后所得到的两个变量之间的相关程度。对于一个平稳的AR§模型,求出滞后为k的自相关系数p(k)时,实际所得并不是x(t)与x(t-k)之间的相关关系。这是因为在这两个变量之间还存在k-1个变量,它们会对这个自相关系数产生一系列的影响,而这个k-1个变量本身又是与x(t-k)相关的。这对自相关系数p(k)的计算是一个不小的干扰。而偏自相关函数可以剔除这些干扰。
导入模型
import sys import os import warnings warnings.filterwarnings("ignore") import pandas as pd import numpy as np from arch.unitroot import ADF import matplotlib.pylab as plt %matplotlib inline from matplotlib.pylab import style style.use('ggplot') import statsmodels.api as sm import statsmodels.formula.api as smf import statsmodels.tsa.api as smt from statsmodels.tsa.stattools import adfuller from statsmodels.stats.diagnostic import acorr_ljungbox from statsmodels.graphics.api import plot pd.set_option('display.float_format', lambda x: '%.5f' % x) np.set_printoptions(precision=5, suppress=True) """中文显示问题""" plt.rcParams['font.family'] = ['sans-serif'] plt.rcParams['font.sans-serif'] = ['SimHei']
平稳性检验
AR、MA和ARMA模型都必须是 “平稳非白噪声序列”,所以需要 “平稳性检验“ 和 “白噪声检验”
方法一:观察序列图:若个体值要围绕序列均值上下波动,没有明显的上升或下降趋势,则是平稳序列。
如果出现上升或下降趋势,需要对原始序列进行差分平稳化处理在 下面不平稳序列转平稳序列部分,会讲如何差分平稳化
方法二:观察自相关图:平稳的序列的自相关图(ACF)和 偏相关图(PACF)不是拖尾就是截尾。
拖尾:始终有非零取值,不会在k大于某个常数后就恒等于零(或在0附近随机波动),顾名思义,就是序列缓慢衰减,“尾巴”慢慢拖着滑下来。
截尾:在大于某个常数k后快速趋于0为k阶截尾,突然截断了,像个悬崖
这张图可以看出,左图(自相关函数图)呈现出拖尾特征(2阶拖尾),而右图(偏自相关函数图)呈现出截尾特征(2阶截尾)
这张图可以看出,左图(自相关函数图)呈现出截尾特征(1阶截尾),而右图(偏自相关函数图)呈现出拖尾特征(1阶拖尾)
这张图可以看出,左图(自相关函数图)呈现出拖尾特征(2阶拖尾),右图(偏自相关函数图)也呈现出拖尾特征(1阶拖尾)
方法三:单位根检验:当一个时间序列的滞后算子多项式方程存在单位根时,我们认为该时间序列是非平稳的;反之,当该方程不存在单位根时,我们认为该时间序列是平稳的。
常见的单位根检验方法有DF检、ADF检验和PP检验,今天我们会用ADF检验来为大家演示
在Python中,有两个常用的包提供了ADF检验,分别是statsmodel和arch。
第一种方法:使用statsmodel的方法为:
from statsmodels.stats.diagnostic import unitroot_adf unitroot_adf(df.pct_chg)
输出为: 这里包含了检验值、p-value、滞后阶数、自由度等信息。 我们看到了检验统计量为-14.46,远小于1%的临界值-3.47,即p值远小于0.01,因此我们拒绝原假设,认为该时间序列是平稳的。(这里原假设是存在单位根,即时间序列为非平稳的。)
第二种方法:使用arch的方法为:
from arch.unitroot import ADF ADF(df.pct_chg)
其输出信息与statsmodel基本是一致的。
方法四:以上几个方法融合,即几种方法都做:结果更具有说服力
1.绘制时序图,观察是否存在波动和向上或向下的趋势
2.做相关系数图,若随时间间隔 k 增大,自相关系数迅速衰减则序列平稳;若随时间间隔 k 增大,自相关系数衰减缓慢则序列不平稳
3.进行单位根检验,P-值<α时,拒绝存在单位根的原假设,序列平稳。
不平稳序列转为平稳序列
取对数可以消除数据波动变大趋势对数列进行差分,可以消除数据增长趋势性和季节性。
对于非平稳序列,如果先进行差分后的结果不满足要求,则需要在原有基础上继续进行差分,直到差分后的结果属于平稳性序列
方法:
1.差分Differencing – t在一个特定的时间差取差分
2.分解Decomposition 对趋势和季节性进行建模,并将其从模型中移除
差分Differencing
取某一时刻的观测值与前一时刻的观测值之差。
#Differencing ts_log_diff=ts_log-ts_log.shift() # reduced trend considerably ts_log_diff.dropna(inplace=True) test_stationarity(ts_log_diff)
由图可见,均值和标准差的变化都很小,并且在测试中小于10%的临界值,因此这个序列是平稳的,置信度为90%。我们也可以采用二阶或三阶差分,在某些应用中可能会得到更好的结果。
分解 Decomposing
both trend and seasonality are modeled separately and the remaining part of the series is returned.
将趋势和季节性分别建模,并返回序列的其余部分。
from statsmodels.tsa.seasonal import seasonal_decompose decomposition = seasonal_decompose(ts_log) trend = decomposition.trend seasonal = decomposition.seasonal #作图 residual = decomposition.resid plt.subplot(411) plt.plot(ts_log,label='Original') plt.legend(loc='best') plt.subplot(412) plt.plot(trend,label='Trend') plt.legend(loc='best') plt.subplot(413) plt.plot(seasonal,label='Seasonality') plt.legend(loc='best') plt.subplot(414) plt.plot(residual,label='Residuals') plt.legend(loc='best') plt.tight_layout()
ts_log_decompose = residual ts_log_decompose.dropna(inplace=True) test_stationarity(ts_log_decompose)
从测试结果看到,P值远远小于1%的临界值,所以该序列非常符合平稳时间序列。
白噪声检验
from statsmodels.stats.diagnostic import acorr_ljungbox acorr_ljungbox(data.diff1.dropna(), lags = [i for i in range(1,12)],boxpierce=True)
(array([11.30402, 13.03896, 13.37637, 14.24184, 14.6937 , 15.33042, 16.36099, 16.76433, 18.15565, 18.16275, 18.21663]), array([0.00077, 0.00147, 0.00389, 0.00656, 0.01175, 0.01784, 0.02202, 0.03266, 0.03341, 0.05228, 0.07669]), array([10.4116 , 11.96391, 12.25693, 12.98574, 13.35437, 13.85704, 14.64353, 14.94072, 15.92929, 15.93415, 15.9696 ]), array([0.00125, 0.00252, 0.00655, 0.01135, 0.02027, 0.03127, 0.04085, 0.06031, 0.06837, 0.10153, 0.14226]))
通过P<αP<α(α通常为0.05),拒绝原假设,故差分后的序列是平稳的非白噪声序列,可以进行下一步建模。
下一篇 我们继续看ARIMA模型的定阶和参数估计部分。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/98257.html