【AI基础】AUC/ROC指标

一、先从混淆矩阵讲起

  • 下面我们将预测类别为1的称为positive(阳性),预测类别为0的negative(阴性);
  • 预测正确的称为true(真),预测错误的称为false(伪)。
真实类别-> 正样本 负样本
预测为真 真阳性TP(True positive) 假阳性FP(False positive)
预测为假 假阴性FN(false negative) 真阴性TN(true negative)

上面的对应关系其实就是混淆矩阵了,现在引出【真阳率】(True positive)和【伪阳率】(False positive):

  • 前者TPRate(也叫Sensitivity)即将TP除以TP所在列之和,表示在所有真实类别为1的样本(正样本)中,预测为真(1)的比例: T P R a t e = T P T P + F N T P R a t e=\frac{T P}{T P+F N} TPRate=TP+FNTP

  • 后者FPRate(也叫Specificity)即将FP除以FP所在列之和,表示在所有真实类别为0的样本中(负样本),预测为真(1)的比例: F P  Rate  = F P F P + T N F P \text { Rate }=\frac{F P}{F P+T N} FP Rate =FP+TNFP

二、ROC曲线登场

首先来看ROC曲线的定义,横轴为刚才的FPRate(伪阳率),纵坐标为TPRate(真阳率)。有一种特殊情况,横纵坐标这两个概率相等,即无论真实类别是1还是0,两者预测为1的概率相同(即对正负样本没啥区分能力),即如下直线:
在这里插入图片描述
显然上面这种情况不是我们想要的,对正负样本还没啥区分能力,我们希望将真实类别为1的样本,正确预测为1的概率即TPRate,大于将真实类别为0的样本,预测为1的概率即FPRate,对应的ROC曲线就是往上拱的样子(而且越拱越好):
在这里插入图片描述
这里注意我们将ROC曲线下的面积定义为AUC (Area Under Curve),而刚才说到这个ROC曲线越拱越好,拱到AUC面积接近为1,这时候如下图:

  • TPRate基本恒等于1,表示在所有真实类别为1的样本中(负样本),预测为真(1)的比例基本为1了!!
  • FPRate几乎恒等于0,表示在所有真实类别为0的样本中(负样本),全部都预测错为1的概率几乎为0,都基本预测为0呗(都正确了)!!

在这里插入图片描述
注意我们在画ROC曲线时是根据某个特定阈值下的TP率和FP率描点(坐标)的,和P-R曲线一样,ROC曲线也是通过遍历所有的阈值来绘制整条ROC曲线,如下图:
在这里插入图片描述

三、几个栗子分析

【栗子1】如果我们的模型分类结果如下:

样本的真实值 1 1 1 1 0 0 0 0
预测值 1 0 1 1 0 1 1 0

混淆矩阵如下:
在这里插入图片描述
TPRate=3/4,FPRate=2/4,根据这个点画出对应ROC曲线如下,并且计算AUC面积为0.625。
在这里插入图片描述
【栗子2】而如果是利用逻辑回归预测结果如下(通过sigmoid函数输出对应的概率值):
在这里插入图片描述
需要设置阈值,比如阈值取为0.5,小于0.5为0,否则为1的label,这样得到的混淆矩阵和栗子1的情况是一样的,当然也可以设置阈值为其他数。然后依次使用所有预测值作为阈值,得到一系列的TPRate、FPRate,在坐标上描点、连线得到ROC曲线。

【栗子3】在反欺诈场景中,我们前提假设欺诈团伙为正样本,在正样本占全体样本很少时(如0.0001%),当如果用 a c c u r a c y accuracy accuracy 作为我们模型的评估指标。

四、代码实现

from sklearn import metrics
from sklearn.metrics import auc 
import numpy as np

y = np.array([1, 1, 2, 2])  
scores = np.array([0.1, 0.4, 0.35, 0.8])  
fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
metrics.auc(fpr, tpr) 

# 0.75

五、ML常用评估指标

  • 准确率:分类正确的样本数占总样本的比例,即: A C C = T P + T N F P + F N + T P + T N ACC = \dfrac{TP+TN}{FP+FN+TP+TN} ACC=FP+FN+TP+TNTP+TN.
  • 精度(精确率,Precision):预测为正且分类正确的样本占预测值为正的比例,即: P R E = T P T P + F P PRE = \dfrac{TP}{TP+FP} PRE=TP+FPTP.
  • 召回率(Recall):预测为正且分类正确的样本占类别为正的比例,即: R E C = T P T P + F N REC = \dfrac{TP}{TP+FN} REC=TP+FNTP.
  • F1值:综合衡量精度和召回率,即: F 1 = 2 P R E × R E C P R E + R E C F1 = 2\dfrac{PRE\times REC}{PRE + REC} F1=2PRE+RECPRE×REC.
  • ROC曲线:以假阳率为横轴,真阳率为纵轴画出来的曲线,曲线下方面积越大越好。

在推荐列表中,通常没有一个确定的阈值来把预测结果直接判定为正样本或负样本,而是采用 Top N 排序结果的精确率(Precision@N)和召回率(Recall@N)来衡量排序模型的性能。具体操作,就是认为模型排序的前 N 个结果就是模型判定的正样本,然后分别计算 Precision@N 和 Recall@N。

(1)精确率和召回率其实是矛盾统一的一对指标:
为了提高精确率,模型需要尽量在“更有把握”时把样本预测为正样本,但此时,我们往往会因为过于保守而漏掉很多“没有把握”的正样本,导致召回率降低。

(2)综合地反映精确率和召回率的高低的指标:F1-score。
F1-score 的定义是精确率和召回率的调和平均值,具体定义如下。F1-score 的值越高,就证明模型在精确率和召回率的整体表现上越好。
F 1 = 2 ⋅  precision  ⋅  recall   precision  +  recall  \mathrm{F} 1=\frac{2 \cdot \text { precision } \cdot \text { recall }}{\text { precision }+\text { recall }} F1= precision + recall 2 precision  recall 

在这里插入图片描述

六、ML高阶评估指标

6.1 P-R 曲线

P-R 曲线,这里的 P 就是精确率 Precision,R 就是召回率 Recall。为了综合评价一个推荐模型的好坏,不仅要看模型在一个 Top n 值下的精确率和召回率,还要看到模型在不同 N 取值下的表现,甚至最好能绘制出一条 n 从 1 到 N,准确率和召回率变化的曲线。这条曲线就是 P-R 曲线。

P-R 曲线的横轴是召回率,纵轴是精确率
对于一个推荐模型来说,它的 P-R 曲线上的一个点代表“在某一阈值下,模型将大于该阈值的结果判定为正样本,将小于该阈值的结果判定为负样本时,整体结果对应的召回率和精确率”。整条 P-R 曲线是通过从高到低移动正样本阈值生成的。如图 1 所示,它画了两个测试模型,模型 A 和模型 B 的对比曲线。其中,实线代表模型 A 的 P-R 曲线,虚线代表模型 B 的 P-R 曲线。

在这里插入图片描述
在这里插入图片描述
从图中我们可以看到,在召回率接近 0 时,模型 A 的精确率是 0.9,模型 B 的精确率是 1。这说明模型 B 预测的得分前几位的样本全部是真正的正样本,而模型 A 即使是得分最高的几个样本也存在预测错误的情况。

曲线分析:
随着召回率的增加,两个模型的精确率整体上都有所下降。特别是当召回率在 0.6 附近时,模型 A 的精确率反而超过了模型 B。这就充分说明了,只用一个点的精确率和召回率是不能全面衡量模型性能的,只有通过 P-R 曲线的整体表现,才能对模型进行更全面的评估。

AUC (Area Under Curve):AUC用于衡量P-R曲线的优劣。指的是 P-R 曲线下的面积大小,因此计算 AUC 值只需要沿着 P-R 曲线横轴做积分。AUC 越大,就证明推荐模型的性能越好

6.2 ROC 曲线

第二个高阶指标,ROC 曲线,它也是一个非常常用的衡量模型综合性能的指标。

ROC 曲线的全称是 the Receiver Operating Characteristic 曲线,中文名为“受试者工作特征曲线”。ROC 曲线最早诞生于军事领域,而后在医学领域应用甚广,“受试者工作特征曲线”这一名称也正是来源于医学领域。

ROC 曲线的横坐标是 False Positive Rate(FPR,假阳性率),纵坐标是 True Positive Rate (TPR,真阳性率)。 F P R a t e = F P N , T P R a t e = T P P \mathrm{FPRate}=\frac{\mathrm{FP}}{N}, T P Rate=\frac{\mathrm{TP}}{P} FPRate=NFP,TPRate=PTP
和上面介绍精确度的介绍一样,这里的P 指的是真实的正样本数量,N 是真实的负样本数量;TP 指的是 P 个正样本中被分类器预测为正样本的个数,FP 指的是 N 个负样本中被分类器预测为正样本的个数。
在这里插入图片描述
和 P-R 曲线一样,ROC 曲线也是通过不断移动模型正样本阈值生成的。如上面的动图,垂线其实就是我们的阈值,当垂线从右到左移动时,右边ROC曲线上的点,从下往上移动。如果来固定阈值,我们也可以看到左图中,其实和混淆矩阵中四个值是对应的:
在这里插入图片描述

(1)栗子1

ROC曲线的横轴是FPRate,纵轴是TPRate,当二者相等时,即y=x,如下图,这时候ROC曲线表示:对于不论真实类别是1还是0的样本,分类器预测为1的概率是相等的。

分类器对于正例和负例毫无区分能力,和抛硬币没什么区别,一个抛硬币的分类器是我们能想象的最差的情况,因此一般来说我们认为AUC的最小值为0.5(当然也存在预测相反这种极端的情况,AUC小于0.5,这种情况相当于分类器总是把对的说成错的,错的认为是对的,那么只要把预测类别取反,便得到了一个AUC大于0.5的分类器)。

在这里插入图片描述

(2)栗子2

假设测试集中一共有 20 个样本,模型的输出如下表所示,表中第一列为样本序号,Class 为样本的真实标签,Score 为模型输出的样本为正的概率,样本按照预测概率从高到低排序。在输出最终的正例、负例之前,我们需要指定一个阈值,并且设定预测概率大于该阈值的样本会被判为正例,小于该阈值的会被判为负例。

比如,我们指定 0.9 为阈值(又称为截断点额),那么只有第一个样本会被预测为正例,其他全部都是负例。
在这里插入图片描述
接下来,我们要做的就是动态地调整截断点,从最高的得分开始(实际上是从正无穷开始,对应着 ROC 曲线的零点),逐渐调整到最低得分。每一个截断点都会对应一个 FPR 和 TPR 的值,在 ROC 图上绘制出每个截断点对应的位置,再连接每个点之后,我们就能得到最终的 ROC 曲线了。那么 ROC 曲线上的点具体应该怎么确定呢?

确定几个点:
(1)当截断点选择为正无穷的时候,模型会把全部样本预测为负例,那 FP 和 TP 必然都为 0,FPRate 和 TPRate 也都为 0,因此曲线的第一个点就是 (0,0) 。

(2)当把截断点调整为 0.9 的时候,模型预测 1 号样本为正样本,并且这个样本也确实是正样本。因此,在 20 个样本中,当 TP=1,所有正例数量 P=10 的时候,TPR=TP/P=1/10。

在表中观察,没有预测错的正样本,也就是说当 FP=0,负样本总数 N=10 的时候,FPR=FP/N=0/10=0,对应着 ROC 图上的点 (0,0.1)。
在这里插入图片描述

(3)更直观的绘制 ROC 曲线的方法

(1)首先,根据样本标签统计出正负样本的数量,假设正样本数量为 P,负样本数量为 N。然后,我们把横轴的刻度间隔设置为 1/N,纵轴的刻度间隔设置为 1/P。
(2)接着,再根据模型输出的预测概率对样本进行从高到低的排序。
(3)最后,依次遍历样本。

同时,从零点开始绘制 ROC 曲线,每遇到一个正样本就沿纵轴方向绘制一个刻度间隔的曲线,每遇到一个负样本就沿横轴方向绘制一个刻度间隔的曲线,直到遍历完所有样本,曲线最终停在 (1,1) 这个点,整个 ROC 曲线就绘制完成了。

在绘制完 ROC 曲线后,我们也可以像 P-R 曲线一样,计算出 ROC 曲线的 AUC,AUC 越高,推荐模型的效果就越好。

七、考考你

(1)工业界在用指标评估排序列表结果时,最最常用的指标是啥?cmu的搜索引擎这门课的教授说MAP和NDCG是最常用的,其中NDCG应该是效果最好的,因为NDCG考虑到了每个数的实际相关性和模型预测出的排序顺序。
【答】离线主要用AUC和gAUC。但工业界离线指标主要是参考作用,最重要的还是在线指标。

(2)Diversity在推荐系统中重要吗?如果重要的话,是不是除了以上这些指标,还需要用到诸如Precision-Intent aware@K和alpha-NDCG这些指标进一步分析模型效果呢?
【答】diversity比较重要,但一般是secondary metric,一般不作为主要优化的指标

(3)在实际工作中,一般是如何定义正样本和负样本的呢?首先,这个正样本和负样本应该是应用户而异吧?其次,以电影推荐为例,对于某个用户A,我们是把用户A之前看过的电影都定义成正样本,然后没有看过的电影都标记为负样本嘛?还是有其他什么方法?
【答】正样本比较好说,就是你定义的一些正向的行为,比如点击、播放、购买等等。负样本其实看你的选择了,有纯random的,也有曝光未点击等等

(4)个性化推荐,不是每个人的推荐结果都不一样吗。为啥说ROC、P-R是全量数据,我认为是针对每个人的全量物品推荐,文中的全量是指全量物品吗。mAP严格意义上说是用到了全量的用户和物品。
【答】ROC曲线,P-R曲线是对全量样本在一起排序,不区分用户,所以这里说是全量数据。

(5)P-R 曲线和 ROC 曲线,它们的优缺点分别是什么呢?在正负样本分布极不均衡的情况下,你觉得哪个曲线的表现会更稳定、更权威一点?

【答】ROC曲线。
FPR=FP​/N,TPR=TP​/P,当我们将负样本复制10倍时,TPR显然不会变,FPR是负样本中被预测为正样本的比例,这其实也是不变的,那整个ROC曲线也就没有变。PR曲线,精确率P=TP/(TP+FP),TP不变,FP增大,而召回率R没有变,显然ROC曲线更稳定一些。

Reference

[1] The philosophical argument for using ROC curves
[2] 西瓜书 周志华老师
[3] 「召回层」如何评估召回效果

猜你喜欢

转载自blog.csdn.net/qq_35812205/article/details/123996783
今日推荐