本页讲解 Pipeline 与预处理泄漏防范——把 02–06 的变换正确嵌入 ML 流程。
段末注释:数据泄漏(data leakage)指验证/测试信息在训练阶段被间接使用,导致泛化评估过于乐观;预处理若用全数据统计量即构成泄漏。
系列入口:00.系列规划 | 前置:Math-08/06 交叉验证
1. 泄漏从哪来(D1–D2)

| 错误 | 正确 |
|---|---|
全数据 fit(scaler) 再 CV |
每 fold:scaler.fit(X_train) |
| 全数据选 $\lambda$(Box-Cox) | train 估 $\lambda$ |
| Target Encoding 用全表均值 | fold 内 train 统计 |
| 特征选择看全数据 p 值 | 选择嵌在 Pipeline 内 |
Math-08/01 的泛化 gap 会因泄漏而虚假缩小。
2. Pipeline 结构(D3)

1 | Pipeline([ |
cross_val_score(pipe, X, y, cv=5) 会在每个 fold 内重新 fit 预处理 + 模型。
ColumnTransformer:数值列 Standard、类别列 One-Hot 并行。
3. 嵌套 CV(D6)
| 外层 | 内层 | 用途 |
|---|---|---|
| 5-fold | — | 报告性能 |
| 5-fold | 3-fold | 调超参 + 无偏评估 |
调参对象应是 整个 Pipeline(含 C、alpha、PCA 维数)。
4. 跨领域实践(D7)

| 领域 | Pipeline 要点 |
|---|---|
| 表格竞赛 | Imputer → Encoder → Scaler → GBDT |
| 医疗 ML | 严格时间切分 + 滚动 fit |
| NLP 传统 | TF-IDF fit on train only |
| 组学 | log 变换可固定;quantile norm 仅 train |
| 金融回测 | 按时间 Pipeline,禁 shuffle CV |
| AutoML | 搜索空间含预处理步骤 |
| MLOps | 保存完整 Pipeline 工件(joblib) |
5. 局限(D8)

| 陷阱 | 说明 |
|---|---|
| 手工预处理再 CV | 最易泄漏 |
transform 新数据忘用同一 pipe |
训练/服务不一致 |
| 深度端到端 | BN 统计量仍分 train/eval |
| 超大 Pipeline 搜索 | 间接过拟合 val |
6. 完整示例(D12)
1 | from sklearn.compose import ColumnTransformer |
7. 小结
一条 Pipeline 走到底是防泄漏的最简工程纪律。下一篇:20 领域特化预处理。
系列导航:06 PCA | Math-08/10 调参