M2-080M2: Classical Machine LearningMissing Values & Data LeakageHard
Mastery:
Missing Values & Data Leakage: 为什么'先全量标准化再切分'是数据泄漏?如何修正。
📐 Mathematical Definition
⚡ Executive Summary
Core Concept: 标准化用到了验证/测试集的统计量,把未来信息带进训练;应只在训练集 fit、在验证集 transform。
📌 Key Takeaways
- •用 sklearn Pipeline 自动保证
- •同理适用于目标编码、PCA、特征选择
📐 Mathematical Derivations
泄漏的机制:标准化需要计算均值 μ 与标准差 σ。若用<strong>全量数据</strong>(含验证/测试集)计算,则 μ、σ 包含了验证集的信息;模型在训练时'看到'了验证集的分布特征,导致验证性能被高估。虽然单个 μ、σ 泄漏的信息量不大,但在小数据集上影响显著(尤其当训练/验证分布有差异时)。更严重的是<strong>目标编码、特征选择、PCA、SMOTE</strong> 等:它们使用标签或更复杂的统计量,泄漏的信息量大得多。<strong>正确做法</strong>:<code>fit</code> 只在训练折上做(计算 μ_train、σ_train),<code>transform</code> 应用到验证折(用 μ_train、σ_train 而非 μ_val、σ_val)。这样验证折的标准化用的是'训练时可知'的统计量,模拟了真实部署场景(线上也只能用训练时的统计量)。
🏭 Production Trade-offs
影响程度与延伸:① <strong>影响有多大</strong>——对标准化本身影响通常较小(μ、σ 在大样本下稳定),但对<strong>目标编码</strong>(用标签)和<strong>特征选择</strong>(用标签)影响巨大;此外当训练/验证分布有意不同(如时间切分、跨域验证)时,标准化泄漏会显著高估性能。② <strong>sklearn Pipeline 的正确用法</strong>——<code>Pipeline([('scaler', StandardScaler()), ('clf', ...)])</code> 配合 <code>cross_val_score</code> 会自动在每折内 fit;<strong>绝不要</strong>先手动 <code>scaler.fit_transform(X)</code> 再 CV。③ <strong>其他'隐形'泄漏</strong>——(a) 用全量数据做<strong>插补</strong>(均值/KNN/MICE);(b) 用全量数据做<strong>异常值处理</strong>(如按分位数截断);(c) 用全量数据决定<strong>特征工程参数</strong>(如分箱边界、PCA 维数);(d) 用全量数据选<strong>模型/超参</strong>后再在同一数据上评估(选择偏差)。④ <strong>一致性的双重要求</strong>——不仅要'只在训练折 fit',还要保证<strong>线上推理</strong>用同一套参数(训练时保存 μ_train、σ_train 并用于线上),否则会有 train/serve skew。⑤ <strong>实践检查</strong>——若发现'CV 分数远高于线上'或'交叉验证分数异常高',首先怀疑泄漏。
⚠️ Common Interview Pitfalls
- ✕先对全量数据做标准化/PCA/特征选择再切分
- ✕线上用不同的标准化参数(train/serve skew)
🎯 Interviewer Follow-ups
- ?影响有多大?
- ?还有哪些'隐形'泄漏?
📚
Associated Knowledge Base Guides & Mindmaps
Explore the comprehensive technical article, exam cards, and global architecture tree.