精确度(特异度)\(Precision=\frac{TP}{TP+FP}\)
真阳性率/召回率(敏感度)\(TPR/Recall=\frac{TP}{TP+FN}\)
假阳性率\(FPR=\frac{FP}{FP+TN}\)
\(F1-Score=2 \times \frac{Precision \times Recall}{Precision + Recall}\)准确率\(Accuracy=\frac{TP+TN}{TP+TN+FP+FN}\)
ROC曲线
作用
模型能否在“少误杀”的同时“多抓对”?
不同模型之间,谁的总体区分能力更强?
核心思想
想象你在筛选垃圾邮件:
- 阈值(Threshold):你设定的判断标准(比如“邮件中包含‘免费’一词就判为垃圾”)。
- 调整阈值:
- 标准严格(阈值=0.9):只有非常确定的垃圾邮件才被过滤 → 漏掉很多垃圾(FN↑),但几乎不错杀正常邮件(FP↓)。
- 标准宽松(阈值=0.1):稍有嫌疑就判为垃圾 → 抓住更多垃圾(TP↑),但误杀很多正常邮件(FP↑)。
ROC曲线就是展示所有可能阈值下,模型在“抓对”(TPR)和“误杀”(FPR)之间的权衡。
- 完美模型:紧贴左上角(TPR=1且FPR=0)。
- 随机猜测:对角线(TPR=FPR)。
- 实际模型:介于两者之间,越靠近左上角越好。
关键指标
指标 | 公式 | 别名 | 解释 |
TPR(真阳性率) | \(\frac{TP}{TP+FN}\) | 召回率、敏感度 | 真实正例中,被模型找出的比例 |
FPR(假阳性率) | \(\frac{FP}{FP+TN}\) | – | 真实负例中,被模型误判的比例 |
绘制ROC曲线的步骤
假设有5个样本,模型输出的正类概率和真实标签如下:
样本 | 预测概率 | 真实标签 |
A | 0.9 | 正 |
B | 0.8 | 正 |
C | 0.6 | 负 |
D | 0.4 | 正 |
E | 0.3 | 负 |
Step1: 按概率从高到低排序
A(0.9) → B(0.8) → C(0.6) → D(0.4) → E(0.3)
Step 2:动态调整阈值,计算TPR和FPR
阈值范围 | 判为正的样本 | TP | FP | FN | TN | TPR | FPR | 坐标点(FPR,TPR) |
阈值>0.9 | 无 | 0 | 0 | 3 | 2 | 0/3=0 | 0/2=0 | (0, 0) |
0.8-0.9 | A | 1 | 0 | 2 | 2 | 1/3=0.33 | 0/2=0 | (0, 0.33) |
0.6-0.8 | A, B | 2 | 0 | 1 | 2 | 2/3=0.67 | 0/2=0 | (0, 0.67) |
0.4-0.6 | A, B, C | 2 | 1 | 1 | 1 | 2/3=0.67 | 1/2=0.5 | (0.5, 0.67) |
0.3-0.4 | A, B, C, D | 3 | 1 | 0 | 1 | 3/3=1 | 1/2=0.5 | (0.5, 1) |
阈值≤0.3 | 全部判为正 | 3 | 2 | 0 | 0 | 3/3=1 | 2/2=1 | (1, 1) |
Step 3:连接所有点形成ROC曲线
模型比较(AUC)
- AUC(曲线下面积):量化模型性能(0.5~1,越大越好)。
- AUC=0.9:模型能很好区分正负样本。
- AUC=0.6:模型效果有限。
- 对比不同模型:直接看谁的ROC曲线更靠左上方。