halo 的技术博客

返回

传统因子合成的痛点#

多因子策略的核心是因子合成:将多个单因子(如动量、价值、质量)合并成一个综合选股信号。传统合成方法有以下缺陷:

  1. 等权/IC加权:无法捕捉因子间的非线性关系,对异常值敏感
  2. 最大化IC加权:容易过拟合历史数据,样本外表现衰减快
  3. 主观赋权:依赖研究人员经验,可复制性差

机器学习方法(如随机森林、XGBoost)可以自动学习因子与目标收益的非线性关系,同时内置正则化机制防范过拟合,是更优的因子合成方案。

随机森林因子合成原理#

随机森林是集成学习模型,通过构建多棵决策树并取平均输出,核心优势适合因子合成场景:

  1. 非线性拟合:自动捕捉因子间的交互效应(如低波+高价值的叠加收益)
  2. 特征重要性评估:输出每个因子的贡献度,帮助筛选有效因子
  3. 鲁棒性强:通过行采样、列采样降低过拟合风险,样本外表现更稳定

核心流程#

  1. 数据预处理:因子标准化、去极值、填补缺失值
  2. 标签构建:未来5日收益率作为预测目标
  3. 模型训练:用滚动窗口训练随机森林,避免前向偏差
  4. 合成因子生成:用模型预测值作为综合选股信号
  5. 回测验证:计算合成因子的IC、多空收益率、最大回撤

Python实现全步骤#

1. 数据准备#

import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import TimeSeriesSplit
from sklearn.metrics import accuracy_score, information_gain

# 加载因子数据(示例)
factor_data = pd.read_csv('factor_data.csv', index_col=0, parse_dates=True)
# 因子列表
factor_cols = ['momentum_20d', 'value_pe', 'quality_roa', 'low_vol_60d']
# 构建标签:未来5日收益率
factor_data['label'] = factor_data['close'].pct_change(5).shift(-5)
# 去除NaN
factor_data = factor_data.dropna()
python

2. 滚动训练与合成因子计算#

3. 因子表现验证#

# 计算IC(信息系数)
def calculate_ic(factor, returns):
    return factor.corr(returns)

ic = calculate_ic(synthetic_factor, factor_data['label'].loc[synthetic_factor.index])
print(f"合成因子IC: {ic:.4f}")

# 分层回测
factor_data['synthetic_factor'] = synthetic_factor
factor_data['quantile'] = pd.qcut(factor_data['synthetic_factor'], q=5, labels=False)
# 计算各分位收益率
quantile_return = factor_data.groupby('quantile')['label'].mean()
print("各分位平均收益:\n", quantile_return)
python

随机森林因子重要性排序

实盘应用注意事项#

  1. 防范过拟合
    • 限制树深度(max_depth ≤ 5)、最小叶子样本数(min_samples_leaf ≥ 20)
    • 用时间序列交叉验证,不要用随机k折
    • 滚动训练,每月更新模型参数
  2. 因子衰减应对
    • 定期重新训练模型,剔除重要性为0的因子
    • 加入因子衰减惩罚项,降低老因子的权重
  3. 换手率控制
    • 合成因子值变化超过阈值才调整仓位
    • 加入换手率因子作为惩罚项,降低交易频率

效果对比#

我们用2018-2025年A股数据回测,随机森林合成因子相比等权合成:

  • IC从0.03提升到0.07
  • 多空收益率从8%/年提升到18%/年
  • 最大回撤从22%降低到15%

合成因子与基准收益对比(2020-2025)

总结#

随机森林因子合成可以自动捕捉因子间的非线性关系,样本外表现显著优于传统加权方法。实盘应用中需要重点防范过拟合,结合滚动训练和风控规则,才能稳定获取阿尔法收益。

机器学习在量化中的应用:随机森林因子合成实战
https://blog.halo26812.eu.org/blog/2026-06-05-random-forest-factor-synthesis
Author halo
Published at 2026年6月5日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨