【量化投资从入门到精通 #37】十几个因子打架?用标准化+IC加权,拧成一个数
因子体系第三阶。#34/#35 已经攒下价值、成长、规模、质量、动量五把尺子。这篇解决一个现实问题:尺子多了,怎么合成一个最终打分?
一、这个方法解决什么投资问题
因子不是越多越好——十个因子各说各话,今天价值说买 A、明天动量说卖 A,你听谁的?
多因子合成就是把这些"互相打架"的因子,按一套规则拧成一个总分,然后只按总分排序选股。它回答两个问题:
- 怎么让量纲不同的因子能相加?(标准化)
- 怎么让"好因子"说话更算数、"坏因子"别捣乱?(加权)
二、核心思想
第一步:标准化(z-score)。每个因子自己减均值除标准差,变成"相对全班排第几"的标准分,量纲不同的因子终于能相加。
第二步:加权合成。两种主流做法:
方法 怎么做 适用
等权 所有因子平均 因子质量差不多时
IC 加权 按每个因子与未来收益的秩相关(IC)绝对值加权 因子质量参差时
IC(Information Coefficient)= 因子值与未来收益的秩相关,衡量"这个因子到底管不管用"。IC 高的因子,合成时话语权更大。
铁律:IC 必须用历史截面估计(样本内),最终效果还要在样本外验证(#27/#28 讲过过拟合)。
三、实操演示
合成示意:12 个因子,前 6 个与未来收益有正相关("好因子"),后 6 个近似噪声。对比等权与 IC 加权。
import numpy as np, pandas as pd
rng = np.random.default_rng(37082026)
N, K = 400, 12
future = rng.normal(0, 1, N)
factors = {}
for k in range(K):
strength = max(0.0, 0.5 - k0.07) # 因子质量递减
signal = future if k < 6 else np.zeros(N)
factors[f"f{k+1}"] = strengthsignal + np.sqrt(1-strength**2)*rng.normal(0,1,N)
df = pd.DataFrame(factors)
z = df.apply(lambda s: (s - s.mean())/(s.std()+1e-9))
equal = z.mean(axis=1) # 等权合成
IC 加权:用秩相关估计每个因子的 IC,取绝对值做权重
ics = {}
for c in z.columns:
r = np.argsort(np.argsort(z[c])); f = np.argsort(np.argsort(future)); n=len(r)
ics[c] = 1 - 6np.sum((r-f)**2)/(n(n**2-1))
w = np.array([abs(ics[c]) for c in z.columns]); w /= w.sum()
ic_w = (z.values * w).sum(axis=1)
def spread(s, r, q=5):
lab = pd.qcut(pd.Series(s), q, labels=False, duplicates="drop")
return r[labq-1].mean() - r[lab0].mean()
print("等权 价差", round(spread(equal, future),3))
print("IC加权 价差", round(spread(ic_w, future),3))
运行结果(合成示意,N=400,K=12):
合成方式 多空价差
等权 +1.519
IC 加权 +1.891
数据需求标注:真实合成时,把 factors 换成 #34/#35 的真实因子(价值/成长/规模/质量/动量),并补入财报(R1)与行业映射(R5)做中性化。本 demo 用 synthetic 演示算法本身。
四、结果解读
IC 加权(+1.891)明显优于等权(+1.519)。原因直观:12 个因子里只有前 6 个真有信号,后 6 个基本是噪声。等权把噪声因子也给了 1/12 的票数,稀释了有效信号;IC 加权让"管用的因子"话语权更大,所以更强。
这正是多因子合成的精髓:不是简单平均,而是按证据强度分配信任。
但两个大坑必须提醒:
- IC 估计本身有误差:用太少截面期估出来的 IC 不可靠,权重可能错配。
- IC 会衰减/反转:去年的好因子今年可能失效(#38 因子陷阱),用滚动窗口动态更新 IC 权重才是正解,而不是一次算死。
五、常见陷阱
- 样本内过拟合:在历史上调权重调到最美,样本外一塌糊涂(#28)。
- 因子共线:价值与质量高度相关,等权会重复计权;IC 加权也会给两个高 IC 因子都高权。需要先做因子正交/聚类。
- 忽略行业中性:不中性化,合成分会变成"行业暴露"(全仓某一个行业),风险集中。
- 负 IC 因子直接扔:IC 为负的因子,反向用(取负号)可能比扔掉更好。
六、小结 + 下篇预告
多因子合成 = 先 z-score 标准化,再按规则加权成总分;因子质量参差时,IC 加权优于等权。但权重要动态、要样本外验证、要做中性化。
下一篇跳到第八阶的专题——#44 可转债量化、#45 基金量化、#46 基本面量化、#47 AI 量化入门,它们依赖可转债/基金/财报/因子特征工程等数据(需求 R2–R4),补全后即可实跑;本篇的合成框架正是它们的"收口"工具。
免责声明
本文为量化方法教学,代码示例使用合成示意数据,不构成投资建议,不承诺收益。投资有风险,入市需谨慎。

浙公网安备 33010602011771号