Target Encoding 怎么做才不会数据泄露?
简化版
目标编码用类别的目标统计替代类别值,能压缩高基数特征,但最危险的是把样本自身标签或验证标签编码进去。训练数据必须用 OOF/逐时间编码,并用全局均值平滑;验证与线上只查训练统计。
详细版
-
全量类别均值会让稀有类直接暴露标签。
-
OOF 训练编码确保当前行未参与自身统计。
-
平滑强度按类别样本量收缩。
-
时间任务使用过去数据累计,不能随机 OOF。
-
未知类别回退全局均值或层级先验。
完整版教学
一、监督编码必须制造未见样本语义
类别 c 的均值是强预测信号,但训练行若参与分子与分母,相当于把 y 写回 x。
类别只有一个样本时泄漏最明显。
OOF 模拟推理:每行统计来自未包含它的数据。
平滑进一步防少数类别因随机波动获得极端值。
二、底层机制与公式
TE(c)=(n_c*mean_c+alpha*global_mean)/(n_c+alpha)
train TE_i computed from folds excluding i
三、带数字的推演
全局正例率 0.2,类别 A 有 2 条且都为正,α=8,则平滑编码 (2×1+8×0.2)/10=0.36,而不是泄漏式 1.0。
单例类别经 OOF 时通常只能回退先验。
四、方案对比
| 方案/对象 | 核心特点 | 代价或边界 |
|---|---|---|
| OOF 目标编码 | 适合普通监督任务 | 实现和计算较复杂 |
| 时间累计编码 | 遵守因果顺序 | 早期样本统计稀疏 |
| 频数编码 | 无标签泄漏 | 预测力可能较弱 |
五、执行流程
训练折再分内部折 -> 计算排除当前折的类别统计 -> 拼回训练
-> 全训练统计编码验证/测试 -> 保存映射/先验 -> 线上查表
六、边界条件与工程代价
多分类需为类别生成多维统计或选合适对数几率表示,维度和校准要验证。
编码后再随机切分并不能补救:切分必须先发生,所有统计都在训练边界内计算。
记忆钩子:目标编码的红线是“当前标签绝不能参与当前特征”。
七、常见误区与追问
-
误区:加一点平滑就不用 OOF。 平滑减弱但不消除自身标签泄漏。
-
追问:验证集如何编码? 只用对应训练折的统计。
-
误区:随机 OOF 可用于时间预测。 未来标签仍可能编码过去样本。
-
追问:未知类别怎么办? 回退全局或上级类别先验。
-
追问:如何识别泄漏? 单例类别训练分数异常高、验证骤降是典型信号。
八、加强记忆
目标编码的红线是“当前标签绝不能参与当前特征”。
OOF 负责隔离,平滑负责降方差,时间任务还要保证只看过去。