LightGBM 83个候选因子新版回测报告
一句话结论
新版已经按要求完成全量重跑,但暂不建议替代旧版17因子模型。在完全相同的股票池、滚动窗口、Top 50组合和沪深300基准下,新版样本外年化净收益为 8.98%、年化相对收益为 2.99%,均低于旧版的10.40%和4.33%;最大回撤由旧版的-26.70%扩大到 -36.76%。
更关键的是,旧版毛收益年化为16.23%,新版只有9.67%。旧版历史结果使用15个基点的换手成本,新版使用买入、卖出各1个基点,因此净收益并非严格同成本口径;但毛收益不受成本口径影响,仍显示扩充因子后的组合选择能力下降。结论不是“新因子都没用”,而是“当前一次保留65至71个因子的方案过宽,需要更严格选因子和风险约束”。
数据、模型与交易口径
• 数据源:仅使用本地 Team Project 数据库,不使用 TLSJ。
• 候选特征:83个,包括趋势与位置22个、K线与日内结构15个、波动与风险16个、成交与流动性15个、量价交互9个、市场状态6个。
• 标签:未来20个交易日收益的逐日横截面排名。
• 调仓:每5个交易日;模型分数最高的50只股票等权持有。
• 成交:信号后的下一交易日开盘;开盘涨停股票不可买入。
• 成本:买入万分之一、卖出万分之一,按实际买卖换手分别扣除。
• 基准:沪深300价格指数 000300,采用与策略相同的开盘到开盘口径。
• 模型:LightGBM;每一折只用训练集与验证集进行因子质量筛选和高相关去重,测试集不参与选因子。
• 隔离期:训练集、验证集和测试集之间各留出约20个交易日,降低20日标签跨界造成的信息泄漏。
训练集、验证集与样本外测试集
本报告中的“测试集”就是样本外集(OOS)。所有折合并后的样本外区间为 2022-05-09至2026-07-07,共203个调仓期、964,206条股票预测,股票—日期键无重复。
| 折 | 实际训练集 | 实际验证集 | 实际测试 / 样本外集 | 入选因子 | OOS Rank IC | 相对沪深300 |
| 0 | 2016-05-04至2021-03-31 | 2021-05-11至2022-03-28 | 2022-05-09至2023-04-28 | 65 | 0.1148 | +9.73% |
| 1 | 2017-05-08至2022-03-28 | 2022-05-09至2023-03-30 | 2023-05-10至2024-04-26 | 71 | 0.1641 | +12.29% |
| 2 | 2018-05-09至2023-03-30 | 2023-05-10至2024-04-03 | 2024-05-08至2025-04-24 | 67 | 0.1046 | +6.21% |
| 3 | 2019-05-06至2024-04-03 | 2024-05-08至2025-04-02 | 2025-05-06至2026-04-29 | 69 | 0.0908 | +8.21% |
| 4 | 2020-05-07至2025-04-02 | 2025-05-06至2026-03-31 | 2026-05-11至2026-07-07 | 68 | 0.0860 | -20.48% |
第4折只有9个调仓期,不能单独作为完整年度结论,但它是需要继续监控的最新风险信号。
样本外总体表现
| 指标 | 旧版17因子 | 新版83候选因子 | 新版减旧版 |
| Rank IC | 0.1179 | 0.1170 | -0.0009 |
| ICIR | 0.6720 | 0.6564 | -0.0157 |
| 净收益年化 | 10.40% | 8.98% | -1.42个百分点 |
| 毛收益年化 | 16.23% | 9.67% | -6.56个百分点 |
| 夏普比率 | 0.520 | 0.438 | -0.082 |
| 最大回撤 | -26.70% | -36.76% | 恶化10.06个百分点 |
| 平均单次调仓换手 | 68.16% | 62.78% | 降低5.38个百分点 |
| 年化相对沪深300 | 4.33% | 2.99% | -1.34个百分点 |
新版最终净值为1.414,沪深300同期净值为1.256,最终相对财富为1.126。策略整体仍有正超额,但收益风险比和回撤都没有达到替换旧版的要求。
年度表现与2026年问题
| 年份 | 新版净收益 | 旧版净收益 | 沪深300 | 新版相对收益 |
| 2022(5月起) | +2.55% | +1.79% | +3.90% | -1.30% |
| 2023 | +1.74% | -0.77% | -14.86% | +19.49% |
| 2024 | +15.84% | +11.82% | +11.88% | +3.54% |
| 2025 | +34.76% | +54.55% | +24.81% | +7.98% |
| 2026(截至7月) | -13.18% | -14.65% | +1.67% | -14.61% |
新版在2022、2023、2024和2026较旧版有所改善,但2025少赚约19.78个百分点,是总体年化下降的主要来源。2026年虽然比旧版少跌约1.46个百分点,但仍显著跑输沪深300。2026年的Rank IC降至约0.078,同时平均换手升至79.52%,说明最新阶段既有排序能力减弱,也有Top 50尾部选择不稳和高换手问题。
新因子实际有没有用
新因子不是先挖出一个固定公式再直接相信它,而是先计算83个候选特征,再在每个滚动折的训练集和验证集上检查覆盖率、IC方向和稳定性,最后才让LightGBM使用。这一流程确认了部分新特征确实有信息,但当前筛选过于宽松:五折分别留下65、71、67、69、68个因子。
按LightGBM平均增益占比,最重要的特征包括:
1. market_volatility_20:10.44%;
2. turnover_std_20:8.40%;
3. limit_down_hit_rate_20:8.37%;
4. turnover_5:8.06%;
5. market_dispersion_20:7.44%;
6. amount_log_5:5.69%;
7. market_momentum_20:5.69%;
8. limit_up_hit_rate_20:5.68%;
9. market_breadth_20:5.49%。
这些结果说明市场状态、交易活跃度和涨跌停行为被模型大量使用。但“重要度高”只表示模型经常用它分裂,不等于它能稳定增加样本外收益。大量同类变量同时入选,容易让模型在特定市场阶段形成过强的状态依赖。
为什么扩充因子后反而变差
1. 入选因子过多。 每折保留约78%至86%的候选,筛选没有真正压缩模型复杂度。
2. 同类信息仍然拥挤。 虽已做0.95相关性去重,但趋势、波动、换手和市场状态之间仍存在非线性冗余。
3. 市场状态特征权重过高。 前九大重要特征中五个是市场状态或涨跌停状态,可能提升部分阶段表现,却加大状态切换时的风险。
4. 优化目标与组合尾部不完全一致。 模型训练的是全截面排名,但实际只买最顶端50只;Rank IC接近旧版,不代表Top 50一定更稳。
5. 组合缺少行业、市值约束。 当前仍可能带有小中盘、高活跃度和特定行业暴露,2026年沪深300上涨而股票池整体偏弱时尤其不利。
下一步建议
1. 保留83因子作为候选库,但把每折最终因子数约束到20至35个;在验证集内选择数量,不看测试集。
2. 将相关性阈值从0.95收紧到0.85至0.90,并按因子类别设置上限,防止趋势、波动和成交类扎堆。
3. 做逐类消融:17因子基准分别加入市场状态、K线、风险、流动性和交互项,判断哪一类真正贡献样本外收益。
4. 在验证集内比较Top 50、Top 100和Top 200,并增加持仓缓冲,训练目标加入Top端排序或收益权重。
5. 加入行业和流通市值数据,输出行业、市值暴露与中性化前后结果。
6. 由于2022至2026数据已经被反复查看,下一次正式版本应把2026-08以后数据或一段仿真实盘作为新的最终留出期。
文件说明
• metrics.json:新版总体指标。
• backtest.csv、annual_returns.csv:净值和年度收益。
• walk_forward_windows.csv、fold_summary.csv:每折训练、验证、样本外窗口及表现。
• factor_diagnostics.csv、factor_selection_by_fold.csv:逐折因子诊断与筛选记录。
• factor_selection_summary.csv:83个候选因子的跨折汇总。
• feature_importance.csv:模型逐折增益重要度。
• model_comparison.csv、annual_comparison.csv:新旧模型对比。
• run_config.toml:本次实际运行配置快照。
本次输出已经通过日期覆盖、预测键唯一性、沪深300对齐和逐期交易成本复核。新版可以作为下一轮精简与消融研究的起点,但不应直接作为当前最优模型上线。