理解AUROC,AP,F1-scroe,PRO

  1. 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)点,并将这些点连接起来形成的。

  1. 选择阈值点: 通常,我们选择所有样本的预测概率值作为候选阈值点(有时也包括0和1)。我们按预测概率从高到低排序(如上表),依次取每个概率值作为阈值。

  2. 计算每个阈值下的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) (所有健康人都被误诊为患病)
  3. 绘制曲线:

    ◦ 以 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曲线:

  1. 起点: 曲线从 (0, 0) 开始。这对应最严格的阈值(只预测概率最高的为患病),此时没找到病人(TPR=0),也没误诊健康人(FPR=0)。

  2. 上升段: 随着阈值降低(标准放宽):

    ◦ 在 FPR=0 时,TPR 快速上升到 0.667(找到了2个病人,没误诊任何人)。这是非常理想的情况。

    ◦ 当阈值降到 0.75 时,为了找到同样的2个病人(TPR保持0.667),我们开始出现误诊(FPR=0.143)。

    ◦ 当阈值降到 0.55 时,我们找到了所有病人(TPR=1.0),但代价是误诊了2个健康人(FPR=0.286)。

  3. 右上角: 曲线最终到达 (1.0, 1.0)。这对应最宽松的阈值(所有样本都预测为患病),此时所有病人都被找到(TPR=1.0),但所有健康人也被误诊(FPR=1.0)。

  4. 对角线: 图中没有画出来,但想象一条从 (0,0) 到 (1,1) 的对角线。这条线代表一个随机猜测模型的性能(例如抛硬币决定是否患病)。好的分类器的ROC曲线应该远高于这条对角线。

  5. 曲线形状: 这个模型的曲线有一个陡峭的上升(在FPR很低时就获得了较高的TPR),然后向右延伸。这种"弓形"越靠近左上角,说明模型性能越好。在这个例子中,曲线大部分在左上角区域,表明模型区分能力不错。

  6. 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之间。

从这个指标能看出什么?

  1. 模型的整体排序能力:AUROC衡量的是模型将"正例"样本排在"负例"样本前面的能力。它不关心模型预测的具体概率绝对值,而更关心概率的相对大小。

  2. 解读:

    ◦ AUROC = 0.5: 模型没有区分能力,相当于随机猜测(ROC曲线是一条对角线)。

    ◦ AUROC = 1.0: 模型是完美的,能够完全区分开正例和负例。

    ◦ AUROC > 0.5: 模型具有一定的区分能力。值越接近1,区分能力越强。

    ◦ AUROC < 0.5: 模型比随机猜测还差,通常意味着模型学反了,但将预测结果反转后可能得到一个好模型。

优点:对类别不平衡问题相对不敏感,是评估模型整体排序能力的黄金标准之一。

缺点:当正例(我们关心的类别,如患病患者、欺诈交易)非常罕见时,AUROC值可能依然看起来很高(因为只要FPR很低,即使TPR不高,面积也会很大),但这可能会掩盖模型对正例的捕捉能力不足的问题。

  1. AP(Average Precision)

中文名称: 平均精度

它表示什么意思?

• AP是PR曲线(Precision-Recall Curve) 下的面积。

• PR曲线 描绘了模型在不同判断阈值下精确率(Precision) 和召回率(Recall) 的权衡关系。

复制代码
◦ 精确率:在所有被模型预测为正例的样本中,有多少是真实的正例。Precision = TP / (TP + FP)。衡量预测的"准不准"。

◦ 召回率:与TPR相同,衡量找的"全不全"。

• AP值也是一个0到1之间的数值。

从这个指标能看出什么?

  1. 模型在正例上的综合表现:AP特别关注模型对"正例"这个类别的性能。它同时考虑了模型预测的"准确性"(Precision)和"全面性"(Recall)。
  2. 对类别不平衡问题非常敏感和有效:当数据集中负例(多数类)远多于正例(少数类)时,PR曲线和AP比ROC/AUROC更能反映出模型性能的真实情况。因为AP不考虑真负例(TN)和FPR,而只关注正例的查找情况。

解读:

• AP = 1: 完美模型,既能找到所有正例,又不会误判任何负例。

• AP越高,说明模型在正例上的性能越好。

适用场景:是类别不平衡问题(如异常检测、信息检索)中最核心的评估指标之一。

  1. F1-Score

中文名称: F1分数

它表示什么意思?

• F1-Score是精确率(Precision) 和召回率(Recall) 的调和平均数。

• 计算公式为:F1 = 2 * (Precision * Recall) / (Precision + Recall)

• 它是一个单一的分数,对应的是某一个特定分类阈值下的模型性能。

从这个指标能看出什么?

  1. 精确率和召回率的综合平衡:F1-Score试图在"准不准"和"全不全"之间找到一个平衡点。如果精确率和召回率一个很高一个很低,F1-Score会偏低。
  2. 适用于需要同时兼顾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,同时也要参考精确率和召回率的具体数值,看是否符合业务需求。

相关推荐
IT_陈寒2 小时前
React 性能优化:5个实战技巧让首屏加载提升50%,开发者亲测有效!
前端·人工智能·后端
久未3 小时前
Pytorch autoload机制自动加载树外扩展(Autoload Device Extension)
人工智能·pytorch·python
Apifox.3 小时前
如何在 Apifox 中通过 AI 一键生成几十个测试用例?
人工智能·程序人生·ai·测试用例·ai编程
Learn Beyond Limits3 小时前
TensorFlow Implementation of Content-Based Filtering|基于内容过滤的TensorFlow实现
人工智能·python·深度学习·机器学习·ai·tensorflow·吴恩达
是Yu欸3 小时前
【AI视频】从单模型,到AI Agent工作流
人工智能·ai·ai作画·aigc·音视频·实时音视频
AI人工智能+3 小时前
发票识别技术:结合OCR与AI技术,实现纸质票据高效数字化,推动企业智能化转型
人工智能·nlp·ocr·发票识别
用户5191495848453 小时前
Aniyomi扩展开发指南与Google Drive集成方案
人工智能·aigc
ezl1fe3 小时前
第零篇:把 Agent 跑起来的最小闭环
人工智能·后端·agent
说私域3 小时前
开源链动2+1模式AI智能名片S2B2C商城小程序在竞争激烈的中低端面膜服装行业中的应用与策略
大数据·人工智能·小程序