【数学】简单介绍一下协整(cointegration) 您所在的位置:网站首页 敌我关系是什么意思 【数学】简单介绍一下协整(cointegration)

【数学】简单介绍一下协整(cointegration)

#【数学】简单介绍一下协整(cointegration)| 来源: 网络整理| 查看: 265

导语:本文旨在直观地为大家介绍协整的概念,帮助大家理解其基本含义,这个概念提出的动机,以及简单的应用场景。

本文由JoinQuant量化课堂推出,难度属于进阶下,理解深度属于level-0。 在官号之后发出,恩 阅读前请准备: 基本的统计概念,理解深度level-0 平稳的概念,理解深度level-0 协整简介:

这里只是想给大家指出协整的直观定义,并没有涉及严格的数学符号的定义及严密的公式推导。如果大家感兴趣,可以参考:https://en.wikipedia.org/wiki/Cointegration。量化课堂未来也会对其深度内容探讨。

为什么要平稳/协整:

提到协整,就不得不提平稳性。

简单地说,平稳性(stationarity)是一个序列在时间推移中保持稳定不变的性质,它是我们在进行数据的分析预测时非常喜欢的一个性质。如果一组时间序列数据是平稳的,那就意味着它的均值和方差保持不变,这样我们可以方便地在序列上使用一些统计技术。我们先看一个例子,了解平稳和非平稳序列直观上长什么样。

图片来源:维基百科

上图中,靠上的序列是一个平稳的序列,我们能看到它始终是围绕着一个长期均值在波动,靠下的序列是一个非平稳序列,我们能看到它的长期均值是变动的。

举一个应用的例子,如果某个资产的价格序列(或者两个序列的价差)是平稳的,那么当它在偏离了其均值后,人们可以期待价格会在未来的某一个时间回归这个均值。我们可以借助这个性质进行投资从而获利。假设一只股票的长期均值是9元,而现在的价值是8元。如果经过检验,我们认为这个股票的历史序列具有平稳的性质,并且假设这个平稳性是能保持的,就可以买入这只股票,等待未来它的价格回归9元,从而获得1元的利润。

这就是一个具有平稳性质的股票价格序列:

平稳性是很好用,但在现实中,绝大多数的股票都是非平稳的,那么我们是否还能够利用平稳性质进行获利呢?答案是肯定的,这时协整关系(cointegration)就出场了!如果两组序列是非平稳的,但它们的线性组合可以得到一个平稳序列,那么我们就说这两组时间序列数据具有协整的性质,我们同样可以把统计性质用到这个组合的序列上来。但是需要指出的一点,协整关系并不是相关关系(correlation)。

举个例子,两组时间序列数据的差是平稳的,则我们可以根据这个差的平稳性进行投资获利:当两只股票的价差过大,根据平稳性我们预期价差会收敛,因此买入低价的股票,卖空高价的股票,等待价格回归的时候进行反向操作从而获利。

这就是配对交易(pairs trading)的由来。是不是很清晰。

平稳性和检验方法:

严格地说,平稳性可以分为严平稳(strictly stationary)和弱平稳(或叫协方差平稳,covariance stationary等)两种。严平稳是指一个序列始终具有不变的分布函数,而弱平稳则是指具序列有不变的常量的描述性统计量。所有强平稳序列都满足弱平稳性质,但反之不成立。我们一般所说的平稳都是指弱平稳。在时间序列分析中,我们通常通过单位根检验(unit root test)来判断一个过程是否是弱平稳的。

一个常见的单位根检验方法是Dickey-Fuller test,大致思路如下:假设被检测的时间序列 满足自回归模型 ,其中 为回归系数, 为噪声的随机变量。若经过检验,发现 < 1,则可以肯定序列是平稳的。在Dickey Fuller Test的基础上,还有衍生出来的augmented Dickey-Fuller test,是考虑了序列的滞后性,在此不做过多陈述,在未来量化课堂的数学专栏里将会介绍。

举一个应用的例子

我们人为地构造两组数据,由此直观地看一下协整关系。

import numpy as np import pandas as pd import seaborn import statsmodels import matplotlib.pyplot as plt from statsmodels.tsa.stattools import coint

构造数据

首先,我们构造两组数据,每组数据长度为100。第一组数据为100加一个向下趋势项再加一个标准正态分布。第二组数据在第一组数据的基础上加30,再加一个额外的标准正态分布。有

X_t=100+y_t+\varepsilon _tY_t=X_t+30+\mu _t

其中Y_t为趋势项, \varepsilon _t和 \mu _t 为无相关性的正态随机变量。

代码如下:

np.random.seed(100) x = np.random.normal(0, 1, 500) y = np.random.normal(0, 1, 500) X = pd.Series(cumsum(x)) + 100 Y = X + y + 30 for i in range(500): X[i] = X[i] - i/10 Y[i] = Y[i] - i/10 plot(X); plot(Y); plt.xlabel("Time"); plt.ylabel("Price"); plt.legend(["X", "Y"]);

显然,这两组数据都是非平稳的,因为均值随着时间的变化而变化。但这两组数据是具有协整关系的,因为他们的差序列 Y_t-X_t是平稳的:

plot(Y-X); plt.axhline((Y-X).mean(), color="red", linestyle="--"); plt.xlabel("Time"); plt.ylabel("Price"); plt.legend(["Y-X", "Mean"]);

上图中,可以看出蓝线 一直围绕均值波动。而均值不随时间变化(其实方差也不随时间变化)。

最后小结一下:如果完全从数学的角度讲清楚协整,会比较复杂,日后的量化课堂会有涉及。我们只是在了解(level-0)的层面上做了一个简单介绍,目的还是让大家更好的将协整与实际应用结合起来。

请参见后面的应用类文章。文中代码可以克隆,自己改改摆弄摆弄:https://www.joinquant.com/post/1731

本文由JoinQuant量化课堂推出,版权归JoinQuant所有,商业转载请联系我们获得授权,非商业 转载请注明出处


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有