TATECHATLAS
◎ 简体中文
数学与模型

按假阳性和假阴性的成本选择分类阈值

一个关于通过加权假阳性和假阴性成本来选择决策阈值的实用指南,使用保留的验证集和 scikit-learn 混淆矩阵。

本文内容

将候选阈值在验证数据上使用显式错误成本进行比较。在本指南的假设计数中,变体 A 有 4 个假阳性和 1 个假阴性;变体 B 有 1 个和 3 个。成本分别为 1 和 5 时,它们的总计分别为 9 和 16,因此在这两个选项中 A 更便宜。这是一个说明性计算,而不是拟合模型的结果或全局最优阈值的证明。保持最终测试数据独立,并评估不确定性和部署条件。

将分数与决策分开

分类器产生一个分数,而阈值将该分数转化为决策。对于二元规则,可以将正决策定义为分数大于或等于阈值。分数的方向和正类必须明确。一个看起来像概率的值本身并不能确立模型是校准的。

改变阈值会改变哪些案例接收正决策和负决策。它不会重新训练底层模型或使其概率无偏。像 0.5 这样的常规截止点是概率分数的起点,而非通用的成本最优设置。根据你实际需要做出的决策来比较备选方案。

指定哪种错误成本更高

在许多领域,假阴性(FN)比假阳性(FP)要危害得多。成本敏感的阈值选择要求用户分配数值惩罚,例如 cost(FP)=1 和 cost(FN)=5。这些数字不是从数据中推导出来的;它们反映领域专业知识、监管影响或下游费用。一旦成本固定,给定阈值的总成本就是 cost(FP)·FP + cost(FN)·FN。

计算混淆矩阵

Scikit-learn 的 confusion_matrix 遵循行=真实类、列=预测类的约定。对于使用 labels=[0,1] 的二元问题,各项为:TN = C[0,0],FP = C[0,1],FN = C[1,0],TP = C[1,1]。使用验证分数和候选阈值,我们可以获得 y_pred = (probs >= thr).astype(int),然后调用 confusion_matrix(y_val, y_pred, labels=[0,1])。

比较两个说明性阈值

使用明确假设的混淆计数:变体 A 有 FP=4 和 FN=1,变体 B 有 FP=1 和 FN=3。设假阳性成本为 1 个单位,假阴性成本为 5 个单位。A 的总计是 1*4 + 5*1 = 9。B 的总计是 1*1 + 5*3 = 16。

尽管 B 的假阳性更少,但在这两个构造的选项中 A 更便宜。这些计数是为了算术说明而提供的;代码不会训练分类器或从数据集中生成它们。下面打印的两个总计是从公式推导出的预期结果,而非执行测试的观测值。

cost_fp = 1
cost_fn = 5
fp_a, fn_a = 4, 1
fp_b, fn_b = 1, 3
cost_a = cost_fp * fp_a + cost_fn * fn_a
cost_b = cost_fp * fp_b + cost_fn * fn_b
print("Cost A:", cost_a)
print("Cost B:", cost_b)

在保留的验证集上选择

在训练数据上训练模型,然后在独立的验证预测上比较阈值。不要使用拟合模型的相同观测来计算验证计数。为任务使用适当的拆分:时间序列问题可能需要时间尊重的拆分,而非随机抽样。

阈值选择本身使用验证结果,因此报告最小的观测验证成本可能是乐观的。独立的拆分防止直接重用训练示例进行调优;它不能保证无偏估计或足够的正类样本。记录拆分、候选阈值、类别计数和成本假设,以便可以解释比较。

将阈值选择远离测试集

在对未用于拟合或阈值选择的最终测试数据进行评估之前,冻结模型、阈值和预处理。如果测试结果导致你再次调优,该样本就成为选择过程的一部分,不再具有相同的独立评估作用。

独立的测试集很有用,但不能保证生产性能。小样本、代表性不足的人群或变化的条件可能会扭曲估计。报告观测计数、样本量和不确定性,而不是将单个总计称为保证的或无偏的生产成本。

检查部署流行率

部署流行率是决策将被使用的总体中正类案例的比例。它可能与验证流行率不同。要在建议的流行率 p 下比较每案例预期成本,使用 cost_fp*(1-p)*FPR + cost_fn*p*FNR,其中 FPR 是被分类为正的负类案例的比例,FNR 是被分类为负的正类案例的比例。

这种调整假设条件错误率在变化的类别分布下仍然适用。它不处理特征、校准或标注过程的任意变化。两类都需要足够的观测来估计它们的比率。将每案例预期成本乘以建议的总体规模可在这些假设下给出总计;不要将不同规模总体的原始计数相互比较,仿佛它们是可互换的。

说明成本比较省略的内容

简单的成本公式忽略了几个现实因素:(1)下游行动的货币价值(例如额外测试),(2)成本估计中的不确定性,(3)超越二元结果的早期检测潜在好处,以及(4)校准的影响 - - 概率估计可能有偏,使低阈值看起来比实际更便宜。这些省略应被记录下来,并且可以通过改变成本参数进行敏感性分析。

检查清单

  • 明确定义正类和分数方向。
  • 将训练和阈值选择观测分开。
  • 使用 labels=[0,1] 时,按行优先顺序读取混淆矩阵为 TN、FP、FN、TP。
  • 说明假阳性和假阴性成本,包括其单位。
  • 将 9 和 16 的总计视为构造的算术示例。
  • 将最终测试数据排除在阈值选择之外。
  • 调整流行率时,说明关于条件错误率的假设。

该示例使用假设的二元混淆计数和固定成本。它识别两个选项中较便宜的一个,而非全局最优阈值。独立的验证或测试拆分不能保证无偏的生产估计、校准的概率或分布变化下的稳定性。实际部署需要具有代表性的数据、不确定性分析和合理的成本假设。

参考来源

  1. scikit-learn: decision threshold tuning ↗
  2. scikit-learn: confusion matrix ↗
返回顶部 ↑