题干与适用场景
一个欺诈模型给每笔交易输出 0 到 1 的风险概率。业务想把 0.8 作为人工审核门槛。请说明如何判断这些概率是否校准,如何区分排序能力与概率可信度,如何选择校准方法,并处理类别不平衡、数据漂移和阈值容量约束。
PracHub 在 2026 年公开的机器学习面经中直接询问 model calibration、reliability diagram、ECE、Brier score 和阈值选择;scikit-learn 文档给出概率校准、分箱可靠性图和独立校准数据的实现边界。本文不绑定具体公司。
面试官考察点
普通回答会说“看准确率或 AUC”。强回答先定义概率含义:在预测约为 0.8 的样本中,长期实际正例比例应接近 0.8。接着把可靠性、区分度、基准率和业务阈值分开,说明为什么高 AUC 仍可能概率过度自信。
面试官还会检查数据切分是否泄漏、校准集是否代表线上分布、分箱样本量是否足够,以及校准后是否重新验证决策成本。校准不是把模型变“更聪明”,而是让分数具备可解释的概率尺度。
回答前需要澄清的问题
- 概率用于什么决策? 如果只排序,AUC 和 top-k 可能足够;若按概率分配审核容量或计算预期损失,必须重视校准。
- 标签何时可得? 欺诈确认可能延迟,评估窗口必须等标签成熟,否则把未确认当负例会扭曲校准。
- 线上正例率与训练集相同吗? 采样、加权或时间变化会改变先验,需在目标分布上评估或做先验修正。
- 每个分群都要可信概率吗? 高风险业务通常需要按地区、渠道或产品分群检查,整体校准可能掩盖局部失真。
- 审核容量和错误成本是什么? 阈值是业务决策,不是由校准曲线自动产生;需要容量、误报和漏报代价。
30 秒回答框架
“我先确认概率是否直接用于审核决策,并等待标签成熟。校准的含义是预测 0.8 的样本实际正例率约为 0.8。我在与训练独立且代表线上分布的校准集上画 reliability diagram,同时报告分箱样本量、ECE 和 log loss;Brier 作为综合评分,不能单独解释校准。再按业务成本选阈值,检查 AUC 是否保持、各分群是否失真,并在时间窗口上监控先验和校准漂移。若失真,先尝试 sigmoid;数据足够且形状非线性时用 isotonic,所有校准器都不能用训练预测拟合。”
分步骤深入解答
第一步:把校准和排序拆成两个问题
| 维度 | 概率校准 | 排序或区分度 |
|---|---|---|
| 问题 | 预测概率是否匹配实际发生率 | 正例是否总体排在负例之前 |
| 典型工具 | Reliability diagram、ECE、log loss、Brier 分解 | ROC-AUC、PR-AUC、top-k lift |
| 业务用途 | 预期损失、审核容量、风险分层 | 找出优先处理的样本 |
| 典型失败 | 概率普遍偏高但排序仍好 | 排序好却无法解释 0.8 的真实含义 |
二分类校准要求:对预测概率接近 p 的样本,实际正例频率也接近 p。AUC 只依赖排序,单调的概率变换可以保持 AUC 不变,因此不能用 AUC 代替校准检查。
第二步:画可靠性图并报告不确定性
把预测概率划分为若干区间,每个区间计算平均预测概率和实际正例比例,横轴画平均预测值,纵轴画正例比例;理想情况接近对角线。每个分箱同时显示样本数或直方图,避免一个只有少数样本的高分箱造成过度解读。
from sklearn.calibration import CalibrationDisplay
from sklearn.metrics import log_loss
display = CalibrationDisplay.from_predictions(
y_true=y_cal,
y_prob=p_cal,
n_bins=10,
strategy="quantile",
)
loss = log_loss(y_cal, p_cal)分箱边界不是客观真理:等宽分箱在极不平衡数据上可能大部分为空,分位数分箱则改变每箱概率范围。样本少时应显示置信区间、合并稀疏箱或使用可复现的优化分箱方法,而不是只看一条折线。
第三步:理解 ECE、Brier 和 log loss 的边界
ECE 通常按分箱计算预测均值与实际频率的加权绝对差,易于沟通但依赖分箱数量和规则。Brier score 是概率预测的均方误差,log loss 强调自信且错误的预测;二者同时受可靠性、区分度和标签不确定性影响。
因此不能说“Brier 更低就一定校准更好”。应结合可靠性图、分箱样本量、分解后的可靠性项,以及在同一时间窗口上的 log loss。论文也指出可靠性图的朴素分箱会受实现选择影响,需要报告方法和不确定性。
第四步:在不泄漏的切分上校准
模型训练集上的预测已经被模型看过,用它拟合校准器会产生过度乐观的映射。正确顺序是:训练基础模型;在独立校准集或交叉验证的折外预测上拟合校准器;最后在未参与任何拟合的测试集评估。
train: fit base model
calibration: fit calibrator on out-of-fold or held-out probabilities
test: evaluate calibration, ranking, and business threshold once时间序列或延迟标签场景要按时间切分,不能随机打乱未来信息。校准集必须与线上流量的正例率、特征分布和标签成熟窗口相近;否则测到的是训练采样分布,而非业务要用的概率。
第五步:选择校准方法和阈值
sigmoid/Platt scaling 用一维逻辑回归把原始分数映射到概率,数据较少、失真大致呈 S 形时更稳。isotonic regression 更灵活,但参数更多,校准样本不足时容易过拟合。温度缩放常用于多分类 logits,但同样需要独立验证。
校准方法决定概率尺度,阈值仍由业务成本决定。假设人工审核每天只能处理 2,000 笔,就按容量、误报成本、漏报成本和延迟损失选择阈值;不要因为“0.8 看起来合理”就直接上线。阈值变更需在代表性回放和在线护栏中验证。
第六步:处理类别不平衡与线上漂移
过采样、类别权重和 focal loss 可能改变模型分数的概率含义。若训练正例率是 10%,线上只有 2%,即使排序稳定,直接使用训练分布上的概率也可能失准;应在目标先验上重新评估,必要时做先验修正或重新校准。
上线后按时间滚动计算可靠性图、ECE、log loss 和实际正例率,按渠道、地区和客户层级切片。季节性、策略改变和标签延迟都会造成漂移。触发条件可以是校准误差超过业务容忍度、关键分群失真或先验变化超过阈值;触发后用新鲜且标签成熟的数据重训校准器。
高质量示范回答
“我会先问这组概率是否直接驱动审核、标签何时成熟,以及线上正例率是否与训练采样一致。校准的定义是:所有预测约为 0.8 的交易,长期实际欺诈率应约为 0.8。我的评估集必须与训练独立、按时间等待标签成熟,并代表线上分布。
“我先画 reliability diagram,显示每箱样本量和置信区间,再报告 ECE、log loss 和 Brier;Brier 不能单独当校准证明,因为它也包含区分度。AUC 用来回答排序,不回答概率是否可信。失真较小或近似 S 形时用 sigmoid,数据量足够且需要非线性映射时尝试 isotonic,不能用训练集预测拟合校准器。
“最后按审核容量和错误成本选阈值,按渠道和地区检查局部校准。线上滚动监控先验、标签成熟后的可靠性和 log loss,出现漂移再用代表性新数据重新校准。高 AUC 但高估风险的模型仍不能直接把 0.8 当成真实风险。”
常见错误
- 错误表现 → 用准确率或 AUC 证明概率可信 → 失败原因 → 这些指标不回答预测值是否匹配实际频率 → 修正方法 → 使用可靠性图、分箱样本量和校准指标。
- 错误表现 → 用训练集预测拟合校准器 → 失败原因 → 过拟合映射会在新样本上失准 → 修正方法 → 用折外预测或独立校准集。
- 错误表现 → 只报一个 ECE 数字 → 失败原因 → ECE 受分箱规则和稀疏样本影响 → 修正方法 → 同时报分箱策略、图、样本量和不确定性。
- 错误表现 → 看到 AUC 高就把 0.8 当审核门槛 → 失败原因 → 排序好不代表概率尺度正确 → 修正方法 → 以审核容量和错误成本选择阈值。
- 错误表现 → 忽略采样和基准率变化 → 失败原因 → 校准对象变成训练分布而非线上人群 → 修正方法 → 在目标分布评估并监控先验漂移。
追问及应对
如果 AUC 很高但 reliability diagram 呈 S 形,怎么办?
保留基础模型的排序能力,先在独立数据上尝试 sigmoid 或 isotonic 校准,再重新评估校准、AUC 和业务成本。单调校准通常不会改变排序,但仍需实测实现是否引入泄漏或错误切分。
如果正例标签要 30 天后才确定呢?
建立标签成熟窗口,只用已经过 30 天的样本评估和拟合校准器。近期样本可监控预测分布和延迟,但不能把未确认事件当作负例来计算可靠性。
如果不同地区的校准曲线差异很大呢?
先检查样本量、标签定义和基准率,再决定全局校准器、分群校准器或分群阈值。若分群器数据不足,宁愿使用更稳的全局映射并加区间监控,也不要为噪声拟合独立曲线。