halo 的技术博客

返回

引言:因子共线性的困局#

在多因子量化模型中,我们经常会遇到一个棘手问题:因子之间的相关性。价值因子与质量因子可能高度相关,动量因子与低波因子可能存在微妙联系。这种共线性会导致:

  • 因子收益归因不准确
  • 组合权重不稳定
  • 过拟合风险增加

因子正交化(Factor Orthogonalization)就是解决这一问题的数学利器。

因子共线性热力图

为什么需要因子正交化?#

问题实例:价值与质量的纠缠#

假设我们同时使用了以下因子:

  • 价值因子(PB、PE的倒数)
  • 质量因子(ROE、毛利率)

在中国市场,低估值股票往往也是质量较差的股票(价值陷阱),导致两个因子呈负相关。当我们同时放入回归模型时:

结果会发现系数估计不稳定,标准误膨胀。

正交化方法一:Gram-Schmidt过程#

数学原理#

Gram-Schmidt正交化是最直观的方法。给定两个因子 f1f_1f2f_2

  1. 保留第一个因子:g1=f1g_1 = f_1
  2. 将第二个因子对第一个因子回归,取残差: g2=f2f2,g1g1,g1g1g_2 = f_2 - \frac{\langle f_2, g_1 \rangle}{\langle g_1, g_1 \rangle} g_1

这样 g1g_1g2g_2 就正交了(相关系数为0)。

Python实现#

Gram-Schmidt正交化示意图

正交化方法二:对称正交化(Symmetric Orthogonalization)#

为什么需要对称正交化?#

Gram-Schmidt的问题在于顺序敏感:先正交化的因子”占据”了解释力。对称正交化通过特征值分解解决这个问题。

数学原理#

给定因子矩阵 FF,计算其协方差矩阵 Σ=FTF\Sigma = F^T F,进行特征值分解:

Σ=QΛQT\Sigma = Q \Lambda Q^T

对称正交化后的因子为:

Forth=FQΛ1/2QTF_{orth} = F Q \Lambda^{-1/2} Q^T

这样所有因子”平等”地共享解释力。

Python实现#

方法三:PCA主成分分析#

思路转换:从因子到成分#

PCA不仅是降维工具,也可以用于因子正交化:

  1. 对因子矩阵进行PCA
  2. 取前K个主成分(通常K=因子数量)
  3. 这些主成分天然正交

PCA解释方差比例图

实战对比:三种方法的效果#

模拟实验设计#

我们生成一个包含5个因子的模拟数据集,其中因子间存在已知的相关性结构:

三种方法对比#

结果解读

  • Gram-Schmidt:几乎完全正交,但因子顺序影响结果
  • 对称正交化:完全正交,因子平等
  • PCA:完全正交,但因子含义丢失(变成主成分)

实盘应用:中证500多因子模型#

数据准备#

完整实战代码#

性能对比与选择建议#

计算效率#

方法计算复杂度适合场景
Gram-SchmidtO(K²N)因子数量少(<10),需要解释性
对称正交化O(K³)因子数量中等(10-50),追求平等
PCAO(K³)因子数量多(>50),可接受黑盒

实战建议#

  1. 因子数量 < 10:使用Gram-Schmidt,保留因子含义
  2. 因子数量 10-50:使用对称正交化,平衡解释力和正交性
  3. 因子数量 > 50:使用PCA,顺便降维
  4. 高频策略:避免使用PCA(计算慢),用Gram-Schmidt
  5. 风险模型:必须用对称正交化(风险平价需要)

风险提示与常见陷阱#

陷阱1:过度正交化#

正交化会消除因子间的所有相关性,但真实世界中因子确实有相关性。过度正交化可能导致:

  • 因子经济含义丢失
  • 样本外表现下降

解决方案:保留部分相关性,使用”软正交化”(regularized orthogonalization)

陷阱2:前瞻偏差#

正交化矩阵必须仅使用训练期数据拟合,然后应用到测试期。

# 错误做法
all_factors = pd.concat([train_factors, test_factors])
orthogonalizer.fit(all_factors)  # 泄露未来信息!

# 正确做法
orthogonalizer.fit(train_factors)
train_orth = orthogonalizer.transform(train_factors)
test_orth = orthogonalizer.transform(test_factors)
python

陷阱3:因子衰减#

正交化后的因子可能衰减更快(信息已经被”榨干”)。建议:

  • 定期重新拟合正交化矩阵(如每月)
  • 监控正交化后因子的IC(信息系数)

总结#

因子正交化是多因子模型中的重要技术,能够:

✅ 消除多重共线性
✅ 提高因子收益归因准确性
✅ 增强组合权重稳定性
✅ 降低过拟合风险

三种主流方法对比

  • Gram-Schmidt:简单直观,但顺序敏感
  • 对称正交化:数学优美,因子平等
  • PCA:完全正交,但丢失解释性

实战选择

  • 低频策略 → 对称正交化
  • 高频策略 → Gram-Schmidt
  • 大规模因子 → PCA

记住:正交化是手段,不是目的。关键还是找到有预测力的因子!


示例代码仓库: [GitHub链接]
下期预告: 《基于LSTM的股价预测实战:从数据预处理到模型部署》

喜欢这篇文章?欢迎关注我的量化专栏,每周更新实战干货!

多因子模型中的因子正交化:从理论到Python实战
https://blog.halo26812.eu.org/blog/factor-orthogonalization-methods
Author halo
Published at 2026年6月12日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨