1. 评估指标基础:混淆矩阵与核心指标
在机器学习分类任务中,评估模型性能不能只看最终对不对。我们需要一套标准化的“记账本”,记录模型每一次预测的细节,再从中提炼出有意义的评价数字。这个记账本就叫 混淆矩阵。
1.1 混淆矩阵:四格记账本
对于二分类问题,模型会输出“正类”或“负类”。混淆矩阵把预测结果和真实标签交叉,形成四个格子:
| 真实正类 (P) | 真实负类 (N) | |
|---|---|---|
| 预测正类 | TP (真阳性) 预测正确,实际也是正 |
FP (假阳性) 预测错误,实际是负 |
| 预测负类 | FN (假阴性) 预测错误,实际是正 |
TN (真阴性) 预测正确,实际也是负 |
- TP:真阳性,模型说“是”,实际也是“是”。
- FP:假阳性(误报),模型说“是”,实际是“否”。
- FN:假阴性(漏报),模型说“否”,实际是“是”。
- TN:真阴性,模型说“否”,实际也是“否”。
💡 记忆口诀:首字母 T/F 表示预测对不对,P/N 表示模型预测的类别。“FP” = 模型预测P(正类),但实际是F(假)。
【SVG图:混淆矩阵框架图】
1.2 从混淆矩阵引出三大指标
混淆矩阵四个数字摆出来,我们需要一个更直观的“评分”来对比模型好坏。三个经典指标就此诞生:
| 指标 | 公式 | 含义 | 关注点 |
|---|---|---|---|
| 准确率 | (TP + TN) / (TP + FP + FN + TN) | 全部预测中,猜对的比例 | 整体正确程度 |
| 精确率 | TP / (TP + FP) | 在模型判为“正类”里,真正是“正类”的比例 | 谨慎:不要误报 |
| 召回率 | TP / (TP + FN) | 在真实“正类”里,模型成功找出多少 | 全面:不要漏报 |
1.3 类比:超市监控防损系统
假设你是一家超市的防损经理,安装了一套AI摄像头来识别盗窃行为。真实情况每天有10起盗窃,摄像头会发出警报。
- 精确率:在摄像头所有报警中,真正抓到小偷的比例。如果摄像头总报警20次,其中5次是真小偷,精确率 = 5/20 = 25%。精确率低意味着频繁“误报”,浪费保安排查时间。
- 召回率:在真实发生盗窃中,摄像头成功识别的比例。如果摄像头只抓住了其中6次,召回率 = 6/10 = 60%。召回率低意味着“漏报”多,商品损失增大。
- 准确率:在所有正常情况下(包括没盗窃的时段和没报警的时段),系统判断正确的比例。因为无盗窃事件占大多数,准确率可能高达90%以上,但它掩盖了“精确率低”或“召回率低”的问题。
⚠️ 常见误区:准确率高不代表模型好!在样本不平衡时(如99%负类、1%正类),模型只要永远判“负”,准确率就能达到99%,但这种模型完全没有使用价值。此时必须看精确率或召回率。
1.4 各指标适用场景
| 场景需求 | 优先指标 | 原因 |
|---|---|---|
| 垃圾邮件分类 | 精确率 | 宁可漏放几封垃圾邮件,也不要把正常邮件误判为垃圾(误报代价高) |
| 癌症早期筛查 | 召回率 | 宁可有假阳性(进一步复查),也不能漏掉一个真病人(漏报代价高) |
| 手写数字识别 | 准确率 | 各类样本均衡,FP和FN代价相当,整体正确率反映系统水平 |
| 产品缺陷检测(工业质检) | 精确率 + 召回率 | 既不能浪费良品(低精确率),也不能放过次品(低召回率),需平衡 |
1.5 练习题
题目:某个二分类模型在测试集上得到以下混淆矩阵:TP = 80, FP = 30, FN = 20, TN = 120。请计算准确率、精确率、召回率。
解题步骤:
- 总样本数 = 80 + 30 + 20 + 120 = 250
- 准确率 = (80 + 120) / 250 = 200 / 250 = 0.80
- 精确率 = 80 / (80 + 30) = 80 / 110 ≈ 0.727
- 召回率 = 80 / (80 + 20) = 80 / 100 = 0.80
这个模型虽然准确率和召回率都达到了80%,但精确率偏低(72.7%),说明存在一定数量的“误报”。在某些场景下需要进一步优化。
1.6 应用边界
- 混淆矩阵仅适用于分类问题(二分类最直观,多分类可通过OvR/OvO扩展),不适用于回归问题。
- 当类别极度不平衡时,准确率会“假性膨胀”,需要引入精确率、召回率或F1分数。
- 精确率和召回率是相互制约的(Trade-off)。提高精确率通常会降低召回率,反之亦然。实际中常根据业务成本选择平衡点。
💡 指标速查
对话场景自查:
“模型整体表现怎么样?” → 看准确率(样本均衡时)
“模型会不会乱报警?” → 看精确率
“模型会不会漏掉坏人?” → 看召回率
对话场景自查:
“模型整体表现怎么样?” → 看准确率(样本均衡时)
“模型会不会乱报警?” → 看精确率
“模型会不会漏掉坏人?” → 看召回率