假设你是机场海关的安检员小李。你的 X 光机每扫过一个旅客,都会打出一个“可疑分”(0~100 分),分数越高越像走私客。可分数本身不会说话——你得自己定一道“报警线”:超过这条线就拦下来开箱。线定得太高,走私客大摇大摆溜走;线定得太低,排队开箱的普通旅客怨声载道。同一台机器,线划在哪里,表现天差地别。于是你画了一张图:把报警线从最高一路降到最低,每换一个位置就记下一个“抓对率”和“冤枉率”,连成一条曲线——这就是 ROC 曲线。而曲线下方的面积 AUC,就是这台机器“不靠你调线、只看内在本领”的总评分。这篇文章,就带你把这条曲线和这个面积彻底看懂:它怎么画、几何上是什么、概率上是什么、什么时候会骗人、选模型时到底该怎么用。

岗位关联

一句话价值:模型评估是 AI 工程的“体检报告”,看得懂 ROC 与 AUC,你才能在模型选型、答辩汇报和上线决策中不被单个漂亮数字牵着走,做出经得起推敲的评估结论。

目录
  1. 可视化演示
  2. 阈值与混淆矩阵
  3. ROC曲线绘制
  4. AUC几何含义
  5. AUC概率含义
  6. 类别不平衡局限
  7. 高分即好误区
  8. 实践评估建议
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

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

阈值与混淆矩阵

小李第一天值班,把报警线定在 90 分。一天下来,旅客被分成四堆:被拦下且真搜出违禁品的(这是“抓对了”)、被拦下但只是背了个大充电宝的(“冤枉了”)、没被拦但后来在别处查出问题的(“漏网了”)、以及顺利通关的绝大多数(“放对了”)。这四堆人,就是机器学习里赫赫有名的“混淆矩阵”。

把“抓对了”记作 TP(真正例)、“冤枉了”记作 FP(假正例)、“漏网了”记作 FN(假反例)、“放对了”记作 TN(真反例)。光看一个数没用,小李真正关心两个率:所有走私客里抓到了多少,叫 TPR(真正例率,也叫召回率);所有普通旅客里冤枉了多少,叫 FPR(假正例率,也叫误报率)。一个管“敌人别漏”,一个管“好人别冤”。

现在小李明白了:单看“今天抓了几个”毫无意义,要看两个率的组合——抓得多不多(TPR),冤得少不少(FPR)。可难题立刻来了:报警线一挪,两个率就像跷跷板一样此起彼伏。想看清整台机器的真实脾气,就得把所有的“线位”都试一遍,这正是 ROC 曲线要做的事。

TPR=TPTP+FN,FPR=FPFP+TN\displaystyle TPR = \frac{TP}{TP + FN}, \qquad FPR = \frac{FP}{FP + TN}
这两个率是 ROC 曲线的原料:TPR 是“落网率”,FPR 是“冤枉率”,一个想越高越好,一个想越低越好。
  1. 分子 TP被正确拦住的正样本数。
    TP\displaystyle TP
  2. 分母 TP + FN所有真实为真的样本总数,不管抓到没有。
    TP+FN\displaystyle TP + FN
  3. TPR 的意义正样本中被找出来的比例,就是走私客的落网率,与召回率是同一个量。
    TPR=TPTP+FN\displaystyle TPR = \frac{TP}{TP + FN}
  4. FPR 的意义负样本中被误拦的比例,就是普通旅客的被冤率,也叫误报率。
    FPR=FPFP+TN\displaystyle FPR = \frac{FP}{FP + TN}

ROC曲线绘制

小李把报警线从 100 分一档一档往下降,每降一档,就记下一个点:横坐标是当时的冤枉率 FPR,纵坐标是当时的落网率 TPR。线位最高时谁都不拦,落在左下角 (0,0);线位最低时见谁拦谁,落在右上角 (1,1)。把所有点连成一条线,就是 ROC 曲线。

横轴是冤枉率,纵轴是落网率,这条曲线回答了小李最关心的问题:为了多抓一个走私客,愿意多冤枉几个旅客?一台理想的机器,曲线会尽量向左上角拱——在冤枉率还很小时,落网率已经很高。如果机器是随机乱猜,曲线就贴着对角线走,抓对和冤枉完全成正比。

曲线越往左上角拱,说明存在某个“线位”能同时做到抓得多、冤得少。可光看形状还是不够直观——小李需要一把尺子,把这个“拱得多高、拱得多满”量化成一个数字,好让领导一眼看懂。这把尺子,就是 AUC。

ROC={(FPR(t),  TPR(t))∣t∈R}\displaystyle ROC = \{ (FPR(t),\; TPR(t)) \mid t \in \mathbb{R} \}
ROC 曲线本质是“阈值从高到低扫过时,所有 (冤枉率,落网率) 点的集合”,它是模型排序能力的完整画像。
  1. 阈值 t报警线的位置,从最高分一路扫到最低分。
    t∈R\displaystyle t \in \mathbb{R}
  2. FPR(t)阈值取 t 时对应的冤枉率。
    FPR(t)=FP(t)FP(t)+TN(t)\displaystyle FPR(t) = \frac{FP(t)}{FP(t) + TN(t)}
  3. TPR(t)阈值取 t 时对应的落网率。
    TPR(t)=TP(t)TP(t)+FN(t)\displaystyle TPR(t) = \frac{TP(t)}{TP(t) + FN(t)}
  4. 点集每个阈值产生一个点,全部点连成曲线。
    (FPR(t),  TPR(t))\displaystyle (FPR(t),\; TPR(t))

AUC几何含义

AUC 的全称是 Area Under the ROC Curve,即 ROC 曲线下方的面积。小李盯着曲线想:如果机器是随机乱猜,曲线贴着对角线,下方面积正好是半个方格(0.5);如果机器完美无缺,曲线会从 (0,0) 直冲左上角 (0,1) 再横着走到 (1,1),围出的面积是整整一格(1.0)。面积越大,说明曲线越拱、机器本领越强。

几何上有时候 AUC 也被解读为“把正负样本分开的程度”。业界大致有这样一个经验刻度:0.5 是随机,0.5~0.7 较弱,0.7~0.9 较好,0.9 以上相当优秀,逼近 1.0 则要警惕——现实中几乎不可能完美,太完美往往是过拟合或数据泄漏的信号。

不过小李很快发现,“面积”只是表象。AUC 真正的含义,藏在一个更直观的问题里:随便拉一对旅客——一个走私客加一个普通旅客——这台机器能不能把走私客排在前面?这个视角,把 AUC 从几何带向了概率。

AUC=∫01TPR  d(FPR)\displaystyle AUC = \int_{0}^{1} TPR \; d(FPR)
积分就是“极薄的竖条面积之和”:把横轴切成无数小段,每段取曲线高度,全部加起来,便得到曲线下方的总面积。
  1. 横轴微分 d(FPR)把冤枉率轴切成无数小段,每段宽度趋近于零。
    d(FPR)\displaystyle d(FPR)
  2. 对应高度 TPR取该小段上曲线的高度,即当时的落网率。
    TPR\displaystyle TPR
  3. 累加面积所有“宽 × 高”的小矩形求和,正是定积分。
    ∫01TPR  d(FPR)\displaystyle \int_{0}^{1} TPR \; d(FPR)

AUC概率含义

小李做了个小实验:把当天所有旅客按可疑分从高到低排成一队,然后闭眼随机摸一对——一个走私客加一个普通旅客。数一数有多少次走私客恰好排在前面。这个比例,居然和 AUC 数值完全相等。原来 AUC 根本不是“面积”那么抽象,它就是一个朴实无华的概率:随机配对时,正样本分数高于负样本的概率。

这个视角揭示了 AUC 的本质:它只关心排序,不关心分数绝对值。无论你把所有分数整体加 10 分还是缩小一半,排序不变,AUC 也不变。因此 AUC 天然与阈值无关——设置报警线的操作发生在 ROC 曲线上,而 AUC 是整条曲线的汇总,不受任何单个线位影响。这也是为什么 AUC 常与 Mann-Whitney U 统计量挂钩:它本质上是把每个正样本与每个负样本逐对比较后,统计“正样本更靠前”的占比。

从概率视角看,AUC 就是机器的“先天排名天赋”——与线位无关,只看能不能把坏人排在好人前面。但小李很快发现了新问题:如果队伍里只有一个走私客、却有九千多个普通旅客,这个“天赋分”会不会被淹没在茫茫人海里?

AUC=1n+n−∑i=1n+∑j=1n−I(si+>sj−)\displaystyle AUC = \frac{1}{n^{+} n^{-}} \sum_{i=1}^{n^{+}} \sum_{j=1}^{n^{-}} \mathbb{I}\bigl( s_{i}^{+} > s_{j}^{-} \bigr)
公式用两重循环实现了“逐对比较”:走私客数 × 普通旅客数的所有配对里,统计走私客分数更高的那部分占多大比例。
  1. 正样本与其分数第 i 个走私客的可疑分。
    si+,i=1,…,n+\displaystyle s_{i}^{+}, \quad i = 1, \dots, n^{+}
  2. 负样本与其分数第 j 个普通旅客的可疑分。
    sj−,j=1,…,n−\displaystyle s_{j}^{-}, \quad j = 1, \dots, n^{-}
  3. 指示函数条件成立记 1、不成立记 0。
    I(si+>sj−)\displaystyle \mathbb{I}\bigl( s_{i}^{+} > s_{j}^{-} \bigr)
  4. 归一化分母总配对数,把计数化成 0~1 的概率。
    1n+n−∑i=1n+∑j=1n−\displaystyle \frac{1}{n^{+} n^{-}} \sum_{i=1}^{n^{+}} \sum_{j=1}^{n^{-}}

类别不平衡局限

某天机场人流暴增,旅客 9999 人,其中藏着 1 个走私客。AUC 算出来 0.95,看起来很美。可小李仔细一瞧:即使机器把几十个普通旅客都冤枉了,FPR 的分母是“几十加近万个 TN”,算出来依然是个小得可怜的数字,曲线几乎贴着左上角——“群众演员”把真实问题稀释了。

当正样本极其稀少时,ROC 曲线对“误伤”极不敏感,因为 FP 被庞大的 TN 冲淡。这时应该换一把更灵敏的尺子:PR 曲线(精确率-召回率曲线)。它把注意力集中在“抓出来的人里面有几个是真货”上,正样本少时,漏抓一个或误伤一个,曲线都会立刻低头。

小李恍然大悟:尺子要对着问题选。像“大海捞针”一样的活,PR 曲线比 ROC 更能照出机器的真实成色。反过来说,这也提醒他——任何指标都有适用边界,AUC 这个“总评分”也远没有看上去那么万能。

Precision=TPTP+FP,Recall=TPTP+FN=TPR\displaystyle Precision = \frac{TP}{TP + FP}, \qquad Recall = \frac{TP}{TP + FN} = TPR
精确率是“拦住的人里真走私客占多少”,召回率就是 TPR;两者构成的 PR 曲线在类别不平衡时比 ROC 更诚实。
  1. Precision 精确率拦住的人里真正是走私客的比例,对误伤极其敏感。
    TPTP+FP\displaystyle \frac{TP}{TP + FP}
  2. Recall 召回率就是 TPR,走私客落网率,漏抓一个都会让曲线明显下降。
    TPTP+FN\displaystyle \frac{TP}{TP + FN}
  3. PR-AUC 参考价值PR 曲线下面积,稀有正样本场景的首选指标。
    PR-AUC=∫01Precision  d(Recall)\displaystyle PR\text{-}AUC = \int_{0}^{1} Precision \; d(Recall)

高分即好误区

小李看中两台机器,A 机 AUC=0.98,B 机 AUC=0.93,他差点直接下单。幸好老同事拦住他:看一下低误报段!保安部的要求是“每拦 100 个人最多冤枉 2 个”,在这个线位下,A 机的走私客落网率只有 30%,而看似总分更低的 B 机却有 70%。AUC 是一个全局平均,它不会告诉你“某个具体线位好不好”。

业务永远只会在曲线的某一个局部工作。全局面积高,可能是中间段特别优秀把尾部短板“平均”掉了;反之,某个局部表现极差,也可能被大片良好区域掩盖。更隐蔽的是,AUC 高绝不代表分数是校准过的概率——打 0.8 分的旅客,未必真有 80% 的概率是走私客。AUC 只回答“排序对不对”,不回答“分数可不可信”。

这也解释了为什么“数字越漂亮越要警惕”:AUC 是体检报告的总体印象分,具体到你要上的那条生产线,必须翻出局部片子细看。小李把 A 机划掉,心里记下第一条教训——永远先问“我的业务到底工作在曲线的哪一段”。

AUC[a,b]=∫abTPR  d(FPR),AUC[a,b]≪AUC\displaystyle AUC_{[a,b]} = \int_{a}^{b} TPR \; d(FPR), \qquad AUC_{[a,b]} \ll AUC
业务通常只关心 FPR 落在某个小区间 [a,b] 内的表现,该局部的曲线下面积可能远小于全局 AUC,这就是“平均掩盖短板”。
  1. 局部区间 [a, b]业务实际允许的误报范围。
    [a,b]\displaystyle [a, b]
  2. 局部面积只统计该区间内的曲线下面积,反映这段的真实本领。
    ∫abTPR  d(FPR)\displaystyle \int_{a}^{b} TPR \; d(FPR)
  3. 全局与局部背离局部面积可能远小于全局 AUC。
    AUC[a,b]≪AUC\displaystyle AUC_{[a,b]} \ll AUC

实践评估建议

老同事递给小李一份“买机指南”:别拿一个数拍板。先做 K 折交叉验证,把数据随机性带来的运气挤干,得到 AUC 的均值与方差;再配合 PR-AUC、校准曲线和业务成本表一起看。评估的本质,是在特定业务约束下回答“这台机器到底能不能用”。

任务不同,主指标就不同:纯排序任务(推荐、检索)关注 AUC,因为只需要相对顺序;检测任务(风控、医疗筛查)关注 PR-AUC 与局部 ROC;需要输出概率的任务还要额外检查校准误差。最后,报警线千万别默认 0.5——应该选在“误报代价 + 漏网代价”总和最小的位置,并在上线后持续监控数据漂移,定期重绘曲线。

小李最后拍板:AUC 只是进门时的初筛分,真正决定买哪台机器的,是把业务成本、局部曲线、数据分布和验证方差放在一起的综合考量。工具没有好坏,只有用对地方——这正是评估工作的全部艺术。

θ∗=arg⁡min⁡θ  (cFP×FPR(θ)+cFN×(1−TPR(θ)))\displaystyle \theta^{\ast} = \arg\min_{\theta} \; \Bigl( c_{FP} \times FPR(\theta) + c_{FN} \times \bigl( 1 - TPR(\theta) \bigr) \Bigr)
最优报警线不是 0.5,而是在“冤枉一个普通旅客的代价 × 冤枉率 + 放走一个走私客的代价 × 漏网率”之和最小的那个点。
  1. 误报代价冤枉一个普通旅客的代价,包括人力、投诉与口碑损失。
    cFP×FPR(θ)\displaystyle c_{FP} \times FPR(\theta)
  2. 漏网代价放走一个走私客的代价,通常是真实业务损失,往往远大于误报代价。
    cFN×(1−TPR(θ))\displaystyle c_{FN} \times \bigl( 1 - TPR(\theta) \bigr)
  3. 最小化总代价遍历所有阈值,寻找总代价最小的线位。
    arg⁡min⁡θ\displaystyle \arg\min_{\theta}
  4. 持续监控数据漂移会让 AUC 与最优阈值逐渐失效,需定期重算。
    重算周期=上线后的定期复查\displaystyle \text{重算周期} = \text{上线后的定期复查}

AI 应用场景

信贷风控模型选型

阶段:模型评估与上线

解决的问题:银行坏客户占比常低于 2%,传统“只看准确率”会被“永远说好”的模型骗过。用 AUC 评估模型对好坏客户的整体排序能力,同时用 PR-AUC 观察稀有坏客户的识别效果,避免被不平衡数据误导。

具体案例:某消费贷平台在 A/B 测试中对比两个评分卡,AUC 同为 0.85,但 A 卡在高风险人群段的召回率达到 0.9,B 卡只有 0.6。结合局部 ROC 曲线选定 A 卡,并将报警线设在业务成本最小处,上线后坏账率下降 13%。

医疗影像罕见病筛查

阶段:模型评估与阈值选择

解决的问题:肺结节等罕见病在筛查数据集中阳性率可能只有千分之一,ROC-AUC 会被巨大的阴性样本稀释,显得过于乐观。PR 曲线更能反映“筛出来的阳性里有几个是真阳性”,并指导初筛与复核流程的配置。

具体案例:某医院影像 AI 在 0.1% 阳性率的数据集上报告 ROC-AUC=0.97,但 PR-AUC 仅为 0.32。工程师据此调整策略:用低阈值保住召回率,再安排医生对 AI 标记的疑似病例做二次复核,将误报率压到科室可承受范围。

Python 演示

python49 行
import numpy as np  def roc_points(scores, labels, step=0.01):    # 遍历阈值, 生成 (FPR, TPR) 点列, 用于画 ROC 曲线    roc = []    for t in np.linspace(1.0, 0.0, 101):        pred = scores >= t        tp = np.sum((pred == 1) & (labels == 1))        fn = np.sum((pred == 0) & (labels == 1))        fp = np.sum((pred == 1) & (labels == 0))        tn = np.sum((pred == 0) & (labels == 0))        tpr = tp / (tp + fn) if (tp + fn) > 0 else 0.0        fpr = fp / (fp + tn) if (fp + tn) > 0 else 0.0        roc.append((fpr, tpr))    return roc  def auc_pairwise(scores, labels):    # 用概率含义直接算 AUC: 正样本排在负样本前面的比例    pos = scores[labels == 1]    neg = scores[labels == 0]    hits = 0    for p in pos:        hits += np.sum(p > neg)  # 平局不计入    return hits / (len(pos) * len(neg))  def main():    rng = np.random.default_rng(42)    n_pos, n_neg = 80, 120    # 走私客分数偏高, 普通旅客分数偏低, 分布略有重叠    pos_scores = rng.normal(0.7, 0.15, n_pos).clip(0, 1)    neg_scores = rng.normal(0.3, 0.15, n_neg).clip(0, 1)    scores = np.concatenate([pos_scores, neg_scores])    labels = np.concatenate([np.ones(n_pos), np.zeros(n_neg)])     roc = roc_points(scores, labels)    print("ROC 曲线点数:", len(roc))    print("起点(阈值最高):", tuple(round(v, 3) for v in roc[0]))    print("终点(阈值最低):", tuple(round(v, 3) for v in roc[-1]))    print("AUC(配对法) =", round(auc_pairwise(scores, labels), 4))     from sklearn.metrics import roc_auc_score    print("AUC(sklearn) =", round(roc_auc_score(labels, scores), 4))  if __name__ == "__main__":    main()
目的:自己动手实现“遍历阈值画 ROC 曲线”与“逐对比较算 AUC”,并用 sklearn 官方结果交叉验证,彻底打通公式与代码的对应关系。
  1. for t in np.linspace(1.0, 0.0, 101):把报警线从最高分 1.0 一步步降到 0,模拟安检员小李调线的全过程。
  2. pred = scores >= t分数线达到 t 的旅客全部拦下,这就是阈值分类。
  3. tpr = tp / (tp + fn) if (tp + fn) > 0 else 0.0落网率 TPR,注意保护分母不为零。
  4. fpr = fp / (fp + tn) if (fp + tn) > 0 else 0.0冤枉率 FPR,与 TPR 一起构成 ROC 上的一个点。
  5. hits += np.sum(p > neg)逐对比较:这个走私客的分压过了多少个普通旅客。
  6. return hits / (len(pos) * len(neg))除以总配对数,得到概率含义的 AUC。
  7. pos_scores = rng.normal(0.7, 0.15, n_pos).clip(0, 1)生成走私客的分数分布,均值显著高于普通旅客。
  8. roc_auc_score(labels, scores)sklearn 官方实现,用于验证手写算法是否正确。

常见误区

误区我的模型 AUC=0.9,上线后准确率应该也接近 90% 吧?报告里写上“准确率 90%”领导肯定满意。

正解AUC 是“随机一对正负样本,正样本排在前面的概率”,准确率是“全部样本里预测对的比例”,两者数学定义完全不同,数值也没有固定换算关系。准确率还强烈依赖阈值和正负样本比例,AUC 却与二者无关。用体育来类比:AUC 像运动员的“体能测试总分”,准确率像“这场具体比赛的排名”,总分高不代表每场比赛都赢。

为何常见:两个指标都在 0~1 之间,又都“越大越好”,初学者很容易把它们的语义混为一谈。

误区A 模型 AUC=0.98,B 模型 AUC=0.93,不用看别的,直接选 A。

正解AUC 是全局平均,可能掩盖局部短板。业务通常只工作在误报率极低的某一小段曲线上,那段的表现才真正决定模型可用性。此外还要考虑业务成本、概率校准和交叉验证方差。类比:总成绩第一的运动员,在你要参加的那个单项上可能连决赛都进不了。

为何常见:人类天生喜欢“一个数字定胜负”,AUC 因为名气大、范围固定,最容易成为那个被滥用的数字。

误区我在训练集上算出 AUC=0.99,说明模型已经完美,直接上线吧。

正解训练集上的 AUC 会因过拟合而虚高,真正的评估必须用验证集、测试集或交叉验证。让考生做自己出过的模拟卷,分数当然漂亮;模型“记住”了训练数据,在见过的数据上表现好不代表将来在新数据上也好。

为何常见:训练集数据随手可得、指标又漂亮,顺手一算就走完了“评估流程”的错觉很容易产生。

误区正样本只有 0.1%,但大家都说 AUC 不受阈值影响、最公平,所以只看 ROC-AUC 就够了。

正解不平衡场景下,FP 被巨大的 TN 稀释,ROC 曲线显得异常乐观,似乎“误伤再多也无关痛痒”。实际上误伤一个稀有正样本可能代价极高,这时 PR 曲线(或 PR-AUC)对正样本的变化更敏感,更能反映真实可用性。

为何常见:AUC 的“阈值无关性”被过度神话了,人们忽略了它在类别比例极端时会失真这一前提。

面试题

Q1. ROC 曲线的横纵坐标分别是什么?

单选题 · easy

  • A.横轴 TPR,纵轴 FPR
  • B.横轴 FPR,纵轴 TPR← 正确答案
  • C.横轴精确率,纵轴召回率
  • D.横轴阈值,纵轴准确率

答案:B。ROC 以 FPR(冤枉率)为横轴、TPR(落网率)为纵轴,刻画安检员小李调报警线时两个率的此消彼长。精确率-召回率是 PR 曲线的坐标,不是 ROC 的。

Q2. AUC 等于多少时说明模型接近随机猜测?

单选题 · easy

  • A.分类效果完美无缺
  • B.与随机猜测没有差别← 正确答案
  • C.分类结果完全反向
  • D.模型无法训练成功

答案:B。随机猜测的 ROC 曲线沿对角线从 (0,0) 到 (1,1),曲线下方面积正好是 0.5。AUC=0 才是完全反向,AUC=1 才是完美分类。

Q3. 模型预测为正样本、实际却是负样本的那类样本叫什么?

单选题 · easy

  • A.TP 真正例
  • B.FP 假正例← 正确答案
  • C.FN 假反例
  • D.TN 真反例

答案:B。预测为正(Positive)但实际为负(False),即假正例 FP,对应安检故事里“被冤枉的普通旅客”。

Q4. TPR(真正例率)的另一个常用名称是?

单选题 · mid

  • A.精确率,也叫查准率
  • B.召回率,也叫查全率← 正确答案
  • C.特异度,也叫真负率
  • D.误报率,也叫假正率

答案:B。TPR = TP/(TP+FN),衡量正样本中被找出的比例,就是召回率(查全率);而 FPR 才是误报率。

Q5. AUC 最本质的概率含义是什么?

单选题 · mid

  • A.预测正确的样本占全部样本的比例
  • B.随机配对正样本分更高的概率← 正确答案
  • C.正样本在全体样本中的占比
  • D.阈值取 0.5 时模型召回率

答案:B。AUC = P(正样本分数 > 负样本分数),随机抓一对走私客和普通旅客,看机器能否把走私客排在前面,这是 AUC 最本质的解读。

Q6. 关于 AUC 与阈值的关系,下列说法正确的是?

单选题 · mid

  • A.和 0.5 这一个固定阈值强相关
  • B.遍历所有阈值,与单点阈值无关← 正确答案
  • C.只与最高阈值下的表现有关
  • D.只与最低阈值下的表现有关

答案:B。ROC 遍历所有可能的阈值,AUC 是整条曲线的汇总,因此与任何一个具体阈值都无关,它反映的是模型整体的排序能力。

Q7. 正样本占比极低(如 0.1%)的检测场景,补充看哪个指标更敏感?

单选题 · mid

  • A.全局 ROC-AUC 值
  • B.PR-AUC 与召回率← 正确答案
  • C.训练集上的损失值
  • D.特征重要性的排序

答案:B。不平衡时 FP 被庞大的 TN 稀释,ROC 显得过于乐观;PR 曲线聚焦正样本,误伤一个稀有正样本都会明显显现,因此更敏感。

Q8. 业务要求 FPR 必须控制在 2% 以内,选模型时最应该看什么?

单选题 · hard

  • A.全局 AUC 越大越好
  • B.看低误报区的局部 ROC← 正确答案
  • C.训练集损失越小越好
  • D.特征数量越少越好

答案:B。业务只工作在曲线的一小段上,全局 AUC 可能把低误报段的短板平均掉。应比较各模型在 FPR∈[0,0.02] 区间的局部 ROC 表现。

Q9. 关于混淆矩阵,下列说法正确的有?

多选题 · mid

  • A.TP 是预测正且实际正← 正确答案
  • B.FP 是预测正但实际负← 正确答案
  • C.FN 是预测负但实际正← 正确答案
  • D.TN 是预测负且实际负← 正确答案

答案:ABCD。TP/FP/FN/TN 对应安检故事里的抓对、冤枉、漏网、放对四种情况:预测与实际一致就是“真”,不一致就是“假”。

Q10. 哪些情况下只看 AUC 做决策可能被误导?

多选题 · extreme

  • A.正负样本严重失衡时← 正确答案
  • B.业务有硬性误报预算时← 正确答案
  • C.分数需要当概率用时← 正确答案
  • D.只排序无需概率时

答案:ABC。严重失衡时 ROC 被稀释,应加看 PR;有硬性误报预算时须看局部曲线;需要概率语义时须做校准。而纯排序任务恰好是 AUC 的强项,故 D 不在误导之列。