时间序列adf检验怎么判断平稳性,
参考:https://pengfoo.com/post/machine-learning/2017-01-24
摘要
在ARMA/ARIMA等自回归模型中,模型要求时间序列数据的平稳性。因此,需要对数据的平稳性或数据的N阶差分进行检验,一种常用的方法是ADF检验,即ajdyx检验。
平稳随机过程
在数学中,平稳随机过程或严格意义上的平稳随机过程,也称为狭义平稳过程,是指在固定时间和地点的概率分布与在所有时间和地点的概率分布相同的随机过程:即随机过程的统计特征不随时间变化。这样,数学期望和方差的参数不随时间和位置而变化。
理论上,平稳有两种:严格平稳和宽平稳。在实践中,广泛使用宽平稳性。广义的数学定义是:
对于时间序列ytyt,如果对于任何t,k,mt,k,m,满足以下条件:
$$E(y_t)=E(y_{t m})
cov(y_t,y_{t k})=cov(y_{t k},y_{t k m})$$
则称时间序列ytyt是宽平稳的。
这是ARMA模型稳定的必要条件。所以对于时间序列,首先需要保证使用自回归的N阶差分序列是稳定的。
肉眼检查
以我们一次天池比赛的数据集为例。如图,是该店2015年9月至2016年10月的销售额:
这个数据明显不稳定,我们来看看一阶差分:
_ series=PD . series(data=data[ CNT ])# omit diff 1=DTA=_ series . diff(1)[1:]# DTA[0]isnandiff 1 . plot()PLT . save fig(。/1.jpg差异)
看起来平均值稳定在0左右,也有一定的周期性。
让我们继续看看二阶差分是否可以更平滑:
似乎二阶差分和一阶差分都比较稳定,肉眼很难区分。
只是肉眼无法分辨是否真的光滑,所以我们有必要引入数学方法来正式检验光滑度。
Ajdyx试验
Ajyx检验的意思是检验序列中是否存在ajdyx,因为ajdyx的存在是非平稳时间序列。Ajyx指的是ajdyx工艺。可以证明序列中ajdyx过程的存在是不稳定的,会导致回归分析中的假回归。
专用的冰淇淋检验(Dickey-Fuller检验)和增广的Dickey-Fuller检验可以检验一个自回归模型中是否存在ajdyx(单位根)。专门的冰淇淋检查模式是由D.A. Dickey和hxdxl建立的。
有关测试的详细信息,请参见[6]。因为公式太难打,这里就不赘述了。
Python中的ADF测试
python中时间序列的建模通常使用statsmodel库,这个库在我心目中的科学计算库列表中一直排在最后,因为早期的文档确实比较匮乏,不过最近好像在改善。
Adf验证可以在stats models . TSA . stat tools . ad fuller中进行,一般可以传入类似数据的一维数组,包括list、numpy数组和pandas系列,其他参数可以保留默认。
它的返回值是一个元组,格式如下:
对上述一阶差分数据进行adf检验,可以得到以下结果:
printsm . TSA . stat tools . ad fuller(DTA)
(-9.1916312162314355,2.1156279593784273e-15,12,338,{5%: -2.8701292813761641, 1%: -3.449846029628477, 10% :-2.57153466
如何确定序列能否稳定?主要见:
1%, %5.将原假设的统计值与adf检验结果进行比较。如果ADF检验结果同时小于1%、5%、10%,则说明该假设被很好地拒绝了。在该数据中,ADF结果为-9,小于三级的统计值。
P值是否非常接近0。在这个数据中,P值为2e-15,接近于0。
ADF检验最初的假设是ajdyx存在。只要统计值小于1%,就可以显著地拒绝原假设,认为数据是稳定的。注意,ADF值一般为负值和正值,但只有小于1%才能认为是对原假设的显著拒绝。
至于ADF在1%以上5%以下的结果,不能说不稳定。关键看检验要求。
但是对于这个例子,我们可以自豪地说,数据是稳定的。
谢谢你做了这么一点工作。
参考