机器学习入门 10: 类别不平衡问题
一、问题的起点:类别不平衡(Imbalanced Classes)
在现实世界中,许多分类任务的数据分布都极度不平衡(Imbalanced Classes)。
例如:
-
欺诈检测(Fraud Detection):99.9% 的交易正常,极少数为欺诈;
-
疾病筛查(Disease Screening):阳性病例往往只占样本的极小比例;
-
网络入侵检测(Intrusion Detection):攻击记录远少于正常记录。
这类问题的共同特点是:少数类(Minority Class)才是我们最关心的目标,
但大多数传统模型追求“整体准确率”时,往往会忽略这些关键样本。
这就是所谓的 类别不平衡问题(Imbalanced Class Problem) 。
二、准确率的定义与局限(Accuracy and Its Limitation)
1. 混淆矩阵(Confusion Matrix)
为了评估分类模型,我们通常用混淆矩阵(Confusion Matrix)表示预测结果:
其中:
-
TP(True Positive) :真正预测对的正例
-
TN(True Negative) :真正预测对的负例
-
FP(False Positive) :误报,把负类预测成正类
-
FN(False Negative) :漏检,把正类预测成负类
2. 准确率(Accuracy)的计算
准确率的定义非常简单:
Accuracy=\frac{TP+TN}{TP+TN+FP+FN}
也就是所有预测正确的样本比例。
当数据类别接近平衡时,它确实是一个直观且可靠的指标。
但一旦数据极度不平衡,Accuracy 会失去意义。
3. 示例:高准确率 ≠ 好模型
假设我们要预测某种罕见疾病:
-
总样本数 = 1000
-
其中 990 人健康(Negative),10 人患病(Positive)
如果一个分类器“偷懒”,直接把所有样本都预测为健康,则:
于是:
看似完美的 99% 准确率,
实际上这个模型一个病人都没检测出来。
在任何实际应用场景(如医疗、金融、安防)中,它都毫无意义。
4. 准确率的盲点
即使两个模型的 Accuracy 相近,它们在少数类的识别能力可能完全不同。
课件中的对比图展示了这一点:
-
模型 A:高准确率,但几乎没识别到正例;
-
模型 B:准确率稍低,但能检测到部分正例。
当类别严重不平衡时,仅依赖 Accuracy 会导致错误判断。
我们需要更细致的指标来评价模型的“真正实用性”。
三、替代指标:精准率、召回率与 F1(Precision, Recall & F1-score)
为了克服准确率的局限,我们引入更能反映少数类检测性能的指标。
1. 精准率(Precision)
含义:在所有被预测为正类的样本中,真正为正的比例。
-
高 Precision → 模型预测的“正”更可信(误报少)。
-
低 Precision → 模型“乱报”,误报过多。
2. 召回率(Recall)
含义:在所有实际为正类的样本中,被模型成功识别的比例。
-
高 Recall → 模型漏检少。
-
低 Recall → 模型错过大量正例。
3. F1 分数(F1-score)
是 Precision 和 Recall 的调和平均,
用于衡量模型在“准确”和“全面”之间的平衡。
→ 模型 C 的 F1 最高,代表更好的综合性能。
当类别不平衡时,应优先报告 Precision、Recall 和 F1-score。
四、ROC 曲线与 AUC(ROC Curve and AUC)
1. 概念:阈值与全面性能
Precision、Recall、F1 都依赖于一个固定阈值(Threshold),
而 ROC 曲线展示的是所有可能阈值下模型性能的整体变化。
2. ROC 坐标定义
ROC 展示的就是 “FPR–TPR” 之间的权衡关系。
3. 构建过程
-
获取模型输出的分数(Score) :每个样本的预测概率或置信度。
-
按分数从高到低排序。
-
逐步移动阈值(从高到低),每次计算对应的:
-
TP、FP、TN、FN;
-
得到一组 (FPR, TPR)。
-
-
绘制曲线:连接所有点,即得 ROC 曲线。
-
起点 (0, 0):全判负。
-
终点 (1, 1):全判正。
-
4. 曲线形状的意义
ROC 曲线越靠左上角越好,说明模型在低误报下能保持高检测率。
5. AUC(Area Under Curve)
AUC 是 ROC 曲线下的面积,
代表模型在所有阈值下的平均判别能力。
AUC 的统计意义是:
“随机选一个正样本与一个负样本,
模型正确判出谁更可能是正的概率”。
6. 为什么 ROC/AUC 更可靠?
ROC/AUC 不受类别分布影响,
特别适合评估不平衡数据的模型性能。
五、模型比较与实际取舍(Model Comparison & Trade-offs)
1. 用 ROC 曲线比较模型
-
模型 A 曲线更靠左上角 → 整体性能更优;
-
模型 B 在部分区域可能略好 → 具体选择取决于业务目标。
没有一个模型在所有阈值都最优,
ROC 提供了**根据实际需求选择工作点(Operating Point)**的依据。
2. 不同类别比例下的表现
课件举了两个场景:
-
中度不平衡:Accuracy 还能代表整体性能;
-
高度不平衡:Accuracy 虽高,但 Recall 极低,F1 显著下降。
这说明:
数据越不平衡,越应使用 Precision、Recall、F1 或 AUC 来判断模型优劣。
3. 不同任务下的优先目标
Recall 与 Precision 是“漏报与误报”的权衡,
不同任务需选择不同阈值点作为决策标准。
六、应对类别不平衡的策略
1. 欠采样(Under-sampling)
随机删除部分多数类样本,使正负样本接近平衡。
-
优点:计算量小。
-
缺点:可能丢失信息。
2. 过采样(Over-sampling)
复制或合成少数类样本(如 SMOTE)。
-
优点:保留信息,提高少数类识别。
-
缺点:可能导致过拟合。
3. 阈值调整(Threshold Adjustment)
调低阈值 → 提高 Recall;
调高阈值 → 提高 Precision。
适合已训练好模型的后期调优。
4. 代价敏感学习(Cost-sensitive Learning)
在训练中为少数类错误设更高惩罚权重,使模型自动更重视少数类。
七、总结与启示(Summary & Takeaway)
不平衡分类问题不是“Accuracy 的游戏”,
而是 Precision、Recall、F1、ROC、AUC 的平衡艺术。
✅ 一句话总结:
当类别极度不平衡时,
高准确率不代表高质量模型。
真正优秀的分类器,应能在低误报下识别出少数类的真实信号。