准确率有什么局限?为什么类别不平衡时不能只看准确率?
简化版
准确率(Accuracy)= 预测对的样本数 / 总样本数,直观但有个致命局限:在类别不平衡时会严重误导。比如 99% 的样本是负类(正常)、1% 是正类(欺诈),一个「无脑全预测为负类」的模型准确率就有 99%——数字很漂亮,却一个正例都没抓到(召回率=0),毫无价值。原因是准确率被多数类主导,少数类分对分错几乎不影响总数。所以不平衡场景要用精确率、召回率、F1、AUC、AP 等能反映少数类表现的指标,而不是只看准确率。此外准确率也不区分不同错误的代价(漏报和误报被同等对待)。
详细版
准确率公式:
Accuracy = (TP + TN) / (TP + TN + FP + FN)
两大局限:
| 局限 | 说明 |
|---|---|
| 类别不平衡失真 | 多数类主导,全预测多数类也能高准确率 |
| 不区分错误代价 | FP(误报)和 FN(漏报)被同等对待,但代价常不同 |
不平衡例子: 1% 正类,全预测负类 → 准确率 99%,但召回率 0、对正类完全无用。
替代指标:
| 场景 | 用什么 |
|---|---|
| 类别不平衡 | 精确率、召回率、F1、AUC、AP(PR 曲线) |
| 关注少数类查全 | 召回率 |
| 关注少数类查准 | 精确率 |
| 兼顾查准查全 | F1,并同时报告阈值与混淆矩阵 |
| 各类平等看待 | 宏平均(macro)F1、平衡准确率 |
完整版教学
一、准确率是什么,为什么这么常用
准确率(Accuracy)= 预测正确的样本数 / 总样本数,是最直观、最容易理解的分类指标——「一共判对了百分之多少」。因为简单,它常被当作默认指标。但正是这种「只看整体对错比例」的简单性,让它在类别不平衡时变得极具误导性。理解它的局限,是评估分类模型的基本功。
二分类中 Accuracy=(TP+TN)/(TP+TN+FP+FN),多分类则是预测正确数除以总样本数。它回答当前评估分布中判对的比例,所以评估分布一变,数值含义也会变化。
准确率适合类别比例较均衡、错误成本接近且输出硬标签的任务。若输出概率,还应检查 log loss、Brier score 或校准曲线,因为准确率相同的模型可能有完全不同的置信度质量。
二、致命局限:类别不平衡时严重失真
核心问题:准确率把所有样本一视同仁地统计,于是样本多的类别(多数类)会主导这个指标,少数类的表现几乎不影响它。
经典例子(欺诈检测):10000 笔交易,9900 笔正常(负类)、100 笔欺诈(正类),正类只占 1%。
- 一个什么都不学、全部预测为「正常」 的「模型」:
- 9900 笔正常全判对(TN=9900),100 笔欺诈全判错(FN=100)。
- 准确率 = 9900/10000 = 99%——看起来非常优秀!
- 但这个模型一笔欺诈都没抓到(召回率 = 0),完全没用——而欺诈检测的全部意义就是抓欺诈。
99% 的高准确率,掩盖了模型对少数类彻底失效的事实。 这就是准确率在不平衡数据上的陷阱:它奖励「押多数类」,而现实中我们往往最关心稀少的少数类(欺诈、疾病、故障、异常)。
应先与简单基线比较:正类率 1% 时,全预测负类的基线准确率就是 99%。此时只报 99% 没有说明正类召回、排序能力或报警质量,必须展开混淆矩阵。
若模型一个正例也不预测,Precision 分母为 0;不同库可能返回 0、NaN 或警告。面试中应说明 zero_division 约定,不能把未定义值当作普通的零值结果。
三、为什么会这样——多数类稀释了少数类
数学上看,准确率的分母是总样本数,多数类样本占了绝大部分。少数类即使全错,对分子(对的数量)的影响也很小,被多数类的正确「稀释」了。类别越不平衡,这种稀释越严重,准确率就越「虚高」、越不能反映模型对少数类的真实能力。
四、第二个局限:不区分错误的代价
准确率把 FP(误报)和 FN(漏报)当成一样的错误,各扣一分。但现实中两类错误的代价往往天差地别:
- 癌症筛查:漏诊真病人(FN)可能致命,误诊健康人(FP)只是虚惊、复查一下——FN 代价远高于 FP。
- 垃圾邮件:误杀正常邮件(FP)让用户漏看重要信息,漏掉垃圾(FN)只是烦一点——FP 代价更高。
准确率对这种代价差异完全无感,两个准确率相同的模型,可能一个疯狂漏报、一个疯狂误报,实用价值完全不同。要区分就得看精确率(管 FP)和召回率(管 FN)。
五、该用什么替代——按业务选指标
不平衡或代价敏感场景,应换用能反映少数类和错误类型的指标:
- 召回率:关注「少数类别被找全」(漏报代价高,如疾病、欺诈、安全)。
- 精确率:关注「报警要准」(误报代价高,如垃圾邮件、推荐)。
- F1:精确率召回率的调和平均,综合两者、抗不平衡。
- AUC / AP(PR 曲线下面积):与阈值无关的排序能力,AUC 对不平衡较稳健,极端不平衡用 AP/PR 曲线更敏感(详见 PR vs ROC 专题)。
- 平衡准确率(Balanced Accuracy):各类召回率的平均,平等看待每个类。
- 宏平均(macro)F1:每类单独算再平均,不被多数类主导。
核心:先想清楚业务最在乎什么(抓全少数类?报警要准?),再选对应指标,别默认用准确率。
六、什么时候准确率还能用
准确率不是一无是处——当类别比较均衡、且各类错误代价相近时,准确率仍是简单有效的指标(如均衡的图像分类)。它的问题只出在不平衡 + 代价不对称的场景。所以判断标准是:先看数据平不平衡、错误代价是否对称,再决定要不要相信准确率。
七、常见追问
- 为什么不平衡不能只看准确率? 多数类主导,全预测多数类也能高准确率,掩盖少数类失效。
- 该用什么替代? 精确率、召回率、F1、AUC、AP、平衡准确率、macro-F1。
- 准确率还有什么局限? 不区分 FP 和 FN 的代价(漏报误报等同对待)。
- 99% 准确率一定好吗? 不一定——若 99% 是负类,全预测负类就有 99%,要看召回率等。
- 怎么处理不平衡本身? 重采样(过采样/欠采样、SMOTE)、类别权重、调整阈值等(属于建模层面,评估层面则换指标)。
八、从同样 99% 准确率算出完全不同的价值
仍以 10000 笔、100 笔欺诈为例。全判正常得到 TN=9900,FN=100,TP=FP=0,Accuracy=99%,但正类召回率为 0;若另一个模型 TP=80,FN=20,FP=120,TN=9780,Accuracy=98.6% 反而更低,却抓回 80% 欺诈,Precision=40%。
| 指标 | 全判正常 | 模型 B |
|---|---|---|
| Accuracy | 99.0% | 98.6% |
| Recall(正类) | 0% | 80% |
| Precision(正类) | 无预测正例,按实现处理 | 40% |
| Balanced Accuracy | 50% | 约 89.4% |
Balanced Accuracy = (TPR + TNR) / 2
模型 B: (0.80 + 9780/9900) / 2 ≈ 0.894
AUROC 衡量全阈值排序且对先验比例不直接敏感,但极端不平衡时可能掩盖大量绝对误报;AP/PR 会随正类率变化。没有一个“不平衡万能指标”,必须同时声明正类、阈值、业务成本和评估分布。
记忆钩子:准确率数的是“每个样本一票”,业务常在意的是“少数类一票值多少钱”。
九、常见误区与追问
- 误区:准确率高于多数类占比就说明模型可用。 还要看相对基线提升、少数类召回、误报和业务成本。
- 误区:F1 或 AUC 可以无条件替代准确率。 F1 忽略 TN,AUC 忽略具体阈值与校准,仍需按决策目标组合指标。
- 追问:没有预测正例时 Precision 是多少? 数学分母为零,库可能返回 0、NaN 或告警,报告时要说明约定。
- 追问:Balanced Accuracy 为什么有用? 它平均各类召回,避免多数类样本数直接主导。
- 追问:评估集是否应人工做成 1:1? 若要估上线 precision 和成本,应保留真实先验或做可解释的重加权。
十、加强记忆
准确率 = 对的样本/总样本,两大局限:① 类别不平衡时严重失真——多数类主导,全预测多数类也能有很高准确率(1% 正类、全判负→99% 准确率却召回率 0、抓不到任何正例),因为少数类被多数类稀释;② 不区分错误代价——FP(误报)和 FN(漏报)被等同对待,但二者代价常悬殊(漏诊 vs 误诊、误杀邮件 vs 漏掉垃圾)。所以不平衡/代价敏感时改用精确率、召回率、F1、AUC、AP、平衡准确率、macro-F1,按业务侧重选。准确率只在类别均衡且错误代价相近时可靠。