阈值移动是什么?不改模型,只调判定的分界线
阈值移动(Threshold-moving)是一种处理类别不平衡和不同错误代价问题的简单方法:模型训练好之后,不改变模型本身,而是调整把模型输出的分数或概率转换为类别时所使用的判定阈值。
为什么默认阈值不一定合适
很多分类模型并不直接输出类别,而是输出一个样本属于正类的概率,然后与一个阈值比较:概率大于阈值就判为正类,否则判为反类。默认的阈值通常是 0.5,这在两类样本数量相当、两种错误的代价相同时是合理的。但在实际问题中,这两个条件常常不成立。类别不平衡时:如果训练数据中正例只占 1%,模型学到的概率往往会整体偏向反类,很多真正的正例得到的概率可能只有 0.2、0.3,按 0.5 的阈值它们全都会被判为反类,模型几乎找不出任何正例。代价不对等时:在疾病筛查中,漏诊一位患者的代价远远大于误诊一位健康的人,即使一个人患病的概率只有 20%,也值得安排进一步的检查,用 0.5 作为阈值就会漏掉太多的病人。
再缩放
周志华《机器学习》在讨论类别不平衡学习时,把阈值移动作为一个基本的策略,称为“再缩放”。它的思路是:当训练集中的正负样本数量相同时,模型输出的概率大于 0.5 就判为正类,这实际上是在比较“正类的几率”是否大于 1。当正负样本的数量不同时,应该把这个比较的标准调整为观察到的正负样本数量之比:只要模型预测的正类几率大于正例数与反例数之比,就判为正类。比如正负样本的比例是 1 比 9,那么只要正类的概率超过 0.1,就可以判为正类。这背后的假设是:训练集是真实样本总体的无偏采样,观察到的类别比例代表了真实的比例。同样的思想也适用于代价敏感学习:把阈值根据两种错误的代价之比进行调整,比如漏报的代价是误报的 9 倍,就相应地降低判为正类的阈值。这与贝叶斯决策理论中“选择期望损失最小的类别”的结论是一致的。
在实践中如何选择阈值
除了根据类别比例和代价公式计算,更常用的做法是在一个单独的验证集上,尝试一系列不同的阈值,计算每个阈值下的评价指标,选择让目标指标最好的那一个。目标可以是:让 F1 分数最大;在保证查全率不低于某个要求,比如 95% 的前提下,让查准率尽可能高;让总的期望代价最小;或者在 ROC 曲线上选择一个兼顾真正例率和假正例率的点,比如让真正例率减去假正例率最大的那个点,即约登指数。需要注意的是,阈值必须在验证集上选择,而不能在最终的测试集上选择,否则测试结果会过于乐观。
阈值移动的优缺点
阈值移动的优点是简单、方便:不需要重新训练模型,不改变训练数据,也不会像过采样那样增加训练的负担,或者像欠采样那样丢弃数据;而且阈值可以随时根据业务需求的变化来调整,比如在促销期间放宽风控的阈值。它的局限在于:它只改变决策的分界点,不改变模型的排序能力,如果模型本身区分正负类的能力很差,调整阈值也无济于事;另外,如果模型输出的概率没有经过良好的校准,根据公式计算出的阈值可能并不准确,这时基于验证集来选择阈值更加可靠。在实践中,阈值移动常常与类别加权、重采样等方法结合使用。