
machine-learning-for-trading 第 11 章实战指南从经典推断到可交易的 ML 流水线【免费下载链接】machine-learning-for-tradingCode for Machine Learning for Trading, 3rd edition — from data sourcing to live execution.项目地址: https://gitcode.com/GitHub_Trending/ma/machine-learning-for-trading本篇技术指南以开源仓库 machine-learning-for-trading 中 11_ml_pipeline/README.md 为主线系统讲解第 11 章「The ML Pipeline」的完整技术链路从 OLS 经典推断的诊断工具包出发过渡到 Ridge / LASSO / Elastic Net 正则化回归、逻辑回归方向预测、SHAP 可解释性、conformal 预测区间以及横跨 9 个 case study 的线性模型实证结论。读完本文你将掌握一套泄漏安全的 walk-forward 交叉验证、嵌套 HPO、IC 与 HAC 显著性检验、覆盖度监控等可直接复用到任意金融面板数据上的研究协议。为什么第 11 章要「告别推断拥抱预测」第 11 章的开篇Section 11.1给出了一个对量化研究至关重要的认知转向在交易场景中无偏的参数恢复往往不如稳定的样本外预测重要——尤其是当特征数量众多、彼此相关且噪声很大时。与其追求系数估计是否无偏不如回答模型的排序在未来是否还成立。这一转向的直接结论是当目标是信号生成而非系数推断时shrinkage收缩方法优于普通 OLS。而 Chapter 11 的全部 notebook 都围绕这一结论展开共享同一套 ETF case study 数据特征case_studies/etfs/features/financial.parquet第 8 章输出标签case_studies/etfs/labels/fwd_ret_21d.parquet第 7 章输出21 日前向收益交叉验证由utils/cv_splits.py中的generate_cv_splits从case_studies/etfs/config/setup.yaml的evaluation段统一加载setup.yaml的evaluation段是全书 CV 的单一事实来源evaluation: n_splits: 8 # 8 折 walk-forward train_size: 10Y # 每折训练窗口 10 年 val_size: 1Y # 每折验证窗口 1 年 holdout_start: 2024-01-01 holdout_end: 2025-12-31 calendar: NYSE # 日历感知分割 periods_per_year: 252所有 11 章 notebook 通过generate_cv_splits(df, case_study_idetfs, label_buffer21D, date_coltimestamp)得到完全相同的折保证任何模型间的差异只来自惩罚项而非来自切分。11.1 OLS 与推断工具包离开之前先看清它的边界01_ols_inference.ipynb 展示了经典推断的完整形态用 statsmodels 在同一份 ETF 数据上拟合 OLS走一遍完整的推断工具箱——系数显著性、Gauss-Markov 诊断、稳健标准误。数据面板的两个决定性特征代码在动手计算前先刻画面板的两个性质01_ols_inference.py特征按家族聚集ret_、vol_、sharpe_、sma_、ema_、rsi_、bb_、atr_、max_dd_、volume_、dollar_vol_等前缀描述了同一段价格历史在不同窗口上的读数同一家族成员高度共线——这正是后面 VIF 诊断将发现的问题。面板非平衡ETF 在不同年份上市、特征缺失导致行被丢弃任何读取上一行的统计量都会静默地跨过这些缺口。因此滞后期必须在会话网格session grid上计数而不是按行位置计数。另外代码特意剔除了 5 个线性相关特征mom_accel_short/medium/long、skip_recent_6_1、skip_recent_12_1因为它们本质上是不同收益区间的差分保留会使设计矩阵奇异导致稳健协方差估计完全无法计算。Gauss-Markov 诊断电池Section 11.1 陈述了四条 Gauss-Markov 假设参数线性、严格外生、无完全多重共线性、球形误差。当四条全部成立时 OLS 是 BLUE。其中只有两条能由残差检验异方差Breusch-Pagan 检验het_breuschpagan。金融收益存在波动率聚集预期会拒绝同方差此时 OLS 标准误有偏t 统计量与 p 值不可靠。残差自相关这是一个面板——残差向量按日期排序后相邻条目是同一天的不同资产而非同一资产的相邻观测。因此必须把残差按资产重组为时间序列再在会话网格上计算 lag 1 / 5 / 21 的自相关lag 21 正是标签窗口构造性地带来重叠。Durbin-Watson 也只统计恰好相隔一个会话的配对。正态性Jarque-Bera 检验。注意它不是Gauss-Markov 假设只影响有限样本下 t/F 的精确分布在大样本下中心极限定理已保证系数估计近似正态。多重共线性VIF。VIF 10为严重、5–10为中度。金融特征不同周期的动量、波动率、量价指标信息重叠严重OLS 会在相关特征间任意分配权重产生跨样本翻号的系数。稳健标准误能修什么、不能修什么代码对比了五种标准误估计器01_ols_inference.py估计器允许的相关结构说明OLS默认所有配对独立球形误差假设HC3方差随回归元变化仅修异方差按日期聚类同日观测可相关面板中大部分依赖的来源日期资产双向聚类再加同一资产跨时相关需至少两个聚类维度Driscoll-Kraay日期窗口内任意横截面序列相关对 21 日重叠标签最诚实关键洞察标签重叠使不同资产的误差在相邻日期上共享 16 天结果窗口双向聚类仍把这样的配对当作独立Driscoll-Kraay 则在同一日期内汇总矩条件并对日期做 Newey-West 修正lag 设为标签窗口 21。nw-groupsum的maxlagsLABEL_HORIZON_DAYS正是为此。结果通常是稳健标准误更大、显著特征更少——这不是缺陷而是 OLS 之前高估了精度。但要注意稳健标准误只修方差估计无法挽救外生性或函数形式错误的模型更不改善预测。WLS、GLS/FGLS、HAC面板折叠成单一时间序列后、Fama-MacBeth 都是推断层面的工具。为什么这不能回答预测问题最后用 IC 回答排序是否有效01_ols_inference.pyIC 是每个决策日内的 Spearman 秩相关再跨日期求均值并报告 IR$\bar{IC}/\sigma_{IC}$与 t 统计量。因为逐日 IC 共享 21 日结果窗口序列天然自相关代码用ml4t.diagnostic.metrics.compute_ic_hac_stats报告 HAC 修正的 t 统计量lag标签窗口同时打印朴素 t 作对比展示重叠窗口被当作独立样本会高估多少证据。文章还解释了样本外 $R^2$ 可能为负系数针对训练集优化、截距校准到训练期均值验证期均值漂移时水平误差会放大 $SS_{res}$。而 IC 对水平平移与缩放不变这正是量化金融用 IC 而非 $R^2$ 的原因。核心结论推断工具包回答参数值可靠吗预测工具包回答模型能排序未来收益吗——后者才是交易关心的。11.2 正则化回归章节的技术核心02_regularization_paths.ipynb 是本章核心把 Ridge、LASSO、Elastic Net 从教材概念变成一套能真正用于交易的研究协议。泄漏安全的预处理链每个 fold 内的预处理严格只从训练行学习02_regularization_paths.pydef cross_validate(model_class, model_params): for i, (train_idx, test_idx) in enumerate(cv_splits): X_tr, X_te features_array[train_idx], features_array[test_idx] # 1. Winsorize1%/99% 分位数在训练集上拟合限制极端值 X_tr, X_te winsorize_train_test(X_tr, X_te) # 2. StandardScaler 只在训练行上 fit scaler StandardScaler() X_tr_s scaler.fit_transform(X_tr) X_te_s scaler.transform(X_te) ...winsorization 防止单个离群值膨胀 $\sigma_j$ 从而把其他观测压向零分位数边界只在训练集拟合以避免前视偏差。Ridge23 个 alpha 的完整景观Ridge 用 L2 惩罚把所有系数压向零但不精确归零。代码以np.logspace(-2, 9, 23)扫描覆盖从近似 OLS到系数被压碎的完整区间并同时绘制 Mean IC、±1σ 带和 ICIRIC/σ_IC随 alpha 的变化叠加 OLS 基线。读图要看形状而非最大值平坦段惩罚没起作用上升段收缩以更少方差换来了更多 IC回落段系数被压碎到模型停止排序。这个拐点位置是数据信号量的属性所以新数据集上值得重扫一遍而不是复用旧 alpha。样本加权指数衰减的近期偏好Section 11.2 讨论用sample_weight强调近期数据。实现要点02_regularization_paths.py权重 $w_t e^{-\lambda(T-t)}$半衰期设为 252 个会话约一个交易年行按所属会话计龄——否则面板上每天约百行会同享一个日期按行计龄会把衰减放大约百倍。有效样本量用Kish 公式$N_{eff} (\sum w_t)^2 / \sum w_t^2$ 而非 $\sum w_t$因为后者在权重被归一化到均值 1 后恒等于全样本量无法反映真实的样本消耗。权重归一化到均值 1 再拟合避免 sklearn 按 $\sqrt{w}$ 缩放行时alpha相对数据项的权重被放大。注意一次性权重说明不了衰减是否正确但结构性断裂后近期加权是模型能响应的手段$\bar{H}$ 唯一性加权需要第 7 章三柱标签的并发结构ETF case study 用简单前向收益故此处不做case study runner06_linear.py在适用处会使用。LASSOalpha_max 驱动的稀疏性LASSO 用 L1 惩罚把部分系数精确置零实现自动特征选择。关键工程细节先用第一折训练数据计算alpha_max max(|X.T y|) / n——这是让所有系数归零的最小 alpha网格从它向下对数排布到0.01 * alpha_max避免在全是空模型的区间浪费算力。n_nonzero列展示稀疏-性能权衡而按折的 0/1 热图白/深蓝直观暴露 LASSO 的选择不稳定性相关输入下哪些特征存活随训练窗口抖动这正是 Elastic Net 的动机。Elastic Netl1_ratio 调混合比例Elastic Net 混合两个惩罚l1_ratio1是 LASSO、0是 Ridge。代码固定 alpha 为 LASSO 最优值仅扫描EN_RATIOS [0.25, 0.50, 0.75]隔离混合比例的决定作用。alpha 与 l1_ratio 的联合调优交给 04 号 notebook。损失函数对比SGDRegressor提供统一接口对比 MSE、Huber、epsilon-insensitive 三种损失02_regularization_paths.py。注意 SGDRegressor 的 alpha 需除以n_samples才能与闭式 Ridge 的惩罚强度可比收益分布重尾这正是损失函数选择会显现在排序指标上的条件。读表只看三者排序——SGD 的学习率调度使其与闭式解不可直接比。系数路径两种惩罚的终极区别lasso_path用热启动高效计算 80 个 alpha 的系数路径。LASSO 路径上特征逐个进入、逐个归零且不回头Ridge 路径上所有系数一起趋零但永不为零。一句话总结LASSO 回答保留哪些特征Ridge 回答该多相信全部特征。模型对比与预测排序稳定性最终对比用各模型在相同折上的 Mean IC ± std 柱状图呈现但代码特别警告误差棒宽于棒间差距时要靠逐折配对差值来判断谁更优因为所有模型在同一批折上评分、同涨同落。预测排序稳定性用相邻折模型在同一测试集上的 Spearman 秩相关衡量——高相关意味着低隐含换手率turnover而ml4t.diagnostic.signal.compute_turnover()提供了生产级实现。嵌套 CV量化 HPO 的选择偏差04_nested_cv_hpo.ipynb 回答了单循环 CV 高估了多少这一问题Cawley Talbot 2010 的选择偏差机制Part Aalpha 网格景观分析。用ml4t.diagnostic.splitters.WalkForwardCVembargo_size10、expandingTrue在每折上评估 23 个 alpha产出 fold × alpha 的 IC 热图色标围绕 0 发散。稳定性表报告最优 alpha、稳定平台大小/范围与中位变异系数CV std/|mean|CV 1 意味着同一 alpha 在折间的波动大于均值本身此时任何基于这些折的 alpha 排序都不可信。Part B单循环 vs 嵌套 CV。单循环在测试集上做 Optuna 搜索TPE 采样器、log 均匀alpha ∈ [0.01, 1e9]再用同一测试集打分——这是有偏基线嵌套 CV 的外层训练窗内部再切 3 折 inner WalkForwardCVembargo_sizelabel_horizon外层测试折从头到尾不出现在搜索中。比较表直接输出Inflation %两个协议跑在完全相同的 outer split 上唯一差别是 alpha 来自哪里。3σ 过拟合诊断若最优配置的 IC 超过中位数 3 倍配置间标准差则搜索疑似在拟合验证噪声。稳定性看alpha 固定时跨折的分散3σ 看折均值跨 alpha 的分散两者方向不同、可以并存。关键告诫内外两层都需要 purge——内层分割与外层一样背负 21 日重叠标签漏掉 gap 会让搜索悄悄无折可优化。11.3 逻辑回归从连续收益到方向预测03_logistic_classification.ipynb 把基线从连续收益预测扩展为方向/类别设定标签由(fwd_ret_21d 0)二值化涨跌类在长期牛市的 ETF 面板上呈中等正向偏斜。Solver 选择与惩罚结构代码用一个构造函数按l1_ratio路由 solver03_logistic_classification.pySolverL1L2ElasticNet适用lbfgs否是否默认 L2快速拟牛顿liblinear是是否纯 L1 二分类坐标下降saga是是是ElasticNet、大 n、sample_weightC 值是惩罚强度的倒数小 C 强收缩大 C 近似无惩罚。L2 扫描C ∈ [0.001, 0.01, 0.1, 1.0, 10.0, 100.0]L1 扫描[0.001, 0.01, 0.1, 1.0, 10.0]按折间平均 AUC-ROC 选优并列取最小 C。训练契约与缓存签名03 号 notebook 展示了仓库级实验卫生缓存用TRAINING_CONTRACT绑定数据契约列、清洗语义、max_symbols、分割契约setup.yaml的 sha256、label_buffer、解析后的窗口与索引 sha256和模型契约C 网格、solver、选择规则、依赖版本任何语义变化都会触发真实重训而非静默复用陈旧预测03_logistic_classification.py。评估AUC 优于准确率的理由模型对比基准是逐折拟合的多数类其概率来自该折训练行的基率绝不见验证窗。实证结论值得留意L2/L1 的验证 AUC 高于 0.500 的常数基准但准确率可能低于多数类基线——因为牛市中 Up 占比高于一半准确率的无信息参考线就是多数类比率。所以模型可以同时跑赢 AUC 基准却输给准确率基准单独报准确率是误导性的。校准概率与仓位大小分类器校准意味着标称概率与观测频率一致。可靠性图reliability diagram平坦、AUC 接近 0.5是概率无法区分类别的两种看法。代码随后用CalibratedClassifierCV(methodsigmoid)做 Platt 缩放且内部折必须尊重时序——expanding_calibration_splits用扩展日期块 21 会话标签 purge 保证训练标签在首个校准时间戳前成熟。校准会拟合噪声所以只问修正后曲线是否更贴对角线并比较原始/修正的 log-loss。置信度五分位分析验证距 0.5 越远命中率越高的假设而三种信号转仓位方式阈值 0.45/0.55、概率加权、20/20 分位排名从同一组概率产生差异极大的组合——选择取决于策略约束仓位限制、换手目标、流动性完整框架在第 17 章。三元tercilesoftmax 扩展保留序数结构但普通多项损失对收益极端的恢复并不均匀需要类别重加权或序数目标。11.4 SHAP解释是验证的一部分05_shap_analysis.ipynb 论证可解释性是模型验证的一环而非装饰。对线性模型SHAP 值精确分解为 $\phi_j \beta_j \cdot (x_j - \bar{x}_j)$归因透明且可验证。精确的 LinearExplainer代码使用最后一个 walk-forward fold训练数据最多、最接近真实部署Ridge(alpha1.0) 故意轻惩罚以便阅读归因。关键工程细节masker shap.maskers.Independent(X_train, max_sampleslen(X_train)) explainer shap.LinearExplainer(model, masker) explanation explainer(X_test)background 必须用完整训练集而非库默认的 100 行——线性 SHAP 在真实背景期望下才是精确的子采样会让闭式核对差到小数点后第二位。代码随后用 $\phi_j \beta_j \cdot (x_j-\bar{x}_j)$ 直接核对并检查缓存陈旧折数、数据 vintage、background 是否 full防止旧产物被误读。四层解释 稳定性全局特征重要性跨所有预测的平均 |SHAP|单样本解释瀑布分解单个预测决策相关分析对/错的高置信度预测各自的 SHAP 画像检验高确信错误指向特征还是模型问题稳定性跨折重要性轨迹 折内 bootstrap 置信带。SHAP 数组以纯.npz落到output/05_shap_analysis/shap_arrays.npz读者无需安装 SHAP 工具链即可用np.load复现图表。Ch12 用TreeExplainer、Ch13 用 KernelSHAP 扩展该方法族。11.5 Conformal 预测把原始预测变成风险感知预测06_conformal_prediction.ipynb 用 conformal 预测生成带统计覆盖保证的预测区间。与假设高斯残差的经典置信区间不同conformal 在**可交换性exchangeability**这一最弱假设下给出有限样本有效区间。三种方法Split-Conformal (SC)数据切成训练/校准/测试三份。非符合度分数取绝对残差 $s_i |y_i - \hat{y}_i|$区间取校准分数排序中第 $\lceil (n1)(1-\alpha)\rceil$ 小的那个。天花板函数是保证的来源用插值分位数会略微收窄区间恰好吃掉有限样本裕量。仓库通过utils.modeling.conformal_quantile直接按秩选择并在秩超出校准集时返回无界区间——校准点太少不足以证明高覆盖水平明说比引用最大分数诚实。Conformalized Quantile Regression (CQR)训练低/高分位回归器产生自适应区间非符合度分数 $s_i \max(\hat{q}{\alpha/2}(x_i) - y_i,\ y_i - \hat{q}{1-\alpha/2}(x_i))$ 再校准。注意QuantileRegressor的 LP 求解器复杂度为 $O(n^3)$故有MAX_QR_SAMPLES 20_000子采样上限与TRAIN_SUBSAMPLE 0.25的日期级降采样对三种方法等量施加以保证公平对比。覆盖有效性由校准集可交换性保证、与训练规模无关但区间宽度与 tercile 条件覆盖差距会随训练量变化——可用papermill -p TRAIN_SUBSAMPLE 1对比。Adaptive Conformal Inference (ACI)在 SC 基线上在线更新 alpha针对漂移注意其反馈延迟为标签窗口 21 个决策日且 fold 需按时间排序后再输入。覆盖度监控而非盲目信任金融数据违反可交换性因此代码按 fold 和已实现波动率 tercile 分层统计覆盖逐折绘制覆盖曲线对照TARGET_COVERAGE 0.90目标线并在 0.1–0.9 的 9 个目标水平上画请求水平 vs 经验水平校准对角线。结论是把区间质量直接与仓位大小/风险分配挂钩第 19 章同时诚实承认名义保证需要监控。CQR 的最终判决逻辑清晰覆盖更高且区间更窄自适应有收益覆盖换宽度不免费更窄但覆盖更低牺牲覆盖两者皆差自适应无收益。11.6 九个 case study 的线性模型实证07_case_study_insights.ipynb 把方法展示升级为经验判断线性模型在哪些资产类别、频率、周期上表现良好、勉强可用或基本失效并凸显标签敏感性、周期效应、Ridge 的相对优势以及换手率入场后 IC 与净交易价值之间的鸿沟。数据来自各 case study 的06_linear.py流水线写入run_log/registry.dbload_complete_metrics通过 SQL 查询training_runs/prediction_sets/prediction_metrics/fold_metrics只保留无折 IC 缺失且验证日覆盖等于该标签最大值的完整结果并正确处理被退役的 prediction hashrefit 产生的世代记录保留为证据。排序时还处理了三种并列重声明输入产生的位相同副本、真正统计歧义、以及小收缩 Ridge 数值上复现 OLS的合理折叠如 crypto_perps_funding 的ols/ridge_a0.001/ridge_a0.01。08_ml_backtest_intro.ipynb 则提供一个教学性端到端回测在同样的 8 折 walk-forward 上训练 Ridge 与 Logistic库默认正则化强度信号转 long-only 等权 Top-10 组合TOP_N 10计算毛/净 Sharpe、年化收益、波动、回撤与换手并按每边COST_BPS 10收取交易成本。核心演示是正 IC 不保证组合盈利——换手与交易成本可以摧毁预测优势这为第 16–18 章真实回测、组合构建、成本建模埋下伏笔也为后续模型章节定义了必须击败的线性基线。如何运行本章 Notebook从仓库根目录执行notebook 与%格式的.py脚本一一对应py:percent由 jupytext 维护# 完整运行单个 notebook如正则化回归 uv run python 11_ml_pipeline/02_regularization_paths.py # 测试模式Papermill 缩减数据 uv run pytest tests/test_chapter_notebooks.py -v -k 11_ml_pipeline运行前需先完成上游依赖第 7 章标签fwd_ret_21d.parquet与第 8 章 ETF 特征financial.parquet缺失时 notebook 会以 assert 明确提示。大多数 notebook 支持RETRAIN、MAX_SYMBOLS、MAX_CV_FOLDS等参数化开关训练结果缓存到11_ml_pipeline/models/下缩减测试运行会自动加_fast标签以避免污染完整产物。关键结论速览推断与预测是两个问题Breusch-Pagan、残差自相关、Jarque-Bera、VIF 只说明对参数值的推断是否可靠与样本外排序能力无关交易关心的是后者。面板上统计量由行序决定含义按日期排序的面板上Durbin-Watson 测的是横截面依赖Newey-West 的 lag 横跨资产21 日重叠标签排除了单维聚类只剩 Driscoll-Kraay 类估计器诚实。收缩以偏差换方差Ridge 保留全部特征、LASSO 逐个剔除、Elastic Net 保相关组walk-forward purgelabel_buffer21D是所有数字有意义的前提。嵌套 CV 是诚实的 HPO 报告单循环高估量就是选择偏差本身所选 alpha 的折间散布比均值更能说明搜索是否在追噪声。方向预测的基准是多数类比率而非 0.5AUC 与准确率的无信息参考线不同校准决定概率能否用于仓位大小conformal 区间在违反可交换性时需分层监控覆盖。线性模型定义基准正 IC 不等于净收益Turnover 与成本入场后差距显现更复杂的模型只有在线性基准确实留下价值时才被证明合理。【免费下载链接】machine-learning-for-tradingCode for Machine Learning for Trading, 3rd edition — from data sourcing to live execution.项目地址: https://gitcode.com/GitHub_Trending/ma/machine-learning-for-trading创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考