用 Python 检验时间序列的平稳性

python 白噪声检验-时间序列 平稳性检验 白噪声 峰度 偏度 时间序列简而言之,时间序列就是带时间戳的数值序列。股票,期货等金融数据就是典型的时间序列。量化的过程,很多时间都是在分析时间序列,找到稳定赚钱因子。平稳性定义所谓时间序列的平稳性,是指时间序列的均值,方差以及协方差都是常数,与时间t无关。这样的序列才可以作为我们基于历史预测未来的基础。满足以上条件属于严平稳,一般达到弱平稳都是可以接受的。平稳性是当前时间序列分析的前提条件,因为我们的建模过程基本都... 阅读详情

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料以及群交流解答点击即可加入


今天讲解一下如何用python来做时间序列的平稳性检验。首先我们还是来简单介绍一下平稳性检验的相关概念。

 

图1.平稳性序列的相关公式

图1.平稳性序列的相关公式

 

时间序列的平稳性可分为严平稳和宽平稳。设{Xt}是一时间序列,对任意正整数m,任取t1、t2、t3、...、tm∈T,对任意整数τ,假如满足图1中式(1),则称时间序列{Xt}是严平稳时间序列。而宽平稳的定义为,如果{Xt}满足以下三个条件:

(1)任取t∈T,有E(Xt·Xt)<∞;
(2)任取t∈T,有E Xt =μ,μ为常数;
(3)任取t,s,k∈T,且k+s-t∈T,有γ(t, s)=γ(k, k+s-t)
则称{Xt}为宽平稳时间序列。

因为实际应用中我们很难获得随机序列的分布函数,所以严平稳用得极少,主要是使用宽平稳时间序列。

在了解了平稳性的基本概念之后,我们再来说一下平稳时间序列的意义。平稳时间序列的分析也遵循数理统计学的基本原理,都是利用样本信息来推测总体信息。这就要求分析的随机变量越少越好(也就是数据的维度越小越好),而每个变量获得样本信息越多越好(也就是数据的观测值越大越好),因为随机变量越少,分析过程越简单,样本容量越大,分析的结果越可靠。

但时间序列的数据结构有其特殊性,它在任意时刻t的序列值Xt都是一个随机变量,而且由于时间的不可重复性,该变量在任意一个时刻只能获得唯一的样本观测值。

由于样本信息太少,如果没有其他的辅助信息,这种数据结构通常是没有办法分析的,但序列平稳性就可以有效解决这个问题。在平稳序列中,序列的均值等于常数就意味着原本含有可列多个随机变量的均值序列{μt, t∈T}变成了一个常数序列{μ, t∈T},原本每个随机变量的均值μt只能依靠唯一的一个样本观察值xt去估计,现在由于μt=μ,于是每一个样本观察值xt,都变成了常数均值的样本观察值,如图1中式(2)所示。

这就极大减少了随机变量的个数,并增加了待估参数的样本容量,这也就降低了时序分析的难度。

在了解了时间序列的平稳性之后,我们再来详细讲解一下如何用python来进行检验。

用python来进行平稳性检验主要有3种方法,分别是时序图检验、自相关图检验以及构造统计量进行检验。

首先来说时序图检验,时序图就是普通的时间序列图,即以时间为横轴,观察值为纵轴进行检验。这里笔者给出3个例子,因为时序图过于简单,所以笔者在这里直接用Excel作时序图,用python也可以,不过没有Excel简单。

第一个例子是1964-1999年中国纱年产量时间序列(该数据来自北京统计局),其数据如图2所示,序列图如图3所示。图3中明显可以看出,中国纱年产量序列有明显的递增趋势,所以它一定不是平稳序列。

 

图2. 纱产量部分数据截图

图2. 纱产量部分数据截图

 

图3. 纱产量时序图

图3. 纱产量时序图


第二个例子是1962年1月至1975年12月平均每头奶牛月产奶量时间序列(数据来自网站http://census-info.us),其数据如图4所示,序列图如图5所示。从图5中可以看出,平均每头奶牛的月产奶量以年为周期呈规则的周期性,此外还有明显的逐年递增趋势,所以该序列也一定不是平稳序列。

图4. 奶牛产量部分数据截图

图4. 奶牛产量部分数据截图

 

图5. 奶牛产量时序图

图5. 奶牛产量时序图


第三个例子是1949年至1998年北京市每年最高气温序列(数据来自北京市统计局),其数据如图6所示,序列图如图7所示。从图7中可以看出,北京市每年的最高气温始终围绕在37度附近随机波动,没有明显趋势或周期,基本可以视为平稳序列,但我们还需要利用自相关图进一步验证。

 

图6. 北京最高气温部分数据截图

图6. 北京最高气温部分数据截图

 

图7. 北京最高气温时序图

图7. 北京最高气温时序图

 

从上面的例子可以看出,时序图只能粗略来判断一个时间序列是否为平稳序列,我们可以用自相关图来更进一步检验。要画自相关图,我们就要用到python,下面是相关代码。

import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.graphics.tsaplots import plot_acf

temperature = r'C:\Users\北京气温.xls'
milk = r'C:\Users\奶牛产量.xlsx'
yarn = r'C:\Users\纱产量.xls'

data_tem = pd.read_excel(temperature, parse_date=True)
data_milk = pd.read_excel(milk, parse_date=True)
data_yarn = pd.read_excel(yarn, parse_date=True)

plt.rcParams.update({'figure.figsize':(8,6), 'figure.dpi':100}) #设置图片大小
plot_acf(data_tem.Tem) #生成自相关图
plot_acf(data_milk.milk_yield)
plot_acf(data_yarn.yarn_yield)
plt.show()

画自相关图用到的是statsmodels中的plot_acf方法,这个方法很简单,只需要直接输入数据即可,不过数据要是一维的,生成的3张图如图8、图9和图10所示。

 

图8. 纱产量自相关图

图8. 纱产量自相关图

 

图9. 奶牛产量自相关图

图9. 奶牛产量自相关图

 

图10. 北京最高气温自相关图

图10. 北京最高气温自相关图

平稳序列通常具有短期相关性,即随着延迟期数k的增加,平稳序列的自相关系数会很快地衰减向零,而非平稳序列的自相关系数的衰减速度会比较慢,这就是我们利用自相关图判断平稳性的标准。我们就来看下这3张自相关图,图8是纱年产量的自相关图,其横轴表示延迟期数,纵轴表示自相关系数,从图中可以看出自相关系数衰减到零的速度比较缓慢,

在很长的延迟期内,自相关系数一直为正,然后为负,呈现出三角对称性,这是具有单调趋势的非平稳序列的一种典型的自相关图形式。再来看看图9,这是每头奶牛的月产奶量的自相关图,图中自相关系数长期位于零轴一边,这是具有单调趋势序列的典型特征,

同时还呈现出明显的正弦波动规律,这是具有周期变化规律的非平稳序列的典型特征。最后再来看下图10,这是北京每年最高气温的自相关图,图中显示该序列的自相关系数一直比较小,可以认为该序列一直在零轴附近波动,这是随机性较强的平稳序列通常具有的自相关图。

最后我们再讲一下ADF方法。前面两种方法都是作图,图的特点是比较直观,但不够精确,而ADF法则是直接通过假设检验的方式来验证平稳性。ADF(全称Augmented Dickey-Fuller)是一种单位根检验方法,单位根检验方法比较多,而ADF法是比较常用的一种,其和普通的假设检验没有太大区别,都是列出原假设和备择假设。ADF的原假设(H0)和备择假设(H1)如下。
H0:具有单位根,属于非平稳序列。
H1:没有单位根,属于平稳序列,说明这个序列不具有时间依赖型结构。
下面我们就用python代码来解释一下ADF的用法。

from statsmodels.tsa.stattools import adfuller
yarn_result = adfuller(data_yarn.yarn_yield) #生成adf检验结果
milk_result = adfuller(data_milk.milk_yield)
tem_result = adfuller(data_tem.Tem)

print('The ADF Statistic of yarn yield: %f' % yarn_result[0])
print('The p value of yarn yield: %f' % yarn_result[1])
print('The ADF Statistic of milk yield: %f' % milk_result[0])
print('The p value of milk yield: %f' % milk_result[1])
print('The ADF Statistic of Beijing temperature: %f' % tem_result[0])
print('The p value of Beijing temperature: %f' % tem_result[1])

这里我们用的是statsmodels中的adfuller方法,其使用也比较简单,直接输入数据即可,但其返回值较多,返回的结果中共有7个值,分别是adf、pvalue、usedlag、nobs、critical values、icbest和resstore,这7个值的意义大家可以参考官方文档,

我们这里用到的是前两个,即adf和pvalue,adf就是ADF方法的检验结果,而pvalue就是我们常用的p值。我们的得到结果如图11所示。

 

图11. ADF检验结果

图11. ADF检验结果

 

在图11中,我们可以看到,纱产量、奶牛产量和北京气温的adf值分别是-0.016384、-1.303812和-8.294675,这个值理论上越负越能拒绝原假设,但我们在这里不用adf来判断,而是用p值。这3个p值分别是0.957156、0.627427和0.000000,

以常用的判断标准值0.05作为参考,前两个p值都远大于0.05,说明其是支持原假设的,说明纱产量和奶牛产量都是非平稳序列,而北京气温序列的p值为零,说明是拒绝原假设,表明该序列是一个平稳序列。我们可以看到,利用adf法和前面两种方法得到的结果是一致的。

本文比较详细地介绍了判断时间序列平稳性的3种方法,这3种方法在实际应用中是经常用到的,当然判断平稳性的方法还有很多种,大家如有需要也可以自行查找相关资料。

python平稳性检验程序_用python处理时间序列数据,检验平稳性跟纯随机性 用python处理时间序列数据,检验平稳性跟纯随机性from statsmodels.tsa.stattools import adfuller as adffrom statsmodels.graphics.tsaplots import plot_acf, plot_pacfimport pandas as pdimport numpy as np!pip install statsmodel... 阅读详情

相关推荐

判断时间序列数据的平稳性(Python实现)

在KPSS检验中,我们关注的是检验结果中的KPSS统计量和p值。如果KPSS统计量大于临界值且p值小于设定的显著性水平,则可以拒绝原假设,即数据是非平稳的。相反,如果KPSS统计量小于临界值且p值大于等于显著性水平,则无法拒绝原假设,即数据可能是平稳的。如果p值小于设定的显著性水平(例如0.05),则可以拒绝原假设,即数据是非平稳的。相反,如果p值大于等于显著性水平,则无法拒绝原假设,即数据可能是平稳的。相反,如果数据在图中呈现出平稳的特征,即在不同时间段内波动较小,那么数据可能是平稳的。

CodeByte的博客 576

如何用Python检查时间序列数据是否平稳?

时间序列数据通常以其时间性质为特征。这种时间性质为数据增加了趋势或季节性,使其与时间序列分析和预测兼容。如果时间序列数据不随时间变化或没有时间结构,则称其为静态数据。因此,检查数据是否平稳是非常必要的。在时间序列预测中,如果数据是平稳的,我们就无法从数据中获得有价值的见解。

qq_41314882的博客 2194

判断时间序列数据平稳性的Python方法及代码

如果一个时间序列是平稳的,那么它的统计特性(如均值和方差)不会随着时间的变化而发生改变。否则,如果时间序列不是平稳的,就会出现趋势或季节性变化,导致统计模型的预测精度下降。如果p值小于0.05,则我们可以拒绝原假设,即时间序列数据不是平稳的。现在,我们已经学会了如何使用Python判断时间序列数据是否平稳。在实际应用中,我们可以使用这些方法来优化预测模型,从而更好地分析和解释时间序列数据。在上述代码中,我们生成了一个长度为1000的时间序列数据,并使用plot()函数将其可视化。

m0_47037246的博客 957

python平稳性检验程序_用Python检验时间序列的平稳性

在做时间序列分析时,我们经常要对时间序列进行平稳性检验,而我们常用的软件是SPSS或SAS,但实际上python也可以用来做平稳性检验,而且效果也非常好,今天笔者就讲解一下如何用python来做时间序列的平稳性检验。首先我们还是来简单介绍一下平稳性检验的相关概念。图1. 平稳性序列的相关公式时间序列的平稳性可分为严平稳和宽平稳。设{Xt}是一时间序列,对任意正整数m,任取t1、t2、t3、...、...

weixin_32831351的博客 2160

Python量化基础:时间序列的平稳性检验

时间序列数据的平稳性对于我们采用什么样的分析方式、选择什么样的模型有着至关重要的影响。 我们想一下,假如一个时间序列的波动趋势从来没有稳定过,那么它每个时期的波动对于之后一段时期的影响都是无法预测的,因为它随时可能“变脸”。而当一个时间序列的特征维持稳定,比如它的均值和方差是稳定的,那么我们认为在之后的一段时间里,它的数据分布跟历史的数据分布大概率是保持一致的,这时,我们就可以基于历史数据对未来的...

量化祛魅师 老Q。 3万+

基于STM32的超声波流量计设计

本项目基于STM32微控制器设计了一种超声波流量计,采用时间差法测量液体或气体的流速,计算流量并通过显示屏实时显示,同时支持远程数据传输。本设计通过STM32微控制器实现了基于时间差法的超声波流量计,集成了超声波信号采集、流量计算、状态显示和远程通信功能。本系统需要实现超声波信号的实时采集与处理,计算流速和流量,并将数据通过OLED显示和无线模块上传。系统需具备高精度的时间测量能力和良好的抗干扰能力。通过计算超声波在顺流和逆流方向上的传播时间差,结合管道直径与流体特性,计算流速并进一步计算流量。

stm32d1219的博客 2351

用python处理时间序列数据,检验平稳性跟纯随机性

用python处理时间序列数据,检验平稳性跟纯随机性

Yuka_bro 4988

【小白指南】如何将deepseek引入WPS\Word\Excel中去?

如何将deepseek引入WPS\Word\Excel中去?纯小白都能看的懂,一步步操作就能行

2503_90498422的博客 1万+

python平稳性检验程序_用 Python 检验时间序列的平稳性

在做时间序列分析时,我们经常要对时间序列进行平稳性检验,而我们常用的软件是SPSS或SAS,但实际上python也可以用来做平稳性检验,而且效果也非常好,今天笔者就讲解一下如何用python来做时间序列的平稳性检验。首先我们还是来简单介绍一下平稳性检验的相关概念。图1. 平稳性序列的相关公式时间序列的平稳性可分为严平稳和宽平稳。设{Xt}是一时间序列,对任意正整数m,任取t1、t2、t3、...、...

weixin_30122219的博客 1307

从学生项目到工程实践:手把手教你用ATE测试电源芯片的Rdson与漏电流

本文详细介绍了如何将学术级的电源芯片测试方案转化为工业级解决方案,重点讲解使用ATE设备测试Rdson(导通电阻)和漏电流的关键技术。从设备选型、测试夹具设计到量产环境下的工程化实现,提供了实用的优化技巧和常见问题解决方案,帮助工程师提升测试效率和精度。

weixin_42525289的博客 183

【思考模型框架】采用双钻模型:发散(桌面研究/用户访谈)→收敛(需求归类/优先级排序),输出需求规格书、追踪矩阵及产品待办清单。

设计思维双钻模型是一种以用户为中心的需求管理方法,通过"发散-收敛"的双循环确保问题定位准确、方案切实可行。第一钻石(探索→定义)聚焦"找对问题",运用用户访谈、田野调查等方法挖掘真实需求;第二钻石(开发→交付)解决"做对方案",通过原型测试、A/B测试验证可行性。该模型强调低保真验证、多团队协作和真实用户测试,避免资源浪费与伪需求开发。典型应用场景包括产品功能优化、用户体验提升等需要精准落地的需求场景。核心价值在于建立从用户痛点到解决方案的可控闭

奶爸的编程之路,也就一周冷个三天 319

python平稳性检验_时间序列中单位根平稳性检验adfuller详解 (ADF Test in Python)

在statsmodels.tsa.stattools.adfullerstatsmodels.tsa.stattools.adfuller(x,maxlag = None,regression ='c',autolag ='AIC',store = False,regresults = False )增强Dickey-Fuller单位根检验Augmented Dickey-Fuller测试可用于在...

weixin_39955825的博客 3059

UG\NX二次开发 一种获取点的面的方法

有时,我们需要用户选择“面上的点”时,同时获取点所在的面。例如:调标准件、刻字等。通过点击点,ug会创建一个智能对象,可通过函数获得对象的父项,即为点所在的面。下面是封装的函数以及测试例子点在曲线上,获取点所在的曲线同理。UF_UI_point_constructd点对话框 和 block UI对话框都可以使用。

王牌飞行员_里海的博客 1781

python时间序列平稳性检验_时间序列平稳性检验怎么进行

请问这个平稳性检验的过程对吗?结果怎么分析?. dfuller investmentDickey-Fuller test for unit root Number of obs = 24---------- Interpolated Dickey-Fuller ---------Test 1% Critical 5%...

weixin_29435115的博客 842

自适应控制 (Adaptive Control) 算法详解及案例分析

自适应控制是一种能够在线调整控制器参数以适应系统动态变化的控制方法。其核心思想是通过实时估计系统参数或调整控制器参数,使系统在不确定性或动态变化的环境中仍能保持稳定性和性能。

闲人编程的博客 4085

Openlayers 教程 02 - 地图添加 WKT WKB GeoJson 格式的点线面数据

WebGIS 开发中,对于数据量不是很大的场景,可以直接从数据库读取数据,通过创建点线面要素(Feature),然后添加到矢量图层(vectorLayer)中,在地图上展示。添加点线面的方法可以封装一下,方便使用。...

非科班Java出身GISer的博客 3861

python平稳性检验_Python中非平稳时间序列的处理

以下应用有什么共同点:预测未来三个月的一个家庭的电力消耗;估计在一定时期内道路的交通量;以及预测一个股票在纽约证券交易所上交易的价格。以上都涉及时间序列数据的概念!如果没有“时间”成分,你就无法准确地预测这些结果。随着越来越多的数据的产生,时间序列预测越来越成为数据科学家掌握的关键技术。但是时间序列是一个复杂的话题,涉及多个方面。免费视频教程:www.mlxs.top首先,如果我们希望预测模型工作...

weixin_39681644的博客 841

Android 15.0 添加自定义服务,并生成jar给第三方app调用

在15.0系统ROM产品定制化开发中,由于需要新增加自定义的功能,所以要增加自定义服务,而app上层通过调用自定义服务,来调用相应的功能,所以系统需要先生成jar,然后生成jar 给上层app调用,接下来就来分析实现的步骤,然后来实现相关的功能 从而来实现所需要的功能

安卓兼职framework和app工程师的博客 670

【手把手教你】Python玩转金融时间序列之平稳性检验

01引言金融数据主要分为时间序列(时间维度)、横截面(个体维度)和面板数据(时间+截面)。比如上证综指2019年1月至今的日收盘价数据就是时间序列,而2019年8月12日...

Python金融量化 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

arch检验python_Python量化基础:时间序列的平稳性检验

时间序列数据的平稳性对于我们采用什么样的分析方式、选择什么样的模型有着至关重要的影响。我们想一下,假如一个时间序列的波动趋势从来没有稳定过,那么它每个时期的波动对于之后一段时期的影响都是无法预测的,因为它随时可能“变脸”。而当一个时间序列的特征维持稳定,比如它的均值和方差是稳定的,那么我们认为在之后的一段时间里,它的数据分布跟历史的数据分布大概率是保持一致的,这时,我们就可以基于历史数据对未来的走...

weixin_39782832的博客 2365

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

adf检验代码 python_Python量化理财基础:时间序列的平稳性检验

主要内容:1. 自相关性和自相关系数2. 强平稳和弱平稳3. Python平稳性检验实战重要性:10分 (1-10)。时间序列数据的平稳性对于我们采用什么样的分析方式、选择什么样的模型有着至关重要的影响。我们想一下,假如一个时间序列的波动趋势从来没有稳定过,那么它每个时期的波动对于之后一段时期的影响都是无法预测的,因为它随时可能“变脸”。而当一个时间序列的特征维持稳定,比如它的均值和方差是稳定的,...

weixin_39800957的博客 693

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

python单位根检验平稳性怎么看是否平稳_Python关于时间序列的平稳性检验

一、自相关性自相关性与相关性自相关系数和偏自相关系数的计算import tushare as tsfrom statsmodels.tsa import stattoolspro = ts.pro_api()df = pro.index_daily(ts_code='000001.SH', start_date='20180901')print('自相关系数: \n', stattools.acf...

weixin_39639049的博客 1324

python时间序列平稳性检验_Python量化投资基础:时间序列的平稳性检验

主要内容:1. 自相关性和自相关系数2. 强平稳和弱平稳3. Python平稳性检验实战重要性:10分 (1-10)。时间序列数据的平稳性对于我们采用什么样的分析方式、选择什么样的模型有着至关重要的影响。我们想一下,假如一个时间序列的波动趋势从来没有稳定过,那么它每个时期的波动对于之后一段时期的影响都是无法预测的,因为它随时可能“变脸”。而当一个时间序列的特征维持稳定,比如它的均值和方差是稳定的,...

weixin_39867559的博客 507
上一篇: 如何用python实现字音回填?
下一篇: 用 Python 开发一个 【个人计划 todolist】
酸菜鱼编程
博客等级 码龄6年 155粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值