跳到主内容
快讯直播
AI智模界
AI 词典

目标编码:用均值替代类别,强但极易泄漏

一句话定义:目标编码(Target Encoding)是把类别特征的每个取值,替换成该类别下目标变量的平均值(回归任务)或正例比例(分类任务)的编码方法,也叫均值编码(Mean Encoding)。

它怎么工作

假设你预测门店销售额,手里有“所在城市”这个类别。与其把城市拆成几十列 0/1(独热编码 One-Hot Encoding),不如直接写一个数:这个城市的历史平均销售额是多少。一列数字就装下了几十个城市的信息,梯度提升树(GBDT)类模型很吃这一套。

打个比方:你要评估一个新供应商靠不靠谱,最省事的办法是看“同类供应商过去的平均表现”。目标编码做的正是这件事,只不过它看的“同类”就是类别本身。

为什么它危险

问题在于算均值时用到了目标 y 本身。某个城市只有 3 条样本,销售额 100、200、300,均值 200,这个 200 是“看过答案”算出来的。极端情况下某类别只有 1 条样本,均值就等于它自己的 y,模型直接把答案抄下来,训练集上准得离谱,上线全崩。这就是目标泄漏(Target Leakage)。

正确做法:折外编码

折外编码(Out-of-Fold Encoding)把训练集切成 K 折,给第 i 折的样本算编码时,只用其余 K-1 折的数据统计均值。这样每条样本的编码值都没见过自己的 y。再叠加平滑(Smoothing):样本少的类别往全局均值上拉,(n×类别均值 + m×全局均值)/(n+m),m 是平滑强度。

编码方式做法主要问题
独热编码每类一列 0/1高基数时维度爆炸
计数编码换成该类出现次数丢掉了与目标的关系
目标编码换成该类下的目标均值不做折外处理必然泄漏

和嵌入(AI 词典:Embedding">Embedding)的区别:目标编码是无需训练的确定性统计量,嵌入是模型学出来的向量。

实际意义

用户 ID、商品 SKU、邮编这类高基数类别,目标编码往往比独热更省内存也更有效。但必须记住几条纪律:折外计算、加平滑、交叉验证(Cross-Validation)的每一折内部重新拟合映射表,否则线下评估会虚高。线上推理要用全量训练数据重算映射表,口径要和训练时一致;具体实现细节以所用库的官方文档为准。

对非技术岗也一样:用历史平均给类别打分是常识,只是别忘了一句——样本太少的类别,那个平均值不值得信。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。