QuantWeft量化经纬
English
本章小节

Project 6 v2 教学指南:树模型、稳定性、消融与 PCA+Ridge

Author: Yuxiao Ma · Revision date: 2026-10-16.

候选状态: 本指南延伸 BIL18 已限定范围接受、待正式整合的 A8-A 基础层。A8-B 的构造数据扩展已有独立限定范围接受入口,但本批双语教学材料仍待独立审阅。真实数据研究状态仍为 blocked,完整 Project 6 仍未 verified。这里的数字是指定生成机制下的教学证据,不是市场证据。

本指南把 P6 的线性基线、树模型、PCA、组合和推断口径连成一条可复核的研究流程。细表和冻结历史限制见 基础管线报告 与 v2 研究报告;同项目全部题目和解答见 solutions.md。

1. 先固定实验身份

P6 v1 是 46 特征、1,512 个交易日、16 折的线性实验。46 列由 3 个构造信号特征、40 个构造噪声特征和 3 个价格特征组成。v2 沿用同一冻结面板与基础/载荷反号两种情景,加入树、森林、梯度提升和 PCA+Ridge。它与第40章交互项例子不是同一个实验:后者是 26 特征、1,260 个交易日、12 折,含登记的主强度与另行五倍事后敏感性。不得把其参数、日期数、表格或结论挪到 P6。

生成器中 q 序列与 noise 序列彼此独立;每一条序列沿时间都是平稳 AR(1),系数 0.98、边际方差为 1。价格列 rev_5、mom_60_5、vol_20 从含市场冲击、q 信号和特异冲击的收益路径构造出来。因此“序列间独立”不等于“每个特征在时间上 IID”,而且 46 列也不是独立同分布、同方差的总体。43 个特征列与 3 个价格衍生列有不同结构,有限样本协方差还会影响主成分。

v1 的实现产生 6 条预测序列:zero、train_mean、OLS、Ridge、Lasso、Elastic Net。v2 增加 4 条:单树、随机森林、梯度提升(HistGradientBoostingRegressor,HGB)和 PCA+Ridge,合计 10 条。历史主表和比较图只列 8 个拟合模型,省略 zero 与 train_mean 两个空仓基准;PCA+Ridge 是线性降维后接 Ridge,不是树模型。

2. 时间契约与模型比较

信号在 DkD_k 收盘形成,标签从 Dk+1D_{k+1} 收盘到 Dk+6D_{k+6} 收盘,覆盖 5 个收盘间隔;标签只有在终点收盘后成熟。组合信号在下一交易日收盘执行,每 5 个信号日调仓。账本是逐日 NAV,不能把 5 日标签直接当作逐日持仓收益。

外层按日期分组做扩张窗 walk-forward:最少训练 504 日、每折测试 63 日、共 16 折。每一折先排除尚未成熟标签的训练行;同一信号日的资产行不能拆到训练和测试两侧。内层取最后两个 63 日验证窗,最少训练 252 日,按平均验证 MSE 选参数。外层测试不参与选择。梯度提升使用 HistGradientBoostingRegressor,early_stopping=False;提升轮数上限为 300,和其他参数一起在内层选定,再用该折全部外层训练行重拟合。

冻结网格如下;不是把所有档位任意笛卡尔相乘:

模型 候选设置 选择口径
单树 深度2/3/4/6,每叶至少1000行 4候选,内层平均MSE
RF 200棵,max_features=0.33,max_samples=0.5,每叶500或2000行 2候选,内层平均MSE
HGB (学习率,深度)=(0.05,2)/(0.05,3)/(0.02,3),每叶至少500行,上限300轮 3候选,两个活跃内层折逐轮MSE平均再选轮
PCA+Ridge k=5/15/30与alpha=10^4/10^6组合,无whitening 6候选,Scaler与PCA均只拟合当前训练行

指标要分开读:

  • ROS2R^2_{\mathrm{OS}} 衡量逐资产收益的水平预测误差;冻结表同时给出相对零预测和相对训练均值两个基准。
  • 日 Spearman IC 是同一信号日横截面预测排序与结果排序的相关。自身 IC 均值使用模型自己的有效日期。
  • ΔIC\Delta IC 对 Ridge 的比较只在两方 IC 都定义的共同日期上计算;两边均值与均值差都必须来自同一日期集合。
  • Sharpe、净收益、最大回撤和换手由权重、成交时点与费用后的组合账本给出,不能由 IC 代替。

16 折共有 16×63=1,00816\times63=1{,}008 个名义测试信号日。标签成熟后,两个情景各有 1,002 个候选日期;最后 6 日的标签超出样本。Lasso 与 Elastic Net 会在部分日期给出常数预测,横截面 IC 在这些日期是 NaN(未定义),不是 0。基础情景 own IC 日期分别为 630 和 882;反号情景分别为 567 和 819。与 Ridge 配对时,同样分别使用 630/882 和 567/819 个共同日期;绝不能把稀疏模型的自身均值减去 Ridge 的全 1,002 日均值。

历史摘要对稀疏序列先 dropna 后以有效观察序号计算的 NW(4),其 4 阶滞后不等于相隔 4 个交易日的 HAC。修订报告不把这些压缩序列 t 值作为交易日推断,也没有新算 HAC。无缺失的连续序列原有的历史 t 值仍注明为未校正、描述性比较。所有多重比较限制见研究报告。

3. 预测转成组合后,费用会改写结论

模型每个信号日的预测先去横截面均值,再按规则缩放成毛暴露 1、美元中性目标权重;账本每 5 个信号日调仓、下一交易日收盘成交。冻结费用档是单边 0、10、20 bp,初始资金 100 万。已计入比例费用;借券费、融资利差、市场冲击、容量和保证金成本未建模。空头所得现金按既有账本约定计入,不意味着真实资金成本已完整。

基础情景中,Elastic Net 的历史 10/20 bp Sharpe 是 0.81/0.43,且净总收益为 +19.90%/+9.81%;但这只是本构造条件下的表现。反号情景中,八个主比较拟合模型在20bp下夏普为负;zero/train_mean空仓的夏普未定义。单树的年换手为 35.1–36.2,森林为 29.2–29.7,HGB 为 36.2–36.5,线性模型约 14.7–24.3;提高复杂度没有消除换手和成本压力。完整逐模型表、收益、回撤和消融在 研究报告第 3 节。

4. PCA+Ridge:降维不自动意味着更差

冻结流水线在每折训练数据内拟合 StandardScaler,再拟合完整 SVD 的 PCA 与 Ridge;未 whiten,预处理不接触外层测试数据。若保留全部 46 个主成分,在同一标准化、同一 Ridge alpha、无 whitening 条件下,PCA 只是正交旋转,Ridge 的惩罚范数保持不变,因此与标准化空间中的 Ridge 正交等价。截断主成分会约束系数只能落在保留子空间中,可能降噪,也可能丢弃预测方向,不能保证更优。

实际结果不是“PCA 全面落后”:基础情景 PCA+Ridge 相对训练均值的 R2R^2 为 −0.008%,略优于 Ridge 的 −0.113%;反号情景为 −0.053%,略优于 Ridge 的 −0.161%。反号下 10/20 bp Sharpe 为 −0.14/−0.52,也略高于 Ridge 的 −0.15/−0.53。另一方面,PCA 的 IC 均值在基础和反号情景分别为 0.0135、0.0063,低于 Ridge 的 0.0198、0.0087;这几个指标回答不同问题,不能选择性地概括成“更好”或“更差”。

PCA 每折选择的成分数为 30(10 折)、5(5 折)、15(1 折)。这说明内层预测目标在本设定下常选截断维数,不说明该维数在新样本、真实数据或另一费用结构下仍有效。PCA 的完整对照见研究报告表格。

5. 重要性、消融与稳定性怎样读

每折最后一个内层 63 日验证窗计算特征置换重要性,组内按同一资产行一起置换,保留组内列结构;每列 3 次重复。价格组与全部特征组的组置换,以及 RF/HGB 的去价格、只价格、训练内前 10 个特征消融,均是既有冻结设计。训练内前 10 使用该折内层重要性;消融报告是相对同模型全特征版的描述性变化。Top-10 消融沿用全模型参数,属于记录过的简化方案。

置换重要性近零不等于该组毫无信息:其他相关列可能代替它。基础情景森林与 HGB 去掉价格后的 IC 都下降;只价格的 HGB 仍保留多数 IC。反号情景只价格 HGB 的 IC 高于全特征版本,但差值的 t 小于 1.3,只作为观察。组重要性在特征组明显大于价格组时,也不能把该值读作因果贡献。

稳定性结果显示,树模型相邻折重要性排名相关很低:基础/反号下单树 −0.10/−0.04、RF 0.01/0.01、HGB 0.09/0.10。RF 三个种子的预测相关为 0.962–0.982,10 bp Sharpe 为 0.44–0.64;HGB 三个种子在本设定下完全相同,因为关闭 early stopping 后拟合确定。稳定不等于准确,重要性排名稳定与否也不直接说明经济价值。

6. 结果是有限、构造内且未校正的

主比较的六组树模型相对 Ridge 的配对 ΔIC\Delta IC 中,唯一绝对 t 值超过 2 的一项是反号情景单树,ΔIC=−0.0207\Delta IC=-0.0207、未校正 NW t = −2.19;方向是单树更差。三种树的两个情景合计 6 个主比较,Bonferroni 近似 p 值由 0.029 变为约 0.17;再加消融、种子等比较后更不能作确认性发现。其余主比较的 ∣t∣<2|t|<2。报告保留这些未校正数值,但不称其为显著发现。

配置中的 comparison.claims_rule 只声明:不从构造数据声称经济或 alpha 结果,并保留零与负结果。它没有设立“两个情景的 ΔIC\Delta IC 均满足 NW t≥2 且 20 bp Sharpe 高于 Ridge 与 Elastic Net”的联合树模型门槛。该联合门槛不应被说成冻结协议。基于此教学报告可以描述结果和限制,不能推导真实市场有效性。

7. Notebook 回放与真实数据边界

I3 的 P6v2 Notebook 包含 9 个单元格、其中 4 个代码单元格;按固定 fixture 回放两份历史摘要、日期基数及历史消融/稳定性展示,并从冻结摘要生成一张新图 historical_constructed_trees_sharpe.png 写入 RUN_DIR。冻结输出明确标记 fit 为 SKIPPED。它不重训,不生成新模型结果,也不重新计算完整 CLI。旧版“未验收”banner 是历史文字;A8-B 当前为 limited-scope accepted pending formal integration。BIL19 双语候选仍待独立审阅,整个 P6 仍未 verified。

真实数据仍 blocked;A10-B 的数据/PIT 状态保持未验证。不得把本章的生成机制结果写成实证、收益承诺或市场 alpha。后续若获准真实数据,必须新建协议版本、核验数据许可与时间点,并把所有已看过的构造结果登记为事前已知;本批没有做这些工作。

8. 本地来源地图

  • P6 v1 冻结配置:projects/project06/configs/p06_base_v1.json;v2 冻结配置:projects/project06/configs/p06_trees_v2.json。
  • 实现:projects/project06/src/p06_pipeline.py、projects/project06/src/p06_trees.py、src/quant_course/ml_pipeline.py、src/quant_course/tree_models.py。
  • 结果身份与冻结值:projects/project06/research_report/v2_summary_base.json、v2_summary_regime.json、v2_ic_date_bases.json;QA 原始摘要归属 qa/a8/ch40_ch41_batch/evidence/qa_r1/。
  • 研究报告:projects/project06/research_report/README.md、projects/project06/research_report/v2_trees.md。
  • P6 与第40章边界审读:qa/bilingual_revision/BIL19/preparation/ROOT_READER_NOTES.md、qa/bilingual_revision/BIL19/PRE_FREEZE_REVIEW_01.md。
  • Notebook 沿用已有构造展示,v2 方法与结果边界见研究报告;内部接受回执不随读者仓库分发。

练习:保持同一实验、同一指标口径

P6-L04. P6 的 46 特征、1,512 个交易日和 16 折,能否与第40章交互实验的 26 特征、1,260 日、12 折合并成一组模型比较?说明两组设计和五倍 post hoc 的边界。

P6-L05. v1 的六条预测序列与 v2 新增的四条分别是什么?为什么报告称“8 个主比较模型”,又说冻结运行有 10 条预测序列?PCA+Ridge 属于哪一类?

P6-L06. q 与 noise 序列的“独立”指什么?它们沿时间是否 IID?价格三列如何生成?由此为什么不能把完整 46 维写成独立同分布、同方差特征?

P6-L07. 用基础和反号两景的 R2R^2(相对训练均值)、IC 与 10/20 bp Sharpe,判断 PCA+Ridge 是否全面差于 Ridge。说明为何这些结论可以同时成立。

P6-L08. 冻结配置的 claims_rule 是否规定了“树模型必须在两个情景都达到 ΔIC\Delta IC NW t≥2 且 20 bp Sharpe 同时超过 Ridge 与 Elastic Net”的联合门槛?可以怎样描述唯一绝对 t 值超过 2 的主比较?

研究演练:从日期约束到可复核账本

下面四题补足从报告阅读到独立研究操作的关键环节,均为新教学题,不是新项目运行。它们使用稳定编号P6-T01–P6-T04;完整答案在同项目 solutions.md,练习册有相应演算、证明与代码诊断骨架。

P6-T01(标签成熟与训练截面)。 拟合时点为 D10D_{10} 收盘后,标签从信号日后一个收盘开始,5个收盘间隔后成熟。候选信号日期为 D2,D3,D4,D5D_2,D_3,D_4,D_5,每日期40只资产。写出每个日期的成交、标签终点及是否可用于这次拟合;假设没有其他缺失,最多保留多少训练行?一段程序把同日一半资产随机放进验证、其余放进训练,为什么即使标签成熟也不符合日期验证?

P6-T02(组置换的代码诊断)。 两个信号日各3只资产,第一日的 q=(1,2,3)q=(1,2,3),第二日 (11,12,13)(11,12,13),两日都有 z=2qz=2q。标签为 y=qy=q(单位为百分点),固定预测器 f(q,z)=qf(q,z)=q。第一日组置换的源行顺序为 (3,1,2)(3,1,2),第二日为 (2,1,3)(2,1,3)(从1编号)。写出置换后的 (q,z)(q,z)、全6行MSE增加与单位。对照以下错误,给出不跨日期、列多重集合和组联合结构的直接断言;噪声不被固定预测器读取时应为精确零还是近零?

# WRONG: one global order mixes signal dates; two independent orders destroy pairs.
q_perm = q_values[global_order]
z_perm = z_values[another_global_order]

P6-T03(全维PCA对照与截断)。 在同一训练中心/尺度下,记设计矩阵为 XX、正交矩阵 VV,Z=XVZ=XV。证明无whitening、同一 α>0\alpha>0 时,全维PCA+Ridge与原标准化空间Ridge预测相同。再取 X⊤X=diag⁡(2,8)X^\top X=\operatorname{diag}(2,8)、X⊤y=(2,4)⊤X^\top y=(2,4)^\top、α=2\alpha=2、V=(0−110)V=\begin{pmatrix}0&-1\\1&0\end{pmatrix},计算两空间系数并还原。只保留 VV 的第一列会发生什么,能否由最大方差保证预测改善?

P6-T04(费用、权重漂移与事件顺序)。 允许分数股,无融资、分红、借券或冲击;初始现金1000,A/B收盘价均100。目标美元权重为 +0.5,−0.5+0.5,-0.5,按成交前NAV决定目标金额;单边费用10bp,费用另从现金扣且不重新缩放目标金额。次日价格变为110/90。按“先标记持仓,再决定目标,再成交并扣费”的事件顺序,求首次成交后的现金/NAV、次日成交前NAV与实际权重;再调回相同目标权重时,求交易金额、费用与成交后NAV。解释为何不能把固定权重 wr−c∣Δw∣w r-c|\Delta w| 代理当作逐事件账本。

搜索教材

输入关键词开始搜索。