转自:https://pengfoo.com/post/machine-learning/2017-01-24

Abstract

在ARMA/ARIMA这样的自回归模型中,模型对时间序列数据的平稳是有要求的,因此,需要对数据或者数据的n阶差分进行平稳检验,而一种常见的方法就是ADF检验,即单位根检验。

平稳随机过程

在数学中,平稳随机过程(Stationary random process)或者严平稳随机过程(Strictly-sense stationary random process),又称狭义平稳过程,是在固定时间和位置的概率分布与所有时间和位置的概率分布相同的随机过程:即随机过程的统计特性不随时间的推移而变化。这样,数学期望和方差这些参数也不随时间和位置变化。
平稳在理论上有严平稳和宽平稳两种,在实际应用上宽平稳使用较多。宽平稳的数学定义为:
对于时间序列 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-09到2016-10的销售额:

该数据显然是不平稳的,我们来看看一阶差分:

_series = pd.Series(data=data['cnt']) # 获取data过程省略
diff1 = dta = _series.diff(1)[1:]  # dta[0] is nan
diff1.plot()
plt.savefig('./diff_1.jpg')


看起来似乎均值稳定在0左右,而且也具有一定周期性。

继续来看看二阶差分能否更平稳一些:

看起来二阶差分和一阶差分都比较稳定,肉眼难辨高下。

只用肉眼是分不清是否真的平稳的,因此,我们有必要引入数学方法对平稳进行形式化的检验。

单位根检验

单位根检验是指检验序列中是否存在单位根,因为存在单位根就是非平稳时间序列了。单位根就是指单位根过程,可以证明,序列中存在单位根过程就不平稳,会使回归分析中存在伪回归。
而迪基-福勒检验(Dickey-Fuller test)和扩展迪基-福勒检验(Augmented Dickey-Fuller test可以测试一个自回归模型是否存在单位根(unit root)。迪基-福勒检验模式是D. A迪基和W. A福勒建立的。
关于检验的详细内容,见[6],碍于公式实在太难打了,这里不再赘述。

ADF Test in Python

在python中对时间序列的建模通常使用statsmodel库,该库在我心中的科学计算库排名中长期处于垫底状态,因为早期文档实在匮乏,不过近来似有好转倾向。
statsmodels.tsa.stattools.adfuller中可进行adf校验,一般传入一个1d 的 array like的data就行,包括list, numpy array 和 pandas series都可以作为输入,其他参数可以保留默认.
其返回值是一个tuple,格式如下:

对上面一阶差分的数据进行adf检验,可以得到如下结果:

print sm.tsa.stattools.adfuller(dta)

(-9.1916312162314355, 2.1156279593784273e-15, 12, 338, {'5%': -2.8701292813761641, '1%': -3.449846029628477, '10%': -2.5713460670144603}, 4542.1540700410897)

如何确定该序列能否平稳呢?主要看:

  1. 1%、%5、%10不同程度拒绝原假设的统计值和ADF Test result的比较,ADF Test result同时小于1%、5%、10%即说明非常好地拒绝该假设,本数据中,adf结果为-9, 小于三个level的统计值。
  2. P-value是否非常接近0.本数据中,P-value 为 2e-15,接近0.

ADF检验的原假设是存在单位根,只要这个统计值是小于1%水平下的数字就可以极显著的拒绝原假设,认为数据平稳。注意,ADF值一般是负的,也有正的,但是它只有小于1%水平下的才能认为是及其显著的拒绝原假设。
对于ADF结果在1% 以上 5%以下的结果,也不能说不平稳,关键看检验要求是什么样子的。

但是对于本例,可以很自豪地说,数据是平稳的了。
就做了这么一点微小的工作,谢谢大家。

Reference

[1] 单位根检验--百度文库
[2] Time Series Analysis in Python with statsmodels
[3] 平稳时间序列预测法
[4] statsmodels 文档
[5] 平稳随机过程--百度百科
[6] 迪基-福勒检验-Wikipedia
[7] 如何看 单位根检验---ADF检验结果

Python时间序列中ADF检验详解相关推荐

  1. 站长在线Python教程精讲:在Python函数中的局部变量详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python函数中的局部变量详解>.本文的主要内容有:变量的作用域的概念.局部变量的概念.局部变量的举例. 目录 1.变量 ...

  2. Python开发中的接口详解和使用方法

    在服务器环境实际开发过程中,往往要通过写接口来请求或者发送数据,那么到底什么是接口,如何通过调用接口发送或者请求数据呢? 一.接口的定义 简单来说,域名(地址)带上参数就是一个接口,然后通过调用此接口 ...

  3. 同步锁 php,python线程中同步锁详解

    这篇文章主要为大家详细介绍了python线程中同步锁的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 在使用多线程的应用下,如何保证线程安全,以及线程之间的同步,或者访问共享变量等问题是十 ...

  4. python enumerate_Python中enumerate用法详解

    enumerate()是python的内置函数.适用于python2.x和python3.x enumerate在字典上是枚举.列举的意思 enumerate参数为可遍历/可迭代的对象(如列表.字符串 ...

  5. python deque_python中deque类详解

    最近在pythonTip做题的时候,遇到了deque类,以前对其不太了解,现在特此总结一下 deque类是python标准库collections模块中的一项,它提供了两端都可以操作的序列,这意味着, ...

  6. python字符串中占位符详解

    一.使用 % 的形式 常用占位符: 1.%d 整数占位符 >>> '%d 木头人'%123 '123 木头人' 2.%f 浮点数占位符 >>> '你有%f米高吗?' ...

  7. python的抽象类详解_第7.19节 Python中的抽象类详解:abstractmethod、abc与真实子类...

    第7.19节 Python中的抽象类详解:abstractmethod.abc与真实子类 一. 引言 前面相关的章节已经介绍过,Python中定义某种类型是以实现了该类型对应的协议为标准的,而不是以继 ...

  8. python 中range(10)什么意思_range什么意思python编程【面试题详解】

    今天爱分享给大家带来range什么意思python编程[面试题详解],希望能够帮助到大家. 今天来谈一谈关于Python中range()的作用,和我个人的理解. range的中文意思是,范围.幅度.或 ...

  9. 【 Python 中 int 用法详解】(转载)

    Python 中 int 用法详解 欢迎转载,转载请注明出处! 文章目录 Python 中 int 用法详解 0. 参考资料 1. int 的无参数调用 2. int 接收数字作为参数 3. int ...

最新文章

  1. solr 3.5 配置及服务器设置
  2. numpy中的tile函数
  3. R语言应用实战系列(五)-朴素贝叶斯算法以及ROC和PR曲线
  4. AJAX中的Back Button/Bookmarking问题和Nikhil Kothari的Atlas解决方案
  5. Mybatis如何打印sql语句
  6. jzoj1273-袁绍的刁难【进制转换】
  7. jq查找字段忽略html标签,jQuery过滤HTML标签并高亮显示关键字的方法
  8. mysql在linux下备份还原,Linux下MySQL的备份与还原
  9. 35 万行代码,旷视重磅开源天元深度学习框架 ,四大特性实现简单开发
  10. PlusWell FileMirror软件产品简介
  11. 双android手机同步工具,手机同步软件Android Manager使用图文教程
  12. 计算机专业保研面试备考:高等数学
  13. 苹果状态栏HTML,webview内嵌的html页面,在ios系统上12以上版本和12以下版本状态栏效果不一样...
  14. 刷脸开门上班取外卖等都会无处不在
  15. 分享 |转录组测序那些事儿
  16. how2heap(5):tcache_poisoning 2.31
  17. 详解Unicode与UTF-8、UTF-16、UTF-32.
  18. String的用法大全
  19. C++项目之演讲比赛模拟
  20. 你会用“お”和“ご”吗?

热门文章

  1. 【Python养成】常用内置函数 — 1(详解前8个内置函数)
  2. Oracle表分区详解(优缺点)
  3. 还是firefox 连接https 报错:(连接被重置)(已解决)
  4. matlab表示sa函数,SA:T1编写主函数法和T2Matlab自带的SA工具箱GUI法,两种方法实现对二元函数优化求解——Jason niu...
  5. 江西建材杂志江西建材杂志社江西建材编辑部2022年第11期目录
  6. 【seo】网站优化工具 - 5118 视频教程
  7. 神策数据正式推出智能预警分析,你的指标预警小管家上线啦!
  8. flask 动态模板html,HTML|Flask之模板继承
  9. java 获取邮编_JAVA爬取邮编信息,生成XML
  10. 强烈谴责所谓软件管家(360卫士,QQ管家,金山毒霸)并倡导普通用户卸载