09

树模型与非线性

核心问题非线性模型什么时候比线性模型更值得用?

视频 约 8 分钟

第三单元 · 第 3 / 5 节0708091011

视频

待发布

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

学习目标

  1. 理解决策树就是一串是/否问题,梯度提升是很多棵小树逐步修正。
  2. 理解非线性和交互,例如“小盘”和“便宜”同时成立时效果是否更强。
  3. 正确解读特征重要性。

让 AI 带你做模拟数据

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

任务(第 09 节):种树,再看什么时候该停。
1. 用全部数据训练一棵两层的决策树(每片叶子至少 500 行),打印它问的问题,以及最后四堆股票各自的平均标签。
2. 用前 96 个月训练梯度提升树(HistGradientBoostingRegressor:学习率 0.05,最大深度 3,每片叶子至少 200 行,关闭早停,400 棵),画出训练期和检验期的平均 IC 随树的棵数怎样变化(取 10、50、100、200、400 棵)。
3. 按第 07 节的滚动方式训练 200 棵树的梯度提升树,和线性回归比较第 60 个月以后的平均 IC。
提示词开头的模拟数据设定
请用 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 的行(中间隔开一个月)。

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

应该看到

  • 第一刀通常切在 lowvol、mom 或 val 上,不会是 size。
  • 训练期的 IC 随着树越种越多一路上升;检验期的 IC 在几十棵树附近最高,之后慢慢往下走。
  • 按时间滚动时,梯度提升树的 IC 和线性回归差不多,通常还略低一点。模拟数据里只有线性关系,树找不到额外的东西。

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

自测

  1. 梯度提升树是怎么工作的?

    • A. 只种一棵很深的树
    • B. 随机挑一棵树来用
    • C. 一棵接一棵地种小树,每一棵专门修正前面的树还没预测好的部分
    • D. 把线性回归重复做很多次
    看答案

    答案 C。每棵树都很小,可很多棵加在一起,就能拼出复杂的形状。

  2. 树越种越多,训练期 IC 一路上升,检验期 IC 先升后降。这说明什么?

    • A. 后面的树开始记住训练数据里的巧合,应该早一点停
    • B. 树越多越好
    • C. 检验数据出错了
    • D. 应该把检验数据也拿来训练
    看答案

    答案 A。检验期开始往下走的地方,就是该停的地方,而这个点也要只用训练数据来找。

  3. 一个特征在树模型里的重要性很高,说明什么?

    • A. 它导致了股票上涨
    • B. 它一定能单独赚钱
    • C. 它在别的模型里也一定重要
    • D. 模型做预测时很依赖它,但这不等于因果
    看答案

    答案 D。重要性说的是模型怎么用它,不是它为什么有用。

常见坑

  • 用测试段早停
  • 把重要性当成因果

下一节

到目前为止只切了一次,可市场一直在变。

10按时间验证怎样让验证结果接近模型真正上线时的表现?