一句话定义:类别不平衡(Class Imbalance)是指训练数据里各个类别的样本数量相差悬殊——比如 1000 笔交易里只有 5 笔是欺诈,其余 995 笔都正常。
为什么 99% 的准确率会骗人
假设你要做一个"这笔交易是不是欺诈"的二分类模型。数据里 99% 正常、1% 欺诈。现在有个模型,不管输入什么,一律输出"正常"。它的准确率(Accuracy)是 99%,看起来漂亮极了,但它一笔欺诈都没抓到——这个模型什么都没学会。
打个生活化的比方:安检如果索性取消检查、让所有人直接通过,那"放行率 100%、误拦率 0",数据上完美,但这不叫安检做得好,叫安检没做。准确率这个指标天然偏爱"猜多数类",因为多数类占了样本的大头。
所以问题不是"预测对了多少",而是"少数类抓到了几个、抓错了几个"。真正要看的指标是:
- 精确率(Precision):被判为欺诈的样本里,真的有多少是欺诈;
- 召回率(Recall):所有真实欺诈中,被抓出来了多少;
- F1:精确率和召回率的折中;
- PR-AUC:在不平衡数据下,通常比 ROC-AUC 更能反映少数类的表现。
常见的几类处理手段
| 思路 | 做法 | 代价与适用 |
|---|---|---|
| 数据层面 | 过采样少数类、欠采样多数类、SMOTE 合成少数类样本 | 上手快;过采样容易过拟合,欠采样会丢信息 |
| 算法层面 | 类别权重(Class Weight)、Focal Loss | 不改数据就能让模型更在意少数类 |
| 评估层面 | 换指标、调整分类阈值、看混淆矩阵 | 成本最低,往往收益最直接 |
| 换问题形式 | 转成异常检测(Anomaly Detection) | 少数类极少且形态多变时更合适 |
和相邻概念的区别
不平衡不等于数据量小:十万条样本也可能严重不平衡。不平衡也不等于模型差:模型可能已经很有用,只是被一个不合适的指标掩盖了。它是"类别之间的相对比例"问题,而不是绝对数量问题,所以补数据未必有用——你得补对那一类。
对从业者的实际意义
第一,先问业务代价。漏掉一笔欺诈和误拦一个正常用户,损失一样吗?不一样,就该调分类阈值,而不是死守默认的 0.5。第二,汇报时别只给准确率,至少附上混淆矩阵和召回率,否则很容易给业务方一个虚假的安全感。第三,采样操作只在训练集上做,验证集和测试集要保留真实分布(具体做法以各框架官方文档为准),否则指标会虚高,上线就露馅。
一句话总结:类别不平衡提醒我们,模型好不好,取决于你更怕哪一种错,而不是"对得多不多"。
