JoinQuant量化课堂 发布于2016-07-05
回复 38
浏览 30274
180
**导语:**本文旨在直观地为大家介绍协整的概念,帮助大家理解其基本含义,这个概念提出的动机,以及简单的应用场景。
![1.png][1]
$ $
*本文由JoinQuant量化课堂推出 。难度标签为进阶下,理解深度标签:level-0*
$ $
**作者:**石佛,肖睿
**编辑:**宏观经济算命师
$ $
**阅读前需要了解:**
基本的统计概念,理解深度level-0
平稳的概念,理解深度level-0
$ $
这里只是想给大家指出协整的直观定义,并没有涉及严格的数学符号的定义及严密的公式推导。如果大家感兴趣,可以参考:[https://en.wikipedia.org/wiki/Cointegration][2]。量化课堂未来也会对其深度内容探讨。
$ $
####一、平稳/协整
提到协整,就不得不提平稳性。
简单地说,**平稳性(stationarity)**是一个序列在时间推移中保持稳定不变的性质,它是我们在进行数据的分析预测时非常喜欢的一个性质。如果一组时间序列数据是平稳的,那就意味着它的均值和方差保持不变,这样我们可以方便地在序列上使用一些统计技术。我们先看一个例子,了解平稳和非平稳序列直观上长什么样。
![2.png][3]
*图片来源:维基百科*
上图中,靠上的序列是一个平稳的序列,我们能看到它始终是围绕着一个长期均值在波动,靠下的序列是一个非平稳序列,我们能看到它的长期均值是变动的。
举一个应用的例子,如果某个资产的价格序列(或者两个序列的价差)是平稳的,那么当它在偏离了其均值后,人们可以期待价格会在未来的某一个时间回归这个均值。我们可以借助这个性质进行投资从而获利。假设一只股票的长期均值是9元,而现在的价值是8元。如果经过检验,我们认为这个股票的历史序列具有平稳的性质,并且假设这个平稳性是**能保持的**,就可以买入这只股票,等待未来它的价格回归9元,从而获得1元的利润。
这就是一个具有平稳性质的股票价格序列:
![3.png][4]
平稳性是很好用,但在现实中,绝大多数的股票都是非平稳的,那么我们是否还能够利用平稳性质进行获利呢?答案是肯定的,这时协整关系(cointegration)就出场了!如果两组序列是非平稳的,但它们的线性组合可以得到一个平稳序列,那么我们就说这两组时间序列数据具有协整的性质,我们同样可以把统计性质用到这个组合的序列上来。但是需要指出的一点,协整关系并不是相关关系(correlation)。
举个例子,两组时间序列数据的差是平稳的,则我们可以根据这个差的平稳性进行投资获利:当两只股票的价差过大,根据平稳性我们预期价差会收敛,因此买入低价的股票,卖空高价的股票,等待价格回归的时候进行反向操作从而获利。
这就是配对交易(pairs trading)的由来。是不是很清晰。
$ $
####二、平稳性和检验方法
严格地说,平稳性可以分为严平稳(strictly stationary)和弱平稳(或叫协方差平稳,covariance stationary等)两种。严平稳是指一个序列始终具有不变的分布函数,而弱平稳则是指具序列有不变的常量的描述性统计量。严平稳和弱平稳性质互不包含;但如果一个严平稳序列的方差是有限的,那么它是弱平稳的。我们一般所说的平稳都是指弱平稳。在时间序列分析中,我们通常通过单位根检验(unit root test)来判断一个过程是否是弱平稳的。
一个常见的单位根检验方法是Dickey-Fuller test,大致思路如下:假设被检测的时间序列$Y_t$满足自回归模型$Y_t= \alpha Y_{t-1}+\varepsilon_t$,其中$\alpha$为回归系数,$\varepsilon_t$为噪声的随机变量。若经过检验,发现$\alpha< 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+\gamma_t+\varepsilon_t
$$
$$
Y_t=X_t+30+\mu_t
$$
其中$\gamma_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"]);
```
![4.png][5]
显然,这两组数据都是非平稳的,因为均值随着时间的变化而变化。但这两组数据是具有协整关系的,因为他们的差序列$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"]);
```
![6.png][6]
上图中,可以看出蓝线$Y_t-X_t$一直围绕均值波动。而均值不随时间变化(其实方差也不随时间变化)。
$ $
**小结:**如果完全从数学的角度讲清楚协整,会比较复杂,日后的量化课堂会有涉及。我们只是在了解(level-0)的层面上做了一个简单介绍,目的还是让大家更好的将协整与实际应用结合起来。
**注:**文末有可运行的代码块,大家可以在joinquant克隆研究,运行程序。
更多深入研究,请参见后面的应用类文章。
$ $
*本文由JoinQuant量化课堂推出,版权归JoinQuant所有,商业转载请联系我们获得授权,非商业转载请注明出处。*
$ $
文章更迭记录:
v1.1,2016-10-13,修正概念性错误,感谢 zhangyi 指出
v1.0,2016-07-05,文章上线
[1]: https://image.joinquant.com/27483c233f4a000032ba856a43de6349
[2]: https://en.wikipedia.org/wiki/Cointegration
[3]: https://image.joinquant.com/6adc98330aeb1641fcdf1478e7544aa0
[4]: https://image.joinquant.com/409967335216df2016a314254ac2684a
[5]: https://image.joinquant.com/27483c233f4a000032ba856a43de6349
[6]: https://image.joinquant.com/d9db9c3716731ab1987dd98d3cde9793
评论
@宏观经济占卜师 你跟"宏观经济算命师"是什么关系?
2016-07-12
@宏观经济占卜师 大神就是你了!
2016-07-12
通俗易懂,佩服! 看计量经济学的协整检验,看了半天都不知所云,楼主一说就清楚了,非常感谢!
期待后续更精彩的内容
2016-07-12
@fashion 哈哈哈,太好了
2016-07-13
知道协整是啥意思了。科普
纯手工点赞
2016-07-17
搬运工:
1、单位根检验是序列的平稳性检验,如果不检验序列的平稳性直接OLS容易导致伪回归。
2、当检验的数据是平稳的(即不存在单位根),要想进一步考察变量的因果联系,可以采用格兰杰因果检验,但要做格兰杰检验的前提是数据必须是平稳的,否则不能做。
3、当检验的数据是非平稳(即存在单位根),并且各个序列是同阶单整(协整检验的前提),想进一步确定变量之间是否存在协整关系,可以进行协整检验,协整检验主要有EG两步法和JJ检验
A、EG两步法是基于回归残差的检验,可以通过建立OLS模型检验其残差平稳性
B、JJ检验是基于回归系数的检验,前提是建立VAR模型(即模型符合ADL模式)
4、当变量之间存在协整关系时,可以建立ECM进一步考察短期关系,Eviews这里还提供了一个Wald-Granger检验,但此时的格兰杰已经不是因果关系检验,而是变量外生性检验,请注意识别。
5、格兰杰检验只能用于平稳序列!这是格兰杰检验的前提,而其因果关系并非我们通常理解的因与果的关系,而是说x的前期变化能有效地解释y的变化,所以称其为“格兰杰原因”。
6、非平稳序列很可能出现伪回归,协整的意义就是检验它们的回归方程所描述的因果关系是否是伪回归,即检验变量之间是否存在稳定的关系。所以,非平稳序列的因果关系检验就是协整检验。
2016-07-17
版主你好,感谢你辛苦写的帖子,这为许多新入门学生提供了非常直观的理解方式。为了让学生从直观到严谨,版主可以推荐一下Hamilton或者Enders书中的对应章节。
你的代码里面有一些地方不能运行,原因是引入库时名称和下面使用没有对应。
其中,第二个代码块中:
X = pd.Series(cumsum(x)) + 100 ->X = pd.Series(np.cumsum(x)) + 100
plot(X); plot(Y); ->plt.plot(X); plt.plot(Y);
第三个代码块中同样少了一个plt
最后,就是应该加入plt.show()
再次致意,希望题主继续提供好文章。
2016-08-04
所有强平稳序列都满足弱平稳性质,但反之不成立。@JoinQuant量化课堂,这段有误,强弱平稳都不能互相推出对方,只有当二阶距存在时,强平稳才能推导出弱平稳。
2016-08-14
@zhangyi 已修改,谢谢提出。
2016-08-27
@阿飞91 你是在 JQ 研究模块上不能运行还是其他环境里?有些功能不需要加入库名也能执行,比如计算标准差 np.std() 时用 std() 就可以。
2016-10-13
不得不说,jq 的量化课堂做得确实不错
2017-02-27
这不是Quantopian里lecture配对交易的内容吗?搬过来的?
2017-10-11
####以前考期货分析考过一次,忘记了,这回不会忘了
2018-01-14