M2-112M2: Classical Machine LearningFeature EngineeringMedium
Mastery:
Feature Engineering: 解释目标编码的交叉拟合实现细节与平滑公式。
📐 Mathematical Definition
⚡ Executive Summary
Core Concept: K 折内用其他折的标签均值编码本折;平滑向全局均值收缩,尤其保护低频类别。
📌 Key Takeaways
- •m 是平滑强度(伪计数),n_c 是类别样本数
- •必须用 out-of-fold 编码,否则严重泄漏
📐 Mathematical Derivations
两个关键机制:① <strong>交叉拟合(out-of-fold encoding)</strong>——把训练集分为 K 折,对第 k 折的样本,用<strong>其余 K−1 折</strong>的标签均值作为其编码值。这样每个样本的编码<strong>不包含自己的标签</strong>,模拟了'预测时只有其他样本信息'的真实场景。若直接用全量数据的类别均值,则每个样本的编码都包含了自身标签(尤其当类别样本少时),模型会<strong>过度依赖</strong>该特征——表现为训练集上该特征重要度极高但测试集失效(典型的泄漏症状)。<strong>推理时</strong>用<strong>全量训练数据</strong>的类别均值编码(此时无泄漏风险,因为测试样本的标签未知)。② <strong>平滑(shrinkage)</strong>——编码值向<strong>全局均值</strong>收缩:enc(c)=(n_c·ȳ_c+m·ȳ_global)/(n_c+m)。当类别样本数 n_c 大时,编码接近该类别的真实均值;当 n_c 小时(如只有 2 个样本),编码被拉向全局均值(避免用 2 个样本的均值做极端估计)。<strong>m 是平滑强度</strong>(伪计数):m=0 不平滑(小类别极不稳定)、m→∞ 全用全局均值(无信息);常用 m=10–100,或用经验贝叶斯自动估计(m ≈ 类别内方差/类别间方差)。
🏭 Production Trade-offs
实践要点:① <strong>必须放进 Pipeline / CV 折内</strong>——交叉拟合只能在训练折内做;若在 CV 之外做目标编码,即使做了交叉拟合,也会因'用验证折的标签计算编码'而泄漏。正确做法是把目标编码器封装成 Transformer 放进 sklearn Pipeline。② <strong>多类别/多值特征</strong>——对多分类目标,可为每类生成一个编码特征(one-vs-rest 的目标编码);对多值类别特征(如一部电影的多个类型),可用'该值出现时的目标均值'聚合。③ <strong>时间序列的特殊处理</strong>——不能用未来样本的标签编码过去样本;应用<strong>扩展窗口</strong>(只用历史数据)而非 K 折。④ <strong>m 的选择</strong>——可用交叉验证调优,或用<strong>经验贝叶斯</strong>:m 的最优值使编码的均方误差最小,约等于'类别内方差/类别间方差';CatBoost 的 ordered target statistics 本质上是该思想的自动化(用随机排列的'过去'样本)。⑤ <strong>与树模型的关系</strong>——LightGBM/CatBoost 可原生处理类别特征(CatBoost 从原理上避免泄漏),故若用这些库可不手动编码;XGBoost 需手动编码或 one-hot。⑥ <strong>替代方案</strong>——若担心泄漏,可用<strong>计数编码</strong>(无标签信息,绝对安全)或<strong>嵌入</strong>(深度学习场景);或对高基数类别直接用 one-hot + 正则(在维度可控时)。
⚠️ Common Interview Pitfalls
- ✕用全量数据算类别均值(严重泄漏)
- ✕对低频类别不做平滑(编码极不稳定)
🎯 Interviewer Follow-ups
- ?m 如何选择?
- ?为什么平滑能防过拟合?
📚
Associated Knowledge Base Guides & Mindmaps
Explore the comprehensive technical article, exam cards, and global architecture tree.