4. 不平衡数据下的评估
在工业异常检测中,正常样本往往占据绝大多数,异常样本可能只占千分之一甚至更低。这种极端的类别不平衡会从根本上改变评估指标的行为:准确率会严重虚高,ROC曲线会显得过于乐观,而真正决定模型能否上线的,往往是少数异常样本上的精确率与召回率。本节围绕类别不平衡的影响、PR曲线的构造,以及AUC-PR与AUC-ROC的差异与适用场景展开。
一、类别不平衡如何扭曲评估结论
假设一条产线每天产生10000个样本,其中真正异常只有20个。若模型把所有样本都判为正常,准确率仍高达99.8%,但召回率为0,完全不可用。这说明在异常检测中,准确率不是有效指标,因为它被多数类主导。
更隐蔽的问题出现在ROC曲线上。ROC的横轴是假正率FPR = FP / (FP + TN),纵轴是真正率TPR = TP / (TP + FN)。当负样本数量极大时,即使FP的绝对数量很大,FPR仍可能很小,于是ROC曲线看起来仍然靠近左上角,AUC-ROC可能达到0.95以上,但实际部署时误报会淹没运维人员。因此,不平衡场景下必须同时观察PR曲线。
二、精确率-召回率曲线与AUC-PR
精确率Precision = TP / (TP + FP),回答“报警中有多少是真的”;召回率Recall = TP / (TP + FN),回答“真实异常中抓到了多少”。PR曲线以Recall为横轴、Precision为纵轴,通过不断调整判定阈值得到一系列(Recall, Precision)点并连线。
与ROC不同,PR曲线没有使用TN,因此不受大量真负样本“稀释”。当异常极稀少时,PR曲线能直接暴露误报的严重程度。AUC-PR即PR曲线下面积,常用平均精度AP(Average Precision)近似,数值越高表示在保持高召回的同时精确率下降越慢。
下面用一段伪代码说明如何从异常分数计算PR曲线与AUC-PR:
输入: y_true (0/1), score (异常分数, 越大越异常)
1. 按 score 从大到小排序样本
2. 依次将每个样本判为异常, 累计 TP、FP
3. 对每个阈值计算:
precision = TP / (TP + FP)
recall = TP / (TP + FN)
4. 绘制 (recall, precision) 曲线
5. AUC-PR = Σ (R_i - R_{i-1}) * P_i # 阶梯积分/平均精度
在工业场景中,通常还会关注固定召回率下的精确率,例如“召回率达到90%时,精确率是否高于30%”,这比单一AUC-PR更贴近运维可接受水平。
三、AUC-PR与AUC-ROC的区别与适用场景
两者的根本差异在于是否使用真负样本TN。AUC-ROC同时考虑正负两类,衡量的是模型整体排序能力;AUC-PR只关注正类(异常)的查全与查准,对少数类更敏感。当负样本远多于正样本时,AUC-ROC往往偏高且变化平缓,而AUC-PR更能区分模型优劣。
| 对比维度 | AUC-ROC | AUC-PR |
|---|---|---|
| 坐标轴 | FPR vs TPR | Recall vs Precision |
| 是否使用TN | 是 | 否 |
| 对类别不平衡敏感度 | 低,容易乐观 | 高,更贴近异常检测 |
| 随机基线 | 0.5 | 约等于正类比例 |
| 适用场景 | 类别较均衡、关注整体排序 | 异常稀少、关注误报与漏报 |
| 工业异常检测推荐度 | 辅助参考 | 主指标 |
需要特别注意的是,AUC-PR的随机基线不是0.5,而是正类占比。例如异常率1%时,随机模型的AUC-PR约为0.01。因此不能拿AUC-PR与0.5比较,而应与该基线比较,或与业务要求的精确率-召回率组合比较。
四、案例:同一模型下两种指标的差异
某轴承故障检测任务中,测试集包含10000个正常样本和100个异常样本。模型A的AUC-ROC为0.96,AUC-PR为0.42;模型B的AUC-ROC为0.93,AUC-PR为0.61。若只看AUC-ROC,会误以为模型A更好;但实际部署中模型B在相同召回率下误报更少,更适合上线。这正是不平衡数据下“ROC乐观、PR务实”的典型体现。
五、常见误区与复盘
- 误区一:用准确率评价异常检测模型。应改用PR曲线、AUC-PR、F1或固定召回率下的精确率。
- 误区二:认为AUC-ROC高就代表模型可用。高AUC-ROC可能只是负样本太多造成的假象。
- 误区三:把AUC-PR与0.5比较。应使用正类比例作为随机基线。
- 误区四:忽略阈值选择。AUC是排序指标,实际部署必须结合业务代价选择阈值。
复盘时建议固定三件事:异常率、评估指标组合、业务可接受的误报上限。只有把指标与业务代价绑定,PR曲线和AUC-PR才能真正指导阈值优化与模型选型。