Python ADF检验

article/2025/10/8 21:38:24

转自: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(yt)=E(yt+m)cov(yt,yt+k)=cov(yt+k,yt+k+m)E(yt)=E(yt+m)cov(yt,yt+k)=cov(yt+k,yt+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检验结果


http://chatgpt.dhexx.cn/article/dtudnHt9.shtml

相关文章

ADF单位根检验三种形式_Eviews之ADF单位根检验

本文使用的数据是2010-01-04——2020-03-05沪深300指数的每日收盘价,走势图如下: 接下来,开始使用eviews8.0检验: 1、双击点开所要检验的时间序列数据 2、点击view,然后再选择Unit Root Test 3、检验类型选择ADF检验。检验的顺序一般是 原始数据->一阶差分->二阶差分…

时间序列分析之ADF检验

ADF检验 在使用很多时间序列模型的时候,如 ARMA、ARIMA,都会要求时间序列是平稳的,所以一般在研究一段时间序列的时候,第一步都需要进行平稳性检验,除了用肉眼检测的方法,另外比较常用的严格的统计检验方法…

ADF检验数据平稳性

目录 1 背景 2 单位根 3 单位根检验 4 ADF检验 5 python 实现与结果解释 1 背景 在使用很多时间序列模型的时候,如 ARMA、ARIMA,都会要求时间序列是平稳的,所以一般在研究一段时间序列的时候,第一步都需要进行平稳性检验&…

时间序列学习(4):平稳性检验(单位根检验、ADF检验)

时间序列学习(4):平稳性检验(单位根检验、ADF检验) 1、单位根检验2、ADF检验3、指数走势的检验4、对数收益率序列检验 相关图可以大致判断序列是否平稳。但是,这毕竟不是严格的。 这篇笔记来就谈一谈平稳性…

Spectral clustering(谱聚类)算法的实现

目录 1.作者介绍2.关于谱聚类的介绍2.1 谱聚类概述2.2 无向权重图2.3 邻接矩阵2.4 相似矩阵2.5 度矩阵2.6 拉普拉斯矩阵2.7 K-Means 3.Spectral clustering(谱聚类)算法实现3.1 数据集3.2 导入所需要的包3.3 获取特征值和特征向量3.4 利用K-Means聚类3.5…

Python学习4-谱聚类

一,谱聚类原理 谱聚类算法原理可以参考如下链接。 这个视频推导出了拉普拉斯矩阵,但没有更新后续优化问题。 机器学习-白板推导系列(二十二)-谱聚类(Spectral Clustering)_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV…

机器学习-层次聚类(谱系聚类)算法

文章目录 简介距离矩阵最短距离法最长距离法类平均法重心法python应用 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 层次聚类(Hierarchical Clustreing)又…

到底什么是谱聚类算法?

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达本文转自:视学算法 谱聚类算法是目前最流行的聚类算法之一,其性能及适用场景优于传统的聚类算法如k-均值算法,本文对谱聚类算法进行了…

图像聚类-谱聚类

最近做的一个东西跟这个相关,本来希望是用深度学习对于没有标签的图像数据进行分类,但是通常情况下,深度学习是对有标签的数据进行学习,目的是用来自动提取特征,代替传统的手工提取特征。因此,比较容易想到…

聚类算法实践(二)——谱聚类、Chameleon聚类

上一篇文章里说到的层次聚类和K-means聚类,可以说是聚类算法里面最基本的两种方法(wiki的cluster analysis页面都把它们排前两位)。这次要探讨的,则是两个相对“高级”一点的方法:谱聚类和chameleon聚类。 4、谱聚类 …

谱聚类的案例

1. 政治博客数据集(见附件Pol_Blogs_CSV文件) 数据集网址一: Political blogs 数据集网址二: http://www.casos.cs.cmu.edu/computational_tools/datasets/external/polblogs/index11.php 政治博客数据是由Adamic和Glance于2005年收集并分析的. 该数据集包含了2004年美国总…

谱聚类算法 matlab

1、谱聚类算法步骤公式 (1)整理数据集,使数据集中数据在0-1之间。假设数据集m行n列。 (2)求邻接矩阵W。元素值为每一点到其他点之间距离,即权重。 (3)求相似度矩阵S,相…

谱聚类(Spectral Clustering)详解

原文地址为: 谱聚类(Spectral Clustering)详解 谱聚类(Spectral Clustering)详解 谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法——将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似,而子图间距离尽量距离较远&…

从拉普拉斯矩阵说到谱聚类

从拉普拉斯矩阵说到谱聚类 0 引言 11月1日上午,机器学习班 第7次课,邹讲聚类(PPT),其中的谱聚类引起了自己的兴趣,邹从最基本的概念:单位向量、两个向量的正交、方阵的特征值和特征向量&#xf…

聚类--谱聚类

前言:关于谱聚类,已经有很多厉害的老师和大牛写过教程博客等,也有很不错的tutorial文章可供参考。此博文仅记述个人的一些总结、思考、疑问,算是对现有谱聚类学习资源的一个小补充。 1. 谱聚类简述 说到聚类,可能最先…

MATLAB 谱聚类

k-means 可以说是思想最简单的聚类了,但是它在应对非凸数据时却显得手足无措,例如如下的数据分类: 各类之间虽然间隔较远,但是非凸,这时候就需要引入谱聚类了(以下为谱聚类效果)。 本文参考 [1]Ulrike von Luxburg. A…

谱聚类算法详解

谱聚类(Spectral Clustering)算法简单易行,其聚类性能优于传统的K-means算法。谱聚类将数据的划分转化为对图的分割,是一种基于图论的聚类方法,其直观理解为根据图内点的相似度将图分为多个子图,使子图内部…

谱聚类算法简单理解

一、算法思想 谱聚类是基于图论的知识所演化出的算法,在聚类中广泛使用。主要思想是将所有的数据看成空间中的点,这些点之间可以用边连接起来,距离较远的两点之间边的权重值较低,距离较近的两点间边的权重值较高,然后…

了解聚类是什么。聚类方法:k-means、核聚类、层次聚类、谱聚类

聚类 1.什么是聚类2.聚类方法2.1 划分式聚类方法k-meansk-meansbi-kmeans 基于密度的方法DBSCANOPTICS算法 层次化聚类算法核聚类支持向量聚类谱聚类引言优缺点步骤 参考文档:参考 1.什么是聚类 定义 聚类(Clustering) 是按照某个特定标准(如距离)把一个数据集分割成不同的类…

【聚类】谱聚类解读、代码示例

【聚类】谱聚类详解、代码示例 文章目录 【聚类】谱聚类详解、代码示例1. 介绍2. 方法解读2.1 先验知识2.1.1 无向权重图2.1.2 拉普拉斯矩阵 2.2 构建图(第一步)2.2.1 ϵ \epsilon ϵ 邻近法2.2.2 k 近邻法2.2.3 全连接法 2.3 切图(第二步&a…