当您只关心 ROC 曲线的前 5% 时,如何优化分类模型?

机器算法验证 分类 不平衡类
2022-03-21 04:29:49

想象一个现实世界的场景,你只能猜测总人口的 0% 到 5%。你必须说“我认为这 5% 的人有特质 A”,而且你不能猜测更多。另一件事是,只有 3-5% 的人有特质 A。所以这不一定是一个容易掌握的特质。

我想我并不关心整个 AUC,我只关心 0.95 到 1.00 之间的 AUC。

顺便说一句,我所做的大部分建模都是使用插入符号在 R 中进行的,是否有任何简单的设置可以调整指标,非常感谢:

model  <- train(  y = y, x = x
                , metric = "ROC"
                , method = "rpart"
                , trControl = 5FoldsClass
                )
1个回答

具有强不平衡类的二进制分类的一般主题已在同名线程中进行了一定程度的覆盖。简而言之:caret确实允许更适合不平衡的指标,例如 Cohen 的 kappa 或 Precision-Recall AUC;PRAUC 相对较新,您可以使用prSummary指标找到它。您还可以尝试重采样方法,在估计过程中重新平衡样本,使类特征变得更加突出。

如上所述,您似乎对可以预测的阳性总数我可以想到两个直接的解决方法。他们都依赖于你正在使用概率分类器的想法。简而言之,概率分类器是一个分类例程,它可以以十进制数的形式输出关于其预测的信念度量,我们可以将其解释为概率。弹性网络随机森林和各种集成分类器确实提供了这种开箱即用的功能。支持向量机N[0,1]通常不提供开箱即用的概率,但如果你愿意接受一些近似值,你可以得到它们。无论如何,回到解决方法:

  1. 使用自定义指标。我们不是评估整个 PR 曲线下方的区域,而是关注保证最少点数的区域。这些通常称为部分 AUC指标。他们要求我们定义一个自定义的性能指标。检查carettrainControl summaryFunction论点以获取更多信息。让我强调你不必一定要研究 AUC。鉴于我们可以在模型训练过程的每个步骤中估计概率,我们可以在评估我们的性能指标之前在估计过程中执行阈值步骤。请注意,在我们“修复N ”的情况下,使用召回(敏感度)值作为指​​标会很好,因为它会立即控制我们想要N点。(实际上,在这种情况下,召回率和精度将相等,因为 False Negatives 的数量等于 False Positives 的数量。)

  2. 阈值最终输出。给定一个可以估计属于特定类别的项目的概率,我们可以选择与感兴趣的类别相关的个最高概率的项目。这很容易实现,因为基本上我们在报告我们的发现之前就应用了一个阈值。我们可以使用我们最喜欢的性能指标来估计模型并评估它们,而无需对我们的工作流程进行任何真正的改变。这是一种简单的方法,但它是满足给定约束的最简单方法。如果我们使用这种方法,最初使用基于 AUC 的性能指标可能会更相关。这是因为使用诸如准确率、召回率之类的东西会建议使用特定的阈值(通常Np0.5) 来计算模型训练所需的指标——我们不想这样做,因为我们不会使用这种方法p

一个非常重要的警告:我们需要有一个校准良好的概率分类器模型才能使用这种方法;IE。我们需要在预测的类概率和观察到的类率之间保持良好的一致性(检查这个caret函数calibration)。否则,在区分项目时,我们的洞察力将完全失效。作为最后的建议,我建议您查看lift-curves它们会让你看到你能多快找到给定数量的正面例子。鉴于施加的限制,提升图表可能会提供非常丰富的信息,并且您可能希望在报告您的发现时展示它们。