[机器学习研究三]AI Alphas 复现:排序学习 GBDT 的失效诊断与优化修复

无名的人无名的人··12 浏览

摘要

本文针对一套基于 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 文章结构

本文第二章阐述研究目的;第三章介绍回测框架;第四章剖析失效机制与三项修复的代码逻辑;第五章呈现优化旅程与修复前后对比;第六章总结局限与迭代方向。


二、研究目的

(一)核心目标

  1. 失效诊断:确认第一稿 lambdarank 复现的方向反转特征,并将其归因到可操作的层面;
  2. 逐项修复:实施"回归目标 → 强正则化 → 风格中性化"三项修复并量化各自的边际贡献;
  3. 正向案例:得到一个在 IC、多头超额、多空绩效上全面优于传统线性对照的 AI 配置;
  4. 结论校准:以修复后的最优配置重新判定原报告"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 修复版全面超过

优化旅程:Rank_IC 从失效到修复

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 研究局限与后续方向

主要研究局限(标准四条):

  1. 实盘验证缺失:空头端收益在 A 股缺乏低成本实现路径,多空结论的可执行性弱于多头口径;
  2. 净超额仍为负:10 日调仓下多头净超额 -7.36%,AI 的增量尚不足以覆盖平台调仓成本,降频至月频的效果待验证;
  3. 参数单点:修复版超参(100 树/7 叶/0.03 学习率/20% 抽样)为单次设定,未做网格扫描,存在过拟合修复路径本身的风险;
  4. 统计功效不足:IC_p=0.0666 距 23 候选的多重检验阈值(p<0.0022)仍有距离,正向结论的置信度中等。

后续研究方向(标准四条):

  1. 降频验证:月频调仓下重估修复版的净超额排序(预期换手降至 20% 区间后转正);
  2. 与 GLM 系列([机器学习研究二])合并构建"目标形态 × 风格处理 × 模型容量"三维归因矩阵;
  3. 修复规则外推:将"先修目标、再控容量、最后去风格"应用于梯度提升/神经网络的其它失效案例,检验规则普适性;
  4. 实盘化工程建设:以修复版为核心、原始 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)。本文所有观点仅用于研究复现,不构成投资建议。

评论

还没有评论,来说点什么吧
0 / 2000