第 4 章 · 04 Boosting 与实战 本节摘要:这是本章的收尾与高潮——Boosting 是当前机器学习选股的主力模型。与上节随机森林的 bagging(并行、降方差)不同,Boosting 是串行的——每棵新树专门拟合之前树的残差(预测错的部分),「逐步纠错」地把弱学习器组合成强学习器。本节讲清 Boosting 家族的演进:AdaBoost(样本加权)→ GBDT(梯度提升,拟合负梯度)→ XGBoost/LightGBM(工业级工程优化),以及关键的梯度提升原理与时序交叉验证防过拟合。华泰人工智能系列第 6 篇(Boosting)、第 7 篇(Python 实战)、第 14/16 篇(时序交叉验证)正是这套体系。
本节摘要:这是本章的收尾与高潮——Boosting 是当前机器学习选股的主力模型。与上节随机森林的 bagging(并行、降方差)不同,Boosting 是串行的——每棵新树专门拟合之前树的残差(预测错的部分),「逐步纠错」地把弱学习器组合成强学习器。本节讲清 Boosting 家族的演进:AdaBoost(样本加权)→ GBDT(梯度提升,拟合负梯度)→ XGBoost/LightGBM(工业级工程优化),以及关键的梯度提升原理与时序交叉验证防过拟合。华泰人工智能系列第 6 篇(Boosting)、第 7 篇(Python 实战)、第 14/16 篇(时序交叉验证)正是这套体系。读完本节,你掌握机器学习选股的现代主力模型,以及 AI 选股最容易踩的坑——时序数据绝不能用随机交叉验证。
内容来源:仓库研报 华泰人工智能系列第 6 篇(Boosting)+ 第 7 篇(Python 实战)+ 第 14/16 篇(时序交叉验证),知识结构化整理。
⚠️ 学习提示:Boosting(尤其 XGBoost/LightGBM)是 2015-2020 年 Kaggle 量化比赛的王者,也是众多机构 AI 选股的基线。但它的过拟合风险比随机森林高得多,调参与时序 CV 是实战关键。
阅读完本节,你应当能够:
上节讲随机森林是 bagging——多棵树并行训练,各自独立,最后投票/平均,核心是降低方差。
Boosting 完全不同——多棵树串行训练,每棵新树专门纠前一棵的错,核心是降低偏差。
| 维度 | Bagging(随机森林) | Boosting(GBDT) |
|---|---|---|
| 训练方式 | 并行 | 串行 |
| 每棵树目标 | 独立拟合 Y | 拟合之前树的残差 |
| 核心作用 | 降低方差 | 降低偏差 |
| 过拟合风险 | 较低 | 较高 |
| 超参敏感 | 低 | 高 |
| 典型精度 | 中 | 高 |
AdaBoost(Adaptive Boosting)是 Boosting 的最早形式(1995),思想简单:
每轮:增加错分样本权重 → 下一棵树聚焦于「之前分错的难样本」 最终:T 棵树加权组合
AdaBoost 简单有效,但有几个局限:
这些局限推动了 GBDT 的出现。
GBDT(Gradient Boosting Decision Tree)把 Boosting 推广为「拟合损失函数的负梯度」——这统一了回归与分类,且允许任意可微损失函数。
核心算法:
负梯度 = 损失函数下降最快的方向 → 每棵树沿负梯度方向修正预测
为什么叫「梯度提升」:每棵新树本质是在做梯度下降——只是梯度下降是在函数空间(每步加一棵树),而非参数空间(每步改参数)。
| 损失函数 | 任务 | 负梯度 |
|---|---|---|
| 平方误差 | 回归 | 残差 y - ŷ |
| 对数损失 | 二分类 | y - p(预测概率的误差) |
| Huber | 稳健回归 | 截断的残差(抗极值) |
💡 核心心法:GBDT 的精髓在于「拟合负梯度而非 Y 本身」。这让 Boosting 能用任意可微损失函数——回归、分类、稳健回归、分位数回归都可以。这种灵活性是 AdaBoost 不具备的。
GBDT 思想虽好,但训练慢(每棵树要遍历所有特征的所有切分点)。XGBoost(2014)与 LightGBM(2017)在工程上大幅优化,使 GBDT 能处理千万级样本:
| 模型 | 训练速度 | 内存 | 精度 | 适用 |
|---|---|---|---|---|
| GBDT(原版) | 慢 | 中 | 中 | 教学 |
| XGBoost | 中 | 大 | 高 | 通用、稳定 |
| LightGBM | 快 | 小 | 高(略过拟合风险) | 大数据、低延迟 |
💡 关键观察:在 A 股选股(几千只股票、十几年数据、几百特征),LightGBM 是默认推荐——训练快、内存友好、精度与 XGBoost 持平。XGBoost 在数据量中等、追求稳定性时仍是好选择。
Boosting 的超参比随机森林敏感得多,主要分三组:
F_t = F_(t-1) + learning_rate · h_t(x)
经验:小学习率 + 多树 > 大学习率 + 少树。典型组合 learning_rate=0.05, n_estimators=500。
树数越多,训练集拟合越好,但太多会过拟合。配合早停(early stopping):在验证集表现不再提升时停止训练。
这是本节最关键、最容易被忽视的部分。机器学习标准库(sklearn)默认用随机 k 折交叉验证,但在选股数据上绝对不能这么用——它会引入未来函数。
随机 k 折把所有样本打乱后均分,训练集与验证集时点混杂——训练集里可能包含 2020 年的数据,验证集里是 2019 年的数据。模型在「未来」训练,在「过去」验证,这不是真实的样本外。
错误做法 随机k折: 训练集:2015, 2017, 2019, 2021 ← 训练时看到了 2021 验证集:2016, 2018, 2020 ← 验证的却是 2020 正确做法 时序CV: 训练集:2010-2014 验证集:2015 下一折: 训练集:2010-2015 验证集:2016 ... 滚动向前
时序交叉验证(Time Series CV / Walk-Forward Validation):
sklearn 提供 TimeSeriesSplit,实战直接用:
from sklearn.model_selection import TimeSeriesSplit tscv = TimeSeriesSplit(n_splits=5) for train_idx, val_idx in tscv.split(X): X_train, X_val = X[train_idx], X[val_idx] # 训练 + 评估
华泰人工智能系列第 14、16 篇专门强调时序 CV 在 AI 选股中的重要性:
⚠️ 学习提示:这是 AI 选股最容易踩的坑,也是新手与专家的核心区别。任何机器学习选股代码,如果用了随机 k 折 CV,结果都不可信——它的「样本外」表现其实包含了未来信息,真实部署时会大幅缩水。务必审查每份 AI 选股代码的 CV 策略。
下面是一个机器学习选股的最小实战模板,体现本章所有要点:
import lightgbm as lgb import pandas as pd from sklearn.model_selection import TimeSeriesSplit # 1. 准备特征与标签(回归任务:预测未来20日收益) # X: 因子矩阵(每行一只股票某日,每列一个因子) # Y: 未来20日涨跌幅(用 shift(-20) 算,注意未来函数) # date: 日期列,用于时序切分 # 2. 时序交叉验证 tscv = TimeSeriesSplit(n_splits=5) all_predictions = [] for train_idx, val_idx in tscv.split(X): X_train, Y_train = X.iloc[train_idx], Y.iloc[train_idx] X_val, Y_val = X.iloc[val_idx], Y.iloc[val_idx] # 3. 训练 LightGBM model = lgb.LGBMRegressor( n_estimators=500, learning_rate=0.05, max_depth=6, num_leaves=31, subsample=0.8, colsample_bytree=0.8, random_state=42 ) model.fit( X_train, Y_train, eval_set=[(X_val, Y_val)], callbacks=[lgb.early_stopping(50)] # 早停 ) # 4. 预测验证集 pred = model.predict(X_val) all_predictions.append(pd.DataFrame({ 'date': date.iloc[val_idx], 'stock': stock.iloc[val_idx], 'pred': pred, 'actual': Y_val })) # 5. 合并所有验证集预测,计算 IC/分层回测 results = pd.concat(all_predictions) # 按 date 分组算 IC,按 pred 排序分层算多空收益
几个关键工程要点:
model.feature_importances_ 拿到因子重要性,用于因子筛选与失效排查。results(验证集预测)算,不能用训练集预测。华泰 AI 6-7 的实证给出几个关键经验:
💡 核心心法:Boosting 是机器学习选股的「重武器」,精度高、灵活性强,但也最危险——过拟合风险高、调参敏感。用 Boosting 时,严防过拟合比追求精度更重要:宁可模型简单一点、IC 低一点,也要确保样本外稳健。
回顾本章四个模型的递进:
每个模型都有它的定位:
💡 关键观察:在 A 股选股,工业级的标准做法是同时跑线性、随机森林、Boosting 三个模型,比较样本外 IC/IR,选最稳健的。任何一个模型单独都可能在某段时期失效,多模型集成(类似第 2 章因子合成的思想)是稳健的选择。
TimeSeriesSplit 直接可用;华泰 AI 14/16 专门强调。下一章,我们离开传统机器学习,进入神经网络与深度学习选股——用更深的网络、更多的参数,挖掘因子间的深层非线性关系。