01
60 秒回答模板
先固定前提:同一个分类器、同一个阈值,并假设正样本和负样本的条件分数分布 P(score|y=1)、P(score|y=0) 不变,只是测试集正负先验 π = P(y=1) 变化。
Recall = TP / (TP + FN) = TPR = P(score >= threshold | y=1)。在条件分布不变、阈值不变时,Recall 通常基本不变,因为它只看正样本内部有多少被召回。
Precision = TP / (TP + FP)。写成先验形式:
Precision = π * TPR / (π * TPR + (1 - π) * FPR)。
当正负比从 1:1 变成 1:1000,π 从 1/2 变成 1/1001。只要 FPR 不是极小,FP 的绝对数量会被海量负样本放大,Precision 会显著下降。
举例:阈值下 TPR=0.9、FPR=0.01。1:1 时 Precision = 0.5*0.9 / (0.5*0.9 + 0.5*0.01) ≈ 98.9%;1:1000 时 Precision = (1/1001*0.9) / (1/1001*0.9 + 1000/1001*0.01) ≈ 8.3%。Recall 仍约为 90%。
但要补充边界:如果 1:1000 不是单纯先验变化,而是线上负样本更难、正样本来源也变了,TPR/FPR 本身会变,Recall 也可能变;如果重新调阈值,为了维持 Precision 往往会提高阈值,此时 Recall 会下降。PR 曲线和 PR-AUC 对类别先验很敏感,而 ROC-AUC 在纯先验变化下相对稳定。
考点 Recall 前提
难度 真实面经题
回答目标 让候选人用混淆矩阵和先验公式解释指标变化,能主动讲清楚固定阈值、重调阈值、纯先验变化和样本难度变化这几个容易混淆的边界。
02
深入解析
01 明确比较前提
题目强调同一分类器和同一阈值,最好先声明只讨论 class prior shift。若测试集构造方式还改变了样本难度,那就不是单纯 1:1 到 1:1000,指标变化不能只由先验解释。
02 Recall 的机制
Recall = TP/(TP+FN),也就是正样本条件下被判为正的比例。固定阈值时,它等于 TPR。只要 P(score|y=1) 不变,测试集中负样本变多不会直接改变 Recall。
03 Precision 的机制
Precision 的分母包含 FP。负样本基数扩大时,即使 FPR 很低,FP 绝对数量也会大幅增加。Precision = πTPR/(πTPR+(1-π)FPR),正样本先验 π 降低会把 Precision 拉低。
04 用数值说明量级
同样 TPR=0.9、FPR=0.01,1:1 测试集几乎全是准确的正预测,Precision 接近 99%;1:1000 时,每 1 个正样本对应 1000 个负样本,1% 的误报就会产生约 10 个 FP,Precision 只剩约 8%。
05 PR 与 ROC 的区别
ROC 坐标是 TPR/FPR,条件分布不变时曲线相对不受类别先验影响;PR 的 Precision 直接包含先验,因此 PR 曲线基线等于正样本比例。1:1000 时随机模型 Precision baseline 约 0.1%,远低于 1:1 的 50%。
06 工程决策
线上极度稀疏正样本场景不能只看离线 balanced test 的 Precision。需要在真实比例或带权测试集上评估,并根据业务目标重调阈值、Top-K、召回量或成本约束。若要维持 Precision,通常要提高阈值,代价是 Recall 下降。
07 验证方法
定位时固定模型和阈值,分别统计 TPR、FPR、TP、FP、FN,再改变样本先验做重加权或重采样模拟。若 Recall 也明显变化,应检查正样本分布、负样本难度、时间漂移和日志口径是否变了。
03
易错点
- 笼统说 Precision 和 Recall 都下降,没有区分固定阈值和重调阈值。
- 忽略 Precision 对类别先验的依赖,不能写出 π、TPR、FPR 的关系。
- 把 Recall 理解成受负样本数量直接影响。
- 拿 Accuracy 解释问题,偏离 PR 指标本身。
- 没有说明前提:条件分数分布不变、同一分类器、同一阈值。
- 把训练集比例变化和测试集先验变化混为一谈,不讨论概率校准问题。
04
面试官追问
如果想在 1:1000 的线上环境维持 Precision,你会如何调阈值?Recall 会怎样?
要提高阈值,因为线上负样本大幅增加后,同一阈值下假阳性数量会显著放大,Precision 会下降。提高阈值能过滤更多负样本、维持 Precision,但也会牺牲一部分真正例,Recall 通常下降,需要用业务成本函数选择阈值。
为什么 ROC-AUC 对类别比例不敏感,而 PR-AUC 敏感?
ROC-AUC 比较的是随机正样本得分高于随机负样本的概率,正负样本比例变化不会直接改变这个 pairwise 概率。PR-AUC 的 Precision 分母包含假阳性数量,负样本基数变大时即使 FPR 很低也会产生很多 FP,因此对类别先验非常敏感。
训练集 1:1、测试集 1:1000 时,模型输出概率还可靠吗?要不要校准?
不一定可靠。1:1 训练会改变类别先验,模型分数可用于排序,但概率往往需要按真实先验做 logit/odds 校准,或在真实比例验证集上做 Platt、isotonic、温度缩放等校准。是否需要校准取决于下游是否使用概率阈值、风险收益估计或排序融合。
如果负样本不是随机增加,而是 hard negative 增加,Recall 和 Precision 会如何变?
hard negative 增加会让测试更难,模型更容易把难负样本判成正类,Precision 可能进一步下降;Recall 是否变化取决于正样本分布和阈值。它不只是先验变化,还改变了负样本条件分布,所以需要按负样本类型切片看 FP 来源。
线上评估应该用真实比例测试集、重加权测试集,还是 balanced test?
最终上线评估应使用接近真实比例的测试集,因为它反映真实 Precision、报警量和运营成本。balanced test 可用于调试模型区分能力,重加权 test 可用于样本受限时估计真实指标,但不能替代真实分布下的阈值选择和容量评估。