ml-leakage-defenselisted
Install: claude install-skill fieldlu/Machine-learning-skills
# 数据泄漏防御 — 线上暴跌的头号嫌疑人
## R — 原文 (Reading)
> Data leakage is the creation of unexpected additional information in the training set, allowing a model to make unrealistically good predictions.(转述)
>
> — 转述自 Daniel Kaufman 等, "Leakage and the reproducibility crisis in ML-based science", Patterns 2023(来源性质:业界对泄漏的系统化定义文献)
> The general rule is this: apply every transformation that depends on the data distribution to train only, then propagate to validation/test.(转述)
>
> — 转述自 scikit-learn 官方文档 "Common pitfalls: data leakage" 一节(来源性质:事实标准库文档)
> **来源说明**: 本 skill 属批C"工程实践共识"系列——《机器学习》(西瓜书)不含工程落地内容,
> 其最接近的锚点是第2章"测试集必须与训练集互斥"的出题类比;本 skill 把这一原则从"评估集
> 选择"扩展到整条数据管道。R 段改引业界公开文献并标注来源性质;凡无法保证逐字精确处一律标(转述)。
---
## I — 方法论骨架 (Interpretation)
泄漏 = 让模型在训练时接触了"考试时拿不到的信息"。它不产生真知识,只产生虚高的指标,且几乎总是上线后才暴露。按发生位置分三大类型:
1. **特征-目标泄漏**:某个特征本身就是目标(或目标的代理)——预测"是否流失"却放进了"注销日期",预测住院时长放进了出院诊断编码。典型信号:单一特征重要性高得反常。
2. **训练-测试污染**:测试信息混进训练过程——重复样本跨集合存在、按时间问题却随机 shuffle 后划分、测试集参与了特征选择或超参搜索。
3. **过程泄漏**:顺序错误让统计量穿越边界——先全量归一化/填充再划分、目标编码在全量上 fit、SMOTE 重采样放在划分之前。每个变换器都是一个潜在的泄漏点。
防御的元原则只有一条:**一切依赖数据分布的计算(均值、分位数、分箱边界、编码映射、重采样、特征选择),只在训练折内执行,再 transform 到其余部分**。检测靠三组信号:线下暴涨线上暴跌、单特征重要性异常、极小的模型间差距(大家都在拟合同一个泄漏源)。泄漏的代价是不对称的——它不会被训练损失发现,只能靠流程纪律和怀疑精神拦截。
---
## A1 — 业界公开案例 (Past Application)
> 注: 西瓜书无对应案例,本节用业界公开案例充当类比素材;书内仅提供原则回声。
### 案例 1: Netflix Prize 的残留隐变量泄漏 (Bell & Korbel, 2007; 社区复盘)
- **问题**: 参赛者普遍用"用户-电影"评分矩阵的隐特征做特征,但不少队伍把整个评分历史(含待预测时间点之后的部分)一起分解。
- **方法论的使用**: 赛后复盘确认部分高分方案把未来评分信息带进了过去时点的预测,属于典型的时序穿越型特征-目标