2、皮尔逊相关系数:公式推导、适用条件、在股票配对交易中的应用
好,咱们今天来聊聊皮尔逊相关系数。这玩意儿在量化里太常用了,尤其是做配对交易的时候。说白了,它就是衡量两个变量之间线性关系强弱的指标。值在 -1 到 1 之间,1 代表完全正相关,-1 代表完全负相关,0 就是没线性关系。
我个人习惯,拿到任何两个资产的时间序列,第一件事就是算一下它们的皮尔逊相关系数。这能给我一个最直观的“第一印象”。
2.1 公式推导:从协方差说起
先别急着背公式,咱们从直觉出发。你想衡量两个变量 X 和 Y 是不是“一起动”,最直接的办法就是看它们各自偏离均值的程度,是不是同步的。
这就是协方差的概念:
Cov(X, Y) = E[(X - μₓ)(Y - μᵧ)]
如果 X 和 Y 同时大于或同时小于各自的均值,乘积就是正的。一个大于均值另一个小于,乘积就是负的。所以协方差的正负,直接告诉我们相关方向。
但协方差有个大问题——它受量纲影响。比如 X 是价格(几百块),Y 是成交量(几百万手),算出来的协方差数值巨大,根本没法比较。这时候就需要标准化。
皮尔逊相关系数 ρ 就是把协方差除以两个变量的标准差:
ρ(X, Y) = Cov(X, Y) / (σₓ * σᵧ)
标准化之后,结果就乖乖落在 [-1, 1] 区间了。这个公式看着简单,但我在项目中遇到过不少坑,后面会讲。
核心理解:皮尔逊相关系数本质上是“标准化后的协方差”。它只关心线性关系,不关心斜率大小,只关心“点围绕一条直线的紧密程度”。
2.2 适用条件:别乱用,有前提
嗯,这里要注意。皮尔逊相关系数不是万能的。我见过太多人上来就一顿算,结果得出个毫无意义的数字。它有几个硬性前提:
- 线性关系假设:它只衡量线性相关。如果 X 和 Y 是完美的二次函数关系(比如 Y = X²),算出来的 ρ 可能接近 0,但这不代表它们没关系。
- 连续变量:两个变量都应该是连续型数据。用离散的类别数据算皮尔逊,意义不大。
- 近似正态分布:虽然对非正态数据也鲁棒,但极端偏态或存在明显异常值时,结果会严重失真。
- 同方差性:数据点的离散程度在整个取值范围内应该大致稳定。如果数据呈现“喇叭形”扩散,皮尔逊系数会低估真实相关性。
- 无异常值:这个我吃过亏。一个极端异常值就能把相关系数从 0.8 拉到 0.2。
避坑指南:我曾经在分析两只小盘股时,算出来相关系数高达 0.95,兴奋得不行。后来仔细一看,是因为某一天两只股票同时因为“乌龙指”出现了极端价格。去掉那一天的数据,相关系数直接掉到 0.3。所以,算之前一定要做异常值检测。
2.3 在股票配对交易中的应用
配对交易的核心逻辑,就是找到两只长期走势高度相关的股票。当它们的价差(或比值)偏离历史均值时,做多被低估的那只,做空被高估的那只,赌价差回归。
皮尔逊相关系数在这里扮演什么角色?它帮我们筛选“候选配对”。
具体步骤我一般这么走:
- 初筛:在同行业或同板块中,计算所有股票两两之间的皮尔逊相关系数。设定一个阈值,比如 ρ > 0.8,保留高度相关的对子。
- 验证稳定性:光看全样本的相关系数不够。我会用滚动窗口(比如 60 个交易日)计算动态相关系数,看它是否稳定。如果相关系数忽高忽低,这个配对就不靠谱。
- 协整检验:皮尔逊相关系数高,不代表价差会均值回归。还需要做协整检验(比如 Engle-Granger 两步法),确认价差序列是平稳的。
- 构建交易信号:当标准化价差(Z-score)超过 ±2 时,触发开仓信号。
下面是一个简单的 Python 示例,展示如何计算两只股票的滚动相关系数:
import pandas as pd
import numpy as np
import yfinance as yf
# 获取两只股票的历史数据
tickers = ['AAPL', 'MSFT']
data = yf.download(tickers, start='2020-01-01', end='2023-12-31')['Adj Close']
# 计算日收益率
returns = data.pct_change().dropna()
# 计算滚动60天的皮尔逊相关系数
rolling_corr = returns['AAPL'].rolling(window=60).corr(returns['MSFT'])
# 查看最后几个值
print(rolling_corr.tail())
# 简单判断:如果最近60天相关系数低于0.5,可能配对关系在减弱
if rolling_corr.iloc[-1] < 0.5:
print("警告:近期相关性减弱,建议暂停该配对交易")
个人经验:我建议不要只看收盘价的相关系数。试试看用日内 5 分钟数据算,或者用收益率序列代替价格序列。收益率的相关性往往更稳定,也更能反映真实的联动关系。
2.4 知识体系结构图
下面这张图,帮你把本章的核心逻辑串起来:
2.5 实战中的注意事项
最后,分享几个我在实战中总结的经验:
- 样本量要够:少于 30 个数据点算出来的相关系数,统计意义不大。我一般要求至少 60 个交易日的数据。
- 小心伪相关:两只股票可能因为大盘走势而“看起来”相关。试试看用超额收益(减去市场收益)再算一次相关系数。
- 相关系数会变:别指望它一成不变。市场环境变了,行业政策变了,相关性可能瞬间崩塌。定期重新计算是必须的。
- 结合其他指标:皮尔逊相关系数只是起点。我还会看 Spearman 秩相关系数(对异常值更鲁棒),以及互信息(捕捉非线性关系)。
一句话总结:皮尔逊相关系数是量化工具箱里的“瑞士军刀”——基础、好用、但别指望它解决所有问题。理解它的局限,比记住它的公式更重要。
公众号:蓝海资料掘金营,微信deep3321