网上看过不少关于AUC和GAUC的材料,但是都是文字描述,一点也不直观, 因此萌生了使用图解的方式详细剖析一下AUC和GAUC的想法,也希望以此能帮助大家快速理解概念。其中,说到AUC就不得不提ROC曲线,因此这里分三个部分来解读:ROC、AUC、GAUC。
一、ROC前身:通用的对分类模型的评价
步骤1:给定样本如图A:其中绿色为正样本,红色为负样本;
步骤2:训练一个机器学习模型,然后用这个模型对每个样本计算得到一个预测概率,这个概率值在[0, 1]范围内,如图B;
步骤3:此时,有一个参数是可以人为指定的:即阈值。当我们将阈值设为0.35、0.50、0.65的时候,会得到以下分类结果。
通常我们都是用取中间的值(0.50)作为阈值:大于0.50为正样本,小于0.50为负样本。但实际我们会发现,不同的阈值直接影响了最终的分类结果:
- 1. threshold=0.35:正样本全预测正确,负样本有两个预测错误
- 2. threshold=0.50:正样本有一个预测错误,负样本有一个预测错误
- 3. threshold=0.65:正样本有两个预测错误,负样本全预测正确
小归纳
我们动态地调节了阈值,并发现不同阈值下的分类结果会不同,这么做有什么用呢:
实际这可以评估模型对所有样本的预测概率在宏观层面,是否足够好。
那什么叫预测的概率好呢?有点抽象。简单来说,就是
- 正样本被预测的概率都集中在一起而且倾向于1
- 负样本被预测的概率都集中在一起而且倾向于0
正、负样本 被预测的概率尽量不存在互相渗透(正负样本预测的概率值相互揉杂在一起)的现象,实际上,上面的C(1)、C(2)、C(3)都有渗透。那怎么理解渗透呢?
如下图所示,分别对应两个模型的概率预测结果:
当给两个模型随机指定一个阈值的时候:
直观上,很明显地,左图的预测结果,要比右图好,因为当左图的分割线恰好在两个分布中央的时候,正样本和负样本都完全被预测正确,而右图无论怎么找阈值,都找不到一个这样的阈值能够完全把两类样本分割开。
所以现在应该能体会到遍历所有阈值的好处了吧:
遍历所有阈值取看模型分类分类效。实际上是查看模型对两类数据的区分度是否够大,类间距是否更明显。
ok,先理解到这里,接下来我们讨论roc曲线!
二、ROC曲线
刚才,我们遍历所有阈值,并查看给定每个阈值的情况下的分类情况如何。但是最终我们要把所有的这些分类结果进行融合,如何做呢?
大牛们就准备找个方式来度量这个融合,因此诞生了ROC。
由于预测概率值取值范围为:{0.9,0.8,0.7,0.6,0.4,0.3,0.2,0.1}
因此我们可选的用于遍历的阈值也是:{0.9,0.8,0.7,0.6,0.4,0.3,0.2,0.1}
阈值的使用方法是:当预测概率大于等于阈值的时候,则预测结果正样本,否则预测为负样本。
还是用最上面的样本集合,当模型对样本的预测概率如下图时:
我们看一下,在选用不同的阈值的时候,以下两种指标是如何变化的:
- 1.纵坐标:TPR (预测为正,实际为正 占 所有实际为正 比例)
- 2.横坐标:FPR (预测为正,实际为负 占 所有实际为负 比例)
实际至此,我们就得到了ROC曲线D(1),一般而言,得到了ROC就直接可以计算AUC的值了。通用的结论是:
所有AUC值为0.88。
三、AUC
但是ROC曲线下的面积等于AUC,这句话怎么理解呢?(其实这里讲解了AUC的第二种计算方式)
实际上,这可以理解为一种积分过程,积分的内容是啥呢:
每个预测为正的样本,能比多少个负样本大
积分所在的区域是啥呢?实际是正样本和负样本的交叉,也即
正样本数∗负样本数
这里我们可以设想一种理想状态:
正样本和负样本是两个互不纠缠的正态分布,其中有M个正样本,N个负样本。
阈值如果遍历所有正样本,则每个正样本都比N个负样本大,因此,积分下来,就是,而积分的区域是,因此,这种理想状态下,得到了AUC为:
因此这里我们可用通过这种方式重新计算第一节中的AUC。
第一节中,原始有五个正样本:
- p=0.9的真实正样本,它在所有5个负样本前面,因此记为5
- p=0.8的真实正样本,它在所有5个负样本前面,因此记为5
- p=0.7的真实正样本,它在所有5个负样本前面,因此记为5
- p=0.6的真实正样本,它在4个负样本前面,因此记为4
- p=0.4的真实正样本,它在3个负样本前面,因此记为3
交叉区域记为。
因此最终的AUC记为:
四、GAUC
auc在传统的机器学习二分类中还是很能打的,但是有一种场景,虽然是分类模型,但是却不适用auc,即广告推荐领域。
推荐领域使用的CTR(点击率)来作为最终的商用指标,但是在训练推荐模型时,却不用这个指标,用的是GAUC,为什么呢?
因为推荐模型目前比较成熟的模式是训练分类模型,这个分类模型的任务是预测用户是否会点击给定的商品,因此,推荐系统的核心,仍然是一个二分类问题,但是是更细力度的二分类。
总结:传统的AUC可以评判二分类,但是推荐领域要算的是对于每个人的二分类结果
给定如下情形:
我们准备训练一个模型用来预测用户A和用户B购买iphone、华为和小米的可能性,我们训练了模型α
对于所有出现的概率值:我们可以计算得到AUC为:(2+2+1) / (2*3) = 0.833,好像预测效果不太好。但是,如果对每个用户查看AUC,则有:
用户A auc: 1 / (1*1) = 1
用户B auc: (1+1) / (2*1) = 1
也就是说这个模型其实预测地很完美!
有读者反映这步没看懂,我详细的写一下:
auc的计算:
正样本:0.5,0.4,0.2
负样本:0.3,0.1
正样本3个,负样本2个,正负组合3*2=6种,
正样本值0.5大于负样本0.3、0.1 有两种,
正样本值0.4大于负样本0.3、0.1 有两种,
正样本值0.2大于负样本0.1 有一种,
所以正样本值大于负样本值的有2+2+1=5
所有auc为5/6=0.833 。
GAUC计算:
用户A的正样本0.5,负样本0.3,所以gauc为1;
用户B的正样本0.4,0.2,负样本0.1,正负组合为2*1种,正样本值大于负样本值有2种,
所以gauc为1
所以传统的AUC在这种情况下失效了,由此引入了GAUC来从更细的力度上评估分类结果。
auc反映的是整体样本间的一个排序能力,
而在计算广告领域,我们实际要衡量的是不同用户对不同广告之间的排序能力,
因此实际应该更关注的是同一个用户对不同广告间的排序能力。
GAUC(group auc)实际是计算每个用户的auc,然后加权平均,最后得到group auc,这样就能减少不同用户间的排序结果不太好比较这一影响。
group auc具体公式如下:
实际处理时权重一般可以设为每个用户view或click的次数,而且会过滤掉单个用户全是正样本或负样本的情况。
在原来博主的文章中进行简单的修改。另感谢原博主写的精彩文章
原文链接:
https://blog.csdn.net/zhaohang_1/article/details/92794489
欢迎看另一篇文章:
千寻:对准确率、精确率、召回率、AUC、ROC的理解55 赞同 · 11 评论文章
“无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。