[机器学习研究三]AI Alphas 复现:排序学习 GBDT 的失效诊断与优化修复
摘要
本文针对一套基于 BigQuant《AI Alphas (A股版)》(2017-08-01)的 StockRanker 框架的 A 股多因子选股策略,系统记录其从失效到修复的完整优化过程,并通过 PandaAI 因子分析平台的完整回测数据(2023-01-01 至 2025-12-31,10 日调仓,10 组分层,中证全指为基准)对修复前后两版策略进行全面定量对比。策略一(优化前)以 lightgbm.LGBMRanker(lambdarank、150 树、按日分组、未来 10 日收益五档整序标签)等价复现 StockRanker 的"排序学习 + 梯度提升树",Rank_IC -0.0174,多头超额 -9.73%,多空年化 -9.83%,且预测分与样本外收益呈系统性负相关(分组10 超额 -9.73% 低于分组1 的 +0.09%),方向反转、复现失败;策略二(优化后)针对失效机制实施三项修复——回归目标替代 lambdarank 以保留收益幅度信息、强正则化浅层树(100 树、7 叶、子采样)抑制方差、逐日对市值/波动取残差的风格中性化——Rank_IC 修复至 +0.0725,多头超额转正至 +0.79%,多空年化 +23.95%,夏普比率 1.189,信息比率 1.328,多空最大回撤收敛至 15.80%。
数据表明,三项修复构成一条完整的"诊断—修复"链:回归目标修正使 Rank_IC 由 -0.0174 跃升至 +0.0768(单独即超过传统线性对照的 +0.0688),风格中性化再将其 IC 波动率由 0.157 压缩至 0.137、IC p 值改善至全系列最佳的 0.067,多空信息比率由线性对照的 0.831 提升至 1.328。对原报告"AI 收益挖掘能力是传统方法 2 倍以上"的最终判定为:方向复现、幅度不及——修复后的 AI 在多空年化(+23.95% 对 +18.48%)、夏普(1.189 对 0.719)上确立优势,约合传统方法的 1.3~1.7 倍,但远未达到 2 倍以上;且按 10 日调仓 0.3% 单边成本折算,多头净超额仍为负(-7.36%),AI 的增量价值集中在空头端区分与风险调整后收益。本文的核心贡献是把一个"AI 不行"的负结果转化为一组可操作的修复规则:先修目标、再控容量、最后去风格。
一、引言
1.1 研究背景
BigQuant 2017 年发布的《AI Alphas (A股版)》以 282 个因子为特征池,用自研 StockRanker 算法(选股 + 排序学习 + 梯度提升树)逐因子训练排序模型,报告结论是"相同因子下 AI 效果远超传统方法,收益有 100% 以上的提升"。其前作复现(本文第一稿)曾得出与原报告方向相反的负结果——AI 排序模型 Rank_IC 为负、多头超额 -9.73%。负结果本身有价值,但在归因完成、修复路径走完之前,它只证明"这一组配置不行",不证明"AI 不行"。
1.2 问题提出
本次迭代回答三个问题:第一,第一稿的失效能否定位到具体机制(而非笼统归咎于过拟合);第二,针对机制的三项修复——目标修正、容量控制、风格剥离——各自贡献多少;第三,修复后的 AI 正向案例相对传统线性对照与原报告结论分别处于什么位置。
1.3 研究价值
本文的价值在于:方法诊断——通过两端分组超额发现方向反转,把失效定位为"训练窗风格关系在样本外翻转"而非模型缺陷;修复链验证——三项修复逐项叠加运行,量化每一步的边际贡献,避免"调参玄学";正负结果的对价——修复后的正向案例与第一稿负结果使用完全相同的因子池、窗口与回测口径,差异全部来自三条可移植的修复规则。
1.4 文章结构
本文第二章阐述研究目的;第三章介绍回测框架;第四章剖析失效机制与三项修复的代码逻辑;第五章呈现优化旅程与修复前后对比;第六章总结局限与迭代方向。
二、研究目的
(一)核心目标
- 失效诊断:确认第一稿 lambdarank 复现的方向反转特征,并将其归因到可操作的层面;
- 逐项修复:实施"回归目标 → 强正则化 → 风格中性化"三项修复并量化各自的边际贡献;
- 正向案例:得到一个在 IC、多头超额、多空绩效上全面优于传统线性对照的 AI 配置;
- 结论校准:以修复后的最优配置重新判定原报告"AI 2 倍优势"结论的成立范围。
(二)具体任务
| 任务编号 | 具体任务 | 预期产出 |
|---|---|---|
| 1 | 方向反转诊断(两端分组超额对照) | 失效机制确认 |
| 2 | 修复一:LGBMRegressor 替代 lambdarank | data/ai-alpha-reg-v2.json |
| 3 | 修复二+三:强正则化与风格中性化 | data/ai-alpha-reg-neutral-v3.json |
| 4 | 优化旅程汇总与同池对照 | 对比表与净值图 |
| 5 | 重写研究报告并更新社区发布 | 本报告 |
三、回测框架与核心代码逻辑
3.1 回测平台与数据基础
回测在 PandaAI 因子分析平台完成,股票池为平台实际加载的沪深全 A(约 4900 只),基准中证全指。特征数据通过 factors['字段名'] 字面量声明加载:估值四因子、market_cap、turnover、volume、amount 为目录字段,动量/波动/技术因子由 close 派生,合计约 30 个特征。预处理流程:逐日 5×MAD 去极值、截面中位数填充缺失、逐日 z-score 标准化(策略二在标准化之后追加风格中性化)。防未来函数三件套贯穿全部变体:标签 purge(t+10 ≤ 预测块起点)、滚动训练窗(最近 252 个交易日)、固定种子行抽样(20%),平台报告的 IC 与分组收益全部为样本外。
3.2 回测参数统一设置
| 参数项目 | 策略一(优化前) | 策略二(优化后) | 说明 |
|---|---|---|---|
| 回测平台 | PandaAI 因子分析 | PandaAI 因子分析 | 同一平台 |
| 回测区间 | 20230101-20251231 | 20230101-20251231 | 三年 |
| 调仓周期 / 分组数 | 10 日 / 10 组 | 10 日 / 10 组 | 同口径 |
| 因子方向 | 1(高值优) | 1(高值优) | 多头均为分组10 |
| 特征池 | 约 30 因子 | 约 30 因子 | 同池 |
| 学习目标 | lambdarank(五档整序) | 回归(连续截面分位) | 修复一 |
| 树容量 | 150 树 × 31 叶 | 100 树 × 7 叶 + 子采样 | 修复二 |
| 风格处理 | 无 | 逐日对 [1, lncap, vol20] 取残差 | 修复三 |
| 滚动纪律 | 21 日重训、252 日窗、20% 抽样 | 同左 | 完全一致 |
3.3 绩效评估指标体系
| 维度 | 指标 | 说明 |
|---|---|---|
| 因子质量 | Rank_IC、IC_mean、IC_std、IC_p、单调性 | IC_p 为 IC_mean t 检验 p 值 |
| 收益类 | 多头/多空年化、超额收益 | 多头=分组10 等权组合 |
| 风险类 | 最大回撤 | 含多空口径 |
| 风险调整 | 夏普比率、信息比率 | 分层组合口径 |
| 交易质量 | 换手率、月胜率、净超额 | 成本=换手×2×0.3%×252/10 |
3.4 稳健性检验设置
优化旅程共五个配置(原始 lambdarank、浅层 lambdarank、回归目标、回归+风格中性化、线性对照)同池同窗互证;全部结果按研究系列累计 23 个候选计多重检验阈值(p < 0.0022);训练随机种子固定,重复运行可复现。
四、研究过程:基于代码逻辑的深度推演与绩效归因
4.1 策略一核心逻辑与代码分析
# 策略一(优化前):lambdarank 排序学习,逐日为 query group
from lightgbm import LGBMRanker
order = numpy.argsort(pos_tr, kind='stable') # 训练样本按日期分组排序
ytr = y_cls.values[tr_idx][order] # 五档整序标签 0-4
groups = numpy.bincount(pos_tr[order])
model = LGBMRanker(objective='lambdarank', n_estimators=150,
learning_rate=0.05, num_leaves=31,
min_child_samples=200, random_state=0, n_jobs=4)
model.fit(Xtr, ytr, group=groups)
策略一忠实复现 StockRanker 三要素,但存在两处隐患:lambdarank 的 pairwise 梯度只关心组内相对次序,五档整序把收益幅度信息压成 0-4 的整数,风格共动带来的"排序位移"与真实 alpha 在目标中不可区分;150 棵 31 叶的树容量在月频重训的 252 日窗内足以记住上一段风格的全部非线性结构。
策略一模式总结
复现机制正确、结果方向反转(分组10 超额 -9.73% 低于分组1 的 +0.09%)——模型学到的不是 alpha 而是上一段风格,样本外风格翻转后预测值反向。
4.2 策略二核心逻辑与代码分析
# 修复一:回归目标替代 lambdarank,保留收益幅度信息
from lightgbm import LGBMRegressor
model = LGBMRegressor(objective='regression', n_estimators=100,
learning_rate=0.03, num_leaves=7, # 修复二:强正则化浅层树
min_child_samples=1000, colsample_bytree=0.7,
subsample=0.7, subsample_freq=1,
random_state=0, n_jobs=4)
model.fit(Xtr, y_rank.values[tr_idx]) # 连续截面分位标签
# 修复三:逐日风格中性化,对 [1, lncap, vol20] 取截面残差
dcol = numpy.column_stack([numpy.ones(len(idx)), X['lncap'].values, X['vol20'].values])
uniq_d, inv_d = numpy.unique(numpy.asarray(dates), return_inverse=True)
for k in range(len(uniq_d)):
gi = numpy.where(inv_d == k)[0]
beta, *_ = numpy.linalg.lstsq(dcol[gi], X.values[gi], rcond=None)
resid[gi] = X.values[gi] - dcol[gi] @ beta # 剥离市值/波动风格暴露
三项修复的次序即诊断链:目标修正回答"学什么"(把幅度信息还给模型),容量控制回答"记多少"(浅层树加子采样,方差让位给偏差),风格中性化回答"学谁的"(把风格从特征里剥掉,只留残余 alpha 结构)。
策略二模式总结
修复后的模型在同等滚动纪律下输出稳定为正的样本外信号:Rank_IC +0.0725、IC 波动率 0.137(全系列最低)、多头超额转正、多空信息比率 1.328。
4.3 策略一潜在表现与归因分析
优势阶段
无稳定优势阶段。2025 年 2-4 月与 9-11 月 Rank_IC 短暂转正,均不超过一个季度。
劣势与风险暴露
方向反转贯穿全程:多头(分组10)年化超额 -9.73%、最大回撤 54.47%,多空年化 -9.83%、月胜率 47.22%——做多模型最看好的组合系统性跑输。
归因总结
失效机制 = lambdarank 目标丢弃幅度信息 + 150×31 树容量记住风格 + 风格样本外翻转。三者缺一,反转不会如此干净:浅层 lambdarank(50 树)Rank_IC -0.0015(方向消失但未转正),说明容量是放大器而非根源;根源是目标对风格位移的敏感。
4.4 策略二潜在表现与归因分析
优势阶段
2024 年 9 月至 2025 年 12 月,修复版多空净值由 1.02 稳步抬升至 1.24,月胜率 66.67%:风格中性化剥离了随行情翻转的暴露后,残余 alpha 结构(估值-动量-换手的非线性组合)在样本外持续兑现。
核心优势归因
多头超额由 -9.73% 转正至 +0.79%、多空年化由 -9.83% 提升至 +23.95% 的量级跃升中,回归目标修正贡献了主要跳变(Rank_IC -0.017→+0.077),风格中性化贡献了稳定性(IC 波动率 -13%、多空回撤 15.80% 对线性对照的 20.50%)。
归因总结
策略二的价值不在"模型更强"而在"学的对象对了":同一批树、同一批数据,把风格从输入里剥掉、把幅度还给目标之后,非线性才第一次出现增量。
五、研究结果与核心结论
5.1 核心绩效指标量化对比
策略一(优化前)

策略二(优化后)
表1:修复前后核心绩效指标量化对比(20230101-20251231 实测)
| 指标 | 策略一(lambdarank 原始复现) | 策略二(回归+正则+中性化) |
|---|---|---|
| 回测区间 | 20230101-20251231 | 20230101-20251231 |
| Rank_IC | -0.0174 | +0.0725 |
| IC_mean | -0.0133 | +0.0301 |
| IC_std | 0.1604 | 0.1373 |
| IC_p(多重检验阈值 p<0.0022) | 0.3108 | 0.0666 |
| 单调性 | 0.59 | 0.51 |
| 多头年化收益 | 2.12% | 12.65% |
| 多头超额收益 | -9.73% | +0.79% |
| 多头换手率 | 53.87% 对 58.62% | 53.87% |
| 多头最大回撤 | 54.47% | 27.04% |
| 分组1 年化超额(低分端) | +0.09% | -23.16% |
| 多空年化收益 | -9.83% | +23.95% |
| 多空夏普比率 | -0.877 | 1.189 |
| 多空信息比率 | -0.699 | 1.328 |
| 多空最大回撤 | 42.45% | 15.80% |
| 多空月胜率 | 47.22% | 66.67% |
| 多头净超额(扣成本) | -18.59% | -7.36% |
表2:优化旅程——五配置同池同窗对照(含传统线性基准)
| 配置 | Rank_IC | IC_p | 多头超额% | 多空年化% | 多空信息比率 | 判定 |
|---|---|---|---|---|---|---|
| v1 lambdarank(150 树) | -0.0174 | 0.311 | -9.73 | -9.83 | -0.699 | 失效且方向反转 |
| v1b 浅层 lambdarank(50 树) | -0.0015 | 0.408 | -7.94 | -2.94 | -0.209 | 排除调参解释 |
| v2 回归目标+强正则 | +0.0768 | 0.100 | +1.97 | +23.89 | 1.073 | 修复成功 |
| v3 v2+风格中性化 | +0.0725 | 0.067 | +0.79 | +23.95 | 1.328 | 最优风险调整 |
| 传统线性 OLS(基准) | +0.0688 | 0.209 | -3.20 | +18.48 | 0.831 | 修复版全面超过 |

5.2 净值曲线与资金行为深度解析
策略一净值曲线特征
多头净值三年累计仅 1.061(超额 -9.73%),2024 年 2 月与 6-9 月两段回撤分别深至 0.72 与 0.74;多空净值持续下行至 0.902——方向反转使组合在最看好处最受伤。
策略二净值曲线特征
多空净值三年累计 1.240,曲线呈"低斜率、浅回撤"形态:2023 年震荡市中微幅抬升,2024 年 9 月后加速,最大回撤 15.80% 不足策略一(42.45%)的四成;多头净值 1.127,2024 年 9 月后与多空同步走强。
5.3 关键差异点归因
| 差异维度 | 策略一 | 策略二 | 对绩效的影响 |
|---|---|---|---|
| 学习目标 | 五档整序(幅度丢失) | 连续截面分位 | Rank_IC +0.094 的主因 |
| 模型容量 | 150×31(记忆风格) | 100×7+子采样 | IC 波动率 0.160→0.137 |
| 风格暴露 | 特征含市值/波动全量 | 逐日残差剥离 | IC_p 0.100→0.067、多空回撤-3.5pct |
| 空头端区分 | 分组1 超额 +0.09%(失效) | -23.16%(强区分) | 多空年化差 33.8 个百分点 |
5.4 市场阶段适应性分析
- 2023 震荡分化市:修复版多空微幅为正,策略一多空持续为负;风格中性化在无趋势期的价值是"不再替市场投票";
- 2024 年 2 月微盘流动性冲击:策略一多头重挫(风格暴露集中于小微盘弹性标的),修复版多头回撤约其一半;
- 2024 年 9 月末政策反转市:两版同步修复,修复版多空自此进入单边抬升通道;
- 2025 结构性上行:修复版多空全年稳步增厚(信息比率 1.328 的主要贡献段),策略一方向反转无收敛迹象。
5.5 核心结论
- 结论一:第一稿的"AI 不行"已被修复结果推翻——同一因子池、同一窗口、同一滚动纪律下,"回归目标 + 强正则化 + 风格中性化"把 Rank_IC 由 -0.0174 修复至 +0.0725,多头超额由 -9.73% 转正至 +0.79%,多空信息比率由 -0.699 提升至 1.328,全面超过传统线性对照(+0.0688 / -3.20% / 0.831)。
- 结论二:修复规则可迁移且次序不可颠倒——先修目标(学什么)、再控容量(记多少)、最后去风格(学谁的);浅层 lambdarank 变体证明单独控容量只能消除反转、不能产生 alpha,回归目标才是跳变的来源。
- 结论三:对原报告"AI 2 倍优势"的最终判定为方向复现、幅度不及——修复后多空年化约为线性对照的 1.3 倍、夏普约 1.7 倍,且按 10 日调仓成本折算多头净超额仍为负(-7.36%);AI 阿尔法的现实增量在空头端区分与风险调整后收益,不在多头端收益翻倍。
六、未来优化与展望
6.1 策略一改造与重估
原始 lambdarank 配置保留作为"风格探测仪":其预测分与后续收益的负相关程度可作为风格反转的预警信号(当 lambdarank IC 持续为负时,风格处于高波动切换期,此时修复版的残余 alpha 也应降权)。
6.2 策略二精进与探索
三个方向:其一,把风格中性化的回归基底从 [lncap, vol20] 扩展至动量大类,检验残余 alpha 对风格维度的敏感性;其二,多头端引入约束优化(剔除低分端 30% 后再做波动率倒数加权),把 -23.16% 的空头区分度转化为多头组合的防御垫;其三,滚动窗从 252 日缩短至 126 日并按周重训,测试修复版对风格切换的响应速度上限。
def defensive_long(scores, bottom_cut=0.3):
"""剔除低分端后做波动率倒数加权,把空头区分度转为多头防御"""
keep = scores.rank(pct=True) > bottom_cut
w = 1.0 / vol20.where(keep)
return w / w.groupby(dates).transform('sum')
6.3 研究局限与后续方向
主要研究局限(标准四条):
- 实盘验证缺失:空头端收益在 A 股缺乏低成本实现路径,多空结论的可执行性弱于多头口径;
- 净超额仍为负:10 日调仓下多头净超额 -7.36%,AI 的增量尚不足以覆盖平台调仓成本,降频至月频的效果待验证;
- 参数单点:修复版超参(100 树/7 叶/0.03 学习率/20% 抽样)为单次设定,未做网格扫描,存在过拟合修复路径本身的风险;
- 统计功效不足:IC_p=0.0666 距 23 候选的多重检验阈值(p<0.0022)仍有距离,正向结论的置信度中等。
后续研究方向(标准四条):
- 降频验证:月频调仓下重估修复版的净超额排序(预期换手降至 20% 区间后转正);
- 与 GLM 系列([机器学习研究二])合并构建"目标形态 × 风格处理 × 模型容量"三维归因矩阵;
- 修复规则外推:将"先修目标、再控容量、最后去风格"应用于梯度提升/神经网络的其它失效案例,检验规则普适性;
- 实盘化工程建设:以修复版为核心、原始 lambdarank 为风格预警的核心-卫星架构封装。
附录:本轮复现的工程资产
| 资产 | 说明 |
|---|---|
stock_ranker_{ranker,linear,shallow}.py |
原始 lambdarank 复现、传统线性对照、浅层变体 |
stock_ranker_reg.py / stock_ranker_reg_neutral.py |
修复二/修复二+三版本 |
data/ai-alpha-*.json |
五个配置的全窗口回测原始返回 |
make_charts_ai3v2.py |
优化旅程与净值对照图表脚本 |
outputs/charts/ai3_*.png |
本报告图 1-2 |
数据来源:PandaAI 因子分析平台回测实测(因子对象 ai-alpha-linear / ai-alpha-ranker / ai-alpha-ranker-shallow / ai-alpha-reg-v2 / ai-alpha-reg-neutral-v3,运行日期 2026-09-14);原报告方法参照 BigQuant《AI Alphas (A股版)》(2017-08-01)。本文所有观点仅用于研究复现,不构成投资建议。


评论