想象你是一名机场安检主管。每个旅客进门后,安检仪都会打出一个“危险分”,你决定一条及格线:超过这条线的旅客被拦下检查,低于这条线的直接放行。你很快发现,同一个模型配合不同的及格线,效果天差地别——线定得太严,你会拦下大量无辜乘客,引发投诉;线定得太松,则可能放跑真正的坏人。ROC曲线和PR曲线,就是帮你评估“这条线该怎么定、这个模型到底行不行”的两张图纸。它们的横纵坐标都来自安检记录本上的四个数字:拦对了几个坏人、误拦了几个好人、放走了几个坏人、放走了几个好人。学会了画这两条曲线,你就能在论文、汇报和实验中,用最直观的图表告诉所有人:我的模型在哪个档位上表现最佳。

岗位关联

对AI从业者来说,ROC/PR曲线是模型评估报告中最有说服力的可视化语言,学会后既能快速判断模型优劣,也能在业务汇报中精准展示结果,是每一名算法工程师和研究员都该掌握的基础技能。

目录
  1. 可视化演示
  2. 混淆矩阵四象
  3. 核心指标计算
  4. 阈值遍历原理
  5. PR曲线权衡
  6. AUC面积求解
  7. 代码实操
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示ROC与PR评估曲线的绘制原理:阈值遍历计算TPR/FPR与Precision/Recall,梯形法求AUC面积,可视化模型评估全过程。

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

ROC曲线绘制 遍历阈值计算TPR和FPR,离散点连线成ROC曲线 对角线为随机分类器基线,曲线越靠左上越好 TPR = TP/(TP+FN), FPR = FP/(FP+TN)

混淆矩阵四象

安检主管的工作台上摆着一本厚厚的记录本,每天清晨都要翻看前一晚的值班数据。这本记录本只有四类记录:拦住一个坏人,是抓到真凶;拦住一个好人,是误伤无辜;放走一个坏人,是重大事故;放走一个好人,则是正常放行。四类事件看似简单,但它们的数量组合起来,恰恰能完整刻画安检仪的性能。

机器学习的术语表给这四种情况起了专门的名字:真阳性(TP)、假阳性(FP)、假阴性(FN)和真阴性(TN)。这里的“阳性”可以理解成“被模型选中”——在安检场景里就是被拦下检查,“阴性”就是被放行。真实情况同样有两种:真是坏人(正例)或真是好人(负例)。把“真实情况”放在行上,“模型判断”放在列上,就得到一张2×2表格,这就是混淆矩阵。它是所有后续指标的源头。

M=[TPFPFNTN]\displaystyle M = \begin{bmatrix} \mathrm{TP} & \mathrm{FP} \\ \mathrm{FN} & \mathrm{TN} \end{bmatrix}

1. 行代表真实标签:第一行是真实为正(确实有问题的旅客),第二行是真实为负(没问题的旅客),两个数字加起来就是全部旅客总数。

真实=[10]\displaystyle \text{真实} = \begin{bmatrix} 1 \\ 0 \end{bmatrix}

2. 列代表预测标签:第一列表示模型判定为正(拦下),第二列表示模型判定为负(放行),每一列也都覆盖全部旅客。

预测=[10]\displaystyle \text{预测} = \begin{bmatrix} 1 & 0 \end{bmatrix}

3. 四格相加等于总数:TP、FP、FN、TN四个格子彼此互斥且覆盖所有情况,因此它们的和等于样本总数。

TP+FP+FN+TN=N\displaystyle \mathrm{TP}+\mathrm{FP}+\mathrm{FN}+\mathrm{TN}=N

从记录本回到机器学习:你训练完一个分类器后,第一件事就是把测试集上的预测结果整理成这种四格表。后续要算的TPR、FPR、精确率、召回率、AUC,全都从这四个数字中生长出来。所以机器学习领域常说,混淆矩阵是模型评估的第一块基石。

核心指标计算

有了记录本,安检主管要回答两个最关键的问题:坏人到底抓到了几成?好人又被误拦了几成?这两个问题的答案,就是ROC曲线的两个坐标轴。第一个叫真阳性率(TPR),也叫召回率,描述的是“所有坏人中被成功拦下的比例”;第二个叫假阳性率(FPR),描述的是“所有好人中被错误拦下的比例”。

在公式里,TPR计算被抓到的坏人占全部坏人的比例。全部坏人的数量等于“被抓到的坏人”加上“跑掉的坏人”,也就是TP加上FN。FPR类似,分母是全部好人数,分子是“被误拦的好人数”。如果TPR接近1,说明坏人几乎一网打尽;如果FPR接近0,说明好人极少被骚扰。理想安检仪当然是TPR越高越好、FPR越低越好。

TPR=TPTP+FN,FPR=FPFP+TN\displaystyle \mathrm{TPR}=\frac{\mathrm{TP}}{\mathrm{TP}+\mathrm{FN}}, \qquad \mathrm{FPR}=\frac{\mathrm{FP}}{\mathrm{FP}+\mathrm{TN}}

1. TPR的分子:TP代表被拦截且确实是坏人的旅客数量,分子越大,说明抓到的真凶越多。

TP\displaystyle \mathrm{TP}

2. TPR的分母:TP加FN是所有坏人的总数,因为坏人的下场无非两种——被拦住或者跑掉。

TP+FN\displaystyle \mathrm{TP}+\mathrm{FN}

3. FPR的构成:FP是误拦好人的数量,FP加TN是全部好人的数量,二者之比就是“误伤率”。

FPFP+TN\displaystyle \frac{\mathrm{FP}}{\mathrm{FP}+\mathrm{TN}}

回看安检台:TPR是“坏人抓获率”,FPR是“好人误伤率”。一个好的安检模型,应该在同一个阈值下同时拥有高TPR和低FPR。但现实往往是在这两个目标之间拉扯——抓得越多,误伤也越多。如何兼顾,就要看下一节的“阈值拧旋钮”了。

阈值遍历原理

安检仪上有一个灵敏度旋钮,旋转它会改变拦人标准。拧到最紧,几乎没有旅客能通过,TPR和FPR都趋近于0;拧到最松,所有人都被拦下,TPR和FPR都变成1。你真正关心的是中间那段:有没有某个档位,能在抓到大部分坏人的同时,把误伤控制得很低?为了找到答案,你可以把旋钮从最紧到最松逐格扫一遍,每扫一格记录一条TPR和FPR。

技术上的做法是:先拿到模型对每个样本的输出分数,把所有分数从高到低排序,然后让阈值θ从这个序列的高端滑向低端。对每个θ,判断规则很简单——分数不小于θ的样本判为正例,否则判为负例。每滑动一个位置,就得到一个新的混淆矩阵,进而算出一组(FPR,TPR)坐标。把这些坐标按顺序连成折线,这条线就是ROC曲线。

y^={1,s≥θ0,s<θ\displaystyle \hat{y} = \begin{cases} 1, & s \ge \theta \\ 0, & s < \theta \end{cases}

1. 模型输出分数 s:模型给每个样本的原始打分,分数越高代表模型越认为它是正例,通常取值在0到1之间。

s∈[0,1]\displaystyle s \in [0,1]

2. 阈值 θ:你人为设定的拦截线,可以取所有候选分数中的任意一个,它决定了哪些人会被拦下。

θ∈(0,1)\displaystyle \theta \in (0,1)

3. 决策结果:当分数不小于阈值时预测为正,否则预测为负;遍历全部阈值,就生成一整串坐标点。

(FPRθ, TPRθ)\displaystyle (\mathrm{FPR}_\theta,\ \mathrm{TPR}_\theta)

从旋钮到曲线,不过是一个“扫描”动作。你会发现,ROC曲线上的每一个点,都对应安检仪上的一档灵敏度。后续用sklearn画图时,库里做的正是这件看似繁琐但逻辑清晰的事——把阈值从头到尾扫一遍,自动计算每一档的坐标。

PR曲线权衡

机场安检的另一个棘手问题是:真正的坏人非常少,上千名旅客中可能只有一两个。这时候,光看“坏人抓获率”(TPR)还不够,因为你拦下的100个人里可能一大半都是被冤枉的好人。主管需要换一个视角:拦下的10个人里,几个是真正的坏人?这就是精确率(Precision);而“所有坏人中有几个被拦下”就是召回率(Recall),它和TPR是同一个数,只是名字不同。

精确率和召回率天然存在博弈:想抓到更多坏人,就会降低标准,拦下更多人,精确率随之下降;想提高拦截质量,就要提高标准,漏掉坏人的风险又上升。把阈值从高到低扫描一遍,用召回率做横轴、精确率做纵轴画点连线,就得到PR曲线。在正负样本严重不均衡时,PR曲线比ROC曲线更能反映模型的真实检索能力——它把注意力集中在正样本这个小圈子里。

Precision=TPTP+FP,Recall=TPTP+FN\displaystyle \mathrm{Precision}=\frac{\mathrm{TP}}{\mathrm{TP}+\mathrm{FP}}, \qquad \mathrm{Recall}=\frac{\mathrm{TP}}{\mathrm{TP}+\mathrm{FN}}

1. 精确率的分子:TP是被拦下且确实是坏人的数量,它衡量你拦截行动的命中质量。

TP\displaystyle \mathrm{TP}

2. 精确率的分母:TP加FP是你一共拦下的所有旅客,分子除以分母得到“命中率”。

TP+FP\displaystyle \mathrm{TP}+\mathrm{FP}

3. 召回率即TPR:Recall的公式与TPR完全一致,它刻画的是对正样本的覆盖完整度。

Recall=TPTP+FN\displaystyle \mathrm{Recall}=\frac{\mathrm{TP}}{\mathrm{TP}+\mathrm{FN}}

回到安检语境:如果你是在做“重点人员排查”,PR曲线就是你的作战地图。曲线越靠近右上角,说明拦截质量和覆盖能力兼顾得越好;当坏人极其罕见时,它比ROC曲线更能一针见血地暴露模型的短板。

AUC面积求解

两张曲线画完之后,主管还想给模型打个总评:光看一条忽高忽低的折线,很难直接说出“这个模型到底有多好”。这时候需要一个数字来概括整条ROC曲线的水平,它就是AUC——曲线下方的面积。AUC越接近1,说明模型把正样本排在负样本前面的能力越强;AUC等于0.5,说明模型和抛硬币猜没有区别。

曲线下面积通常没法写成一个简单的闭式公式,工程上最常用的办法是数值积分中的梯形法:把曲线下方的区域切成一个个窄条,每个窄条近似看成一个梯形,把所有梯形面积累加起来。相邻的两个FPR坐标构成梯形的底,两个TPR坐标构成梯形的上边和下边,逐块求和即可逼近真实面积。

AUC≈∑i=1n(FPRi−FPRi−1)(TPRi+TPRi−1)2\displaystyle \mathrm{AUC} \approx \sum_{i=1}^{n} \frac{(\mathrm{FPR}_i-\mathrm{FPR}_{i-1})(\mathrm{TPR}_i+\mathrm{TPR}_{i-1})}{2}

1. 横坐标差:相邻两个采样点的FPR之差就是梯形的高,它表示在这一段阈值范围内横轴前进的距离。

ΔFPRi=FPRi−FPRi−1\displaystyle \Delta \mathrm{FPR}_i=\mathrm{FPR}_i-\mathrm{FPR}_{i-1}

2. 纵坐标均值:相邻两个TPR取平均,作为这个梯形的上下底之和的一半。

yˉ=TPRi+TPRi−12\displaystyle \bar{y}=\frac{\mathrm{TPR}_i+\mathrm{TPR}_{i-1}}{2}

3. 累加求和:每个窄条的梯形面积等于高乘均值,所有窄条加起来就是ROC曲线下的总面积。

AUC≈∑i=1nΔFPRi⋅yˉ\displaystyle \mathrm{AUC} \approx \sum_{i=1}^{n} \Delta \mathrm{FPR}_i \cdot \bar{y}

AUC的另一个通俗解释是:随机抽一个正样本和一个负样本,模型给正样本打更高分的概率。这个概率视角让AUC成为排序类模型的通用“总分”——不管业务场景多复杂,先比AUC,再谈阈值调优。

代码实操

画图的目的不是炫技,而是把前面所有推理落成可复用的代码。在Python生态中,sklearn已经封装好了最核心的计算,而matplotlib负责把结果绘成漂亮的图。整个过程像写一份安检流程菜谱:先准备食材(模拟数据),再下锅翻炒(调用库函数计算指标),最后装盘(绘制并保存图表)。

在sklearn中,roc_curve只要传入真实标签和预测分数,就会自动完成阈值遍历,返回三组值:FPR序列、TPR序列和对应的阈值序列。auc函数对FPR和TPR做梯形积分,一行算出AUC。PR曲线的计算由precision_recall_curve完成。得到数据后,用plt.plot描点连线,再配上网格、图例和标签,一张专业论文级别的评估图就完成了。如果要亲手实现阈值遍历来加深理解,本质就是写一个循环:对每个阈值计算四个混淆矩阵数字,再换算成对应坐标。

AP=∑k=1n(Rk−Rk−1)Pk\displaystyle \mathrm{AP}=\sum_{k=1}^{n}(R_k-R_{k-1})P_k

1. 召回率差分:相邻两个采样点的召回率之差,作为该段横轴宽度。

ΔRk=Rk−Rk−1\displaystyle \Delta R_k=R_k-R_{k-1}

2. 当前精确率:本段对应的精确率值,作为矩形的高度。

Pk\displaystyle P_k

3. 累加所有矩形:将每段的宽度乘高度求和,得到PR曲线下的总面积。

AP=∑k=1nΔRk⋅Pk\displaystyle \mathrm{AP}=\sum_{k=1}^{n}\Delta R_k \cdot P_k

从这节开始,你不再需要手动计算每一个阈值坐标——一行roc_curve就能搞定。可视化是实验报告的最后一步,也是说服读者的关键一环:清晰标注AUC数值、填充曲线下面积、用不同颜色区分曲线,这些细节会让你的汇报瞬间提升一个档次。

AI 应用场景

信贷风控模型的审批卡点评估

阶段:模型评估与选择

解决的问题:传统信贷风控只看准确率,坏账样本极少时准确率虚高,无法回答“拒掉的人里有多少真的会违约”。用ROC曲线看整体排序能力、用PR曲线聚焦违约样本,能精准定位审批阈值。

具体案例:某消费金融公司开发了违约预测模型,负样本占比不足5%。算法工程师在离线测试集上绘制PR曲线,发现违约样本召回率达到60%时精确率骤降,于是把审批阈值定在曲线拐点附近,坏账率下降18%。

医学影像AI辅助诊断的性能汇报

阶段:模型效果汇报与临床论证

解决的问题:罕见病筛查中阳性病例极度稀少,单看准确率无法证明AI的辅助价值;ROC和PR曲线能向医生清楚展示模型在不同灵敏度下的表现。

具体案例:某团队开发肺结节CT检测算法,在公开数据集上同时绘制ROC和PR曲线,用AUC=0.94和AP=0.87两份图表提交临床试验申报材料,审评专家一眼看出模型在低误报区间的优势。

推荐系统召回阶段的离线评测

阶段:离线评测与Bad Case分析

解决的问题:推荐系统的召回模型面对海量候选商品,正样本(用户真正点击的商品)比例极低;用PR曲线对比不同召回模型,比单纯看ROC更能反映“推荐列表质量”。

具体案例:某电商平台的召回模型从双塔升级为图神经网络后,离线PR曲线的AP从0.31提升到0.38,且在高召回区间精确率不再断崖下跌,团队据此判断模型可以进入AB测试。

Python 演示

python66 行
# 手动绘制ROC与PR曲线的完整示例import numpy as npfrom sklearn.metrics import roc_curve, auc, precision_recall_curveimport matplotlib.pyplot as plt # 构造模拟样本:100个正样本和300个负样本,负样本偏多np.random.seed(42)y_true = np.array([1] * 100 + [0] * 300)scores = np.concatenate([    np.random.normal(0.72, 0.18, 100),   # 正样本得分集中在0.72附近    np.random.normal(0.30, 0.18, 300)    # 负样本得分集中在0.30附近])scores = np.clip(scores, 0.0, 1.0)  def manual_roc(y_true, scores):    """手动遍历阈值,计算每个阈值下的FPR与TPR"""    thresholds = np.sort(np.unique(scores))[::-1]    fpr_list, tpr_list = [], []    for th in thresholds:        pred = (scores >= th).astype(int)        tp = np.sum((pred == 1) & (y_true == 1))        fp = np.sum((pred == 1) & (y_true == 0))        fn = np.sum((pred == 0) & (y_true == 1))        tn = np.sum((pred == 0) & (y_true == 0))        fpr_list.append(fp / (fp + tn) if fp + tn else 0)        tpr_list.append(tp / (tp + fn) if tp + fn else 0)    return np.array(fpr_list), np.array(tpr_list)  # 手动方式计算ROC曲线与AUCfpr_manual, tpr_manual = manual_roc(y_true, scores)auc_manual = np.trapz(tpr_manual, fpr_manual) # sklearn一行版fpr_sk, tpr_sk, _ = roc_curve(y_true, scores)auc_sk = auc(fpr_sk, tpr_sk) # 将两条曲线绘制在同一张图上对比plt.figure(figsize=(7, 5))plt.plot(fpr_manual, tpr_manual, "b-o", ms=3, label="manual")plt.plot(fpr_sk, tpr_sk, "r--", lw=2, label="sklearn")plt.plot([0, 1], [0, 1], "k--", alpha=0.4, label="random")plt.xlabel("FPR")plt.ylabel("TPR")plt.title("ROC Curve  AUC=%.3f" % auc_manual)plt.legend()plt.grid(alpha=0.3)plt.tight_layout()plt.savefig("roc_curve.png", dpi=120) # 使用sklearn绘制PR曲线prec, rec, _ = precision_recall_curve(y_true, scores)plt.figure(figsize=(7, 5))plt.plot(rec, prec, "g-", lw=2, label="PR")plt.xlabel("Recall")plt.ylabel("Precision")plt.title("Precision-Recall Curve")plt.legend()plt.grid(alpha=0.3)plt.tight_layout()plt.savefig("pr_curve.png", dpi=120) print("Manual AUC: %.4f" % auc_manual)print("sklearn AUC: %.4f" % auc_sk)print("Positive: %d, Negative: %d" % (sum(y_true), len(y_true) - sum(y_true)))
目的:这个脚本同时演示了手动遍历阈值计算ROC曲线和sklearn一行实现,并输出两张可保存的评估图,可直接用于实验报告。
  1. y_true = np.array([1] * 100 + [0] * 300)构造400个样本,其中只有100个正样本,刻意模拟类别不均衡的场景
  2. np.random.normal(0.72, 0.18, 100)模拟好模型给正样本打高分、负样本打低分的效果
  3. thresholds = np.sort(np.unique(scores))[::-1]把候选分数去重后从高到低排序,得到待遍历的阈值序列
  4. pred = (scores >= th).astype(int)用当前阈值把所有分数转成0/1预测标签
  5. fpr_list.append(fp / (fp + tn) if fp + tn else 0)计算当前阈值的FPR坐标,并处理分母为零的边界情况
  6. np.trapz(tpr_manual, fpr_manual)用梯形法对FPR和TPR做数值积分,得到手动AUC
  7. fpr_sk, tpr_sk, _ = roc_curve(y_true, scores)sklearn自动完成阈值遍历和坐标计算,返回FPR、TPR和阈值
  8. precision_recall_curve(y_true, scores)一行拿到PR曲线的精确率和召回率序列

常见误区

误区我训练的模型准确率已经达到99%,肯定是非常优秀的模型,不需要再看ROC曲线了。就算画出来也不会有什么新信息。

正解当坏人和好人的比例达到1:99时,一个永远回答“全部放行”的模型准确率也是99%,但它一个坏人都抓不到。准确率被多数类主导,在类别不平衡时极具欺骗性。ROC曲线的TPR和FPR分别关注正样本覆盖率和负样本误伤率,AUC则给出排序能力的整体评分,这些信息远在单个准确率之上。

为何常见:初学者最早接触的评估指标就是准确率,而且大多数教学案例都是类别均衡的数据集,导致人们默认准确率能代表一切。

误区ROC和PR都是曲线,横纵坐标也都是利率类的指标,画出来形状也差不多,用哪个都一样。

正解两条曲线回答的是不同问题。ROC看待整个旅客群体的“抓获vs误伤”,PR只看“被拦下的人”中坏人的占比。当正样本极其稀少(如罕见病筛查),ROC的FPR分母庞大,曲线容易被“多数派”样本稀释,而PR曲线聚焦正样本,变化更灵敏。选择哪条,取决于业务场景。

为何常见:两者都来自混淆矩阵,公式里都有TP,初学者容易觉得它们只是视角微调,忽略了不均衡场景下的根本差异。

误区我的模型AUC等于0.85,所以它能正确分类85%的样本,准确率也应该是85%。

正解AUC不是准确率。它的标准解释是:随机抽一个正样本和一个负样本,模型给正样本打更高分的概率。0.85意味着排序能力优于随机猜测,但具体某个阈值下的准确率还需要结合阈值和分布计算。AUC衡量的是“排序能力”,准确率衡量的是“固定阈值下的命中率”,两者是不同维度的指标。

为何常见:两个指标都是0到1的小数,都越大越好,名字听起来也接近,很容易让人直接把数字画等号。

误区我自己遍历阈值算出来的FPR和TPR,和sklearn返回的不完全一样,肯定是我的代码写错了或者sklearn有问题。

正解sklearn的roc_curve在实现上会做细节处理:它会去掉重复的分数点、在端点处补充(0,0)和(1,1),并对特定边界情况做平滑。这些差异会导致坐标点序列与朴素手写版本略有不同,但计算出的AUC几乎一致。手动实现的价值在于理解原理,而不是追求与官方库逐点相同。

为何常见:多数初学者第一次手写算法时追求“和库函数输出完全相同”,忽略了库函数为了数值稳定性所做的额外工程处理。

面试题

Q1. 在混淆矩阵中,TP代表什么?

单选题 · easy

  • A.预测为正且真实为正← 正确答案
  • B.预测为正且真实为负
  • C.预测为负且真实为正
  • D.预测为负且真实为负

答案:A。TP(True Positive)表示模型预测为正、且真实标签也为正的样本。这就像安检中“被拦下且确实是坏人”的情况。预测为正但实际为负是FP,预测为负但实际为正的是FN,预测为负实际为负的是TN。

Q2. 召回率(TPR)的数学定义是什么?

单选题 · easy

  • A.TP除以TP加FN之和← 正确答案
  • B.TP除以TP加FP之和
  • C.FP除以FP加TN之和
  • D.TN除以TN加FP之和

答案:A。TPR=TP/(TP+FN),分母是所有真实为正的样本数,分子是被成功预测出为正的样本数。它衡量“所有坏人中被抓住了多少”。B是精确率,C是FPR,D是特异度相关公式。

Q3. FPR表示什么含义?

单选题 · easy

  • A.实际为负中被判为正的比例← 正确答案
  • B.实际为正中被判为正的比例
  • C.预测为正中真正为正的比例
  • D.预测为负中真正为负的比例

答案:A。FPR=FP/(FP+TN),描述的是所有真实为负的样本中,被模型错误预测为正的比例。在安检语境中,就是好人的误伤率。TPR关注坏人抓没抓到,FPR关注好人被没被冤枉。

Q4. 当正样本极少、负样本极多时,更适合用哪条曲线评估模型?

单选题 · mid

  • A.用ROC曲线更保险
  • B.用PR曲线更直观← 正确答案
  • C.用学习曲线更合适
  • D.用损失曲线更合适

答案:B。类别极度不均衡时,ROC曲线的FPR分母庞大,曲线容易被多数类稀释,看似漂亮但掩盖了正样本上的问题。PR曲线聚焦正样本的精确率和召回率,能更灵敏地反映模型对稀有正类的识别能力。因此选择PR曲线。

Q5. ROC曲线的横纵坐标分别是?

单选题 · mid

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

答案:A。ROC曲线的标准约定是横轴为FPR(误报率),纵轴为TPR(召回率)。C和D描述的是PR曲线的坐标关系。ROC曲线从左上角到右下角排布,越靠近左上角代表模型区分能力越强。

Q6. AUC最接近以下哪种解释?

单选题 · mid

  • A.随机正样本得分高于负样本的概率← 正确答案
  • B.随机负样本得分高于正样本的概率
  • C.所有正样本得分高于负样本的比例
  • D.所有负样本得分高于正样本的比例

答案:A。AUC的统计意义是:随机抽取一个正样本和一个负样本,模型给正样本打出更高分数的概率。它衡量的是排序能力,而不是某一固定阈值下的准确率。“所有”样本这个表述过于绝对,实际是“随机抽取”意义下的概率。

Q7. 下列哪种方法可以数值求解AUC?

单选题 · hard

  • A.梯形法在取样点间做数值积分← 正确答案
  • B.用K折交叉验证求平均准确率
  • C.直接对预测分数求均方误差
  • D.对所有样本调用决策树投票

答案:A。AUC是ROC曲线下的面积,工程上常用梯形法把曲线切成窄条,每个窄条近似为梯形然后累加。sklearn的auc函数正是这样实现的。K折交叉验证是评估泛化能力的方法,均方误差是回归指标,决策树投票与AUC无关。

Q8. 关于阈值遍历的说法,正确的有哪些?

多选题 · mid

  • A.阈值越紧则TPR越接近1
  • B.阈值越松则预测为正的样本更多← 正确答案
  • C.每个阈值对应ROC曲线上的一个点← 正确答案
  • D.阈值序列一般按从高到低排序← 正确答案

答案:BCD。阈值越紧(越高)时,预测为正的门槛越高,能拦下的样本越少,TPR反而趋近于0,所以A错。阈值越松,更多样本会达到条件被判定为正,B对。遍历每个阈值都会产生一个FPR-TPR坐标点,所以C对。通常按分数从高到低扫描,所以D对。

Q9. 关于PR曲线,下列说法正确的有?

多选题 · extreme

  • A.横轴为Recall纵轴为Precision← 正确答案
  • B.越靠近右上角表示模型越好← 正确答案
  • C.类别不平衡时比ROC曲线更敏感← 正确答案
  • D.曲线形状一定是单调递减

答案:ABC。PR曲线的标准画法是横轴Recall、纵轴Precision,A对。越靠近右上角说明模型在保持高捕获率的同时还能维持高精确率,B对。正样本极少时,PR曲线聚焦正样本,比ROC更敏感,C对。PR曲线并非严格的单调递减,会出现锯齿,D错。

Q10. 以下哪些是二分类模型评估的常用指标?

多选题 · easy

  • A.准确率与精确率← 正确答案
  • B.召回率与F1分数← 正确答案
  • C.ROC曲线下面积AUC← 正确答案
  • D.字符串编辑距离

答案:ABC。准确率、精确率、召回率、F1和AUC都是分类模型的常用评估手段。字符串编辑距离用于衡量两个字符串的相似程度,属于文本处理领域,不适用于二分类模型评估。