2. 横截面选股基础
在进入 Learning to Rank(LTR)之前,必须先厘清一个根本问题:我们每天面对的股票数据,究竟属于哪一类结构?很多初学者把时间序列预测的思路直接搬到选股上,结果模型看似拟合良好,实盘却一塌糊涂。原因往往不是算法不够强,而是问题定义错了。本节围绕横截面数据、因子投资、排序预测与收益预测四个概念展开,帮你建立正确的建模视角。
一、核心原理:横截面数据与时间序列的本质差异
横截面数据(Cross-Sectional Data)指的是在同一时间点上,对多个个体(股票)的观测。例如 2024-06-28 这一天,全市场 5000 只股票的市盈率、动量、换手率构成一个横截面。而时间序列数据是同一只股票在不同时间点上的观测。二者最关键的差别在于:横截面关注的是同一时刻个体之间的相对差异,时间序列关注的是同一个体随时间的演变。
选股任务的本质是横截面问题:在每个调仓日,我们要回答“哪些股票比其它股票更值得买”。这与“预测某只股票明天涨多少”是两种完全不同的建模目标。前者关心相对排序,后者关心绝对数值。理解这一点,是理解 LTR 为何适用于选股的前提。
二、因子投资:横截面差异的系统化表达
因子投资(Factor Investing)是把横截面差异结构化的方法论。一个因子本质上是一个函数:给定某日某股票的特征,输出一个可比较的数值。常见因子包括价值(BP、EP)、动量(过去 20 日收益)、质量(ROE)、波动率等。因子投资的核心假设是:具有某些特征的股票,在横截面上会系统性地跑赢或跑输其它股票。
传统多因子模型通常采用打分法或回归法:先对每个因子做横截面标准化,再按权重合成综合得分,最后买入得分最高的 N 只股票。这套流程与 LTR 的目标高度一致——都是在横截面上做排序。区别在于,传统方法依赖人工设定权重与线性假设,而 LTR 用机器学习自动学习排序函数。
下面是一个典型的横截面因子预处理流程,注意每一步都必须在当日横截面上完成,而不是跨时间计算:
# 每个调仓日的横截面处理
for date in rebalance_dates:
df_day = data[data['date'] == date].copy()
# 1. 去极值(横截面)
df_day['factor'] = winsorize(df_day['factor'], limits=[0.01, 0.01])
# 2. 标准化(横截面 z-score)
df_day['factor'] = (df_day['factor'] - df_day['factor'].mean()) / df_day['factor'].std()
# 3. 缺失值填充
df_day['factor'] = df_day['factor'].fillna(0)
# 4. 合成得分
df_day['score'] = 0.4 * df_day['value'] + 0.3 * df_day['momentum'] + 0.3 * df_day['quality']
三、排序预测 vs 收益预测:目标函数的根本分歧
这是本节最容易被忽视、却最影响实战效果的区别。收益预测(Regression)把标签设为未来收益的连续值,用 MSE 等损失函数拟合;排序预测(Ranking)把标签设为股票在横截面上的相对次序或相关性等级,用 pairwise 或 listwise 损失优化。
为什么这个区别重要?假设某日真实收益为:A 股 +5%、B 股 +1%、C 股 -3%。回归模型可能预测 A=+2%、B=+1.5%、C=+1%,MSE 不大,但排序变成 B 优于 A,多头组合会买错。而排序模型只要保证 A > B > C 的顺序正确,就能选对股票。换句话说,收益预测优化的是数值逼近,排序预测优化的是相对次序。
| 对比维度 | 收益预测(Regression) | 排序预测(Ranking / LTR) |
|---|---|---|
| 标签形式 | 未来收益连续值 | 横截面次序 / 相关性等级 |
| 典型损失 | MSE、MAE | Pairwise Hinge、ListNet、LambdaRank |
| 优化目标 | 数值逼近精度 | 排序质量(如 NDCG、Rank IC) |
| 对异常值敏感度 | 高,极端收益主导损失 | 较低,只关心相对顺序 |
| 选股适配性 | 一般,易受尺度影响 | 高,直接匹配选股目标 |
四、案例与场景:同一天两只股票的建模差异
设想 2024-06-28 这一天,我们只有两只候选股票 X 和 Y。真实未来 5 日收益:X = +8%,Y = +2%。
- 收益预测视角:模型输出 X=+3%、Y=+4%,虽然整体低估,但把 Y 排在 X 前面,多头会买入 Y,错失 X 的 8% 收益。
- 排序预测视角:模型只需输出 X 的排序分高于 Y,即 score(X) > score(Y),就能正确买入 X。
这个极简案例说明:在选股场景中,排序正确性比数值精度更直接决定组合表现。这也是 LTR 被引入量化选股的根本动机。实际工程中,我们常用 Rank IC(横截面 Spearman 相关系数)来衡量排序质量,而不是用 RMSE。
五、常见误区与复盘
- 误区一:把时间序列标签直接用于横截面模型。例如用“未来 5 日收益”做回归标签却不做横截面标准化,导致不同市场环境下标签尺度差异巨大,模型无法稳定学习。
- 误区二:认为排序预测不需要收益信息。排序标签通常由收益转化而来(如按收益分位数打等级),收益仍是信息来源,只是被转换成了次序。
- 误区三:忽略横截面样本的独立性。同一天内股票之间高度相关,做交叉验证时必须按日期分组,否则会严重高估模型效果。
- 误区四:用全样本标准化代替逐日横截面标准化。这会引入未来信息,造成数据泄露,实盘表现会大幅衰减。
总结来看,横截面选股要求我们以“同一时刻的股票比较”为基本视角,用因子把差异结构化,用排序预测而非收益预测来匹配选股目标。理解这三层关系,才能在后续章节中正确使用 Learning to Rank 构建实战模型。