3. Learning to Rank入门
在横截面选股任务中,我们真正关心的往往不是“某只股票明天涨不涨”,而是“在同一个交易日、同一批候选股票里,哪些股票更值得优先买入”。这个“更值得优先”的问题,本质上是排序问题,而不是单纯的分类或回归问题。Learning to Rank(LTR,排序学习)正是为这类需求而生的一套方法论。
一、核心原理:什么是排序学习
排序学习的目标是学习一个打分函数 f(q, d),其中 q 表示一次查询或一个决策场景,d 表示一个候选对象。函数输出一个实数分数,分数越高代表该候选在本次查询中越应该排在前面。在搜索场景中,q 是用户查询,d 是网页;在横截面选股中,q 可以理解为“某个调仓日”,d 则是当天股票池中的每一只股票。
排序学习不要求模型精确预测每只股票的收益率数值,而是要求模型能够正确地区分候选之间的相对优劣。只要高分股票整体上比低分股票表现更好,模型就完成了任务。这种“重相对、轻绝对”的特性,使它天然适配选股、推荐、广告排序等场景。
二、与分类、回归的差异
理解 LTR 最快的方式,是把它和分类、回归放在一起对比。分类关注“属于哪一类”,回归关注“数值是多少”,而排序关注“谁应该排在谁前面”。三者的监督信号、损失函数和评估方式都有明显区别。
| 维度 | 分类 | 回归 | 排序学习 |
|---|---|---|---|
| 预测目标 | 离散类别标签 | 连续数值 | 候选之间的相对顺序 |
| 监督信号 | 0/1 或类别 | 真实收益率 | 相关性等级、成对偏好、列表顺序 |
| 典型损失 | 交叉熵 | MSE、MAE | Pairwise Hinge、Listwise Softmax |
| 评估指标 | AUC、Accuracy | IC、R² | NDCG、MAP、Rank IC |
| 选股含义 | 涨/跌二分类 | 预测收益幅度 | 选出相对更强的股票 |
在横截面选股中,回归模型常以 IC 衡量预测值与真实收益的相关性,分类模型常以 AUC 衡量涨跌区分能力,而排序模型更关注同一调仓日内股票排序与真实收益排序的一致性。Rank IC 和 NDCG 往往比绝对误差更能反映组合的实际表现。
三、三大范式:Pointwise、Pairwise、Listwise
排序学习按训练样本的组织方式,通常分为三大范式。它们不是互斥的模型结构,而是三种看待排序问题的视角。
- Pointwise(点式):把每个“查询-文档”对当作独立样本,直接预测相关性分数或收益。它最简单,可复用回归或分类模型,但忽略了同一查询内候选之间的相互比较。
- Pairwise(成对):把同一查询内的两个候选组成一对,学习“A 应该排在 B 前面”。RankNet、RankSVM 是代表。它直接建模相对偏好,但样本对数量随候选数平方增长。
- Listwise(列表式):把一次查询下的整个候选列表作为一个训练样本,直接优化列表级指标。LambdaRank、LambdaMART、ListNet 是代表。它最贴近最终评估目标,但实现和调参更复杂。
四、方法流程:从数据到排序模型
在横截面选股中落地 LTR,通常遵循以下流程:
- 构造查询组:把每个调仓日视为一个 query,当天股票池视为候选集合。
- 生成相关性标签:按未来收益分位数打等级,例如前 20% 为 3,中间为 2,后 20% 为 0。
- 特征工程:使用动量、估值、波动率、资金流等因子作为候选特征。
- 选择范式与模型:Pointwise 可用 XGBoost 回归,Pairwise 可用 RankSVM,Listwise 可用 LambdaMART。
- 训练与验证:按时间切分,避免未来信息泄露,使用 NDCG 或 Rank IC 评估。
- 组合构建:取每日分数最高的前 N 只股票,等权或按分数加权。
# 以 LightGBM 的 LambdaRank 为例
import lightgbm as lgb
train_data = lgb.Dataset(
X_train, label=y_train,
group=group_train # 每个调仓日的股票数量
)
params = {
"objective": "lambdarank",
"metric": "ndcg",
"ndcg_eval_at": [10, 30],
"learning_rate": 0.05,
"num_leaves": 31
}
model = lgb.train(params, train_data, num_boost_round=300)
scores = model.predict(X_test)
五、误区与复盘
误区一:把 LTR 当成普通回归。如果直接用回归预测收益率再排序,模型会花大量精力拟合极端值,而排序质量未必提升。应优先选择排序目标函数。
误区二:忽略 query 分组。在横截面选股中,不同交易日的股票不能混在同一组里比较。分组错误会导致模型学到跨日的绝对水平,而非日内相对排序。
误区三:标签设计过于粗糙。只用涨跌二分类会丢失排序信息;建议使用多级相关性标签或未来收益分位数。
复盘时,建议同时观察三个指标:Rank IC 衡量整体排序相关性,NDCG@K 衡量头部排序质量,Top-K 组合收益衡量实际选股效果。三者结合,才能判断模型是否真正服务于横截面选股目标。
掌握排序学习的定义、与分类回归的差异以及三大范式,是后续构建 LTR 选股模型的基础。下一阶段将进入具体模型与特征工程实践,把排序思想转化为可运行的选股策略。