大白话解释P-R曲线,ROC曲线和AUC曲线

2024-04-27

1. 大白话解释P-R曲线,ROC曲线和AUC曲线

在分类问题里,有几个重要的指标可以用来衡量算法的能力,比如Recall(召回率),Precision(精确率),F1值等。P-R曲线,ROC曲线,AUC曲线等。之前已经对前三个进行过介绍,本次只介绍后三个。
   【1】背景知识
   还是以二分类为例,混淆矩阵如下:
                                          
 在二分类的前提下,所有的case,它的真实情况(label)只有两种情况(1/0),预测结果也只有两种情况(1/0),所有的排列组合就有四种情况,如上图所示1-4个区域。
   其中recall(召回率),也叫查全率;precision(精确率),也叫查准率
   以上为背景知识。
  
 【2】P-R曲线
   同一个模型,在不同阈值(threadhold)条件下,对应的recall和precision是不一样的,一般随着一个的升高另一个会降低,正所谓鱼和熊掌不能兼得。那么遍历所有的阈值,就会有若干的准召率数据对。把这些数据对分别设置成横坐标与纵坐标,画出的曲线就是P-R曲线,如下
                                          
 如果一个学习器的P-R曲线被另一个学习器的P-R曲线完全包住,则可断言后者的性能优于前者,例如上面的A和B优于学习器C。但是A和B的性能无法直接判断,我们可以根据曲线下方的面积大小来进行比较,但更常用的是平衡点或者是F1值。
   平衡点(BEP)是P=R时的取值,如果这个值较大,则说明学习器的性能较好。
   F1 = 2 * P * R /( P + R ),同样,F1值越大,我们可以认为该学习器的性能较好。
   另外可以通过实际的需求来确定A和B的选择,如需要一个高精确的自动处理模型(可以少召回但是需要避免误伤),那就需要使用A模型并采用比较高的阈值;
   而如果需要一个高召回模型保证召回率,不太关心误伤,那可以使用模型B并采用比较低的阈值。
  
 【3】ROC曲线
   ROC曲线的横纵坐标分别是召回率和误杀率(1-精确率) 上面混淆矩阵图中的3/(2+3),以及1/(1+4),纵坐标可以理解为抓住
   坏人的比例;横坐标可以理解为误伤好人的比例。
   而ROC曲线的两个极端[0,0]点表示(用抓坏人来举例)不管好人坏人全放过,也就是抓住坏人0%,误伤好人0%,不抓坏人也不误伤好人。[1,1]点表示不管好人坏人全抓住,也就是抓住坏人100%,误伤好人100%
                                          
 【4】AUC曲线
   AUC曲线是ROC曲线下的面积,介于0和1之间,作为数值可以直观的评价分类器的好坏,值越大越好。
   AUC = 1,是完美分类器,采用这个预测模型时,存在至少一个阈值能得出完美预测。绝大多数预测的场合,不存在完美分类器。
   0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
   AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值

大白话解释P-R曲线,ROC曲线和AUC曲线

2. 理解ROC和AUC

 放在具体领域来理解上述两个指标。如在医学诊断中,判断有病的样本。那么尽量把有病的揪出来是主要任务,也就是第一个指标TPR,要越高越好。而把没病的样本误诊为有病的,也就是第二个指标FPR,要越低越好。不难发现,这两个指标之间是相互制约的。如果某个医生对于有病的症状比较敏感,稍微的小症状都判断为有病,那么他的第一个指标应该会很高,但是第二个指标也就相应地变高。最极端的情况下,他把所有的样本都看做有病,那么第一个指标达到1,第二个指标也为1。
   在上述癌症检测中(正反例极度不平衡的情况下),
   有时我们还会见到sensitivity和specificity两个概念:
   也就是说想要sensitivity高一点相当于要True Positive Rate高一点,要specificity高一点相当于False Positive Rate低一点/。为了权衡recall和precision,对于评判二分类器的优劣,可以使用ROC(Receiver Operating Characteristic)曲线以及AUC(Area Under roc Curve)指标。
   ROC曲线的几个概念:
   以医生诊断为例,我们可以看出:
                                           上图中一个阈值,得到一个点。现在我们需要一个独立于阈值的评价指标来衡量这个医生的医术如何,也就是 遍历所有的阈值 ,得到ROC曲线。还是一开始的那幅图,假设如下就是某个医生的诊断统计图,直线代表阈值。我们遍历所有的阈值,能够在ROC平面上得到如下的ROC曲线。   
                                           
   以一个简单的模拟数据来计算下ROC曲线每个点的值
   Python可以用sklearn,R可以用ROCR包或者pROC包,这里以ROCR包来检验下上述计算结果:
   x.values对应FPR,y.values对应TPR, alpha.values对应预测打分cutoff,结果跟上面完全一致,然后简单做个ROC图。
                                           AUC值就相当于ROC曲线的所覆盖的面积,可以从ROC曲线看出AUC值越大,其分类效果越好。
    理解ROC和AUC     ROC曲线与AUC值 

3. ROC曲线的意义


ROC曲线的意义

4. ROC AUC 代价曲线

 我们根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,与P—R曲线的使用查准率与查全率为纵,横轴不同,ROC曲线的 纵轴是“真正例率(TPR,True Positive Rate)” , 横轴是“假正例率(False Positive Rate)”. 
                                                                                                                           进行学习器比较时,与P—R图相似,若一个学习器的ROC曲线被另一个学习器的曲线完全“包住”,则可以断言后者的性能优于前者;若两个学习器的ROC曲线发生交叉,则难以一般性地断言两者孰优孰劣,此时如果一定要进行比较,则较为合理的判断依据是 比较ROC曲线下的面积 ,即AUC.
                                           形象化地看,AUC考虑的是样本预测的排序质量,因此它与排序误差有紧密联系
                                           若正例的预测值小于反例,则记1个罚分,若相等则记0.5个罚分(可以理解成线代里面的逆序对数量),那么rank—loss对应的是ROC曲线之上的面积
                                           明确参数   : p=m+/m
   目的:对于一个模型,根据p不同,找到使得代价总期望最小的模型的阈值
   横轴:归一化的正概率代价期望
                                           纵轴:归一化的总代价期望
                                           大致过程:给定p,给定模型根据归一化代价期望的最小值    确定混淆矩阵的成分比例 ,阈值决定了这个比例,那如果这个比例确定了,阈值也就确定了,所以这时模型的阈值也对应确定下来了,也就是模型固定下来了   同时模型的综合考量指标P,R,F1,Fbeta等都确定下来了
   下面我们用实例来说明一个阈值对应一条直线,我们的例子是一个二分类问题,它是五还是不是五,样本是如图所示的十二张图片进入该分类器后,给其打分
   评判标准:得分越高的越是五,得分越低的越不是五
                                                                                   1.如果我们使用Pcosts作为横轴,得出的是红色直线,而以p作为横轴,得出的是紫色弯曲虚线,不是一个线性关系,虽然我们想要的就是已知某一个p,我们到底应该对应哪一条曲线的θ值更好,但是不能拿p当横轴,因为其返回曲线是非线性的,不利于我们分析。
   2. 当p等于0时Pcosts等于0,cost_norm=FPR;当p等于1时Pcosts等于1,cost_norm=FNR 
                                           3.p的含义: 连接两点的线段如何用参数方程表示? 假设两点分别是A,B,如果想表示AB连线所有点的集合用 λA+(1-λ)B,λ∈[0,1] ,通过λ的变化,我们可以得到线段AB。、
   生成多个阈值下的曲线

5. ROC曲线的意义


ROC曲线的意义

6. ROC曲线的介绍

受试者工作特征曲线 (receiver operating characteristic curve,简称ROC曲线),又称为感受性曲线(sensitivity curve)。得此名的原因在于曲线上各点反映着相同的感受性,它们都是对同一信号刺激的反应,只不过是在几种不同的判定标准下所得的结果而已。接受者操作特性曲线就是以虚报概率为横轴,击中概率为纵轴所组成的坐标图,和被试在特定刺激条件下由于采用不同的判断标准得出的不同结果画出的曲线。ROC曲线是根据一系列不同的二分类方式(分界值或决定阈),以真阳性率(灵敏度)为纵坐标,假阳性率(1-特异度)为横坐标绘制的曲线。传统的诊断试验评价方法有一个共同的特点,必须将试验结果分为两类,再进行统计分析。ROC曲线的评价方法与传统的评价方法不同,无须此限制,而是根据实际情况,允许有中间状态,可以把试验结果划分为多个有序分类,如正常、大致正常、可疑、大致异常和异常五个等级再进行统计分析。因此,ROC曲线评价方法适用的范围更为广泛。

7. ROC曲线的概念

在ROC空间中,以FP rate为横轴、TP rate为纵轴
  
 ROC曲线是显示Classification模型真正率和假正率之间折中的一种图形化方法。
  
 解读ROC图的一些概念定义::
  
  真正(True Positive , TP) 被模型预测为正的正样本;
  
  假负(False Negative , FN) 被模型预测为负的正样本;
  
  假正(False Positive , FP) 被模型预测为正的负样本;
  
  真负(True Negative , TN) 被模型预测为负的负样本。
  
  真正率 (True Positive Rate , TPR)或灵敏度(sensitivity)
  
 TPR = TP /(TP + FN)(正样本预测结果数 / 正样本实际数)
  
  假负率 (False Negative Rate , FNR)
  
 FNR = FN /(TP + FN) (被预测为负的正样本结果数 / 正样本实际数 )
  
  假正率 (False Positive Rate , FPR)
  
 FPR = FP /(FP + TN) (被预测为正的负样本结果数 /负样本实际数)
  
  真负率 (True Negative Rate , TNR)或特指度(specificity)
  
 TNR = TN /(TN + FP) (负样本预测结果数 / 负样本实际数)
  
 目标属性的被选中的那个期望值称作是“正”(positive)

ROC曲线的概念

8. ROC-AUC 与 PR-AUC 的区别与联系

 相关术语解释:
   其中,真正例率等于召回率
   ROC,Receiver Operation Characteristics
   AUC,Area Under Curve
   ROC-AUC 指的是 ROC 曲线下的面积
   通过在 [0, 1] 范围内选取阈值 (threshold) 来计算对应的 TPR 和 FPR,最终将所有点连起来构成 ROC 曲线。
   一个没有任何分类能力的模型,意味着 TPR 和 FPR 将会相等 (所有正例将会有一半被预测为正例,所有负例也将会有一半被预测为正例),这时 ROC 曲线将会如下图蓝色虚线所示。
                                           那么在 ROC-AUC 的衡量下,一个理想模型的输出应该是怎样的呢?可以从 TPR 和 FPR 的定义出发,我们肯定是希望理想中的模型在面对正样本时预测为正的概率一定比面对负样本时预测为正的概率大,假设有样本标签和模型预测概率如下:
   现在分别选择 5 个阈值 0,0.3,0.42,0.6,1,TPR 和 FPR 如下:
     
   连接以上 5 个点,得到上图中红色点划线,显然,此曲线下的面积等于 1,是 ROC-AUC 所能取到的最大值,这个例子对应的模型就是我们理想中的模型,所有正例对应的模型输出都大于负例的模型输出。绿色实现代表了某个我们训练的这是模型,其 ROC-AUC 值介于 0-1 之间。
   PR-AUC 的构造和上述过程基本一致,只是需要再计算出 Precision 和 Recall。PR 曲线可能如下图所示:
                                           黄色对应逻辑回归模型的能力,比较正常没什么特别,按照前面的计算方式计算出来就可以得到。蓝色水平虚线代表的是完全随机的未经过学习的模型,为什么水平呢?举个例子,假设现在有  m  个正样本, n  个负样本,现在分别取阈值 0,1/3,0.5
   通过以上几个阈值可以发现一个随机模型的 PR 曲线 Precision 值为正样本占总样本的比例,Recall 的范围在 0-1之间。当阈值取 1 或者说大于 1 时,此时 TP 等于 0,  ,这个点对于蓝色水平虚线像一个异常点,实际上使用  sklearn  中的 api 计算可以发现使用的 thresholds 中没有大于等于 1 的,全部小于 1,这点和 ROC-AUC 不同。以上解释了随机模型的 PR-AUC 为什么是一条水平线。
   所以,ROC-AUC 衡量的是模型排序的能力,并不取决于某一个阈值,不像 accuracy、precision、recall、f1 等指标。提到 ROC-AUC 大家的第一反应可能是当数据集不平衡时使用这个指标较好,但事实真的如此吗?PR-AUC 同样不依赖于阈值。
   假设现在有 100 个正样本,10000 个负样本,常举的一个例子是,模型只要全部预测为负样本,accuracy 就可以达到 0.99,看上去非常 nice,但实际上模型啥也没学到,此时 ROC 的 TPR 等于 0、 FPR 等于 0,结果非常糟糕。再考虑 Precision 和 Recall,显然它们也都是 0,同样能够反映出模型的真实能力。
   此时可能我们会对负样本进行下采样,然后训练好的模型可能不会再那么愚蠢了,此时存在一个问题:使用下采样前的样本进行评估还是下采样后的样本呢?分析一下 TPR 和 FPR 的表达式,此时模型已经训练好,它的能力是不会发生改变的,我们采样的也只是负样本,所以 TPR 不会受到采样的影响。再看 FPR,实际上 FPR 也只是在负样本中进行计算,采样对 FP 和 TN 带来的影响是一样的,下采样会导致它们同比例下降,所以下采样对于 FPR 也不会有影响。综上,ROC-AUC 的评估并不会随着样本比例发生改变。
   那 Precision 和 Recall 呢?Recall 等于 TPR 保持不变,而 Precision 分母中的 FP 会因为进行下采样而减小,Precision 因此会增大,所以如果用下采样后的样本评估 Precision 和 F1,它们都会被高估。
   现在考虑另外一个问题,假设模型目前能够正确预测出 100 个正样本中的 80 个,10000 个负样本中的 9000 个,此时:        假设现在模型能力提升了,模型目前能够正确预测出 100 个正样本中的 80 个,10000 个负样本中的 9900 个,此时:        模型的提升在 ROC-AUC 的坐标轴上体现非常小,FPR 从 0.1 降低到 0.01,而在 PR 曲线上 P 从 0.074 增加到 0.444。虽然在数值的倍数上看,FPR 是提高了 100 倍,更大,但是体现在曲线上,由于其数量级太小,并不会给人观感上提升的感觉;相反,PR-AUC 上的数量级比 ROC-AUC 大得多,有着肉眼可见的提升。所以在面对不平衡数据集的时候,ROC-AUC 貌似并不是最佳的选择,PR-AUC 更能体现出模型的性能提升。
   所以当类别相对来说较均衡时,可以使用 ROC-AUC,当类别极其不均衡时使用 PR-AUC 较好。
   那为什么不只使用 PR-AUC 呢?ROC-AUC 对于分类模型来说存在的意义是什么?
   看了许多文章多采用一个说法:从各自两个指标来看,TPR 和 FPR 分别聚焦于模型对正样本和负样本的分类能力,而 Precision 和 Recall 都是针对正样本的指标,没有考虑负样本。所以当我们希望模型在正负样本上都能表现较好时使用 ROC-AUC 衡量,如果我们只关注模型对正样本的分辨能力使用 PR-AUC 更好。但是菜鸟本鸟我并没能理解,这个坑先放着。