何时该用 Top-K 替代 AUROC/AUPRC

很多生信任务的阳性极少,实验又贵,最后往往只验证排序最靠前的一小批候选。这时 AUROC、AUPRC 看的是「整条排序好不好」,实验室关心的却是「前 K 个里有没有真货」。两者不是一回事。Hits@K、MRR、precision@k、富集因子(EF)这类 Top-K 指标,往往更接近实际用法。

下面先用一个示例把差别算清楚,再对照一篇真实论文,最后按任务类型说哪些适合换、哪些不必换。

一、一个示例

假设要给基因调控边(或药物靶点)排序,设定如下:

设定 取值 含义
候选边 10,000 模型给出完整排序
真阳性 20 阳性率 0.2%
实验预算 只做前 50 每条验证按 5 万元,合计约 250 万
真正关心的问题 前 50 里能命中几条?

构造三种排序(可用 sklearnroc_auc_scoreaverage_precision_score 复现):

方法 AUROC AUPRC Hits@50 Precision@50 MRR 花 250 万的结果
A 0.986 0.065 0 0% 0.008 一条都没捞到
B 0.643 0.084 6 12% 0.044 大约 42 万换一条真边
C 0.979 0.074 5 10% 0.024 大约 50 万换一条真边

同一排序任务下 AUROC、AUPRC 与 Hits@K 曲线对照

左图里 A、C 几乎贴着左上角,看起来都不错;中图三者都趴在底部,AUPRC 也分不出谁能进实验室;右图在预算线 (K=50) 左侧,A 仍是 0,B 和 C 才有命中。

原因很简单:

  • 方法 A:20 条真阳性全挤在第 52–242 名。整体排序不错,AUROC 接近 0.99,但前 50 一条也没有。
  • 方法 B:6 条进了前 50,其余掉得很后,AUROC 只有 0.64。只看 AUROC 会觉得远不如 A,按实验预算却该选 B。
  • 方法 C:说明问题不在「AUROC 高就一定没用」,而在于 AUROC 不怎么反映「前几名有没有货」。A 和 C 的 AUROC 只差 0.007,Hits@50 却是 0 对 5。

三个指标各自在问什么:

  1. AUROC:随机抽一对阳性和阴性,模型有没有更偏向阳性?方法 A 几乎总是对的,但这不等于阳性会出现在你付得起验证的前 K 名里。
  2. AUPRC:阳性很少时比 AUROC 老实一些(这里三种都只有 0.06–0.08),但仍是整条 PR 曲线的平均,对「只验证前 50」这件事不够敏感。
  3. Hits@K / Precision@K / MRR:直接回答预算内能捞到多少。

随机乱排时期望 Hits@50 大约是 (50 \times 0.2% = 0.1);方法 B 得到 6,大约是随机的 60 倍。AUROC 说不清这件事值不值得做实验。需要说明的是,在 AUROC 曲线中,能观察到方法B虽然整体值小,但是在左下方放大后其实他是高出方法A的,这也是大家观察AUROC曲线的时候需要注意和思考的地方,如果方法B恰好是你的方法,方法A是baseline的话。

二、真实论文里的例子:RareGPS

Genome Medicine 上的 RareGPS 做罕见病药物靶点排序,数字不必虚构:

指标 数值 怎么读
基线阳性率 0.19% 随机抽 1000 个,期望大约 2 个真靶点
AUROC 0.70 摘要里看起来还行
AUPRC 0.06 整体精度其实很一般
Precision@100 30%(NNS=3.3) 验证 100 个约命中 30 个;平均筛 3.3 个出一个
Precision@1000 13.5%(NNS=7.4) 中等规模跟进
Precision@10000 5.49%(NNS=18.2) 大规模筛选

同一模型:AUROC=0.70 不算差,AUPRC=0.06 说明整体排序有限;但 Precision@100=30% 相对 0.19% 的基线大约富集 158 倍——这才是值不值得开实验的信息。只报 AUROC,既不知道该不该做,也不知道该做前多少个。

三、哪些任务更该看 Top-K

共性大致是:阳性率很低(常低于 1%),每个候选的验证很贵,实际只会跟进前 K 个。

1. 药物靶点优先级排序

和基因调控网络边排序很像。反向筛选里大家早就说过:AUC 看的是各种阈值下的整体区分,真正关心的是真实靶点有没有进前几名。所以富集因子和 Top-k 召回(k=1,5,10)用得更多。疾病基因识别的基准研究也指出,药物发现场景里 AUROC 往往不是最好的选择,前 100 个新预测的差别更能说明方法好不好。GPS、RareGPS 都直接报头部富集或 precision@k / NNS。

2. 大规模虚拟筛选

分子库可以到十亿级,阳性极少,实验通常只做前几千到几万。Nature Biotechnology 那篇抗菌虚拟筛选同时报了 AUPRC 和 BEDROC20——后者更强调排序靠前的那一段。中段、尾段的分子反正不会去做实验,整体可分性不如头部富集重要。

3. 致病性变异优先级

全基因组里找致病变异,临床只要一份短名单。文献里也常写:生物学家和临床医生要的是一小份可靠候选。这时 AUPRC 一般优于 AUROC,而 Top-K 更直接对应后续跟进名单。

4. 新抗原 / MHC 呈现肽预测

能被 MHC 呈现的肽很少。评估里常用实验验证的呈现肽作阳性、匹配的 decoy 作阴性,AUPRC 仍然有用;若疫苗设计只取前 10 或前 20 条,Top-K 命中率更贴近实际流程。

四、换指标还不够,有时还要改划分方式

有些任务不只是指标选错了,训练/测试的划分方式也会把问题掩盖掉:若测试集里的实体在训练时已经见过(transductive),分数可以很高;换到未见实体(inductive)上,泛化可能立刻垮掉。

5. 蛋白-蛋白相互作用 / 蛋白结构邻居检索

不少 PPI 基准是 transductive 的,生物学家却更关心未见蛋白上的相互作用。结构邻居检索里也有人发现 ROC 不可靠,AUPRC 更合适;传统 Top-K accuracy 也不够细(两个算法在 Top-10 里分别找到 1 个和 2 个邻居,按老定义都算命中),于是有人改用 Top-K hit ratio。

6. 增强子-启动子互作 / 染色质环 / 三维基因组接触

真实互作很少,负样本池很大。有人用 AUROC 评估 EPI 模型得到 0.95,换成 AUPRC 只剩大约 0.3。若再把未见增强子或未见启动子留作测试,用 Hits@K 评估,会更接近「预测新调控元件」这件事。

7. 噬菌体-宿主互作

菌株水平的预测往往极不平衡。AUROC 容易偏乐观,文献里常建议看 AUPRC、F1、MCC。更稳妥的做法是:测试集留出未见菌株,再配上 Top-K 排序指标。

8. 细胞类型注释

AUPRC 已经用得很多。若目标是给新数据里罕见细胞类型列出可信的前几个候选,Top-K 排序质量往往比全局 AUROC 更有用。

五、不必一刀切的情况

9. 罕见临床事件(短期死亡、败血症等)

AUROC 对患病率不太敏感,AUPRC 则敏感。跨人群比较模型时,AUPRC 不好直接比,AUROC 反而有用。若固定在同一人群,只关心前 K 个高危患者里真正出事的比例,再看 Top-K 或 PPV@K 更合适。

10. 差异表达、治疗反应预测

这些任务里 AUPRC 常是主指标;Top-K 可以补充报告,但不一定要取代它——阳性定义往往没那么极端,整体排序本身也有意义。

六、怎么判断该不该换

可以问三件事:

  1. 阳性率是不是很低(比如低于 5%)?很低时 AUROC 容易显得虚高。
  2. 验证预算是不是只够前 K 个?是的话,Top-K 比整条 AUPRC 更贴近实际。
  3. 是否需要推广到未见过的基因、蛋白、菌株或分子?若需要,划分方式也要改成 inductive(测试实体训练时未见过),否则 transductive 下的高分可能站不住。

三条都符合的,常见于靶点优先级、虚拟筛选、疾病基因识别、致病变异排序、新抗原预测,以及 inductive 设定下的 PPI、GRN、噬菌体-宿主预测。

分类较平衡、主要关心整体风险区分时,AUROC/AUPRC 仍然合适,硬换成 Top-K 反而丢掉信息。

另外,AUPRC 对数据集构成也很敏感,不同实现有时会算出互相打架的结果。即便报 AUPRC,也一并报 Hits@K 或 MRR 更稳妥——两者回答的问题本来就不完全一样。