4. 相关性分析:皮尔逊相关系数、Spearman秩相关、相关性陷阱与伪回归

各位同学,今天我们来聊聊相关性分析。说实话,这是配对交易里最容易踩坑的地方。我见过太多人看到两个资产走势图长得像,就兴奋地冲进去做配对,结果亏得底裤都不剩。

为什么会这样?因为相关性 ≠ 因果关系。你想想看,冰淇淋销量和溺水人数高度相关,但你能说吃冰淇淋导致溺水吗?显然不能。在金融数据里,这种「伪相关」比比皆是。

4.1 皮尔逊相关系数:最常用的「线性」度量

皮尔逊相关系数,说白了就是衡量两个变量之间线性关系的强度和方向。它的值在 -1 到 1 之间:

  • 1:完全正相关,一个涨另一个也涨
  • -1:完全负相关,一个涨另一个跌
  • 0:没有线性关系

公式长这样:

ρ = Cov(X, Y) / (σX * σY)

其中 Cov 是协方差,σ 是标准差。嗯,这里要注意,皮尔逊系数对异常值极其敏感。我在项目中遇到过,某次分析两只银行股的相关性,本来一直稳定在 0.85 左右,结果因为某天一家银行出了财报黑天鹅,单日暴跌 8%,相关系数直接掉到 0.3。你说这合理吗?

核心要点:皮尔逊系数只捕捉线性关系。如果两个资产是非线性相关(比如一个涨10%另一个才涨5%),皮尔逊系数可能很低,但它们确实存在某种关联。

4.2 Spearman秩相关:不怕异常值的「排序」法

那有没有不怕异常值的方法?有,Spearman秩相关就是干这个的。

它的思路很简单:不看具体数值,只看排名。比如两只股票某天的收益率,一个排第1,一个排第2,那它们的秩就是1和2。然后计算这些秩的皮尔逊相关系数。

我个人的习惯是:先跑Spearman,再跑皮尔逊。如果两者差异很大,说明数据里有异常值或者非线性关系,需要进一步排查。

import numpy as np
from scipy.stats import pearsonr, spearmanr

# 模拟数据
x = np.array([1, 2, 3, 4, 5, 100])  # 注意这个100是异常值
y = np.array([2, 4, 6, 8, 10, 200])

pearson_corr, _ = pearsonr(x, y)
spearman_corr, _ = spearmanr(x, y)

print(f"皮尔逊相关系数: {pearson_corr:.3f}")
print(f"Spearman秩相关: {spearman_corr:.3f}")

运行结果:皮尔逊是 1.0(因为异常值完美线性),Spearman也是 1.0。但如果把异常值改成 (100, 50),皮尔逊会降到 0.6 左右,而 Spearman 可能还是 0.9 以上。你看,Spearman 更稳健。

实战技巧:在配对交易的初筛阶段,我建议用 Spearman 秩相关。它能帮你过滤掉那些「看起来相关,实际上只是偶然」的配对。

4.3 相关性陷阱:为什么高相关不等于好配对?

这是今天最重要的部分。我曾经犯过一个错误:看到两只科技股的相关性高达 0.95,兴冲冲地建了配对,结果一个月后价差越走越大,亏了 15%。

问题出在哪?高相关性 ≠ 协整关系。相关性衡量的是同步性,而协整衡量的是长期均衡关系。两只股票可能因为市场情绪同步上涨,但它们的价差并不稳定,随时可能发散。

举个具体例子:

特征 相关性 协整性
衡量什么 短期同步性 长期均衡
时间范围 短期 长期
对配对交易的意义 辅助参考 核心条件
常见陷阱 伪回归 结构突变

你想想看,如果两只股票只是碰巧在某个时间段走势相似,但基本面完全不同,那它们的相关性迟早会崩塌。这就是所谓的「相关性陷阱」。

4.4 伪回归:最隐蔽的坑

伪回归,说白了就是两个毫无关系的非平稳时间序列,因为都带有趋势,算出来的相关系数却很高。

我记得有一次,一个学员兴奋地告诉我,他发现中国GDP和某只小盘股的相关性高达 0.9。我问他:「你做了差分检验吗?」他愣住了。

伪回归的典型特征:

  • 两个序列都是非平稳的(有趋势或随机游走)
  • 回归的 R² 很高,但 Durbin-Watson 统计量很低
  • 残差序列也是非平稳的

怎么避免?很简单:先做单位根检验。如果两个序列都是非平稳的,那就对差分后的序列做相关性分析,或者直接做协整检验。

from statsmodels.tsa.stattools import adfuller

# 模拟两个随机游走
np.random.seed(42)
n = 100
x = np.cumsum(np.random.randn(n))
y = np.cumsum(np.random.randn(n))

# 皮尔逊相关系数
corr, _ = pearsonr(x, y)
print(f"原始序列相关系数: {corr:.3f}")  # 可能很高

# 差分后
dx = np.diff(x)
dy = np.diff(y)
corr_diff, _ = pearsonr(dx, dy)
print(f"差分后相关系数: {corr_diff:.3f}")  # 接近0

你看,两个完全独立的随机游走,原始序列的相关系数可能高达 0.7 甚至 0.8,但差分后立刻现原形。这就是伪回归的威力。

避坑指南:我曾经在回测中吃过伪回归的亏。当时用三年数据跑出来的配对,实盘两个月就失效了。后来发现,那三年刚好是牛市,所有股票都在涨,相关性自然高。所以,我建议至少用两个不同市场环境(牛熊市各一段)的数据来验证相关性。

4.5 本章知识体系

下面这张图总结了相关性分析的核心逻辑,你可以对照着梳理思路:

相关性分析知识体系 相关性分析 皮尔逊相关系数 Spearman秩相关 相关性陷阱 伪回归 线性关系 对异常值敏感 基于排序,稳健 适合非线性关系 高相关≠协整 非平稳序列 核心原则:先检验平稳性,再算相关性,最后验证协整性

嗯,总结一下今天的内容:皮尔逊看线性,Spearman看排序,相关性陷阱提醒你别被高数字迷惑,伪回归则要求你先做平稳性检验。这四个概念,是配对交易入门必须啃下来的硬骨头。

我个人习惯是:拿到两个序列,先画图看走势,然后做ADF检验看平稳性,接着算Spearman秩相关,最后才考虑要不要做协整检验。这套流程帮我避开了不少坑。

最后一个小建议:别迷信相关系数。它只是一个参考指标,真正的配对交易核心是协整关系。下一章我们会深入讲协整检验,到时候你就知道为什么相关性只是「开胃菜」了。


公众号:蓝海资料掘金营,微信 deep3321