在机器学习分类任务里,类别不平衡是指不同类别的样本数量相差悬殊,例如欺诈检测中正常交易占百分之九十九,欺诈仅占百分之一。若直接拿这样的数据训练模型,算法会倾向于预测多数类,因为那样整体准确率看起来很高,却对少数类几乎失效。要解决这一问题,过采样与损失加权是两种最常被采用的思路,它们从数据和算法两个不同层面介入训练过程。

什么是类别不平衡与为什么需要专门处理
类别不平衡并非单纯样本少,而是各类对决策边界的贡献严重不均。以医疗诊断为例,某种罕见病阳性样本只有几百条,阴性却有几十万条。普通模型为降低误差,会把所有人判为阴性,在测试集上准确率超过九九成,却完全没法查出病人。这种虚假的高指标会误导业务方,所以在信贷风控、故障预警等场景必须专门应对。
除了准确率失真,不平衡还会让模型学到的特征偏移。多数类包含的噪声和主流模式会掩盖少数类的微弱信号,导致提取到的权重集中在多数类相关特征上。长此以往,模型不仅当下漏检,面对新出现的少数类变体也更难泛化。因此,通过过采样补充少数类,或通过损失加权调高少数类误判代价,就成为修复学习偏向的核心手段。
过采样:从数据层面拉平比例
过采样指的是在训练集中增加少数类样本的数量,使各类别规模接近。最简单的形式是随机过采样,即把已有的少数类样本原样复制多份。这种做法实现容易,能立刻改善比例,但反复复制相同样本会让模型记住这些点,造成过拟合,尤其当少数类本身采集不充分时,边界会变得异常僵硬。
更成熟的做法是合成少数类过采样技术,也就是SMOTE。它在少数类样本之间做线性插值,随机选一个少数类样本及其近邻,在连线上生成新样本。这样既扩充了数量,又制造出介于两者之间的合理特征组合,缓解记忆问题。不过SMOTE也可能在噪声点附近造出矛盾样本,因此实际使用时往往要先做清洗,再配合交叉验证观察泛化表现。
过采样的适用情形与局限
当少数类总量极少、且特征空间相对连续时,过采样特别是SMOTE类方法比较合适。比如文本分类里某小类只有几十篇文档,通过语义向量插值能补出近似表达。但若少数类内部差异巨大、存在多个子簇,盲目合成会把不同子簇连起来,反而搅乱边界。此外,过采样只改训练集,推理阶段不变,若线上分布漂移严重,补充的样本可能脱离现实。
另一个常被忽略的成本是计算量。把少数类放大到与多数类同级,训练样本数翻倍甚至数倍,在大规模数据下会明显拉长训练时间。因此有的团队会折中,只把少数类提升到多数类的三分之一或一半,配合其他手段,而不是追求完全平衡。这种务实做法在业界很常见。
损失加权:从算法层面调高少数类代价
损失加权不改变样本数量,而是在计算损失函数时,给不同类别分配不同系数。假设某样本属于少数类,其误判带来的惩罚乘以较大权重,属于多数类则乘较小权重。这样模型在优化时,为了总损失下降,必须认真对待少数类的判断,相当于用数学方式强迫模型平等看待各类。
权重设置通常依据类别频率反比,例如权重等于总样本数除以该类样本数,再做归一化。也有按业务代价定权的,如漏掉欺诈一笔损失万元,误拦正常交易仅不便,那么前者的权重可设得极高。这种以代价为中心的设计,比单纯看数量更贴合实际目标,在风控和系统告警里用得很多。
损失加权的优势与注意点
相比过采样,损失加权不膨胀数据,训练效率几乎不变,也不会造出假样本。它直接嵌入主流框架,例如用交叉熵时传入class_weight参数即可。对于深度学习这种数据吞吐大的模型,加权往往比过采样更易落地。同时,权重可解释,业务方能清楚知道模型偏向了哪边、代价怎么算。
但加权也有坑。权重过大可能让模型过度关注少数类,反而把多数类分错一大片,总体收益下降。尤其当少数类标注本身有错时,高权重会放大错误信号。实践中常用网格搜索或贝叶斯优化找合适权重,并结合精确率召回率曲线,而非只看准确率。另外,若类别极多且长尾,逐类加权会变复杂,可改用在损失里做焦距式调节。
两种方法如何选与能否结合
选择先看数据规模与质量。少数类样本干净、量小且需快速实验,过采样能直观提速收敛;数据已很大、训练慢,或标注有噪,损失加权更稳。再看任务目标,若业务明确给出了误判代价,加权能直接映射,过采样则难表达这种非对称损失。
二者并不互斥。常见组合是先轻度过采样把比例拉到一比三,再施以适度损失加权,既缓解极端倾斜,又不过度造数据。下表列出核心差异供对照:
| 维度 | 过采样 | 损失加权 |
|---|---|---|
| 作用层面 | 数据分布 | 目标函数 |
| 训练成本 | 随样本增加上升 | 基本不变 |
| 主要风险 | 过拟合、合成噪声 | 权重失调、多数类退化 |
| 业务代价映射 | 间接 | 直接 |
落地时建议用同一份验证集比较两种方案的单类召回率与整体代价,而不是只盯准确率。有的团队甚至把两者做成可切换模块,上线后按周观察漏报率再调权重或采样倍率。类别不平衡没有万能药,清楚机制才能灵活组合。
实操步骤与常见误区
动手前先统计各类频率与误判代价,画出混淆矩阵基线。若少数类召回低于可接受线,先试损失加权,设权重为频率反比;若仍不足,加入SMOTE并限制生成倍数在二倍内。每次改动都需重新划分训练验证,防止采样泄露到测试集。
误区之一是认为平衡即完美,其实少数类若本身难分,再采样也救不了特征缺陷。其二是只在训练集过采样,却忘了交叉验证的每一折也要独立采样,否则指标虚高。其三是权重拍脑袋定得极大,结果模型弃多数类不顾。避开这些坑,过采样与损失加权才能真正发挥价值。