8.1 指标、概率与决策阈值:模型分数和业务行动不是同一层
假设模型 A 的 ROC-AUC 更高,模型 B 却在每天能复核的 200 项中找出更多高损失事件。两项结论可以同时成立,因为它们概括的分数区域不同。部署决策需要看真实复核容量下的表现。
评估必须分三层:模型能否排序,概率是否可信,阈值后的行动是否值得。只报一个 accuracy、F1 或 AUC,会把三个问题混在一起。
本课目标
- 从混淆矩阵推导 threshold-dependent 指标;
- 区分 discrimination、calibration 与 decision utility;
- 正确解读 ROC、Precision–Recall、AP 和概率损失;
- 在 validation 上按成本或容量选择阈值;
- 为回归与多分类选择符合目标的指标。
1. 指标之前先固定预测问题
在计算任何数值前写下:
- 样本单位:用户、设备、任务还是时间窗口;
- cutoff:预测时刻能看到哪些信息;
- outcome/horizon:未来多久内发生什么算正例;
- 部署总体:新用户、同一设备未来记录还是随机同分布样本;
- 行动:告警、审核、排序、定价或资源分配;
- 成本与容量:FP、FN、延迟和每天可处理多少。
若标签定义或部署总体不同,两个模型的指标不能直接比较。模型评估首先是 estimand 设计,不是调用 classification_report。
2. 混淆矩阵依赖阈值
对 binary classifier,先把 score/probability 与阈值比较,才得到:
| 预测正 | 预测负 | |
|---|---|---|
| 实际正 | TP | FN |
| 实际负 | FP | TN |
常见指标:
Accuracy 不是“只在类别平衡时有效”。当正确决策代价为零、两种错误代价相同且评估总体与部署一致时,它可以合适;类别失衡只是让“永远预测多数类”的高 accuracy 更容易掩盖无用性。真正问题是 metric 与行动损失不匹配。
3. Precision 与 Recall 的分母回答不同问题
- Precision:已经触发的行动中,多少命中;受 prevalence 和阈值明显影响。
- Recall:全部已发生正例中,找出多少;依赖标签是否完整、horizon 是否成熟。
- Specificity 统计负例中正确排除的比例,FPR 统计误报比例;负例基数巨大时,即使 FPR 很小,绝对告警数也可能很大。
运营报告应同时给分子分母。例如 FPR=0.1% 在一千万负例上意味着约一万条 FP。
F-score:
4. 多分类平均方式会改变结论
对每类先算 precision/recall/F1,再聚合:
- macro:每类等权,突出小类;
- weighted:按各类 support 加权,可能被大类主导;
- micro:先汇总所有类的 TP/FP/FN,再计算;
- per-class:保留每一类,最适合发现具体失败。
单标签多分类若包含全部类别,micro-precision、micro-recall、micro-F1 都等于 accuracy:每次错分类会贡献一个 FP 和一个 FN。Multilabel 或只统计部分类别时通常不成立。应注明 averaging、类别范围、sample weight 与零分母处理。
5. ROC 衡量排序,不选择行动点
改变阈值会得到不同 TPR/FPR,连接成 ROC curve。ROC-AUC 可解释为:随机抽一个正例和负例时,模型把正例 score 排得更高的概率(ties 按约定处理)。
它有几个边界:
- 对严格递增 score 变换不变,所以不评价概率校准;
- 汇总所有阈值,其中很多阈值可能永远不会部署;
- 大量 TN 进入 FPR 分母,低 prevalence 时曲线可能看起来不错,实际 FP 数仍不可接受;
- 不同群体/时间的 case mix 改变后,AUC 也可能变化;
- 若只关心极低 FPR 区域,应报告 partial AUC 或该区域的 operating points。
“AUC 不受阈值影响”是对的;“AUC 不受类别分布和采样影响”则需要限定。将某类所有样本等倍复制,不改变该类的经验分数分布与 ROC 曲线,但 spectrum、抽样权重和群体构成会改变比较对象。
6. Precision–Recall 更直接观察告警质量
PR curve 在不同阈值下画 precision 与 recall。随机排序的期望 precision 与 positive prevalence 相关,因此跨 prevalence 数据集比较 AP 时必须说明基准率。
Average Precision(AP)是按 recall 增量对 precision 加权的离散汇总,不应和任意绘图库的梯形 PR-AUC 混称同一个定义。
低 prevalence、审核容量有限时,常同时报告:
- AP/AUPRC(注明定义);
- precision at
/ recall at ; - recall at fixed alert rate;
- 每天 TP、FP 绝对数;
- 与随机/规则 baseline 的 lift。
7. Probability quality 不是 AUC
若预测将进入期望成本、库存或定价计算,概率必须有语义。
Binary log loss:
它重罚自信且错误的预测。Brier score 是平均平方概率误差:
两者都是 proper scoring rule,但总体分数同时反映 calibration、resolution/discrimination 与数据不确定性,不能仅凭 Brier 更低就断言“校准更好”。还应查看 reliability diagram、各 bin 样本数、calibration-in-the-large 与 slope。
Calibration curve 受 binning 影响;样本少时每个 bin 的实际率不稳定。应给置信范围或至少报告 bin support。
8. Score、Probability 与 Action
把系统拆成:
features -> model score -> calibrated probability -> decision rule -> action排序任务可以只需要 score。要计算期望损失时需要概率。最终 action 还受成本、容量、公平/安全约束和拒绝选项影响。
阈值 0.5 只有在概率校准且特定对称代价假设下才自然。若 false negative 成本为
若正确决策代价为零,预测正类的条件是
9. 阈值只能在 Validation 选择
下面从验证概率中选择满足最低 precision 的最大 recall 点。precision_recall_curve 的最后一个 precision/recall 点没有对应 threshold,所以要对齐长度:
下面是 Python 3 / scikit-learn 1.9.0 片段,需提供同时含 0、1 的 y_valid、逐行对应且位于 [0, 1] 的有限验证概率,以及独立的 test_probability。80% 是经验筛选门槛,不是 precision 的置信下界。
import numpy as np
from sklearn.metrics import precision_recall_curve
precision, recall, thresholds = precision_recall_curve(
y_valid,
valid_probability,
)
eligible = np.flatnonzero(precision[:-1] >= 0.80)
if len(eligible) == 0:
raise RuntimeError("No validation threshold reaches 80% precision")
best = eligible[np.argmax(recall[eligible])]
chosen_threshold = thresholds[best]
test_prediction = test_probability >= chosen_threshold例如验证标签 [1, 0, 1, 0, 1]、概率 [0.9, 0.8, 0.7, 0.6, 0.5],只有阈值 0.9 满足 80% precision,recall 为
校准器、阈值和模型超参数都是从数据选择的参数,不能都在同一小块 validation 上无限试验。可使用交叉拟合、嵌套验证或预留不同用途的数据段。
10. 回归指标同样包含代价选择
- MAE:线性惩罚,条件中位数相关,对大误差不如 MSE 敏感;
- MSE/RMSE:平方惩罚大 residual;RMSE 回到 target 单位,但不能跨不同尺度直接比较;
:相对常数均值 baseline 的平方误差改善,可为负,不是“解释了因果方差”; - MAPE:真实值接近 0 时爆炸,对正负/零值问题大;
- pinball/quantile loss:预测条件分位数,适合非对称成本;
- interval coverage + width:评估 prediction interval,不能只报 coverage。
同时按 target 范围、时间、群体和关键业务区域报告 residual。一个平均 RMSE 可能掩盖高价值尾部失败。
常见误区
- Accuracy 在不平衡数据上完全无效:是否合适取决于损失与总体,失衡只是常见警报。
- AUC 高说明概率可信:AUC 只看排序。
- PR curve 不受负类影响:precision 明确依赖 FP 和 prevalence。
- F1 同时兼顾所有代价:它忽略 TN,也不包含真实成本。
- Test 上挑阈值后仍是最终测试:test 已参与选择。
练习
- 为相同 confusion matrix 写出 precision、recall、specificity、FPR 和绝对告警量。
- 固定 score 排序,做严格递增变换,验证 AUC 不变但 log loss 可改变。
- 改变 prevalence,观察 precision/AP baseline 与 ROC 的变化。
- 以每日容量和 FP/FN 成本分别选择阈值,比较两种行动规则。
- 为一个回归任务说明为什么选 MAE、RMSE 或 quantile loss。
小结
指标不是模型的固有分数,而是针对预测对象、分布和行动问题的测量。ROC/AP 看排序,log loss/Brier 与 reliability diagram 看概率,confusion matrix 和 utility 看阈值后的决策。三层分开,才能解释一个模型为什么值得部署。
下一课解决评估数据从哪里来:随机 K 折只是 iid 情形的一种工具,用户、设备、时间和标签窗口会决定真正的切分边界。