想象你是机场安检主管。每天数万旅客穿过安检门,其中绝大多数是普通游客,只有极少数人可能藏着违禁品。安检门上有一颗“灵敏度旋钮”——拧松一点,几乎人人都会响铃,违禁品确实一抓一个准,但无辜旅客被反复搜身,怨声载道;拧紧一点,旅客畅行无阻,可真正的危险品也可能悄悄溜过。你手里有两块仪表盘:一块叫 ROC 曲线,回答“我抓违禁品的能力和冤枉好人的代价如何权衡”;另一块叫 PR 曲线,专门盯着“每一次响铃,到底有多大比例真的抓到了货”。本文就带你把这两块仪表盘拆开看懂:它们怎么画出来、面积代表什么、什么时候该看哪一块,以及阈值旋钮到底拧到哪一档最合适。

岗位关联

这是算法工程师的“体检报告阅读课”:学会看 ROC/PR,你就能在模型评审会上讲清楚“这模型到底行不行、适合哪个业务、阈值设多少”,直接决定模型能否上线。

目录
  1. 可视化演示
  2. 分类评估基础
  3. ROC曲线原理
  4. AUC指标含义
  5. PR曲线原理
  6. AP平均精度
  7. 阈值选择策略
  8. ROC与PR选择
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

动态演示ROC曲线与PR曲线该怎么看的核心机制,通过基础/核心/应用/扩展四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

ROC曲线与PR曲线该怎么看:两曲线的 两曲线的绘制原理与视角差异 曲线几何特征与解读方法 核心机制可视化 ROC曲线与PR曲线该怎么看整体架构与关键组件

分类评估基础

老安检主管退休前留给你一本工作台账,里面只有四个数字:抓到且确实带违禁品的人数、抓到但只是带了瓶洗发水的冤枉人数、放过去却身藏危险品的漏网人数、以及正常放行的旅客数。机器学习里这四个数不叫“人数”,叫 混淆矩阵——它们是所有分类评估故事的起点。我们关心的“风险事件”(违禁品、欺诈、疾病)通常被记为正类,其余大量样本是负类。

在真实模型里,每个样本拿到的是一个 0 到 1 之间的“风险分”,比如 0.87。分数越高,代表模型越怀疑这个人。混不混淆,取决于我们把分数线划在哪:分数超过阈值就判为正类,否则判为负类。由此,四格台账被填满,再推出两个核心比例:真正例率(抓到的违禁品占所有违禁品的比例)和假正例率(被冤枉的好人占所有好人的比例)。这两个比例正是 ROC 曲线的横纵坐标。

如果模型完全随机猜测,那么 TPR 和 FPR 会在任何阈值下都相等——这就是“随机猜测基线”的由来。比分相同时,还要提醒自己:模型输出的是“排序”,不是“真实概率”,所以评估曲线的本质,是评估模型把正类排到负类前面的能力。

TPR=TPTP+FN,FPR=FPFP+TN\displaystyle \mathrm{TPR} = \frac{TP}{TP+FN}, \qquad \mathrm{FPR} = \frac{FP}{FP+TN}
TPR 是“真正例率”,也能叫召回率,指所有正类样品中被成功认出来的比例;FPR 是“假正例率”,指所有负类样品中被冤枉的比例。二者越低/越高,模型表现越好。
  1. 分母 TP+FNTP 加上 FN 恰好覆盖全部真实正类,也就是所有真正带违禁品的旅客,只有知道总数才能算“抓到的比例”。
    TP+FNTP + FN
  2. 分子 TP 与 TPRTP 表示带违禁品且被拦下的旅客,TPR 就是“违禁品落网率”,模型越强这个值越接近 1。
    TPR=TPTP+FN\mathrm{TPR} = \frac{TP}{TP+FN}
  3. 分母 FP+TNFP 加上 TN 覆盖全部真实负类,即所有守规矩的无辜旅客,分母决定误伤面有多大。
    FP+TNFP + TN
  4. 分子 FP 与 FPRFP 是被冤枉的守规旅客,FPR 是“好人被委屈率”,误报代价高时尤其要压低它。
    FPR=FPFP+TN\mathrm{FPR} = \frac{FP}{FP+TN}

ROC曲线原理

现在你这位新主管开始调灵敏度旋钮了。你把阈值从最紧拧到最松,每换一档就记下一个点:横轴是误伤好人的比例 FPR,纵轴是抓住违禁品的比例 TPR。把所有档位对应的点连成一条线,这条线就是 ROC 曲线。它像一条“能力轨迹”——从原点出发,随着阈值放松一路向右上延伸,最终停在右上角 (1,1)。

ROC 曲线最漂亮的地方是它只关心排序:只要模型把真正例的风险分排在了假正例前面,曲线就明显往左上拱;若排序随机,曲线就贴着对角线走。曲线越靠近左上角,说明模型在“多抓违禁品”和“少冤枉好人”之间越从容。模型并不能真正改变先天分类难度,但一个好的评分体系可以在权衡中占据更优位置。

曲线的形态也暴露了模型的风格:开头陡峭,说明少量误伤就能换来大量抓获,模型排序质量高;末尾才急促上扬,说明排序靠后的正例总是混在大量负例里。因此,ROC 曲线就是把“旋钮每一档”的取舍都摊开给你看的全局地图。

TPR(t)=∑i∈P1 [si≥t]∣P∣,FPR(t)=∑i∈N1 [si≥t]∣N∣\displaystyle \mathrm{TPR}(t) = \frac{\sum_{i \in \mathcal{P}} \mathbf{1}\,[s_i \ge t]}{|\mathcal{P}|}, \qquad \mathrm{FPR}(t) = \frac{\sum_{i \in \mathcal{N}} \mathbf{1}\,[s_i \ge t]}{|\mathcal{N}|}
把所有正类记作集合 P,负类记作 N;阈值 t 从最大分数一路降到最小,每一个 t 都产生一对 (FPR, TPR),把所有这些点连起来就得到 ROC 曲线。
  1. 指示函数判定方括号里成立取 1、不成立取 0,表示“分数达到阈值就算预测为正类”,这一步把连续分数变成了硬判断。
    1[si≥t]\mathbf{1}[s_i \ge t]
  2. 除以正类总数分子是“被判成正类的真正例个数”,除以 |P| 得到这一档阈值下的抓违禁品成功率。
    ∑i∈P1 [si≥t]∣P∣\frac{\sum_{i \in \mathcal{P}} \mathbf{1}\,[s_i \ge t]}{|\mathcal{P}|}
  3. 负类同理得到 FPR同样逻辑放到负类上,得到被冤枉的好人比例,也就是横轴坐标。
    FPR(t)=∑i∈N1 [si≥t]∣N∣\mathrm{FPR}(t) = \frac{\sum_{i \in \mathcal{N}} \mathbf{1}\,[s_i \ge t]}{|\mathcal{N}|}
  4. t 从大到小扫描阈值从最紧滑到最松,每个 t 产生一个点,把这些点依次连接,曲线就“长”出来了。
    t:1→0,曲线点=(FPR(t),TPR(t))t: 1 \to 0, \quad \text{曲线点} = (\mathrm{FPR}(t), \mathrm{TPR}(t))

AUC指标含义

一张曲线图很难用来横向比较两个安检系统,于是人们把曲线下的面积抽出来变成一个数,这就是 AUC(Area Under the ROC Curve,ROC 曲线下面积)。AUC 的取值范围是 0 到 1:0.5 表示曲线贴着对角线,相当于“抛硬币”;越接近 1,说明曲线越往左上角拱,模型越强。

AUC 还有一个非常直白的概率解释:随机抽一个真正例、一个真负例,AUC 就是模型给真正例的风险分高于真负例的概率。想象你把一个带违禁品的人和一个普通游客混在一起让系统打分,系统把危险分子排在前面,这件事发生的概率就是 AUC。0.9 的 AUC 意味着 90% 的情况下系统能认出“哪个更危险”,但注意——这不代表 90% 的样本都判对了。

要注意 AUC 对类别不平衡“不太敏感”。即使违禁品旅客只占万分之一,只要模型能把他们排在普通人前面,AUC 依然可以很高。这既是它的优点(方便横向比较),也是它的陷阱——在极端不平衡场景下,AUC 高并不代表业务能用,这时就要请出 PR 曲线。

AUC=∫01TPR  d(FPR)=P(s+>s−)\displaystyle \mathrm{AUC} = \int_0^1 \mathrm{TPR} \; d(\mathrm{FPR}) = P(s_+ > s_-)
AUC 既是曲线下的几何面积,也是一个排序概率:随机正例分数大于随机负例分数的概率。两者是同一件事的两副面孔。
  1. 对 FPR 积分把横轴切成无数薄片,每一片的 TPR 高度求和,得到的就是曲线下方的总面积。
    ∫01TPR  d(FPR)\int_0^1 \mathrm{TPR} \; d(\mathrm{FPR})
  2. 概率解释随机抽一对正负样本,正样本的预测分数 s₊ 高于负样本 s₋ 的概率,和 AUC 数值完全相等。
    P(s+>s−)P(s_+ > s_-)
  3. 0.5 的基线当模型只会随机排序时,正样本排在前面的概率恰好是一半,所以 AUC = 0.5 代表没有区分能力。
    AUC=0.5⇒随机猜测\mathrm{AUC} = 0.5 \Rightarrow \text{随机猜测}

PR曲线原理

如果说 ROC 是“大局观仪表盘”,PR 曲线就是“警报价值账本”。它不关心你冤枉了多少好人,只盯住一个尖锐的问题:每一次响铃,到底有多大比例真的抓到了货?这正是精确率(Precision)的含义。而纵轴呢,还是那个召回率(Recall)——所有违禁品里抓到了多少。PR 曲线把这两个指标画在一起,横轴召回率、纵轴精确率,曲线越往右上角凸,说明又抓得准又抓得全。

PR 曲线对类别极不平衡的场面极其敏感。假设一百万个旅客里只有一百个带违禁品,模型只要把阈值放得很松,就会产生海量误报,精确率立刻暴跌,PR 曲线整体下沉。同样的场景里 ROC 可能依然漂漂亮亮,因为 FPR 的分母是海量的负类,误报占比看起来微不足道。所以当正类是稀有事件时,PR 曲线才是那个会跟你说真话的账本。

顺便说一个直观结论:PR 曲线的右上角 (1,1) 是完美点——精确率和召回率同时拉满。现实模型很难做到,通常要在这两个指标之间交换:想多抓几个就降低精确率,想少误报就损失召回率。PR 曲线正是把这种交换过程完整摊开的记录。

Precision=TPR⋅πTPR⋅π+FPR⋅(1−π)\displaystyle \mathrm{Precision} = \frac{\mathrm{TPR} \cdot \pi}{\mathrm{TPR} \cdot \pi + \mathrm{FPR} \cdot (1-\pi)}
这是用 TPR、FPR 和正类比例 π 重写的精确率公式。它揭示了精确率如何同时被“抓违禁品的能力”和“数据里违禁品有多稀有”这两个因素拉扯。
  1. 正类先验 ππ 表示数据集中正类占比。违禁品越稀有,π 越小,分子也被压得越狠。
    π=P(y=1)\pi = P(y=1)
  2. 分子 TPR·π近似代表真正的正类里被抓住的部分,分母还要被负类误报稀释,所以精确率天然受正类稀有度影响。
    TPR⋅π\mathrm{TPR} \cdot \pi
  3. 负类误报项 FPR·(1-π)负类占比越大,哪怕 FPR 很小,乘出来的误报绝对数量也可能非常惊人,这就是 PR 曲线对不平衡敏感的根本原因。
    FPR⋅(1−π)\mathrm{FPR} \cdot (1-\pi)

AP平均精度

PR 曲线和 ROC 曲线一样,也是一整条轨迹。想把“警报价值账本”压成一个单值用于横向比较,就轮到 AP(Average Precision,平均精度) 登场。它的计算思路是:从阈值最紧到最松,把精确率按相邻两档召回率的间隔做加权平均。召回率上升得越快的地方,说明模型在排序头部就把正例找了出来,这一段的精确率权重也更大。

换个生活化的说法:安检团队最关心“前几次响铃准不准”。AP 就像给排名前几的警报更高的评分权重——如果危险品总是出现在警报列表的前排,AP 就高;如果每次都要翻到很后面才发现真货,AP 就低。相比之下,AUC 是“全局平均排序能力”,AP 则是“重点看头部表现”,两者互补,又互不替代。

AP 的数值区间的确也是 0 到 1,但它和 AUC 的“0.5 随机基线”完全不同:类别极不平衡时,随机模型的 AP 可能低到 0.01,而 AUC 仍是 0.5。所以当正类非常稀疏时,AP 的小数点后每一位都藏着信息,不能拿 AUC 的习惯去套。

AP=∑n=1N(Rn−Rn−1) Pn\displaystyle \mathrm{AP} = \sum_{n=1}^{N} (R_n - R_{n-1}) \, P_n
其中 R 是召回率,P 是精确率,n 表示按阈值从高到低排列的序号。把“召回率上升幅度”当作权重去给精确率加权平均,就得到 AP。
  1. 召回率增量相邻两档召回率之差代表“这一小段里多抓了多少正例”,把它当作这段区间的权重。
    Rn−Rn−1R_n - R_{n-1}
  2. 乘以该段精确率在召回率爬升的这段区间内,精确率越高,说明此时抓到的货越纯,权重后数值就越大。
    PnP_n
  3. 对所有段求和从召回率 0 累加到 1,把整条 PR 曲线下的面积近似算出来,得到 0 到 1 之间的 AP 值。
    ∑n=1N(Rn−Rn−1) Pn\sum_{n=1}^{N} (R_n - R_{n-1})\,P_n

阈值选择策略

曲线看完了,总分也打了,最后一步是回到现实:安检门的灵敏度旋钮到底拧到哪一档?很多初学者默认阈值 0.5,但这通常不是最优解。阈值的本质是把“模型分数”翻译成“业务动作”的那条分界线——调高一点,漏掉危险品的代价上升;调低一点,误伤旅客的代价上升。两边代价不一样时,0.5 就成了一个毫无根据的默认值。

一个经典的无成本选择法是 约登指数(Youden's J):找到让 TPR 和 FPR 之差最大的那个阈值点,也就是 ROC 曲线上离左上角最近的位置。它不依赖业务成本,是一种快速参考。更正规的做法是显式写出误报和漏报的代价矩阵:把“抓到一个违禁品省下的损失”和“冤枉一个旅客付出的赔偿”都量化,然后找一个让总期望成本最小的阈值。如果正类先验比例变化,比如节假日旅客构成变了,阈值也要跟着调整。

业务成本权衡往往比纯数学更复杂:医疗筛查宁可多误报也不愿漏诊,所以阈值要往低调;垃圾邮件拦截宁可漏几封垃圾邮件也不愿吞掉重要信件,所以阈值要往高调。选择阈值的本质不是找“模型最好的点”,而是找“你的业务最划算的点”。

t∗=arg⁡max⁡t  [ TPR(t)−FPR(t) ]\displaystyle t^{*} = \arg\max_{t} \; \big[\,\mathrm{TPR}(t) - \mathrm{FPR}(t)\,\big]
这就是约登指数的数学表达:在 ROC 曲线上遍历所有阈值,找到 TPR 减 FPR 最大的那一档。它是无成本假设下的“默认最优档”。
  1. 括号内的差TPR 减 FPR 表示“多抓违禁品带来的收益”减去“误伤好人付出的代价”,两者相减得到净收益。
    TPR(t)−FPR(t)\mathrm{TPR}(t) - \mathrm{FPR}(t)
  2. 对 t 取最大值把所有阈值 t 都代入上式,净收益最大时对应的 t 就是约登指数推荐的最优点。
    arg⁡max⁡t\arg\max_{t}
  3. 引入成本后的变体如果两类错误代价不同,把 FPR 乘上成本系数 c,公式就变成最小化期望代价:c·FPR−(TPR)。
    min⁡t  [ c⋅FPR(t)−TPR(t) ]\min_{t}\; \big[\,c \cdot \mathrm{FPR}(t) - \mathrm{TPR}(t)\,\big]

ROC与PR选择

最后,把两块仪表盘放进同一个驾驶舱,明确什么时候看哪一块。数据类别大致平衡,或者你想评估模型整体的排序能力、不受业务成本干扰地横向比较不同模型,ROC 曲线是第一选择。它稳定、直观、被论文普遍接受,AUC 高达 0.9 也容易向非技术同事解释。正类非常稀少、或者误报代价极高、或者业务只关心“警报响起来时准不准”,PR 曲线才是主仪表盘。

为什么会有这个分工?本质上是因为两者对类别不平衡的“免疫程度”不同。ROC 的横纵轴各自用自己的类内总数做分母,负类规模暴涨时 FPR 的数值不一定会剧烈变化;而 PR 曲线的精确率分母是 TP+FP,FP 随着负类规模上涨而飙升,曲线立刻给出诚实的下坠。用公式说:随机猜测在 ROC 上的基线永远是那条对角线,但随机猜测在 PR 上的基线精确率却等于正类比例——稀有事件让基线本身变得极低。

所以结论可以收成一句口诀:先用 ROC 做体检看整体能力,再用 PR 做验收看业务价值。在模型评审会上,先亮 AUC 证明排序能力,再亮 AP 和固定阈值下的精确率/召回率证明业务可用,两部分缺一不可。

Prandom=π\displaystyle P_{\mathrm{random}} = \pi
随机猜测的精确率就是正类占比 π。正类只有 1% 时,随机模型精确率只有 0.01,PR 曲线必然趴在底部;而 ROC 的随机基线仍是那条对角线。
  1. 随机猜测的定义完全随机地把样本判成正类时,精确率恰好等于正类占比,所以基线随 π 浮动。
    PrandomP_{\mathrm{random}}
  2. 正类比例 ππ 越小,PR 曲线的随机基线越低,曲线越容易被看清真实水平;ROC 的对角线基线却始终不变。
    π=P(y=1)\pi = P(y=1)
  3. 选型启示负类剧增、正类不变的场景,ROC 依然稳定,PR 大幅波动;因此在正类稀有或误报成本高时,必须优先读 PR。
    负类↑⇒PR 下坠,ROC 平稳\text{负类} \uparrow \Rightarrow \text{PR 下坠,ROC 平稳}

AI 应用场景

金融反欺诈模型评估

阶段:模型评估与选择

解决的问题:信用卡交易中欺诈案例往往只占千分之一,用准确率评估会严重失真——把所有交易都判为正常也能拿到 99.9% 的准确率。AI 改用 PR 曲线和 AP 评估模型,聚焦“拦截警报中的准确命中率”,并用约登指数选出合适的拦截阈值。

具体案例:某支付平台风控团队每月以“精确率不低于 80% 时召回率最高”为验收标准,在 PR 曲线上找到对应阈值;上线后短信拦截误报率下降一半,客户投诉明显减少。

医疗影像辅助筛查

阶段:模型评估与选择

解决的问题:罕见病筛查中阳性病例极少,漏诊代价极高。医生需要模型先把最有风险的病例排在列表最前面,AP 指标能直接衡量“排序头部是否集中了真正的正例”,比只看 AUC 更贴近临床。

具体案例:某三甲医院肺结节筛查系统在验证集上 AUC 为 0.91,但 AP 只有 0.34;医生据此调整了模型阈值并加入先验特征,把高危结节在阅片列表上的前 20 名命中率提高了 3 倍。

搜索与推荐排序评估

阶段:模型评估与选择

解决的问题:搜索排序中用户点击的正例非常稀疏,且排在前面的结果才真正影响体验。AP 天然关注头部排序质量,和“用户只看前十条”的行为高度一致,适合作为排序模型的验收指标。

具体案例:某电商搜推团队用 AP 对比排序模型 A/B 实验,新版模型的 AP 提升 2.1%,同时前 5 位点击率提升 12%,顺利全量上线。

Python 演示

python37 行
import numpy as npfrom sklearn.datasets import make_classificationfrom sklearn.linear_model import LogisticRegressionfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import (roc_curve, precision_recall_curve,                             roc_auc_score, average_precision_score,                             precision_score, recall_score)  def find_best_threshold(fpr, tpr, thresholds):    youden = tpr - fpr    idx = int(np.argmax(youden))    return thresholds[idx], youden[idx]  X, y = make_classification(n_samples=10000, n_features=12,                           weights=[0.95], flip_y=0.02, random_state=42)X_train, X_test, y_train, y_test = train_test_split(    X, y, test_size=0.3, random_state=42) model = LogisticRegression(max_iter=500)model.fit(X_train, y_train)prob = model.predict_proba(X_test)[:, 1] fpr, tpr, thr = roc_curve(y_test, prob)precision, recall, _ = precision_recall_curve(y_test, prob)auc = roc_auc_score(y_test, prob)ap = average_precision_score(y_test, prob)print("ROC AUC : %.4f" % auc)print("PR AP   : %.4f" % ap)print("正类占比: %.4f" % y_test.mean()) best_thr, best_j = find_best_threshold(fpr, tpr, thr)pred = (prob >= best_thr).astype(int)print("最优阈值(约登指数): %.4f" % best_thr)print("精确率: %.4f" % precision_score(y_test, pred))print("召回率: %.4f" % recall_score(y_test, pred))
目的:在不平衡二分类数据上训练逻辑回归,计算 ROC-AUC、PR-AP,并用约登指数自动挑选最优阈值,一次性演示本文所有核心概念。
  1. weights=[0.95]构造正类仅占 5% 的不平衡数据,模拟“违禁品旅客极少”的真实场景。
  2. model.predict_proba(X_test)[:, 1]输出每个样本的正类概率,排序分数是画两条曲线的原材料。
  3. roc_curve(y_test, prob)返回所有阈值下的 FPR/TPR 坐标,直接画出 ROC 曲线。
  4. precision_recall_curve(y_test, prob)返回精确率与召回率坐标,用于绘制 PR 曲线。
  5. roc_auc_score` / `average_precision_score把两条曲线分别压缩成 AUC 和 AP 两个可比较的单值。
  6. find_best_threshold(fpr, tpr, thr)用约登指数在阈值列表中找净收益最大的档位。
  7. pred = (prob >= best_thr).astype(int)把连续概率按最优阈值切回二分类预测。

常见误区

误区我训练的模型 AUC 到了 0.92,肯定非常厉害,可以直接部署到业务里了。

正解AUC 衡量的是整体排序能力,不是具体某一档阈值下的业务表现。在极端不平衡数据上,模型可能把正例排得挺靠前,但当你把阈值设成业务可接受的水平时,精确率低得没法用,就像安检仪排名很准但一响铃就误报。AUC 高只是“体检合格”,能不能上岗还要看 PR 曲线和固定阈值下的精确率、召回率。

为何常见:AUC 是一个 0 到 1 的漂亮数字,人们本能地把高分等同于好用,忽略了它只回答“排序”而不回答“业务动作”。

误区反正都是评估分类模型的曲线,选一个喜欢的看就行,PR 和 ROC 差不多。

正解两者对类别不平衡的敏感度完全不同。ROC 的横纵轴分别用各自类别的总数做分母,负类暴涨时曲线基本不动;PR 的精确率分母是 TP+FP,负类一多精确率立刻下坠。在正类稀有的风控、医疗场景,只看 ROC 会把模型“看胖了”,必须用 PR 曲线来校核。

为何常见:两条曲线都是“阈值扫描画出的轨迹”,形态相似,容易让初学者以为它们只是坐标系不同而已。

误区模型输出的分数本来就是 0 到 1,那大于 0.5 判正类、小于 0.5 判负类,这不是天经地义的吗?

正解0.5 只是概率尺度上的中点,和业务最优毫无关系。漏掉一个违禁品可能造成巨大损失,误伤一个旅客只需赔礼道歉,两个代价不对等时阈值就该偏离 0.5。更合理的做法是用约登指数先找一个无成本参照点,再把漏报/误报的代价矩阵代入,找最小期望成本的那一档。

为何常见:概率值天然以 0.5 为对称中心,直觉上觉得“超过一半就判正”很自然,但业务成本从不讲究对称。

误区AP 0.85 和 AUC 0.85 都是 0.85,数值大小差不多,含义也差不多。

正解AUC 是全局排序概率,对每一对正负样本一视同仁;AP 则给排序头部更高的权重,更关心“前几条警报里到底有没有真货”。两个 0.85 可能来自完全不同的模型性格:一个可能尾部乏力,一个可能头部不精。选指标要看业务关心哪种错误。

为何常见:看到两个数值都在 0 到 1 之间,就误以为它们度量的是同一个东西,忽略了加权方式的天壤之别。

面试题

Q1. ROC 曲线中,对角线代表什么?

单选题 · easy

  • A.完美模型
  • B.随机猜测← 正确答案
  • C.过拟合信号
  • D.欠拟合信号

答案:B。对角线满足 TPR = FPR,说明模型在任何阈值下抓到违禁品的比例都和冤枉好人的比例相同,等价于抛硬币随机判断。如果曲线明显在对角线下方,则说明模型方向反了;完美模型贴着左上角走,而不是对角线。

Q2. 精确率的计算公式是哪个?

单选题 · easy

  • A.TP / (TP + FP)← 正确答案
  • B.TP / (TP + FN)
  • C.TN / (TN + FP)
  • D.FP / (FP + TN)

答案:A。精确率回答“警报响起来时有多准”,分母是所有被判成正类的样本(TP+FP)。TP/(TP+FN) 是召回率,TN/(TN+FP) 是特异度,FP/(FP+TN) 是假正例率。安检场景里,精确率就是每次响铃中真正抓到违禁品的比例。

Q3. 在正类比例由 50% 降到 5% 的数据上,曲线形状变化最小的是哪个?

单选题 · mid

  • A.ROC 曲线← 正确答案
  • B.PR 曲线
  • C.精确率曲线
  • D.召回率曲线

答案:A。ROC 曲线的坐标各自以真实正类总数和真实负类总数为分母,负类暴涨时 FPR 的数值相对稳定,所以曲线整体变化较小。PR 曲线的精确率分母含 TP+FP,负类一多 FP 剧增,曲线立刻下坠。因此极端不平衡时 PR 更能暴露问题。

Q4. AUC = 0.5 表示模型处于什么状态?

单选题 · mid

  • A.完美区分正负类
  • B.只有随机区分能力← 正确答案
  • C.完全反向区分
  • D.模型严重过拟合

答案:B。AUC 是随机正例排在随机负例前面的概率,0.5 意味着这个概率只有一半,跟抛硬币一样。如果 AUC 明显小于 0.5,说明预测方向反了,把风险分取反就可能恢复可用;而过拟合与否需要用训练集和测试集的 AUC 差距来判断,与单值 0.5 无关。

Q5. 约登指数选择阈值时优化的目标是?

单选题 · mid

  • A.最大化 TPR−FPR← 正确答案
  • B.最小化 FPR
  • C.最大化 TPR
  • D.保持 TPR=FPR

答案:A。约登指数 J = TPR − FPR,本质是让“多抓违禁品的收益”减去“误伤好人的代价”最大。它不依赖业务成本,是一种快速参考。只最大 TPR 会牺牲精确率,只最小 FPR 会放走大量正类,两者都不是无成本假设下的最优。

Q6. AP 指标重点关注的是哪种能力?

单选题 · mid

  • A.列表头部正例的排序质量← 正确答案
  • B.全体样本的准确率
  • C.负例识别的完整度
  • D.损失函数的收敛速度

答案:A。AP 在计算时用召回率增量作为权重,召回率在排序头部快速上升时精确率权重更高,因此它对“前几条警报是否命中正例”极度敏感。这与搜索、推荐、筛查类业务“用户只看前面几条”的行为高度一致,而全体准确率或收敛速度与排序能力无关。

Q7. 正类占比从 50% 降到 5% 时,下面哪个指标受影响最大?

单选题 · mid

  • A.ROC 曲线下面积
  • B.PR 曲线下面积← 正确答案
  • C.约登指数最优值
  • D.特征重要性排序

答案:B。PR 曲线的精确率对负类数量极其敏感,正类占比缩小后,随机基线精确率从 0.5 跌到 0.05,曲线整体下移,PR-AUC 明显缩水。ROC-AUC 的随机基线恒为 0.5,数值变化小得多。约登指数和特征重要性不受类别比例直接支配。

Q8. 关于 ROC 曲线的说法,正确的有哪些?

多选题 · mid

  • A.对角线代表随机猜测← 正确答案
  • B.横轴是假正例率← 正确答案
  • C.左上角优于右下角← 正确答案
  • D.纵轴是准确率

答案:ABC。ROC 曲线横轴是 FPR,纵轴是 TPR,对角线代表随机猜测;曲线越靠左上角,说明同样误报率下抓到正例的比例越高,所以左上优于右下。D 错在纵轴是真正例率 TPR,不是准确率,准确率在类别不平衡时会严重失真。

Q9. 类别高度不平衡时,仅看 ROC-AUC 容易高估模型价值,合理的补充评估手段有哪些?

多选题 · hard

  • A.PR 曲线与 AP 指标← 正确答案
  • B.固定阈值下的精确率和召回率← 正确答案
  • C.在查准率受限时观察最大召回率← 正确答案
  • D.只用训练集上的损失值

答案:ABC。PR 曲线、AP、固定阈值下的精确率/召回率都能揭示“警报命中率”这种业务关键信息,避免被全局排序指标掩盖。训练集损失值只能反映拟合程度,不等于泛化评估,更不能替代业务导向的指标。这也是风控和医疗场景强调 PR 的原因。

Q10. 选择最优分类阈值时,需要考虑哪些因素?

多选题 · mid

  • A.业务上漏报的代价← 正确答案
  • B.正类的先验比例← 正确答案
  • C.约登指数最大点← 正确答案
  • D.固定 0.5 的概率阈值

答案:ABC。约登指数提供无成本假设下的参考最优值,业务漏报/误报代价矩阵决定期望成本最低的档位,正类先验比例变化时阈值也要跟着调整。固定 0.5 只是默认值,没有任何业务依据。阈值选择的本质是让“错误代价”而不是“概率中点”说了算。