3、相关性分析基础:皮尔逊相关系数、Spearman秩相关系数、滚动相关性计算
说到正股联动,咱们得先搞清楚一个核心问题:怎么量化两只股票之间的“联动”程度?
说白了,就是给“联动”打个分。这个分数不能靠感觉,得靠数学。我做了这么多年量化,见过太多人凭直觉说“这俩票走势很像”,结果一算相关系数,才0.3。嗯,这就是感觉和数据的差距。
今天咱们就聊三个最基础、也最实用的相关性指标。它们就像三把尺子,量出股票之间的“亲密度”。
3.1 皮尔逊相关系数:最经典的线性关系度量
皮尔逊相关系数,你肯定听过。它衡量的是两个变量之间的线性相关程度。取值范围在[-1, 1]之间。
- 1:完全正相关,A涨1%,B也涨1%(理想情况,现实中极少)
- 0:无线性相关,A涨跌跟B没关系
- -1:完全负相关,A涨1%,B跌1%
公式长这样:
r = Σ((xi - x̄)(yi - ȳ)) / √(Σ(xi - x̄)² * Σ(yi - ȳ)²)
看着有点复杂?我换个说法。它本质上就是:两个变量偏离各自均值的“步调”是否一致。
我在项目中遇到过一个问题:用皮尔逊系数算茅台和五粮液,结果高达0.95。这很正常,白酒龙头嘛。但用它算一只股票和一只债券ETF,结果接近0,也合理。可如果算一只股票和它的深度虚值期权呢?皮尔逊系数可能只有0.2,但两者明明有非线性关系。这时候皮尔逊就“失灵”了。
3.2 Spearman秩相关系数:不惧异常值的“稳健派”
那有没有一种方法,不那么怕异常值?有,Spearman秩相关系数。
它不关心具体的价格涨了多少,只关心排名。比如今天A涨了5%,B涨了3%,在皮尔逊眼里,这是两个具体数值。但在Spearman眼里,它只记住:A排第1,B排第2。
公式其实和皮尔逊一样,只不过把原始数据换成了秩次(排名)。
ρ = 1 - (6 * Σdᵢ²) / (n * (n² - 1))
其中 dᵢ 是每个数据对的两个秩次之差,n 是样本数量。
你想想看,如果某天A因为一个乌龙指瞬间拉高10%,皮尔逊系数会剧烈波动。但Spearman呢?它只看排名,只要A还是当天涨幅最大的,它的秩次就是1,系数几乎不变。这就是它的优势。
我个人习惯:做初步筛选时用Spearman,做精细建模时用皮尔逊。为什么?因为Spearman能帮我过滤掉很多“假信号”,让我先找到真正有联动关系的股票对,再用皮尔逊去精确量化。
3.3 滚动相关性计算:捕捉动态变化的“显微镜”
前面两个系数,算的都是整个时间段的平均相关性。但市场是动态的。今天茅台和五粮液高度相关,明天可能因为一个行业利空,相关性就下降了。
怎么办?用滚动窗口。
滚动相关性,就是固定一个时间窗口(比如20个交易日),每天计算窗口内的相关系数。然后窗口每天向前滑动一天,得到一条相关系数的时间序列。
代码实现其实很简单:
import pandas as pd
import numpy as np
def rolling_corr(series_a, series_b, window=20):
"""
计算滚动皮尔逊相关系数
"""
return series_a.rolling(window=window).corr(series_b)
# 示例:计算两只股票的20日滚动相关性
corr_series = rolling_corr(stock_a['close'], stock_b['close'], window=20)
这段代码,说白了就是每天算一次过去20天的相关系数。你得到的不再是一个数字,而是一条曲线。这条曲线能告诉你:这两只股票的联动关系什么时候变强,什么时候变弱。
我记得有一次做策略回测,发现某对股票在2020年3月(疫情爆发期)相关性突然从0.4飙升到0.9。后来复盘发现,那是因为市场恐慌时,所有股票都在跟着大盘走,个股的“个性”消失了。这就是滚动相关性的价值——它让你看到“关系”的变化。
- 窗口大小很关键。窗口太小(比如5天),噪声太大;窗口太大(比如60天),反应太迟钝。我个人习惯用20天作为默认值,然后根据策略周期调整。
- 滚动相关性可以用于动态配对交易。当相关性突然下降时,可能意味着套利机会出现。
- 记得做数据对齐。两只股票的交易日期可能不同,一定要先对齐时间轴。
3.4 三种方法的对比与选择
咱们来总结一下,这三把尺子各有什么特点:
| 指标 | 衡量对象 | 对异常值敏感度 | 适用场景 |
|---|---|---|---|
| 皮尔逊相关系数 | 线性关系 | 高 | 数据干净、关系线性时使用 |
| Spearman秩相关系数 | 单调关系(不限于线性) | 低 | 数据有异常值、或关系非线性时使用 |
| 滚动相关性 | 动态变化的相关性 | 取决于窗口大小 | 需要观察相关性随时间变化时使用 |
我个人建议:先用Spearman做快速筛选,再用皮尔逊做精确计算,最后用滚动相关性做动态监控。这三步走下来,你对两只股票之间的“联动”关系,基本就心里有数了。
下面这张图,帮你理清这三种方法的关系:
好了,相关性分析的基础就聊到这儿。这三种方法,是咱们做正股联动量化的基本功。下一节,咱们会把这些方法真正用到实战中,看看怎么用它们来构建交易信号。