闲谈AUC

AUC,area under ROC curve的缩写,就是ROC曲线下的面积;ROC曲线是啥呢,就是类似于这样的一张图:

From 《机器学习》-周志华

左边是理想状态下,右边是基于有限样例绘制,也就是实际情况下ROC曲线一般都是右边那样,从左下角一拱一拱地拱到了右上角;

可以看到横坐标叫假正例率,纵坐标叫真正例率,啥意思呢,就是判定为真实际又恰好为真的数量 占实际就为真的比例就是真正例率(以下称为TPR);判定为真实际却为假的数量 占实际就为假的比例就是假正例率(以下称为FPR)(以上是文字描述,公式看这里https://www.cnblogs.com/JesusAlone/p/9758471.html

那么给定了一串样本和对应的打分,怎么得到的这个ROC曲线呢,这里就要提到阈值的概念了,先举一个例子吧,比如有一串样本和对应的打分如下,class表示实际的类别,score表示模型的打分:

from: https://blog.csdn.net/pzy20062141/article/details/48711355

这里所有样本按打分排成一串,要得到ROC曲线上的一点,就要知道该点对应的TPR和FPR,就要知道在这个点判定为真实际为真的数量、实际为真的样本总数,判定为真实际为假的数量、实际为假的样本总数;

实际为真的样本总数其实是固定的,看一下上图class = p的数量就是(以下用M表示,这里M=10),实际为假的看一下class = n的数量就是(以下用N表示,这里N=10);那么关键就是判定为真实际为真的数量和判定为真实际为假的数量了;

怎么去判定呢,关键在于阈值,一开始设定阈值为1,那么TPR和FPR就都为0(思考一下为什么,这里考一下什么叫“判定”),然后阈值到了0.9,TPR = 1/10、FPR = 0,在ROC图上就从原点往上走了一步;

之后每遇到一个判定为真实际为真的样本就往上走一步,每遇到一个判定为真实际为假的样本就往右走一步,直到走到世界尽头,划掉,是走到(1,1),至此ROC曲线绘制完毕如下:


from: https://blog.csdn.net/pzy20062141/article/details/48711355

然后接着说AUC怎么算,不能老是画张图出来然后一个一个矩形算吧,这些矩形背后难道没有对应的物理意义可以对着样本就算出来的吗,答案是有的;

比如上面的图片,从0.2往右走一步表示阈值调整后后面紧接着一个判定为正的负样本,那么这条横线再往右的延长线是不是就代表着这两个正样本(9和8)后面所有的负样本,那么这条延长线和x轴围成的面积(这里要再乘以MN)表示的是不是就是这两个正样本所在位置后面的负样本的数量;(这里从每个画x的节点向右画延长线,两条延长线之间的面积就是该点后面负样本的数量)

上面这段话可能有些不好理解,继续拿例子来说,0.9后面有10个负样本,那么这个点和x轴围成矩形的面积(再*100)就是10,0.51后面有7个负样本,那么这个点和0.52延长线所围成矩形的面积(再*100)就是7,以此类推;(严格证明好像要涉及一个啥Wilcoxon-Mann-Witney Test,在参考的第二篇里有提到,但这里可以直观从auc的画法上去理解)

那么这么只看样本来算AUC的方法就呼之欲出了,AUC的面积就是每条延长线之间的矩形面积之和,每个矩形面积又代表了这个正样本后负样本的个数,所以整体的面积就是每个正样本数后头负样本的个数之和,用公式表示就是:

from: https://blog.csdn.net/qq_22238533/article/details/78666436

这里M表示正样本总数,N表示负样本总数,其中,

同上

这也揭示了AUC的物理意义,即任取一对正负样本,正样本的预测值大于负样本的预测值的概率;那么有人还是嫌麻烦,难道还要一个一个去数吗,当然不是啦,公式就是要做到最简洁嘛,而且这里显然跟每个正样本所在的位置关系很大嘛;

继续改良,先给出公式:


from: https://blog.csdn.net/pzy20062141/article/details/48711355

看上去很难但算起来很简单的样子,就是把所有正样本所在的位置(公式里的ranki)求和,然后把M和N一顿操作(回顾一下,M和N表示的是总的正样本数和负样本数),就ok了;注意哦这里的ranki所指的正样本位置是从大开始的,比如上面例子里score = 0.9的样本对应的rank是20,score = 0.8的样本对应的rank是19,以此类推;

这个求和再相减的公式为什么能和上面那个I(P正样本,P负样本)的公式对应呢,原来啊,这里做的就是把I(P正样本,P负样本)得到为rank - i,再求和;什么是rank - i 呢,继续举例子,当rank = 20时,包括自身和后面的正样本数为10,减掉后就是对应的负样本数了;当rank = 19时,包括自身和后面的正样本数为9,减掉后就是对应的负样本数了,以此类推再求和不就是总的正样本后负样本的个数吗;

这里有一种特例我们一直没有提到,那就是score相等的情况,在ROC曲线里这对应了一根斜线(思考一下为什么,以及一段斜线表示的是几个样本),类似于下面这个样子:

from: https://www.cnblogs.com/JesusAlone/p/9758471.html

(答案:一个正样本,两个负样本)

所以如果是直接计算曲线下面积就要用梯形公式而不是矩形公式来计算每一个竖向矩形的面积:

同上

那如果用物理意义的公式来算,相同score样本间的正序对的个数应该算作0.5,依然能够得到每个正样本的正序对的个数再求和;

至于为什么是0.5,其实很简单,比如这个例子中的正反顺序为【反,正,[正,正,反],反,正,反,正,反,正】,[] 括起来的实例分数相同,如果这几个样本按相同的rank只算这个rank后的负样本数(即例子中[]后的负样本数),其实得到的是(2,3)这个点和(1,1)的水平延长线构成的矩形面积,还少了前面三角形这一块面积(负样本数为底、正样本数为高);

这一块三角形的面积如果补全成矩形对应的正反顺序是正正反,正序对的个数为1+1,现在直接连接了矩形的两个对角,正序对的个数便应该算作0.5+0.5;可以得到总的正序对个数是4+3.5+3.5+2+1=14;auc=14/30=7/15

那么对第二个带rank的公式来说,相同scroe的rank要求和取均值;比如这个例子中score相同的三个样本的rank就都是(9+8+7)/3=8,总的auc的计算是((10+8+8+5+3+1)-(6*7)/2) /6*5) = 7/15;至于为什么是取rank均值,而后面的相减项不变,对照上面的正序对的个数计算方式可以认为是3.5*2+5+4 = 16/2 = 8(上面式子里为什么是8);

(上面两段没有看懂也没有关系,实际情况下score相同的情况非常小,而且套入计算公式时就把正序对个数当成0.5计算即可,用ranki那个公式就取三个rank的均值作为正样本的ranki即可)

这里顺道再说一下西瓜书里提到的一个概念叫rank损失,公式如下:


from: https://www.cnblogs.com/JesusAlone/p/9758471.html

理解了物理意义之后这个公式应该不难理解了,Lrank = 1 - AUC,同样还可以从图里找到对应的面积;

说到这里AUC的计算方式就都说完了~ 下面是拓展延伸部分,比较了ROC曲线和PRC曲线在用作metric时的优劣;

最后引用的这篇文章后面的思考部分还提到了在类不平衡问题下,比如正负例90:10,将所有样本判定为正例,准确率没有意义但AUC可以处理(因为全部判定为正的话AUC曲线也仅仅是连接了(0,0)和(1,1));

但更有意义的是它说明了为什么工业界常用AUC来作为CTR预估的指标,比较了ROC曲线和PRC曲线(PRC曲线的画法也是将样本按score排成一串,每次取一个阈值路过一个样本,算一个recall(横坐标)和precision(纵坐标),当阈值和第一个预测值相等时,recall(实际为真里预测为真的占比)~0,precision(预测为真里实际为真的占比)=1):

from: https://www.cnblogs.com/JesusAlone/p/9762352.html 

a/b是正负例均衡时的ROC和PRC,c/d是负例样本扩大10倍后的ROC和PRC,每个图里两个曲线是两个分类器;可以看到在正负样本大致分布均匀时,ROC曲线更稳定,没有PRC曲线那么多的起伏(原因在于recall增加时,precision大体呈下降趋势,但小范围内可能会不单调);但正负比不均衡,负例远大于正例时,PRC曲线就能更敏感地反映出分类器的真实性能;

from: https://www.cnblogs.com/JesusAlone/p/9762352.html

作者举了这样一个例子:两图红色的点表示相同的点,即TPR也就是recall等于0.8的点,假设共100个正例,简单的计算可知这两幅图表示出来了一个正例数为100,负例数为15200的样本,但是“在点A处,分类器将1600 (1520+80)个样本预测为positive,而其中实际上只有80个是真正的positive。 我们凭直觉来看,其实这个分类器并不好。但由于真正negative instances的数量远远大约positive,ROC的结果却“看上去很美”,因为这时FPR因为负例基数大的缘故依然很小。所以,在这种情况下,PRC更能体现本质。”

原因作者也给出来了,在于“FPR 和 TPR (Recall) 只与真实的正例或负例中的一个相关(可以从他们的计算公式中看到),而其他指标如Precision则同时与真实的正例与负例都有关”

当然尽管如此,工业界还是采用ROC曲线来作为ctr的线下预估指标,这是为什么呢,作者也给出了自己的思考:首先,ROC和PRC都是排序强相关的指标,但相比较而言,一是因为AUC还是能比较两个算法之间的优劣,只是绝对值可能会表现得过于乐观;二是AUC鲁棒性更强,不管在何种情况下都能保持稳定,不会出现PRC曲线偶尔可能抽风的情况;三是AUC的计算方式更简单,基于以上三点采用的选择。


参考:https://blog.csdn.net/qq_22238533/article/details/78666436 举例计算了auc的两种计算方式,没有说明原理

           https://blog.csdn.net/pzy20062141/article/details/48711355  前半部分大体参考此篇

           https://blog.csdn.net/weixin_41362649/article/details/89081651 红蓝图,举例说明了auc的第二种计算方式

            https://www.cnblogs.com/JesusAlone/p/9758471.html 简明扼要,旁征博引

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,198评论 6 514
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,334评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,643评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,495评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,502评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,156评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,743评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,659评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,200评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,282评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,424评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,107评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,789评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,264评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,390评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,798评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,435评论 2 359

推荐阅读更多精彩内容