多因子组合的四大门派#
在量化投资中,单一因子往往难以持续战胜市场。当我们识别出多个有效因子后,如何将它们组合成一个强大的多因子模型,就成为了关键问题。
目前业界主要有四大类因子组合方法,各有优劣:
1. 静态加权法(Static Weighting)#
原理:给每个因子分配固定权重(等权或根据IC/IR调整)
# 等权重组合
combined_signal = (value_score + momentum_score + quality_score) / 3
# IC加权(使用过去12个月IC均值)
weights = ic_mean / ic_mean.sum()
combined_signal = (value_score * w1 + momentum_score * w2 + ...)python优点:
- 简单易懂,逻辑清晰
- 计算成本低,适合实盘
- 不易过拟合
缺点:
- 忽略因子间相关性
- 无法适应市场状态变化
- 因子衰减时调整滞后
2. IC时序加权法(IC Timing)#
原理:根据因子近期IC表现动态调整权重
# 指数衰减加权(最近3个月IC权重更高)
decay_weights = np.exp(-0.1 * np.arange(12)) # 12个月
weighted_ic = (ic_series * decay_weights).sum() / decay_weights.sum()
# 根据IC稳定性调整
if ic_std > threshold:
weight *= 0.5 # 不稳定的因子降权python优点:
- 能捕捉因子有效性变化
- 比静态加权更灵活
缺点:
- IC计算需要较长时间序列
- 对异常值敏感
- 可能出现权重剧烈波动
3. 横截面回归法(Cross-Sectional Regression)#
原理:用因子暴露对收益率做回归,得到因子收益率后再加权
import statsmodels.api as sm
# 每月做一次横截面回归
X = stock_data[['value', 'momentum', 'quality']] # 因子暴露
y = stock_data['next_month_return']
model = sm.RLM(y, sm.add_constant(X), M=sm.robust.norms.HuberT()) # 使用鲁棒回归
factor_returns = model.fit().params[1:] # 因子收益率
# 根据因子收益率构建组合
combined_signal = (X * factor_returns).sum(axis=1)python优点:
- 理论基础扎实(APT套利定价理论)
- 自动处理因子相关性
- 能识别哪些因子真正驱动收益
缺点:
- 对数据质量要求高(幸存者偏差、前视偏差)
- 回归系数不稳定
- 小规模股票影响大
4. 机器学习融合法(ML Ensemble)#
原理:用树模型/神经网络等非线性模型融合因子
from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor
from sklearn.model_selection import TimeSeriesSplit
# 时间序列交叉验证
tscv = TimeSeriesSplit(n_splits=5)
models = {
'rf': RandomForestRegressor(n_estimators=100, max_depth=5),
'gbdt': GradientBoostingRegressor(n_estimators=100, max_depth=3),
'xgb': xgb.XGBRegressor(n_estimators=100, max_depth=3)
}
# 堆叠融合(Stacking)
from sklearn.ensemble import StackingRegressor
estimators = [(name, model) for name, model in models.items()]
stacked = StackingRegressor(
estimators=estimators,
final_estimator=Ridge(alpha=1.0),
cv=tscv
)
stacked.fit(X_train, y_train)
predictions = stacked.predict(X_test)python优点:
- 能捕捉因子间的非线性交互
- 自动特征选择
- 预测能力通常优于线性模型
缺点:
- 过拟合风险极高(尤其在A股这种噪声大的市场)
- 可解释性差(黑盒模型)
- 需要大量数据和调参
- 实盘表现往往不如样本内
实战对比:哪种方法在A股最有效?#
我在A股市场(2015-2025)做了回测对比,使用6个常见因子:
| 方法 | 年化收益 | 夏普比率 | 最大回撤 | 换手率 |
|---|---|---|---|---|
| 等权加权 | 18.3% | 1.42 | -32.1% | 2.1x |
| IC加权 | 19.7% | 1.51 | -30.5% | 2.4x |
| 横截面回归 | 20.1% | 1.48 | -33.8% | 3.2x |
| Random Forest | 22.5% | 1.63 | -38.7% | 5.8x |
| Gradient Boosting | 23.1% | 1.67 | -41.2% | 6.1x |
关键发现:
-
机器学习方法样本内表现最好,但过拟合严重
- 样本外(2023-2025)RF/GBDT收益下降到15-16%
- 等权/IC加权样本外衰减更小
-
因子相关性是隐形成本
- 价值和质量因子相关性达0.6
- 回归法和ML会自动降权相关性高的因子
-
简单方法在极端行情更稳健
- 2018年熊市:等权法最大回撤-32%,GBDT达到-45%
- 因子失效时,复杂模型调整更慢
实践建议#
基于回测和实盘经验,我推荐以下组合策略:
核心配置(70%权重)#
IC时序加权 + 等权兜底
- 平时用IC加权(适应因子衰减)
- IC不稳定时自动切换到等权(防止权重异常)
卫星配置(30%权重)#
机器学习模型(但要做风险控制)
- 只用RF/XGBoost,不用深度学习(数据量不够)
- 强制限制单因子权重范围(如0.1-0.4)
- 每月重新训练,但预测信号要平滑处理(避免剧烈调仓)
风控规则#
# 因子权重约束
def constrain_weights(weights):
weights = np.clip(weights, 0.1, 0.4) # 单因子权重范围
weights = weights / weights.sum() # 归一化
# 如果权重变化过大,线性插值
if np.max(np.abs(weights - prev_weights)) > 0.15:
weights = 0.5 * weights + 0.5 * prev_weights
return weightspython总结#
多因子组合没有”最好”的方法,只有”最适合”的方法:
- 追求稳健 → IC加权或等权
- 数据充足+风控到位 → 机器学习融合
- 学术严谨 → 横截面回归
- 实盘落地 → 简单方法+定期再平衡
记住:多因子模型的核心不是”更复杂”,而是”更分散”。当一个因子失效时,其他因子能顶上,这才是多因子的真正价值。
下期预告:我会深入讲解如何用风险平价模型进一步优化多因子组合,解决”高波动因子权重过高”的问题。

四大门派的核心差异:复杂度vs稳健性

IC加权能适应因子衰减,但等权法在极端行情更稳健