
02 Accuracy、Precision、Recall、Specificity 与 F1-score有了 TP、FP、TN、FN 之后就可以定义分类任务中最常见的一组评估指标Accuracy Precision Recall / Sensitivity Specificity F1-score这些指标不是互相替代的关系。它们回答的是不同问题。一、Accuracy整体预测有多准Accuracy 中文通常称为准确率定义为AccuracyTPTNTPTNFPFNAccuracy\frac{TPTN}{TPTNFPFN}AccuracyTPTNFPFNTPTN它回答的问题是所有样本中有多少被模型预测正确例如TP 80 TN 890 FP 10 FN 20则Accuracy808908089010200.97Accuracy\frac{80890}{808901020}0.97Accuracy808901020808900.97即Accuracy 97%这看起来很好。但是 Accuracy 有一个非常重要的问题当类别不平衡时Accuracy 可能具有欺骗性。这个问题将在下一篇重点讨论。二、Precision预测为 Positive 的样本有多可信Precision 中文常称为精确率 查准率公式为PrecisionTPTPFPPrecision\frac{TP}{TPFP}PrecisionTPFPTP它回答在所有被模型预测为 Positive 的样本中有多少是真的 Positive例如模型预测 100 个样本为 Positive 其中 80 个是真的 Positive 20 个其实是 Negative则Precision8080200.8Precision\frac{80}{8020}0.8Precision8020800.8因此Precision 80%可以理解为模型只要说“这是正类”它有多大概率是可信的三、Recall真正的 Positive 被找出了多少Recall 中文常称为召回率 查全率公式为RecallTPTPFNRecall\frac{TP}{TPFN}RecallTPFNTPRecall 也叫Sensitivity True Positive Rate TPR因此SensitivityRecallTPRSensitivityRecallTPRSensitivityRecallTPR它回答的问题是所有真正的 Positive 中有多少被模型成功发现例如真实有 100 个 Positive 模型发现了 80 个 漏掉了 20 个则Recall8080200.8Recall\frac{80}{8020}0.8Recall8020800.8即Recall 80%四、Specificity真正的 Negative 被正确排除了多少Specificity 中文通常称为特异度 真负率公式为SpecificityTNTNFPSpecificity\frac{TN}{TNFP}SpecificityTNFPTN它也叫True Negative Rate TNR因此SpecificityTNRSpecificityTNRSpecificityTNR它回答所有真正的 Negative 中有多少被模型正确识别为 Negative例如真实有 900 个 Negative 模型正确识别 870 个 错误报警 30 个则Specificity870870300.9667Specificity\frac{870}{87030}0.9667Specificity870308700.9667即Specificity ≈ 96.67%五、Precision 和 Recall 最容易混淆这两个指标的分子都是 TPPrecisionTPTPFPPrecision\frac{TP}{TPFP}PrecisionTPFPTPRecallTPTPFNRecall\frac{TP}{TPFN}RecallTPFNTP区别只在分母。Precision 的分母是所有预测为 Positive 的样本也就是TPFPTPFPTPFPRecall 的分母是所有真实 Positive也就是TPFNTPFNTPFN因此可以用下面的方式理解Precision → 我说是 Positive 的有多少真的是 Positive Recall → 真正的 Positive我找到了多少六、为什么 Precision 和 Recall 经常冲突假设一个模型通过概率进行分类P(Positive) threshold → Predict Positive如果降低 threshold0.8 → 0.5 → 0.3模型会把更多样本判断为 Positive。这样通常会Recall ↑因为漏掉的 Positive 更少。但是同时也可能导致FP ↑ Precision ↓反过来提高 threshold0.3 → 0.5 → 0.8模型会更加谨慎地预测 Positive。通常Precision ↑ Recall ↓这就是经典的Precision-Recall Trade-off七、F1-scorePrecision 和 Recall 的折中如果我们既关注 Precision又关注 Recall可以使用 F1-score。公式为F12×Precision×RecallPrecisionRecallF12\times\frac{Precision\times Recall}{PrecisionRecall}F12×PrecisionRecallPrecision×RecallF1 使用的是调和平均数而不是普通平均数。为什么假设Precision 1.0 Recall 0.1普通平均数为1.00.120.55\frac{1.00.1}{2}0.5521.00.10.55但这个模型其实 Recall 极差。F1 为F12×1.0×0.11.00.1≈0.182F12\times\frac{1.0\times0.1}{1.00.1}\approx0.182F12×1.00.11.0×0.1≈0.182因此 F1 会对特别低的一项进行明显惩罚。八、F-score 不只有 F1F1 默认认为Precision 和 Recall 同等重要如果希望给予 Recall 更高权重可以使用F-beta score公式为Fβ(1β2)Precision×Recallβ2×PrecisionRecallF_{\beta}(1\beta^2)\frac{Precision\times Recall}{\beta^2\times PrecisionRecall}Fβ(1β2)β2×PrecisionRecallPrecision×Recall其中β 1 → F1 β 1 → 更强调 Recall β 1 → 更强调 Precision例如F2通常会比 F1 更重视 Recall。九、不同指标分别关注什么指标关注的问题Accuracy总体有多少预测正确Precision预测为正的样本有多可信Recall真正的正样本找出了多少Specificity真正的负样本排除了多少F1Precision 与 Recall 的综合表现十、一个完整例子假设TP 40 FP 10 TN 930 FN 20则Accuracy4093010000.97Accuracy\frac{40930}{1000}0.97Accuracy1000409300.97Precision4040100.8Precision\frac{40}{4010}0.8Precision4010400.8Recall404020≈0.667Recall\frac{40}{4020}\approx0.667Recall402040≈0.667Specificity93093010≈0.989Specificity\frac{930}{93010}\approx0.989Specificity93010930≈0.989F12×0.8×0.6670.80.667≈0.727F12\times\frac{0.8\times0.667}{0.80.667}\approx0.727F12×0.80.6670.8×0.667≈0.727此时可以发现Accuracy 很高97% 但是 Recall 只有约 66.7%也就是说虽然模型整体看起来非常准确但它仍然漏掉了约三分之一的正样本。这也是为什么实际任务中不能只看 Accuracy。十一、总结分类指标的选择本质上取决于FP 的代价有多高 FN 的代价有多高 正负类别是否平衡 模型最终如何被使用因此Accuracy 高并不一定意味着模型真的好下一篇将专门讨论当数据集类别不平衡时应该如何选择 Accuracy、Precision、Recall、Specificity 和 F1。