4. 相关性分析

配对交易的第一步不是找“价差大”的股票,而是找“关系稳定”的股票。相关性分析就是用来量化两只股票同涨同跌程度的工具。但相关性并非一个简单的数字,选错方法、忽略时间窗口、误把伪相关当成真规律,都会让后续回测结果严重失真。本节围绕四个关键点展开:皮尔逊相关系数、斯皮尔曼秩相关、滚动相关性,以及相关性陷阱与伪相关识别。

一、核心原理:两种相关系数在衡量什么

皮尔逊相关系数(Pearson)衡量的是两个变量之间的线性关系强度,取值范围为 -1 到 1。它基于协方差与标准差计算,对极端值非常敏感。公式上,它等于两变量协方差除以各自标准差的乘积。当两只股票的收益率呈线性同步变化时,皮尔逊系数接近 1;完全反向则接近 -1。

斯皮尔曼秩相关(Spearman)衡量的是两个变量的单调关系,先把原始数据转成排名(秩),再对秩计算皮尔逊相关。它不要求线性关系,只要求“一个变大时另一个是否稳定地变大或变小”。因此它对异常值更稳健,适合收益率分布偏斜、存在跳空或极端行情的场景。

核心区别:皮尔逊看“线性同步”,斯皮尔曼看“排序同步”。当数据存在明显离群点或非线性单调关系时,两者可能给出差异很大的结论。

二、方法流程:从数据到可用相关性

  1. 数据准备:取两只股票同一时间区间的复权收盘价,计算日收益率(对数或简单收益率均可,但全流程需统一)。
  2. 计算相关系数:用皮尔逊和斯皮尔曼各算一次,对比差异。若差异过大,说明存在离群点或非线性结构,需要进一步检查。
  3. 滚动窗口计算:用固定窗口(如 60 日、120 日)逐日滚动,得到相关性时间序列,观察其稳定性。
  4. 设定阈值筛选:例如要求滚动相关性长期高于 0.7,且窗口内最低值不低于 0.5,才纳入候选配对。
  5. 伪相关排查:检查两者是否同属一个行业、是否受同一宏观因子驱动、是否存在共同趋势导致的虚假高相关。
import pandas as pd
import numpy as np

# 假设 df 包含两只股票的收盘价
ret_a = np.log(df['stock_a'] / df['stock_a'].shift(1)).dropna()
ret_b = np.log(df['stock_b'] / df['stock_b'].shift(1)).dropna()

pearson = ret_a.corr(ret_b, method='pearson')
spearman = ret_a.corr(ret_b, method='spearman')

# 滚动相关性,窗口 60 日
rolling_corr = ret_a.rolling(60).corr(ret_b)

print(f"Pearson: {pearson:.4f}, Spearman: {spearman:.4f}")
print(f"滚动相关性均值: {rolling_corr.mean():.4f}, 最小值: {rolling_corr.min():.4f}")

三、滚动相关性:稳定性比数值更重要

很多初学者只看一个全样本相关系数,比如 0.85,就认为配对成立。但全样本高相关可能只是某一段时间的局部现象。真正决定配对交易成败的,是相关性在时间上的稳定性。滚动相关性把单一数字变成一条曲线,能直观暴露关系断裂、结构性变化和阶段性失效。

实务中常用 60 日或 120 日窗口。窗口太短,噪声大、频繁翻转;窗口太长,反应迟钝、无法及时捕捉关系变化。建议同时观察多个窗口,例如 60 日与 120 日,若两者走势一致且都维持高位,配对可靠性更高。

指标适用场景对异常值敏感度关注重点
皮尔逊相关系数线性关系明显、数据干净高数值大小与方向
斯皮尔曼秩相关非线性单调、存在离群点低排序一致性
滚动相关性检验关系稳定性取决于窗口均值、最小值、波动
伪相关排查高相关但无经济逻辑—行业、因子、趋势

四、相关性陷阱与伪相关识别

陷阱一:共同趋势导致的伪相关。两只股票都处于长期上涨趋势中,价格序列相关系数很高,但收益率相关性可能很低。配对交易应基于收益率而非价格,否则会把趋势同步误判为可交易的价差关系。

陷阱二:行业与因子暴露重叠。同行业股票天然高相关,但这种相关可能来自共同的行业 beta,而非两者之间存在稳定的套利关系。一旦行业逻辑变化,相关性可能迅速瓦解。

陷阱三:样本选择偏差。只选取两者关系最好的时间段做回测,会严重高估策略表现。正确做法是使用滚动窗口,并在样本外验证。

陷阱四:忽略非线性与尾部依赖。平时相关性不高,但在市场暴跌时同步下跌,这种尾部相关性对配对交易是致命风险。斯皮尔曼和滚动相关性可以帮助识别,但仍需结合压力测试。

伪相关的典型信号:全样本相关性很高,但滚动相关性波动剧烈;或两者分属不同行业却高度同步,且找不到共同经济驱动因子。遇到这类配对,宁可放弃,不要强行交易。
实操建议:先用斯皮尔曼做初筛(稳健),再用皮尔逊确认线性强度,最后用滚动相关性检验稳定性。三者一致时,配对才值得进入协整检验与回测阶段。

相关性分析不是找一个“高数字”,而是找一段“稳定且可解释的关系”。把皮尔逊、斯皮尔曼和滚动相关性结合使用,并主动排查伪相关,才能为后续的配对筛选与历史回测打下可靠基础。