为什么 ROC 对类分布不敏感?

机器算法验证 机器学习 精确召回
2022-03-26 01:46:13

我很困惑为什么 ROC 在ROC 分析简介中描述的类分布下是不变的。我无法理解为什么测试集中正负类的比例不会影响 ROC 曲线的示例。

还要引用这篇文章,它说:

为了说明这一点,首先让我们从一种非常好的方式来定义精确度、召回率和特异性。假设您有一个名为 1 的“正”类和一个名为 0 的“负”类 是您对真实类标签的估计。然后: 要注意的关键是敏感性/召回率和特异性构成 ROC 曲线的概率是基于真实类别标签的概率。因此,无论是多少,它们都是相同的。Y^Y

Precision=P(Y=1|Y^=1)Recall=Sensitivity=P(Y^=1|Y=1)Specificity=P(Y^=0|Y=0)
P(Y=1)

我无法将这几个概念调和在一起,可能是由于统计严谨性的差距。我非常感谢有人给我一个更详细的例子,说明为什么以上是真的。


更具体地说,有人可以解释上面的报价吗?特别是,以 P(Y=1) 为条件意味着什么?这个P指的是什么?以及为什么以此为条件意味着 ROC 对类分布不敏感。另外,我确实阅读了几乎所有与此问题相关的帖子,但对于 ROC 曲线是否对类别不平衡敏感或不敏感,并没有达成共识。

我读过的帖子:我知道很多,我什至设法使用纯 python 代码实现 ROC 曲线,没有问题。但似乎即使我能实现它,我仍然没有完全理解它。

中华民国的解读

AUROC 的优缺点


最新了解 2021 年 9 月 21 日:

正如弗兰克哈雷尔教授在下面的帖子中提到的那样,我进一步说:

Y 取 0 和 1,ROC 图下的面积(称为该值)以简化的方式表示,如果您随机抽取一个正样本和一个负样本,则您的正样本排名更高的概率(读:更高的概率)比负样本是aa

现在用他的类比,老师是负样本,足球明星是正样本,所以现在你以 Y = 0 和 Y = 1 为条件。一旦你以条件,(特异性/TNR 或 1-FPR ) 那么您的样本空间有效地从整个样本群体减少到仅,由此,我直观地认为没有作用,因此不会以任何方式影响 FPR。类似的概念可以应用于 TPR。因此,TPR 和 FPR 都不依赖于整个样本空间(测试集的整个分布(?)),因此不会受到测试集(?)的类分布变化的影响。Y=0Y=0Y=1

TODO:解释为什么精度取决于类分布。

4个回答

由于 ROC 曲线上的所有点都在 Y 上,因此 Y 的分布必然与这些点无关。这也指出了为什么不应使用 ROC 曲线,除非在回顾性病例对照研究中,样本取自 Y=0 和 Y=1 观察值。对于我们基于 X 采样或完全随机采样的前瞻性观察数据,使用不尊重样本如何产生的表示是不合逻辑的。https://www.fharrell.com/post/addvalue/

在分类问题中,模型输出是概率。不同的问题有不同的阈值边界。例如,在决定一只狗和一只猫时,50% 是有道理的,但当我们谈论心脏病发作的概率时,所有概率都会低得多。AUC 通过检查的许多(尽可能多的)介于 0 和 1 之间的阈值来解决它。FPRTPR

AUC 只关心模型的排名,即模型是否对高于零的那些进行排名。 

让我们检查一下 AUC 的组成部分:

TPR=TPP

FPR=FPN 

为例(将类似于)。TPRFPR

我们为每个阈值和每个示例计算对于每个示例,的函数——这不受正负比例的影响。TPRTPY,Y^,threshold

现在,的总数受总数的影响,但应该保持不变。因为,如果我们有更多的,对于给定的阈值,我们也会以相同的比率获得更多TPPTPRPTP

总而言之,改变的数量不应该影响给定阈值的也是如此,因此正负之间的比率不应改变 ROC 曲线。PTPRFPRN

我在回答什么

我觉得你的主要陈述是:

我无法将这几个概念调和在一起,可能是由于统计严谨性的差距。

所以我的回答是基于解决 AUCROC 类不平衡的数学和统计含义之间的差异。

AUCROC 回顾

AUCROC 是根据接收者操作员特征曲线的曲线下面积计算的。该曲线绘制了一系列阈值(例如数据集中的每个实际值)的 1 敏感性与特异性。

Sensitivity/recall 是 TP 与所有实际阳性的比率TP/(TP+FN)或者TP/Cases. 在计算敏感性时没有考虑实际的负数。

特异性是真阴性与所有实际阴性的比率TN/(TN+FP)或者TN/Controls. 特异度计算不考虑实际阳性组

数学和统计解释

由于 AUCROC 是直接从这两个指标计算得出的,并且这两个指标都没有考虑其他组,因此组平衡和预期AUCROC 之间没有数学联系。

但是,重要的是要注意“预期”具有精确的统计含义,以您期望度量标准在非常非常(无限)长期实验中收敛的值的形式。统计学的关键在于,我们不仅要考虑长期的期望值,还要考虑基于有限抽样的实际结果的短期可变性/可靠性/置信度。

我们对实际实现结果的信心与±σn在哪里σ是数据的标准差,n是样本总数。如果n1>>n2然后n1>n2. ROC 中的点被特异性和灵敏度的误差所取代,因此该曲线下的面积是这些误差的合成,并且对整体置信度的综合影响与

±(σ1n1)2+(σ2n2)2
.

如果n1n2那么群体患病率将得到平衡,并且任何群体都不会扭曲对计算结果的信心。如果n1>>n2那么信心将受到低流行率组的更多限制。

概括

预期的长期 AUCROC 值不受类别流行度的影响,但统计置信度受低流行度类别的拖累。

与其他人相比,我的回答侧重于了解您如何在数据科学案例中使用 ROC 和 AUC。如果您需要数学/统计部分,我的回答对您没有帮助。

基本上,ROC 曲线显示模型的每个阈值的假阳性 (FP) 率和真阳性 (TP) 率(您决定作为分类“1”和“0”之间的限制的分数)。所以一开始,如果你的阈值是 1(你的模型的最大可能分数),你把所有东西都归类为 0,然后有 0% FP 和 0% TP。如果阈值为 0(您的模型的最小可能分数),则所有内容都归类为 1,因此您的 TP 和 FP 率为 100%。使用严格介于 0 和 1 之间的阈值,您的 FP 和 TP 率将介于 0% 和 100% 之间。

由于此曲线表示在每个可能的阈值处获得的速率,因此如果您为测试集打印 ROC 曲线,它完全独立于训练集。它仅显示您拥有多少 FP 和 TP,与您在该组中可以拥有的最大值相比。

让我们举一个简单的例子:您有一个包含 100 个“0”和 10 个“1”的测试集。找到了 10 个“1”中的 5 个,但将 30 个“0”误分类为“1”以实现这一目标,您获得了曲线

x = FP_Rate = 30/100 = 0.3
y = TP Rate = 5/10 = 0.5

现在想象一下,你的数据集是平衡的,你有 50 个“0”和 50 个“1”。如果你仍然发现一半的(25'1')错误分类了你的 30% 的零(15'0'),你仍然会找到x=0.3 ; y=0.5你的曲线。

ROC 曲线的唯一问题是 FP 的百分比与 TP 的百分比相比,模型是否平衡。

---评论问题后编辑:

这取决于您如何使用 AUC(ROC 曲线下的面积,您可能称之为 ROC 指标)。AUC 衡量 1 个模型在 1 个集合上的性能。因此,如果您将其应用于 Train,它将测量您的模型(基于 Train 构建)在 Train 上的表现(您经常这样做是为了比较 AUC_Train 和 AUC_Test 并查看是否过拟合)。AUC 与您的模型的构建方式无关,它只是评估应用于 1 个特定集合的 1 个模型的结果。无论该集合是训练还是测试,当您计算 AUC 时,它只是“您测试模型性能的集合”。所以这没什么区别。

此外,如果您想要一种概率方式来理解 AUC:如果您的 AUC 为 0.8,这意味着如果您采用一个随机的“1”行和一个随机的“0”行并将您的训练模型应用于它们,那么拥有的概率'1' 行的分数高于 '0' 行的分数是 0.8

然后,您将了解 AUC=0.5 如何意味着该模型是一个随机分类器。