理解AUROC,AP,F1-scroe,PRO
- AUROC(Area Under the ROC Curve)
中文名称: ROC曲线下面积
它表示什么意思?
• ROC曲线 是一个二维曲线,描绘了分类模型在不同判断阈值下真正例率(True Positive Rate, TPR, 又称召回率) 和假正例率(False Positive Rate, FPR) 的权衡关系。
◦ TPR(召回率):在所有真实为正例的样本中,被模型正确预测为正例的比例。TPR = TP / (TP + FN)。我们希望这个值越高越好。◦ FPR:在所有真实为负例的样本中,被模型错误预测为正例的比例。FPR = FP / (FP + TN)。我们希望这个值越低越好。
场景:疾病诊断模型 • 任务: 根据某项检测指标预测一个人是否患病(二分类:患病=正例,健康=负例)。
• 数据集: 我们有 10个 样本:
◦ 3个 真实患病(正例)◦ 7个 真实健康(负例)
• 模型输出: 模型对每个样本预测一个 患病概率(介于0和1之间)。假设模型预测结果如下(按预测概率从高到低排序):
样本ID 真实标签 模型预测的患病概率
1 患病 0.95
2 患病 0.85
3 健康 0.75
4 健康 0.65
5 患病 0.55
6 健康 0.45
7 健康 0.35
8 健康 0.25
9 健康 0.15
10 健康 0.05
核心概念回顾: • 阈值: 我们设定一个门槛值。如果预测概率 >= 阈值,模型就判定为“患病”(正例);否则判定为“健康”(负例)。
• TPR (True Positive Rate, 召回率): TP / (TP + FN)
◦ TP (True Positive): 真实患病,且模型预测患病(正确)。◦ FN (False Negative): 真实患病,但模型预测健康(错误,漏诊)。◦ 意义: 在所有真实患病的人中,模型成功找出了多少比例?越高越好。
• FPR (False Positive Rate): FP / (FP + TN)
◦ FP (False Positive): 真实健康,但模型预测患病(错误,误诊)。◦ TN (True Negative): 真实健康,且模型预测健康(正确)。◦ 意义: 在所有真实健康的人中,模型错误地认为有多少比例患病?越低越好。
绘制ROC曲线的步骤:
ROC曲线是通过遍历所有可能的分类阈值,计算每个阈值下的(TPR, FPR)点,并将这些点连接起来形成的。
选择阈值点: 通常,我们选择所有样本的预测概率值作为候选阈值点(有时也包括0和1)。我们按预测概率从高到低排序(如上表),依次取每个概率值作为阈值。
计算每个阈值下的TPR和FPR:
◦ 阈值 = 1.0 (或 >0.95): 没有样本的概率 >= 1.0。所有样本都被预测为“健康”。▪ TP = 0 (没预测出任何病人)▪ FN = 3 (3个病人都漏诊了)▪ FP = 0 (没误诊任何人)▪ TN = 7 (7个健康人都判对了)▪ TPR = 0 / (0 + 3) = 0▪ FPR = 0 / (0 + 7) = 0▪ 点:(0, 0)
◦ 阈值 = 0.95: 样本1的概率 >= 0.95,预测为“患病”;其他预测为“健康”。
▪ TP = 1 (样本1正确预测患病)▪ FN = 2 (样本2和5漏诊)▪ FP = 0 (没有健康人被误诊)▪ TN = 7 (所有健康人判对)▪ TPR = 1 / (1 + 2) = 1/3 ≈ 0.333▪ FPR = 0 / (0 + 7) = 0▪ 点:(0, 0.333)
◦ 阈值 = 0.85: 样本1、2的概率 >= 0.85,预测为“患病”;其他预测为“健康”。
▪ TP = 2 (样本1、2正确预测患病)▪ FN = 1 (样本5漏诊)▪ FP = 0 (没有健康人被误诊)▪ TN = 7 (所有健康人判对)▪ TPR = 2 / (2 + 1) = 2/3 ≈ 0.667▪ FPR = 0 / (0 + 7) = 0▪ 点:(0, 0.667)
◦ 阈值 = 0.75: 样本1、2、3的概率 >= 0.75,预测为“患病”;其他预测为“健康”。
▪ TP = 2 (样本1、2正确预测患病)▪ FN = 1 (样本5漏诊)▪ FP = 1 (样本3被误诊为患病)▪ TN = 6 (样本4、6、7、8、9、10判对健康)▪ TPR = 2 / (2 + 1) = 2/3 ≈ 0.667▪ FPR = 1 / (1 + 6) = 1/7 ≈ 0.143▪ 点:(0.143, 0.667)
◦ 阈值 = 0.65: 样本1、2、3、4的概率 >= 0.65,预测为“患病”;其他预测为“健康”。
▪ TP = 2 (样本1、2正确预测患病)▪ FN = 1 (样本5漏诊)▪ FP = 2 (样本3、4被误诊为患病)▪ TN = 5 (样本6、7、8、9、10判对健康)▪ TPR = 2 / (2 + 1) = 2/3 ≈ 0.667▪ FPR = 2 / (2 + 5) = 2/7 ≈ 0.286▪ 点:(0.286, 0.667)
◦ 阈值 = 0.55: 样本1、2、3、4、5的概率 >= 0.55,预测为“患病”;其他预测为“健康”。
▪ TP = 3 (样本1、2、5正确预测患病!样本5终于被检出)▪ FN = 0 (所有病人都找到了!)▪ FP = 2 (样本3、4被误诊为患病)▪ TN = 5 (样本6、7、8、9、10判对健康)▪ TPR = 3 / (3 + 0) = 1.0▪ FPR = 2 / (2 + 5) = 2/7 ≈ 0.286▪ 点:(0.286, 1.0)
◦ 阈值 = 0.45: 样本1-6的概率 >= 0.45,预测为“患病”;其他预测为“健康”。
▪ TP = 3 (所有病人都找到了)▪ FN = 0▪ FP = 3 (样本3、4、6被误诊为患病)▪ TN = 4 (样本7、8、9、10判对健康)▪ TPR = 3 / (3 + 0) = 1.0▪ FPR = 3 / (3 + 4) = 3/7 ≈ 0.429▪ 点:(0.429, 1.0)
◦ 阈值 = 0.35, 0.25, 0.15, 0.05: 随着阈值降低,越来越多的健康人被误诊(FP增加),但TPR已经达到1.0(所有病人都找到了)保持不变。FPR会继续上升。
▪ 阈值=0.35: FPR = 4/7 ≈ 0.571 -> (0.571, 1.0)▪ 阈值=0.25: FPR = 5/7 ≈ 0.714 -> (0.714, 1.0)▪ 阈值=0.15: FPR = 6/7 ≈ 0.857 -> (0.857, 1.0)▪ 阈值=0.05 (或 <0.05): FPR = 7/7 = 1.0 -> (1.0, 1.0) (所有健康人都被误诊为患病)
绘制曲线:
◦ 以 FPR 为 X轴。◦ 以 TPR 为 Y轴。
◦ 将上面计算出的所有点画在坐标系中:
▪ (0, 0)▪ (0, 0.333)▪ (0, 0.667)▪ (0.143, 0.667)▪ (0.286, 0.667)▪ (0.286, 1.0)▪ (0.429, 1.0)▪ (0.571, 1.0)▪ (0.714, 1.0)▪ (0.857, 1.0)▪ (1.0, 1.0)
◦ 将这些点按顺序(从阈值最高到最低)用线段连接起来。
ROC曲线图:
TPR (Sensitivity, Recall)
1.0 | … (Perfect Classifier)
| .
| .
| . X (0.286, 1.0) — (0.429,1.0) — (0.571,1.0) — …
0.667| . | X-----------X-----------X
| . | |
| . | |
| X-------X----X |
| | | | |
| | | | |
0.333| X | | |
| | | | |
| | | | |
0.0 X–±------±—±—±--------------------------> FPR (1 - Specificity)
0.0 0.143 0.286 0.429 … 1.0解读这张ROC曲线:
起点: 曲线从 (0, 0) 开始。这对应最严格的阈值(只预测概率最高的为患病),此时没找到病人(TPR=0),也没误诊健康人(FPR=0)。
上升段: 随着阈值降低(标准放宽):
◦ 在 FPR=0 时,TPR 快速上升到 0.667(找到了2个病人,没误诊任何人)。这是非常理想的情况。◦ 当阈值降到 0.75 时,为了找到同样的2个病人(TPR保持0.667),我们开始出现误诊(FPR=0.143)。
◦ 当阈值降到 0.55 时,我们找到了所有病人(TPR=1.0),但代价是误诊了2个健康人(FPR=0.286)。
右上角: 曲线最终到达 (1.0, 1.0)。这对应最宽松的阈值(所有样本都预测为患病),此时所有病人都被找到(TPR=1.0),但所有健康人也被误诊(FPR=1.0)。
对角线: 图中没有画出来,但想象一条从 (0,0) 到 (1,1) 的对角线。这条线代表一个随机猜测模型的性能(例如抛硬币决定是否患病)。好的分类器的ROC曲线应该远高于这条对角线。
曲线形状: 这个模型的曲线有一个陡峭的上升(在FPR很低时就获得了较高的TPR),然后向右延伸。这种“弓形”越靠近左上角,说明模型性能越好。在这个例子中,曲线大部分在左上角区域,表明模型区分能力不错。
AUROC: 曲线下面积(Area Under ROC Curve)。图中曲线下方的面积明显大于0.5(对角线面积)。计算一下(需要近似计算梯形面积):
◦ (0,0) 到 (0,0.333):三角形面积 ≈ (0.333 * 0) / 2 = 0◦ (0,0.333) 到 (0,0.667):矩形面积 ≈ (0.667 - 0.333) * 0 = 0
◦ (0,0.667) 到 (0.143,0.667):矩形面积 ≈ (0.143 - 0) * 0.667 ≈ 0.095
◦ (0.143,0.667) 到 (0.286,0.667):矩形面积 ≈ (0.286 - 0.143) * 0.667 ≈ 0.095
◦ (0.286,0.667) 到 (0.286,1.0):矩形面积 ≈ (0.286 - 0.286) * (1.0 - 0.667) = 0 (宽度为0)
◦ (0.286,1.0) 到 (0.429,1.0):矩形面积 ≈ (0.429 - 0.286) * 1.0 ≈ 0.143
◦ (0.429,1.0) 到 (1.0,1.0):矩形面积 ≈ (1.0 - 0.429) * 1.0 ≈ 0.571
◦ 总AUROC ≈ 0 + 0 + 0.095 + 0.095 + 0 + 0.143 + 0.571 = 0.904
◦ 这个值接近1,说明模型整体区分能力很好。它意味着随机挑选一个患病样本和一个健康样本,模型给患病样本的预测概率高于健康样本的概率是90.4%。
关键点:
• ROC曲线展示了模型在所有可能的分类标准(阈值)下的性能表现。
• 左上角是理想点: TPR=1(不漏诊),FPR=0(不误诊)。
• 曲线越靠近左上角,模型性能越好。
• AUROC量化了曲线下的面积:
值在0.5(随机)到1.0(完美)之间。AUROC越大,模型区分正负样本的能力越强。本例的AUROC=0.904,表明模型区分能力优秀。希望这个例子和图示能帮助你理解ROC曲线!
• AUROC 就是这个ROC曲线下的面积。这个面积的取值范围在0到1之间。
从这个指标能看出什么?
-
模型的整体排序能力:AUROC衡量的是模型将“正例”样本排在“负例”样本前面的能力。它不关心模型预测的具体概率绝对值,而更关心概率的相对大小。
-
解读:
◦ AUROC = 0.5: 模型没有区分能力,相当于随机猜测(ROC曲线是一条对角线)。◦ AUROC = 1.0: 模型是完美的,能够完全区分开正例和负例。
◦ AUROC > 0.5: 模型具有一定的区分能力。值越接近1,区分能力越强。
◦ AUROC < 0.5: 模型比随机猜测还差,通常意味着模型学反了,但将预测结果反转后可能得到一个好模型。
优点:对类别不平衡问题相对不敏感,是评估模型整体排序能力的黄金标准之一。
缺点:当正例(我们关心的类别,如患病患者、欺诈交易)非常罕见时,AUROC值可能依然看起来很高(因为只要FPR很低,即使TPR不高,面积也会很大),但这可能会掩盖模型对正例的捕捉能力不足的问题。
- AP(Average Precision)
中文名称: 平均精度
它表示什么意思?
• AP是PR曲线(Precision-Recall Curve) 下的面积。
• PR曲线 描绘了模型在不同判断阈值下精确率(Precision) 和召回率(Recall) 的权衡关系。
◦ 精确率:在所有被模型预测为正例的样本中,有多少是真实的正例。Precision = TP / (TP + FP)。衡量预测的“准不准”。◦ 召回率:与TPR相同,衡量找的“全不全”。
• AP值也是一个0到1之间的数值。
从这个指标能看出什么?
- 模型在正例上的综合表现:AP特别关注模型对“正例”这个类别的性能。它同时考虑了模型预测的“准确性”(Precision)和“全面性”(Recall)。
- 对类别不平衡问题非常敏感和有效:当数据集中负例(多数类)远多于正例(少数类)时,PR曲线和AP比ROC/AUROC更能反映出模型性能的真实情况。因为AP不考虑真负例(TN)和FPR,而只关注正例的查找情况。
解读:
• AP = 1: 完美模型,既能找到所有正例,又不会误判任何负例。
• AP越高,说明模型在正例上的性能越好。
适用场景:是类别不平衡问题(如异常检测、信息检索)中最核心的评估指标之一。
- F1-Score
中文名称: F1分数
它表示什么意思?
• F1-Score是精确率(Precision) 和召回率(Recall) 的调和平均数。
• 计算公式为:F1 = 2 * (Precision * Recall) / (Precision + Recall)
• 它是一个单一的分数,对应的是某一个特定分类阈值下的模型性能。
从这个指标能看出什么?
- 精确率和召回率的综合平衡:F1-Score试图在“准不准”和“全不全”之间找到一个平衡点。如果精确率和召回率一个很高一个很低,F1-Score会偏低。
- 适用于需要同时兼顾Precision和Recall的场景:
◦ 例如,在垃圾邮件检测中,我们既不希望把正常邮件判为垃圾(需要高Precision),也不希望漏掉太多垃圾邮件(需要高Recall)。F1-Score提供了一个统一的视角。
解读:
• F1-Score = 1: 在该阈值下,模型的精确率和召回率都达到完美。
• F1-Score = 0: 在该阈值下,模型的精确率或召回率有一个为0。
注意:F1-Score只反映一个阈值点的性能,而AP(PR曲线下面积)则考虑了所有阈值下的性能。因此,AP通常被认为比单一的F1-Score更能全面评估模型。
4.PRO
- PRO(Per-Region Overlap,区域平均重叠):衡量“每个真实缺陷区域被覆盖得有多好”的指标。对每个阈值,把异常热力图二值化,计算每个真实缺陷区域的覆盖率,然后取平均,随着阈值变化画成曲线。其面积就是 AUPRO/PRO-AUC(常在 FPR≤0.3 范围内积分)。
为什么用 PRO?
- 像素级 AUROC 会偏向“大缺陷”;PRO 按“区域”平均,能公平评价“小缺陷/多小区域”的覆盖质量。
计算步骤(单个阈值 t)
- 二值化预测:得到预测异常掩码 P(t)。
- 找出所有真实缺陷连通区域 R1…RN。
- 逐区域覆盖率:overlap_i = |P(t) ∩ Ri| / |Ri|。
- PRO(t) = (1/N) Σ overlap_i。
- 同时算背景的假阳性率:FPR(t) = |P(t) 在非缺陷处的像素数| / |非缺陷像素总数|。
- 随着 t 变化得一条曲线:横轴 FPR,纵轴 PRO;曲线下方面积(常限到 FPR≤0.3)即 AUPRO。
超小例子(4×4 图)
- 总像素 16。真实缺陷区域是一个 2×2 方块(共 4 像素)。
- 阈值 t1 后的预测 P1:命中 3 个缺陷像素,额外错报 1 个背景像素。
- PRO(t1) = (3/4) = 0.75(只有1个真实区域,所以就是它的覆盖率)
- FPR(t1) = 1 / (16-4) = 1/12 ≈ 0.083
- 阈值 t2 后的预测 P2:命中 4 个缺陷像素,额外错报 4 个背景像素。
- PRO(t2) = 4/4 = 1.0
- FPR(t2) = 4 / 12 ≈ 0.333
- 把点 (FPR, PRO) = (0.083, 0.75) 与 (0.333, 1.0) 画到坐标系,截取 FPR≤0.3 的部分按梯形法积分,即得到 AUPRO(FPR≤0.3)。数值越大越好。
总结与对比
指标 核心思想 关注点 优点 适用场景
AUROC 模型整体的排序能力(区分正负样本的能力) 对正负样本的综合区分能力 对类别不平衡不敏感,直观 通用场景,尤其是负例也重要的平衡数据集
AP (Average Precision) 模型在正例类别上的综合性能 正例的查找能力(准+全) 对类别不平衡非常敏感 类别不平衡场景(如异常检测、医学诊断)
F1-Score 在特定阈值下,精确率和召回率的调和平均数 单个决策点的性能平衡 简单、直观,易于解释 当你已经确定一个业务决策阈值,并需要评估该点的性能
如何选择?
• 默认且安全的选择:报告 AUROC 和 AP 两个指标。AUROC看全局区分度,AP重点关注正例表现。
• 数据高度不平衡时:AP比AUROC更重要!因为此时AUROC可能会给出过于乐观的评估。
• 需要确定一个业务阈值时:可以查看该阈值下的 F1-Score,同时也要参考精确率和召回率的具体数值,看是否符合业务需求。