10.4 阈值、曲线与校准:从排序走向行动
第 10.3 节展示了一个阈值怎样产生一张混淆矩阵。即使拟合模型和概率排序完全不变,换一个阈值也会改变所有硬分类指标。因此必须分开做三项决策:选择能够产生有用排序的模型,检查概率是否可信,再根据后果选择行动阈值。
三项决策都只能使用开发数据。只有模型、校准方法、阈值、正类、首要指标与切片计划全部锁定后,才能揭封最终测试集。
选择之前,先追踪全部阈值
对同一组固定分数,把阈值从 1 逐渐降到 0。最初几乎没有订单被预测为正;阈值每跨过一个样本分数,就有一笔订单进入正类行动集合。混淆矩阵一次改变一个样本,于是形成一条运行点轨迹。
受试者工作特征曲线(Receiver Operating Characteristic curve, ROC curve)把真正率画在假正率上:
ROC 曲线下面积(ROC AUC)概括分数把一个随机正类排在一个随机负类前面的能力。对角线式随机排序的 AUC 约为 0.5,更强的排序会向左上角弯曲。AUC 既不告诉我们应该部署哪个阈值,也不证明 0.8 这个概率数值诚实可信。
精确率—召回率曲线(precision–recall curve, PR curve)在全部阈值上把 precision 对 recall 作图,直接关注正类检索。它的无技能参考水平取决于正类率,所以比较不同人群的 PR 曲线时必须同时说明 prevalence。平均精确率(Average Precision, AP)概括 recall 增加过程中得到的 precision。
双图实验会让同一个橙色阈值点同时出现在 ROC 与 PR 坐标中。移动阈值时,点沿曲线移动,而 ROC AUC 与 AP 保持不变。随后只改变正类率而保持排序分离度,ROC 视图变化较小,PR 基线与 precision 会明显移动。
开发数据要使用折外概率(out-of-fold probability),确保每一行都由没有见过该行目标的模型评分:
from sklearn.model_selection import StratifiedKFold, cross_val_predict
cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
oof_probability = cross_val_predict(
pipeline,
X_development,
y_development,
cv=cv,
method="predict_proba",
)[:, positive_column]然后用明确决策规则评估阈值。如果一次 FP 成本为 2,一次 FN 成本为 12,开发集经验成本就是:
把成本、precision、recall 和行动量都画在阈值 上。根据这些开发曲线选择阈值并冻结,再用全部开发行重拟合选定 Pipeline,最终测试只评估一次。同时报告常规 0.5 行动作为透明参考。
如果概率已经校准,而且只有“行动”与“不行动”两种简单选择,还能推导理论阈值。一次不必要行动成本为 ,漏掉一个正类成本为 时,满足下式便行动:
这个公式假设概率已校准且成本模型完整。处理容量、干预收益、干预有效率、延迟反馈与不同样本价值都可能要求更丰富策略。它是讨论起点,不能取代领域评审。
检查预测概率是否名副其实
区分能力(discrimination)与校准(calibration)可能彼此矛盾。一个模型或许把所有延迟订单都排在准时订单之前,却把真实组频率 0.75 和 0.25 夸张成 0.99 和 0.01。它的排序很好,概率却过度自信。
校准曲线(calibration curve,也叫可靠性图 reliability diagram)会把相近预测概率分组,再比较每箱平均预测与真实正类频率。完美校准应接近对角线。点 表示预测约 70% 的这组样本,在当前评估数据中只有约一半为正。
分箱存在偏差—方差权衡。箱太少会隐藏形状,箱太多则每箱数据太少、曲线剧烈跳动。必须显示箱样本量,说明使用等宽箱还是等频箱,并检查重要业务切片。校准是人群性质:部署正类率发生漂移后,原先校准的模型可能不再校准。
两种严格概率损失可以补充图形。Brier 分数(Brier score)是概率平方误差均值:
对数损失则更严厉地惩罚自信错误。两者都混合了校准与其他预测表现,因此应当与排序指标及可靠性图共同解释,不能把任意一个称作“纯校准统计量”。
最后一个实验提供校准良好、过度自信和信心不足三种场景,气泡大小显示每箱支持度。在独立开发数据上执行再校准,点会向对角线靠近;再改变 FP/FN 成本,推导出的行动阈值也会移动。这两个控件解决的是不同问题。
scikit-learn 可以使用 CalibratedClassifierCV 执行事后校准:
from sklearn.calibration import CalibratedClassifierCV
calibrated = CalibratedClassifierCV(
estimator=base_pipeline,
method="sigmoid",
cv=5,
)Sigmoid 校准拟合平滑参数映射,通常是稳定起点。等距回归校准(isotonic calibration)更灵活,在校准数据少时也更容易过拟合。无论哪种方法,校准器都必须使用未参与对应基础估计器拟合的数据预测。嵌套或正确交叉拟合的开发评估可以守住这条边界。
校准无法修复糟糕排序:单调映射可能让概率更诚实,却让 ROC AUC 基本不变。移动阈值同样不会校准模型。最终报告应明确分成四组证据:
1. 排序证据:ROC AUC、PR 曲线、AP 与折间波动。
2. 概率证据:带箱样本量的可靠性图、Brier 分数与对数损失。
3. 决策证据:锁定阈值、混淆矩阵、precision、recall、行动量与期望成本。
4. 稳健性证据:正类率、时间或群组切片、不确定性、漂移触发条件与已知限制。
至此,分类工作流已经完整。我们从分数出发,把它转换成概率,探索线性与树模型的几何,统计阈值错误,追踪全部运行点,最后把可信概率连接到声明清楚的业务行动。揭开封存测试集时,被评估的已经是一个在看见测试标签之前完全定义好的决策。