07

把选股变成学习任务

核心问题同一张面板,选不同的标签,模型学到的东西有什么不同?

视频 约 9 分钟

第三单元 · 第 1 / 5 节0708091011

视频

待发布

预计 2026-10-14 17:30(北京时间)发布,以实际公开时间为准。
视频发布后会嵌入在这里,并加入 Bilibili 合集“量化与机器学习入门”。 预计时长约 9 分钟。

学习目标

  1. 说清 Feature、Label、Model 各自负责什么。
  2. 比较四种标签:原始收益、相对收益、截面排名、是否跑赢中位数,知道各自让模型关注什么。
  3. 按时间切分训练、验证、测试三段。

让 AI 带你做模拟数据

把下面的提示词整段复制给任意一个 AI 助手。它会先生成一份模拟的股票月度数据(设定对每一节都一样),再带你把这一节的分析做一遍。数据是模拟的,具体数字会和视频不同,但应该看到同样的规律。

任务(第 07 节):把选股变成一个机器学习任务,并找好对照。
1. 标签:每个月把 ret_next 标准化(减当月平均、除以当月标准差)。特征:五个特征。
2. 写一个按时间滚动的循环:从第 60 个月开始,每 12 个月重新训练一次线性回归,训练只用月份 ≤ s−2 的行,然后预测接下来 12 个月。打印每次训练用到的最后一个月,确认没有用到未来。
3. 在第 60 个月以后,比较四种做法:线性回归的预测、五个特征直接相加、只用 lowvol、不选股(等权基准)。前三种各算平均 IC 和“每月买前 50 只”的年化收益,等权基准只算年化收益。做成一张表。
提示词开头的模拟数据设定
请用 Python(numpy、pandas,需要时用 scikit-learn)带我做一个量化入门练习。先生成一份模拟的股票月度数据,随机种子用 42:

1. 300 只股票,192 个月(月份编号 0–191,相当于 16 年)。
2. 每只股票有一个固定的波动 sigma,从 0.05 到 0.13 均匀抽取;它的 beta = 0.5 + 5 × sigma。
3. 每个月有五个特征:mom(动量)、val(估值,越大越便宜)、size(规模)、lowvol(低波动)、prof(盈利)。
   - mom、val、size、prof:第 0 个月取标准正态;之后每个月,新值 = 0.9 × 上月值 + 0.44 × 标准正态。
   - lowvol = −sigma + 0.02 × 标准正态。
   - 每个月把五个特征各自在 300 只股票之间标准化(减平均、除以标准差)。
4. 每个月抽一个下个月的大盘收益 mkt_next ~ 正态(0.005, 0.05);再给五个特征各抽一个当月系数 = 基础系数 + 0.01 × 标准正态,基础系数依次是 0.004、0.003、0、0.005、0.002。
5. 下个月收益 ret_next = beta × mkt_next + Σ(当月系数 × 特征) + sigma × 标准正态。
6. 整理成一张长表:每行是一只股票的一个月,列为 month、stock、sigma、五个特征、mkt_next、ret_next。打印前几行和总行数。

后面统一的口径:
- IC:每个月,某一列和 ret_next 在 300 只股票之间的 Spearman 秩相关。
- 年化收益:把每月收益连乘,再按 12 / 月数 开方后减 1。
- 等权基准:每个月 300 只股票 ret_next 的平均。
- 第 m 个月这一行的特征在第 m 个月月底已知,标签 ret_next 是第 m+1 个月的收益。训练模型时,在第 s 个月月底打分,训练只用月份 ≤ s−2 的行(中间隔开一个月)。

接下来按我的要求一步一步做。每一步先用一两句话说明在做什么,再给代码和结果。

应该看到

  • 每次训练用到的最后一个月,都比预测的第一个月早 2 个月。
  • 线性回归和五个特征直接相加的平均 IC 都在 0.04–0.09,两者差不多,谁高谁低会随种子变化;两者都高于只用 lowvol。
  • 三种选股做法买前 50 只,年化收益都高于等权基准。

对不上的时候,把你的结果和这几条一起发给 AI,让它解释是哪一步出了问题。

自测

  1. 在这个任务里,“标签”是什么?

    • A. 股票的名字
    • B. 每只股票下个月的收益(每月标准化后)
    • C. 五个特征
    • D. 模型的权重
    看答案

    答案 B。特征是当时能看到的数字,标签是要猜的答案,模型负责把两者连起来。

  2. 为什么要把标签每个月标准化?

    • A. 去掉大盘每个月整体涨跌的影响,让模型专心学谁比谁好
    • B. 让收益变大
    • C. 为了少算几行
    • D. 因为模型只接受 0 和 1
    看答案

    答案 A。大盘大涨的月份,几乎所有股票都涨。标准化以后,标签只剩下“相对好坏”。

  3. 为什么要放一个“五个特征直接相加”的对照?

    • A. 因为它一定最好
    • B. 因为模型需要它才能训练
    • C. 看模型有没有比最简单的做法更好;没赢过它,就不值得用更复杂的方法
    • D. 为了让表格更长
    看答案

    答案 C。简单对照是一把尺子,新模型都要拿来量一量。

常见坑

  • 随机打乱切分
  • 用原始收益做标签,模型大部分力气花在猜大盘上

下一节

最简单的模型是线性的。

08线性模型与正则化多个信号怎样合成一个分数,才不会过度拟合过去?