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。

实操建议:在构建选股模型时,优先监控 Rank IC、Top-K 组合收益、多空收益差等排序类指标。RMSE 可以作为辅助诊断,但不应作为唯一优化目标。

五、常见误区与复盘

  1. 误区一:把时间序列标签直接用于横截面模型。例如用“未来 5 日收益”做回归标签却不做横截面标准化,导致不同市场环境下标签尺度差异巨大,模型无法稳定学习。
  2. 误区二:认为排序预测不需要收益信息。排序标签通常由收益转化而来(如按收益分位数打等级),收益仍是信息来源,只是被转换成了次序。
  3. 误区三:忽略横截面样本的独立性。同一天内股票之间高度相关,做交叉验证时必须按日期分组,否则会严重高估模型效果。
  4. 误区四:用全样本标准化代替逐日横截面标准化。这会引入未来信息,造成数据泄露,实盘表现会大幅衰减。
数据泄露是横截面选股中最致命的错误之一。任何标准化、去极值、缺失值填充,都必须在“当日横截面”内完成,绝不能使用全样本统计量。

总结来看,横截面选股要求我们以“同一时刻的股票比较”为基本视角,用因子把差异结构化,用排序预测而非收益预测来匹配选股目标。理解这三层关系,才能在后续章节中正确使用 Learning to Rank 构建实战模型。

同一横截面:收益预测 vs 排序预测 真实未来收益 股票 A:+5% 股票 B:+1% 股票 C:-3% 真实次序:A > B > C 收益预测(Regression) 预测:A=+2% B=+1.5% C=+1% MSE 小,但次序变成 B > A 结果:买错,错失 A 排序预测(LTR) 输出:score(A) > score(B) > score(C) 只关心相对次序 结果:买对 A 评估指标 收益预测 RMSE / MAE 排序预测 Rank IC / NDCG 组合指标 Top-K 收益 / 多空差 选股优先看排序类指标