第 7 课的数据链原样不动;
只把最后那个估计器从 Lasso 换成随机森林与 XGBoost,看会发生什么。
决策树 → 随机森林(Bagging)→ XGBoost(Boosting)
PC3 > 0?
├── 是:PC1 高吗?
│ ├── 是 → 分数较高
│ └── 否 → 分数中等
└── 否 → 分数较低
PC3 > 0 这样的主成分取值——PCA 之后特征已经没有直观名字了。先把每棵树想成一名独立猜糖果数量的同学:我们不押宝某一个人,而是把所有人的答案平均。


紫线=一棵树的预测分数;绿线=41 棵树对同一输入的预测取平均。先调到 1,再调到 5,看异常点附近的紫线怎样变化。单独打开 ↗
回答“能 / 不能”,并说出平均为何在这里失效。
先独立思考 30 秒,再点击查看答案。

单步或播放,改变学习率,观察累计预测、残差和训练 RMSE。
大白话:学习率就是控制每棵新树把预测改动多少的旋钮:调小每轮只改一点,调大每轮改得更多。 单独打开 ↗
skills/ml/pca_fold.py::make_regressor;gamma、reg_lambda 未在工厂显式设置。
| 维度 | Lasso(第 7 课基线) | Random Forest | XGBoost |
|---|---|---|---|
| 结构 | 一条直线 + L1 稀疏 | 多棵深树并联取平均 | 多棵浅树串联相加 |
| 每棵树看到的 | — | bootstrap 样本;可选随机特征 | 前面所有树留下的残差 |
| 主要解决 | 选出少量有用方向 | 方差(别乱抖) | 偏差(补上没学会的) |
| 树变多会怎样 | — | 平均波动趋稳,验证表现仍须检查 | 可能开始过拟合 |
| 能否并行 | — | 可以,树之间独立 | 轮次依赖;轮内可并行 |
| 本课角色 | 对照基线 | bagging 代表 | boosting 代表 |
分别调三个旋钮:Lasso 的系数缩小或归零;随机森林的候选分叉被人数门槛拦住;XGBoost 的新增叶子要先抵过罚分。单独打开 ↗
选择“并联 Bagging / 串联 Boosting”,并写一句理由。
先独立思考 30 秒,再点击查看答案。
同一条数据链,只换估计器 → Top3 等权 → 回测对照
for name in ("lasso", "rf", "xgboost"):
model = make_regressor(name) # 唯一变化的一行
model.fit(pc_train, rank_label) # 同一折、同一份 PCA 变换
score = model.predict(pc_pred)
make_regressor 返回的估计器;三模型还共享同一份折内 PCA 变换。| 教学例子 | A | B | C | D |
|---|---|---|---|---|
| 模型 score | 0.90 | 0.80 | 0.60 | 0.20 |
| 目标权重 | 1/3 | 1/3 | 1/3 | 0 |
score 0.90 不是“预计涨 90%”;目标权重持有到下次调仓。并列、缺失分数的处理须按实际实现记录。写出 A、B、C、D 的目标权重,并说一句理由。
先独立思考 30 秒,再点击查看答案。
ols / lasso / rf / xgboostVectorBacktester,含佣金 2bp + 滑点 3bp。
signal_lag=0、佣金 2bp + 滑点 3bp、purge=horizon、PCA50 train-only;样本外 2019-03 至 2026-08。
| horizon=22 | Lasso | Random Forest | XGBoost |
|---|---|---|---|
| 折外 Rank IC(预测得准不准) | 0.091 | 0.068 | 0.078 |
| Sharpe(扣成本后好不好用) | 1.09 | 0.96 | 0.85 |
| 年化换手(要付多少成本) | 81 | 144 | 140 |
回答“能 / 不能”,并指出比较前要先对齐哪个参数。
先独立思考 30 秒,再点击查看答案。
在同一数据与时间折上运行 OLS、Lasso、随机森林、XGBoost。改变截面 Rank 选股的 Top 3 / Top 2、PCA 成分数(如 20 / 50 / 100)和预测 Horizon(如 1 / 5 / 10 / 22 日),观察四个模型在不同配置下的表现。
先逐项改变参数,再选组合对照;同一配置下四模型共享折内 PCA、交易成本与执行口径,每个 Horizon 对应 purge=Horizon。最后用一张表和净值图比较 Rank IC、年化收益、Sharpe、最大回撤、年化换手,附参数、命令与结论。