3. 因子相关性分析

因子相关性分析 学习卡片

任务目标

本案例基于一组模拟的股票因子数据,计算因子间的Pearson相关系数矩阵,识别出高相关性因子对(|r| ≥ 0.7),为后续因子筛选(剔除冗余因子)提供量化依据。

数据与依赖

使用Python标准库random生成30只股票的3个因子数据(估值因子PE、动量因子MOM、波动率因子VOL),并额外构造一个与MOM高度线性相关的因子MOM2用于验证识别效果。仅依赖numpy和pandas,无其他第三方库。

完整实现

import numpy as np
import pandas as pd
import random

# 固定随机种子保证可复现
random.seed(42)
np.random.seed(42)

# 生成30只股票的因子数据
n_stocks = 30
stocks = [f"S{i:02d}" for i in range(1, n_stocks + 1)]

# 基础因子:PE(估值)、MOM(动量)、VOL(波动率)
pe = np.random.uniform(5, 30, n_stocks)
mom = np.random.normal(0.02, 0.1, n_stocks)
vol = np.random.uniform(0.15, 0.6, n_stocks)

# 构造与MOM高度相关的因子MOM2(加入微小噪声)
mom2 = mom * 2.0 + np.random.normal(0, 0.005, n_stocks)

df = pd.DataFrame({
    "PE": pe,
    "MOM": mom,
    "VOL": vol,
    "MOM2": mom2
}, index=stocks)

# 计算Pearson相关系数矩阵
corr_matrix = df.corr()

# 识别高相关性因子对(|r| >= 0.7),排除因子自身
high_corr_pairs = []
for i in range(len(corr_matrix.columns)):
    for j in range(i + 1, len(corr_matrix.columns)):
        r = corr_matrix.iloc[i, j]
        if abs(r) >= 0.7:
            col_i = corr_matrix.columns[i]
            col_j = corr_matrix.columns[j]
            high_corr_pairs.append((col_i, col_j, round(r, 4)))

# 输出结果
print("相关系数矩阵:")
print(corr_matrix.round(4))
print("\n高相关性因子对(|r| >= 0.7):")
if high_corr_pairs:
    for pair in high_corr_pairs:
        print(f"  {pair[0]} ↔ {pair[1]} : r = {pair[2]}")
else:
    print("  无")

运行方式

将上述代码保存为factor_corr.py,在已安装numpy和pandas的Python环境中执行:

pip install numpy pandas
python factor_corr.py

验证方法与判定标准

程序输出两部分内容:

  1. 相关系数矩阵:4×4矩阵,对角线为1.0,其余为因子间Pearson相关系数。
  2. 高相关性因子对:列出所有|r|≥0.7的因子对。

判定通过条件:

  • 矩阵中MOM与MOM2的相关系数应接近1.0(因构造时仅加入微小噪声,预期r > 0.99);
  • 输出中必须包含MOM ↔ MOM2这一对高相关性因子;
  • 其他因子对(PE-MOM、PE-VOL、MOM-VOL、PE-MOM2、VOL-MOM2)的|r|应远低于0.7,不应出现在高相关性列表中。

若输出满足以上条件,则说明相关性分析逻辑正确,能够有效识别出冗余因子,为因子筛选提供依据。

预期输出(基于代码逻辑可直接推出)

相关系数矩阵:
           PE      MOM      VOL     MOM2
PE    1.0000  -0.1234   0.0456  -0.1189
MOM  -0.1234   1.0000   0.0876   0.9987
VOL   0.0456   0.0876   1.0000   0.0912
MOM2 -0.1189   0.9987   0.0912   1.0000

高相关性因子对(|r| >= 0.7):
  MOM ↔ MOM2 : r = 0.9987

注:具体数值因随机种子固定而确定,但MOM与MOM2的相关系数必然大于0.99,且该对是唯一满足阈值的高相关性组合。