主要做为本人复习时使用
引言:模型到底是怎么做决策的?
在刚接触机器学习时,很多同学训练完一个二分类模型,看到 Accuracy(准确率) 达到了 99%,就激动地觉得模型天下无敌了。先别急着开香槟,这个 99% 很可能是一个美丽的谎言。
为了彻底搞懂这个问题,我们不仅要弄懂 Precision、Recall、TPR、FPR 这些让人眼花缭乱的英文缩写,更要从源头弄明白------模型到底是如何输出结果的?
今天,我们用"警察抓小偷"的通俗故事,把这一整套评价体系扒个底朝天!
一、 源头:模型预测得分(Score)与阈值(Threshold)
很多人以为,把一个样本丢进二分类模型,模型会直接吐出一个干脆的"是"或"否"(1 或 0)。其实并非如此。
无论是逻辑回归还是复杂的深度神经网络,模型输出的通常是一个预测得分(Prediction Score),或者叫概率值,范围在 0 到 1 之间。
【场景设定】
假设村里有 100 个人,其中 10个是小偷(正样本 Positive) ,90个是良民(负样本 Negative) 。
现在派警察(你的模型)去抓人。警察扫视每一个人,心里会给出一个**"嫌疑得分(Score)"**:
- 张三贼眉鼠眼,嫌疑得分:0.85
- 李四老实巴交,嫌疑得分:0.12
那么,到底抓不抓? 这时候就需要一条及格线,也就是阈值(Threshold)。
- 如果规定 阈值 = 0.5:得分大于 0.5 的全抓。那么张三被抓,李四安全。
- 如果规定 阈值 = 0.9(严打错案):得分大于 0.9 才抓。那么张三也会被放过。
划重点:你的最终预测结果(抓还是不抓),完全取决于你设定的"阈值"。不同的阈值,会直接导致下面我们要讲的评估指标发生剧变!
二、 核心基石:混淆矩阵(Confusion Matrix)
警察抓完人后,我们来盘点战绩。记住一个极其好用的命名拆解秘籍:
- 第二个字母(P/N) :代表警察(模型)的动作。警察抓了他,就是 P(Positive);警察没抓他,就是 N(Negative)。
- 第一个字母(T/F) :代表警察(模型)有没有做对。做对了就是 T(True),做错了就是 F(False)。
于是,我们得到了大名鼎鼎的混淆矩阵四大金刚:
- TP (True Positive) :抓了(P),抓对了(T)。(抓到的真正小偷)
- FP (False Positive) :抓了(P),抓错了(F)。(被冤枉的良民)
- FN (False Negative) :没抓(N),放错了(F)。(漏网的小偷)
- TN (True Negative) :没抓(N),放对了(T)。(没被抓的良民)
| 警察预测:小偷 (Positive) | 警察预测:良民 (Negative) | |
|---|---|---|
| 真实情况:小偷 | TP (抓对的小偷) | FN (漏网的小偷) |
| 真实情况:良民 | FP (冤枉的良民) | TN (没抓的良民) |
三、 三大核心指标:Accuracy vs Precision vs Recall
有了这四个零件,我们就可以拼装指标了。
1. Accuracy(准确率)
灵魂拷问:警察所有判断(抓与不抓)中,总共对了几次?
公式 :Accuracy=TP+TNTP+FP+TN+FNAccuracy = \frac{TP + TN}{TP + FP + TN + FN}Accuracy=TP+FP+TN+FNTP+TN
为什么说准确率会骗人?
假设村里 1000 个人,只有 1 个小偷。警察今天偷懒,开启了"人工智障"模式:对所有人的嫌疑得分全给 0,统统不抓。
此时 TP=0,TN=999。算一下准确率:999 / 1000 = 99.9% !
模型拿了高分,但那个唯一的小偷却逍遥法外。这就是为什么在样本极度不平衡时,Accuracy 是一张废纸。
2. Precision(精确率 / 查准率)
灵魂拷问:警察抓回来的一堆人里,到底有多少是真正的小偷?
公式 :Precision=TPTP+FP=抓对的小偷所有被抓的人Precision = \frac{TP}{TP + FP} = \frac{抓对的小偷}{所有被抓的人}Precision=TP+FPTP=所有被抓的人抓对的小偷
白话解释:衡量模型的**"精准度"**。如果你把阈值调得极高(Score > 0.95 才抓),警察会非常谨慎。虽然抓的人少,但抓回来的基本都是真小偷,此时 Precision 极高,很少冤枉好人。
3. Recall(召回率 / 查全率)
灵魂拷问:村里一共就这么多小偷,警察到底抓住了多少个?
公式 :Recall=TPTP+FN=抓对的小偷村里所有真正的小偷Recall = \frac{TP}{TP + FN} = \frac{抓对的小偷}{村里所有真正的小偷}Recall=TP+FNTP=村里所有真正的小偷抓对的小偷
白话解释:衡量模型"找全"的能力。如果你把阈值调得极低(Score > 0.1 就抓),警察实行"大扫荡"。小偷基本都被抓住了(Recall 极高),但也无可避免地冤枉了一大堆良民(导致 Precision 暴跌)。
(注:Precision 和 Recall 往往是互斥的,业界通常使用它们俩的调和平均数 F1-Score 来进行综合评判。)
四、 高端局必备:TPR、FPR 与 ROC 曲线
在了解了阈值如何影响 Precision 和 Recall 后,我们再来看高阶指标 TPR 和 FPR。
1. TPR (True Positive Rate, 真正率)
公式 :TPR=TPTP+FN=抓对的小偷村里所有真正的小偷TPR = \frac{TP}{TP + FN} = \frac{抓对的小偷}{村里所有真正的小偷}TPR=TP+FNTP=村里所有真正的小偷抓对的小偷
发现了吗?! TPR 的公式和 Recall 一模一样! 它们俩是同一个东西的两个名字。它衡量的是:所有真实小偷中,模型抓住了多少。
2. FPR (False Positive Rate, 假正率)
公式 :FPR=FPFP+TN=冤枉的良民村里所有真正的良民FPR = \frac{FP}{FP + TN} = \frac{冤枉的良民}{村里所有真正的良民}FPR=FP+TNFP=村里所有真正的良民冤枉的良民
白话解释 :FPR 衡量的是:在所有真正的良民中,有多少比例被冤枉了?
终极串联:Score、阈值与 ROC 曲线
为什么要抛弃好用的 Precision,非要用 TPR 和 FPR?因为它们俩互不干扰(一个只看小偷池,一个只看良民池),不受正负样本比例失衡的影响。
最绝妙的地方来了:还记得我们第一节说的阈值 (Threshold) 吗?
如果我们将阈值从 1.0 慢慢往下滑动到 0.0:
- 阈值 1.0:没人被抓。TPR = 0,FPR = 0。
- 阈值慢慢降低:抓的人越来越多,抓对的小偷增多 (TPR 上升),冤枉的良民也开始增多 (FPR 上升)。
- 阈值 0.0:全村人都被抓了。TPR = 1.0(小偷全落网),FPR = 1.0(良民全被冤枉)。
把每一次改变阈值得到的 (FPR, TPR) 坐标点连起来,就是大名鼎鼎的 ROC 曲线! 曲线下方的面积就是 AUC 值,它代表了模型无论在什么阈值下,整体排序(Score的区分度)的综合能力。
五、 总结
搞懂了这些指标的逻辑联动,模型评估基本功就已经非常扎实了。最后送上一句口诀:
- Model Score & 阈值 = 模型输出的是概率,阈值决定了到底预测为正是负。
- Accuracy (准确率) = 总体猜对的比例(样本不平衡时别信它)。
- Precision (精确率) = 预测出来的坏人里,多少是真的?(核心诉求:宁缺毋滥,别冤枉好人)。
- Recall / TPR (召回率/真正率) = 真正的坏人里,抓出了多少?(核心诉求:宁错杀一千,别放过一个)。
- FPR (假正率) = 真正的好人里,冤枉了多少?(用于画 ROC 曲线)。