时间序列分析
给定一个已被观测了的时间序列,预测该序列的的未来值。
重点介绍AR模型、MA模型、ARMA模型和ARIMA模型
1、时间序列的预处理
拿到一个观察值序列后,首先要对它的纯随机性和平稳性进行检验,称之为预处理。在此区别纯随机序列、平稳非白噪声序列、非平稳序列。
纯随机序列(白噪声序列),序列的各项之间没有任何相关关系,序列有着完全无序的随机波动,可以终止对该序列的分析。白噪声序列是没有信息可提取的平稳序列。
平稳非白噪声序列,他的均值和方差是常数,现在普遍采用ARMA模型进行处理,提取该序列的有用信息
非平稳序列,由于均值和方差不稳定,处理方法一般将其转换成平稳序列,以平稳序列的分析方法进行研究。如果一个时间序列经差分运算后具有平稳性,则该序列为差分平稳序列,可用ARIMA模型分析
1) 平稳性检验:
贴了一部分定义,只用明白什么是自相关系数(表示数据和数据间的关系),什么样是平稳性(信号的均值或说期望是常数)。
a)平稳时间序列的定义
b) 平稳性的检验
两种检验方法。一种是根据时序图和自相关图的特征作出判断的图检验,操作简单、应用广泛,但带有主观性;另一种是构造检验统计量进行检验,目前常用的方法是单位根检验
I 时序图检验。根据平稳时间序列的均值和方差都为常数的性质,平稳序列的时序图显示该序列值式中在一个常数附近波动,并且波动的范围有界。倘若有明显的趋势性或周期性,那他通常不是平稳序列。
II 自相关图检验。平稳序列具有短期相关,说明对平稳序列而言通常近期的序列值对
现有值影响较大,间隔越远的过去值对现有值影响较小。随着延迟期数k的增加,平稳序列的自相关系数ρk(延迟k期)会比较快的衰减趋向于0,在0处波动,而非平稳序列则衰减速度较慢,这就是利用自相关图进行平稳性检验的标准。
III 单位根检验。单位根检验是指检验序列中是否存在单位根,如果存在单位根就是非平稳时间序列了。涉及到“单位根检验p值”。直接看后面有个操作步骤,加黑的。
2) 纯随机性检验:白噪声检测,构造验证统计量来检验序列的纯随机性,常用的验证统计量有Q统计量、LB统计量,一般很少出现纯随机状态(即序列值之间没有任何关系)。涉及统计量 “白噪声检验p值” accor_djungbox()函数
怎么计算 安利 https://blog.csdn.net/wnma3mz/article/details/79874577,里面有代码
2、平稳时间序列分析
对于拟合平稳序列最常用的模型就是ARMA模型,又可以AR模型、MA模型和ARMA三大类。
1) AR模型
在t时刻的值由前p期的多元线性回归,认为x主要是受过去p期的序列值的影响。误差为当前的随机干扰ε,为零均值白噪声序列。
a.均值——求期望
已知,所以可得
b.方差——有界等于常数
c.自相关系数(ACF)
平稳AR(p)模型的自相关系数呈指数的速度衰减,始终有非零取值,不会再k大于某个常数之后就恒等于0,具有拖尾性。
d.偏自相关系数(PACF)
单纯地表明测度对的影响,即平稳AR(p)模型的偏自相关系数具有p阶截尾性。
2) MA模型
在t时刻的随机变量的取值是由前q期的随机扰动的多元线性函数,误差为当前的随机干扰ε,为零均值白噪声序列,μ是序列的均值。认为x主要受过去q期误差项的影响。
3) ARMA模型
自回归移动平均模型,简记为ARMA(p,q)
即在t时刻的随机变量的取值是由前p期和前q期的随机扰动的多元线性函数。误差为当前的随机干扰ε,为零均值白噪声序列。认为x主要受过去p期的序列值和过去q期误差项的共同影响。特别,q=0 AR模型;p=0 MA模型
4) 平稳时间序列建模
某个时间序列经过预处理,被判定为平稳非白噪声序列,就可以利用ARMA模型进行建模。计算出平稳非白噪声序列的自相关系数和偏自相关系数,再由AR(p)模型、MA(p)、ARMA(p)的自相关系数和偏自相关系数的性质,选择合适的模型。
3. 非平稳时间序列分析
绝大多数序列都是非平稳序列,更多采用随机时序分析,具体建立的模型由ARIMA模型、残差自回归模型、季节模型等。重点采用ARIMA模型对非平稳时间序列进行分析建模。
1) 差分运算
p阶差分:相距一期的两个序列值之间的减法运算称为1阶差分。
k步差分:相距k期的两个序列值之间的减法运算称为k步差分
2) ARIMA模型
本质是差分运算和ARMA模型结合。
根据这个步骤可总结如下:
I 平稳性检测。画个序列变化图,看他变化是不是稳定,均值要保持稳定;然后再看他的自相关图,如果自相关系数长期不等于0,说明序列具有很强的长期相关性,序列要有很强的短期相关性;但是我推荐使用平方根检验方法,判断(平方根检验统计量对应的)p值是否大于0.05,此处可判断序列是否为非平稳序列。(非平稳序列一定不是白噪声序列)
II 如果不是非平稳序列,那做个一阶差分试试,再根据第I步进行平稳性验证,不满足就再差分一次试试,直至得到稳定序列
III 针对第II步得到的平稳序列,我们做白噪声检验,(白噪声检验统计量对应的)p值远小于0.05,说明得到但是平稳非白噪声序列。
IV 针对平稳非白噪声序列,仿照ARMA模型进行分析。确定p、q
1. 人的主观识别,根据截尾、拖尾确定p、q,我可做不到这点
2. 相对最优模型识别。计算ARMA(p,q),当p和q均小于等于3的所有组合的BIC信息量,取其中BIC信息量达到最小的模型阶数。BIC矩阵中最小值的索引(a,b),p=a,q=b,如最小BIC值的索引为(0,1),表示p=0,q=1.即p,q定阶完成。
综上n阶差分后确定的模型为ARIMA(p,n,q),此处为ARIMA(0,1,1)。
需要指出模型不一定是唯一的,ARIMA(1,1,0)和ARIMA(1,1,1)也可以通过检验。
V 针对建立好的ARIMA模型检验残差(保证为白噪声序列,认为是无偏的),再估计待求系数参数,最后进行模型预测。
利用模型向前预测的时期越长,预测误差将会越大,这是时间序列分析的典型特点。
4. Python主要时序算法函数
主要调用库Statsmodel,算法主要是ARIMA模型,在使用该模型进行建模时,需要进行一系列判断操作,主要包含平稳性检验、白噪声检测、是否差分、AIC和BIC指标值、模型定阶,最终做预测。相关函数如下
需要指出
summary()和summary2()函数生成已有模型的报告, 使用格式:
arima.summary(),其中arima为已经建立好的ARIMA模型,返回一份格式化的模型 报告,包含模型的系数、表胡宗南误差、p值、AIC和BIC等详细指标。
Adffuller()是对观测值序列进行单位根检验(ADF test),使用格式:
h=adffuller(Series,maxlag=None,regression=’c’,autolag=’AIC’,store=False,regresults=False)输入参数Series为一维观测值序列、返回值依次为adf、pvalue、usedlag、nobs、criticalvalues、icbest、regresults、resstore。
其他函数的具体用法可百度。