时间序列数据的平稳性对于我们采用什么样的分析方式、选择什么样的模型有着至关重要的影响。

我们想一下,假如一个时间序列的波动趋势从来没有稳定过,那么它每个时期的波动对于之后一段时期的影响都是无法预测的,因为它随时可能“变脸”。而当一个时间序列的特征维持稳定,比如它的均值和方差是稳定的,那么我们认为在之后的一段时间里,它的数据分布跟历史的数据分布大概率是保持一致的,这时,我们就可以基于历史数据对未来的走势做一个预测,这能帮助我们找到更大概率成功的决策。

股票数据,就是极为常见的一种时间序列数据。在量化过程中应用时间序列分析手段时,我们往往需要先进行平稳性检验,从而选择合适的研究方法。

在学习平稳性之前,我们先了解一下自相关性的概念。

一、自相关性

自相关性与相关性

我们知道,相关性常用于统计两个变量之间是否存在某种关联。那么,自相关性代表了变量与自身之间的相关性,只不过一般情况下我们统计的是两组隶属于不同时间区间的数据。当两组数据的时间范围相同时,其相关性为1(相当于两组完全相同的数据)。

之前我们曾经学习过Pearson相关系数,自相关系数的计算和Pearson相关系数的计算过程非常相似,但是它们在分母上有些区别。Pearson相关系数的计算中,分母为两个变量的标准差之积;而在自相关系数的计算中,我们会直接使用第k期时间序列数据的方差:

ρl=Cov(Xk,Xk−l)Var(Xk)=γlγ0\rho_l = \frac{Cov(X_k, X_{k-l})}{Var(X_k)} = \frac{\gamma_l}{\gamma_0} ρl​=Var(Xk​)Cov(Xk​,Xk−l​)​=γ0​γl​​

其中,XkX_kXk​是时间点k对应的随机变量,Xk−lX_{k-l}Xk−l​则是时间点k往前数lll期对应的随机变量,γ0\gamma_0γ0​是时间序列XkX_kXk​的方差,γl\gamma_lγl​是XkX_kXk​与Xk−lX_{k-l}Xk−l​之间的自协方差。

自协方差的计算与协方差的计算是一致的:

Cov(Xk,Xk−l)=∑i=1n(Xki−Xk‾)(Xk−li−Xk−l‾)Cov(X_k, X_{k-l}) = \sum_{i=1}^n{(X_k^i-\overline{X_k})(X_{k-l}^i-\overline{X_{k-l}})} Cov(Xk​,Xk−l​)=i=1∑n​(Xki​−Xk​​)(Xk−li​−Xk−l​​)

事实上,自相关性存在一定的问题。一般来说,在一组时间序列数据中,相邻时间节点的数据间往往存在某些关联。第1期对第2期有影响,第2期对第3期有影响……也就是说,我们的自相关系数衡量的不仅仅是lll期之前的数据对当前期数据的影响,也包含了更早期的数据带来的间接影响。

为了解决这个问题,我们引入了偏自相关系数,它是XkX_kXk​与Xk−lX_{k-l}Xk−l​之间的条件自相关系数。其计算非常复杂,这里不再展开。好在我们可以用Python的statsmodels库非常轻易地完成计算。

自相关系数和偏自相关系数的计算

在Python中,可以用statsmodels提供的工具来计算自相关性和偏自相关性。我们以上证综指的收益率数据来进行演示。

import tushare as ts
from statsmodels.tsa import stattools
pro = ts.pro_api()df = pro.index_daily(ts_code='000001.SH', start_date='20180901')
print('自相关系数: \n', stattools.acf(df.pct_chg, nlags=10))
print('自相关系数: \n', stattools.pacf(df.pct_chg, nlags=10))

输出为:

自相关系数: [ 1.         -0.1692613  -0.03035227  0.22164563 -0.11543326 -0.05630536-0.18736445  0.04942778 -0.02089329 -0.00722488 -0.03940862]
自相关系数: [ 1.         -0.17100626 -0.06204206  0.21965218 -0.04895894 -0.08142805-0.30000036  0.00808857  0.01488787  0.11432786 -0.12407987]

可以看到,这里自相关系数和偏自相关系数的计算都返回了长度为10的数组。它们分别代表了当lll的取值为从0到10时的自相关性统计。这里acf()方法用于计算自相关系数,pacf()用于计算偏自相关系数,nlags参数用于指定最大的l,这里我们指定了10,所以就会最多对比当前期与10期之前的时间序列数据,这里10期就是10个交易日。

二、平稳性

平稳性分为强平稳和弱平稳。

强平稳的要求非常严格,它要求两组数据之间的任何统计性质都不会随着时间改变。其要求过于严苛,理论上很难证明、实际中难以检验,因此它基本上没有什么应用场景。

弱平稳

与强平稳对应的是弱平稳,其应用比较广泛,它有三个要求:

  • 对于任意时期的时间序列XtX_tXt​,有E(Xt)=μE(X_t) = \muE(Xt​)=μ,即序列均值为常数;
  • 对任意时期的时间序列XtX_tXt​,其二阶矩存在(二阶矩即方差);
  • 对任意时期的时间序列XtX_tXt​、任意的整数hhh、任意的阶数lll,都有γl(Xt)=γl(Xt+h)\gamma_l(X_t) = \gamma_l(X_{t+h})γl​(Xt​)=γl​(Xt+h​),也就是说,当指定了两个时间点的距离hhh后,两组数据的lll阶自协方差不会随着时间波动,仅与阶数有关。

简而言之,一组时间序列数据的均值恒定、方差始终存在、自协方差不随时间波动,即可认定其为弱平稳序列。

强平稳与弱平稳之间并没有包含关系,弱平稳不一定是强平稳,强平稳也不一定是弱平稳。这是因为符合强平稳标准的时间序列数据不一定存在均值和方差,而当强平稳序列存在均值和方差时,它就一定也是弱平稳序列。

另外,一个服从正态分布的弱平稳时间序列也是强平稳的。这是因为在正态分布中,确定了均值和方差,也就确定了整个分布,也就是说该时间序列的不同时期的分布是相同的,这就符合了强平稳的定义。

三、平稳性的检验

我们还是用上证综指的行情数据来演示如何在Python中进行平稳性检验。

时序图

这次我们取稍长一些的时间区间:从18年6月份至今的数据。然后我们将日期字符串转换成日期类型,并且设置为数据框的索引,并且对数据按照时间增序排列。

df = pro.index_daily(ts_code='000001.SH', start_date='20180601')
df.index = pd.to_datetime(df.trade_date)
df = df.sort_index(ascending=True)
plt.figure(figsize=(10,5))
df.pct_chg.plot();

可以看到,上证综指的收盘收益率数据基本上是围绕着0轴上下波动,在0轴上方和下方的波动幅度基本一致。我们可以初步认定,该时间序列是平稳的。

自相关图和偏自相关图

我们还经常结合自相关图和偏自相关图来判断时间序列的平稳性。

plt.stem(stattools.acf(df.pct_chg));

可以看到,0阶自相关系数和0阶偏自相关系数都恒为1。在下面两幅图中,自相关系数和偏自相关系数迅速由1减小到0附近,之后随着阶数lll的上升在0轴上下小幅波动,这基本上是符合平稳性的要求的。

plt.stem(stattools.pacf(df.pct_chg));

单位根检验

前两种方式很直观,但也很主观。它们全靠肉眼的判断和判断人的经验,不同的人看到同样的图形,很可能会给出不同的判断。

因此我们需要一个更有说服力、更加客观的统计方法来帮助我们检验时间序列的平稳性,这种方法,就是单位根检验。

当一个时间序列的滞后算子多项式方程存在单位根时,我们认为该时间序列是非平稳的;反之,当该方程不存在单位根时,我们认为该时间序列是平稳的。其原理比较复杂,想要理解它需要较好的数学基础,因此这里我们主要看如何在Python中应用它,原理部分可以自行搜索相关资料阅读。

常见的单位根检验方法有DF检、ADF检验和PP检验,今天我们会用ADF检验来为大家演示。

在Python中,有两个常用的包提供了ADF检验,分别是statsmodel和arch。

from statsmodels.stats.diagnostic import unitroot_adfunitroot_adf(df.pct_chg)

输出为:

这里包含了检验值、p-value、滞后阶数、自由度等信息。我们看到了检验统计量为-14.46,远小于1%的临界值-3.47,即p值远小于0.01,因此我们拒绝原假设,认为该时间序列是平稳的。(这里原假设是存在单位根,即时间序列为非平稳的。)

使用arch的方法为:

from arch.unitroot import ADFADF(df.pct_chg)

其输出信息基本是一致的。

好,今天的内容就到这里,有任何问题都可以在下方留言,我们一起讨论。

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

  1. 时间序列的平稳性检验与随机性检验

    1. 时间序列的定义 1.1 什么是时间序列     在统计研究中,常用按时间顺序排列的一组随机变量X1,X2,⋯ ,Xt,⋯X _ { 1 } , X _ { 2 } , \cdots , X _ ...

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

    主要内容: 1. 自相关性和自相关系数 2. 强平稳和弱平稳 3. Python平稳性检验实战 重要性:10分 (1-10). 时间序列数据的平稳性对于我们采用什么样的分析方式.选择什么样的模型有着至 ...

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

    一.自相关性 自相关性与相关性 自相关系数和偏自相关系数的计算 import tushare as ts from statsmodels.tsa import stattools pro = ts. ...

  4. python白噪声检验_时间序列 平稳性检验 白噪声 峰度 偏度

    时间序列 简而言之,时间序列就是带时间戳的数值序列.股票,期货等金融数据就是典型的时间序列.量化的过程,很多时间都是在分析时间序列,找到稳定赚钱因子. 平稳性定义 所谓时间序列的平稳性,是指时间序列的 ...

  5. python 白噪声检验 结果-时间序列 平稳性检验 白噪声 峰度 偏度

    时间序列 简而言之,时间序列就是带时间戳的数值序列.股票,期货等金融数据就是典型的时间序列.量化的过程,很多时间都是在分析时间序列,找到稳定赚钱因子. 平稳性定义 所谓时间序列的平稳性,是指时间序列的 ...

  6. python 白噪声检验-时间序列 平稳性检验 白噪声 峰度 偏度

    时间序列 简而言之,时间序列就是带时间戳的数值序列.股票,期货等金融数据就是典型的时间序列.量化的过程,很多时间都是在分析时间序列,找到稳定赚钱因子. 平稳性定义 所谓时间序列的平稳性,是指时间序列的 ...

  7. 【R语言实验】基于R语言的时间序列平稳性检验

    一.实验项目名称:基于R语言的时间序列平稳性检验 二.实验目的与要求: 平稳时间序列的概念,平稳性检验的时序图检验方法和自相关图检验方法. 三.实验原理: 时序图和自相关图检验时间序列的平稳性依据: ...

  8. StataIC——数据描述性统计分析、平稳性检验、平稳化

    一.简介 1.本篇博文是一篇关于线性回归的基本操作:时间序列的平稳性检验.协整检验和误差修正模型(在下一篇博文里延续传送门)等的博文. 2.博主是一个普普通通的大学生,没有很厉害的技术,写的内容都是不 ...

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

    以下应用有什么共同点:预测未来三个月的一个家庭的电力消耗:估计在一定时期内道路的交通量:以及预测一个股票在纽约证券交易所上交易的价格. 以上都涉及时间序列数据的概念!如果没有"时间" ...

  10. 金融时间序列Note 1 —— 平稳性,相关系数,自相关函数(ACF)及其平稳性检验

    本文用于<金融时间序列>的相关介绍,适合快速入门和期末复习.(才怪我感觉自己考的超烂) OK,首先用自己的话讲一下什么是时间序列,首先我们会考得最多得时间序列肯定是线性的,既然说了有线性的 ...

最新文章

  1. GitHub的这个彩蛋我居然才知道,我OUT了
  2. iframe悬浮在html上_HTML Iframe
  3. Pytorch:神经网络工具箱nn
  4. 第23章:MongoDB-聚合操作--聚合命令
  5. xstream-0 使用入门
  6. SUMO文档019:导入网络文件(上)——OpenStreetMap
  7. 松下新一代电力线通信(PLC)技术经IEEE P1901.3工作小组批准成为基准规范
  8. pytyon 微妙_字体的微妙力量
  9. java排座位程序_java随机排座位
  10. 你未必知道的 WebRTC – 前世、今生、未来
  11. python 将列表按指定长度拆分
  12. 撸吧,你活不到明天了
  13. 【STM32】两轮自平衡小车学习笔记1
  14. 如何开展一次成功的海外KOL营销活动?
  15. Android Custom
  16. Keras自然语言处理(九)
  17. 在两个高程点之间如何生成加密点_等高线加密高程点
  18. 为什么说辞职后不要回原单位工作
  19. 【第十课】UAV倾斜摄影测量三维模型修复教程——Geomagic
  20. 程序员的乐趣,那些可爱的 Linux 命令

热门文章

  1. Excel远程连接Oracle,excel连接数据库_怎么用oracle命令连接远程数据库�9�3
  2. libyuv 海思平台编译测试
  3. 平面设计banner排版技巧哪些比较实用
  4. SD五一联赛(加权并查集)
  5. BP算法详细推导及分析
  6. band math函数_Envi中波段运算(bandmath)常用的函数
  7. 跳转页面 bscroll 无法无法从顶部滚动
  8. linux tar 命令安装,Linux tar 命令 command not found tar 命令详解 tar 命令未找到 tar 命令安装 - CommandNotFound ⚡️ 坑否...
  9. lena-ts 图像处理和卷积操作
  10. 火力发电厂工控系统网络安全解决方案 - 对比分析