ROC曲线绘制与AUC计算
声明:
1)该博文是整理自网上很大牛和专家所无私奉献的资料的。具体引用的资料请看参考文献。具体的版本声明也参考原文献
2)本文仅供学术交流,非商用。所以每一部分具体的参考资料并没有详细对应,更有些部分本来就是直接从其他博客复制过来的。如果某部分不小心侵犯了大家的利益,还望海涵,并联系老衲删除或修改,直到相关人士满意为止。
3)本人才疏学浅,整理总结的时候难免出错,还望各位前辈不吝指正,谢谢。
4)阅读本文需要机器学习基本概念的基础(如果没有也没关系了,没有就看看,当做跟同学们吹牛的本钱)。
5)此属于第一版本,若有错误,还需继续修正与增删。还望大家多多指点。请直接回帖,本人来想办法处理。
6)本人手上有word版的和pdf版的,有必要的话可以上传到csdn供各位下载
一.ROC曲线作用
在互联网广告中,评价一个model的好坏是非常重要的。
至于怎么评价,倒是有多种办法,如准确度,ABtest效果等。其中也产生了一些评价指标,其中最常用的莫过于AUC了。AUC有一个很好的物理意义——AUC表示拿一个正样本和一个负样本组成一对,模型把这一对都区分正确(正样本的预估值比负样本大就算对了)的概率。
然后AUC是什么呢?怎么计算出来的呢?按照概率的说法,应该拿无数对正负样本,计算这无数对样本中被分对的比例,得到的就是auc。
这样做太耗时间了,就有了其他的办法,如绘图求面积,因为概率其实是一个积分嘛。
有一堆理论去完成这个事情,后来发现AUC是ROC曲线的下面的面积。
下面开始说说ROC曲线。
其定义是:接收者操作特性曲线(receiver operating characteristic curve),它通过将连续变量设定出多个不同的临界值,从而计算出一系列真正率和假正率,再以假正率为纵坐标、真正率为横坐标绘制成曲线,曲线下面积越大,诊断准确性越高。在ROC曲线上,最靠近坐标图左上方的点为假正率和真正率均较高的临界值。
上面的话不太好看懂,需要了解的事情就是——ROC曲线下面的面积(积分)就是AUC的值。
为啥要用AUC呢?传统比较常用的ACC(准确度)为啥不用呢?
在互联网广告里面,点击的数量是很少的,一般千分之几,如果用acc,全部预测成负类(不点击)acc也有99%以上,根本无法评价。
其实最好的评估办法是ABtest,但是ABtest是直接小流量上线,工作量大,再说线上系统又不能没事老折腾,所以一个model要ABtest的话,这个model务必要是评价过是有好效果的。
二. ROC曲线绘制
下面先给一些基本定义,再说怎么绘制ROC曲线。
2.1基本定义
以下的内容来自博客《ROC曲线-阈值评价标准》。
考虑一个二分问题,即将实例分成正类(positive)或负类(negative)。对一个二分问题来说,会出现四种情况。如果一个实例是正类并且被预测成正类,即为真正类(True positive),如果实例是负类被预测成正类,称之为假正类(False positive)。相应地,如果实例是负类被预测成负类,称之为真负类(True negative),正类被预测成负类则为假负类(false negative)。
TP:真正类的数目;
FN:假负的数目;
FP:假正的数目;
TN:真负的数目;
列联表如下表所示,1代表正类,0代表负类。
|
|
预测 |
|
|
|
|
1 |
0 |
合计 |
实际 |
1 |
True Positive(TP) |
False Negative(FN) |
Actual Positive(TP+FN) |
0 |
False Positive(FP) |
True Negative(TN) |
Actual Negative(FP+TN) |
|
合计 |
|
Predicted Positive(TP+FP) |
Predicted Negative(FN+TN) |
TP+FP+FN+TN |
从列联表引入两个新名词。其一是真正类率(true positive rate ,TPR), 计算公式为TPR=TP/ (TP+ FN),刻画的是分类器所识别出的正实例占所有正实例的比例。另外一个是负正类率(false positive rate, FPR),计算公式为FPR= FP / (FP + TN),计算的是分类器错认为正类的负实例占所有负实例的比例。还有一个真负类率(True Negative Rate,TNR),也称为specificity,计算公式为TNR=TN/ (FP+ TN) = 1-FPR。
看个例子。
在互联网广告的点击率模型中,逻辑回归的输出是一个[0,1]区间的连续值,这个值表示用户点击某广告的概率,这里就涉及一个取舍问题了,这个概率值大于多少归为正类。假如确定一个阀值,比如说 0.6,大于这个值的实例划归为正类,小于这个值则划到负类中,那么根据这个阈值0.6能算出一对TPR和FPR来。当然,正类样本是很重要的,因为是点击数据,所以ctr预估模型要求是大部分正类都要识别出来。
为了完成这样的工作,识别更多的正类,可以把阈值调低点,变成0.5,虽然能识别出更多的正类,也就是识别出更多的点击数据,但也带来了问题,把很多不点击的样本也识别成了正类,这样也是不行的,有可能亏钱。从上面可以看出阈值也是很难定的,但对于某些广告点击率系统来说,如搜索广告,并不需要定阈值,只需要知道排序,比如说预估的点击率最高的那个广告实际点击率也比它下面的高就行了,因为会有很多候选广告,只要出点击率最高的几个,同时把点击率最高的(最相关的搜索结果)放在第一个,其他的以此类推(按点击率从高到低排)就够了(当然为了赚钱,会考虑一下价格的因素,把收益最高的广告排在最前面)。
其实说白了,就是排序其实是很重要的,真正怎么定那个阈值就相对没那么重要。所以评价这个点击率模型的好坏也不一定对预估出来的那个概率特别在意,倒是这个概率排在第几个位置比较重要。那么评价某个点击率模型好坏就不能用ACC来评估了,因为那样对阈值有要求。
说到排序,一时半会难说清楚,先说说ROC曲线怎么绘制的吧。说完怎么绘制后,再说ROC曲线怎么用来评价一个点击率模型(分类器)。
2.2 怎么绘制
分三种情况吧。
假设有6次展示记录,有两次被点击了,得到一个展示序列(1:1,2:0,3:1,4:0,5:0,6:0),前面的表示序号,后面的表示点击(1)或没有点击(0)。
然后在这6次展示的时候都通过model算出了点击的概率序列。
下面看三种情况。
一、如果概率的序列是(1:0.9,2:0.7,3:0.8,4:0.6,5:0.5,6:0.4)。
与原来的序列一起,得到序列(从概率从高到低排)
1 0.9
1 0.8
0 0.7
0 0.6
0 0.5
0 0.4
绘制的步骤是:
1)把概率序列从高到低排序,得到顺序(1:0.9,3:0.8,2:0.7,4:0.6,5:0.5,6:0.4);
2)从概率最大开始取一个点作为正类,取到点1,计算得到TPR=0.5,FPR=0.0;
3)从概率最大开始,再取一个点作为正类,取到点3,计算得到TPR=1.0,FPR=0.0;
4)再从最大开始取一个点作为正类,取到点2,计算得到TPR=1.0,FPR=0.25;
5)以此类推,得到6对TPR和FPR。
然后把这6对数据组成6个点(0,0.5),(0,1.0),(0.25,1),(0.5,1),(0.75,1),(1.0,1.0)。
这6个点在二维坐标系中能绘出来。
看看图中,那个就是ROC曲线。
二、如果概率的序列是(1:0.9,2:0.8,3:0.7,4:0.6,5:0.5,6:0.4)。
与原来的序列一起,得到序列(从概率从高到低排)
1 0.9
0 0.8
1 0.7
0 0.6
0 0.5
0 0.4
绘制的步骤是:
6)把概率序列从高到低排序,得到顺序(1:0.9,2:0.8,3:0.7,4:0.6,5:0.5,6:0.4);
7)从概率最大开始取一个点作为正类,取到点1,计算得到TPR=0.5,FPR=0.0;
8)从概率最大开始,再取一个点作为正类,取到点2,计算得到TPR=0.5,FPR=0.25;
9)再从最大开始取一个点作为正类,取到点3,计算得到TPR=1.0,FPR=0.25;
10) 以此类推,得到6对TPR和FPR。
然后把这6对数据组成6个点(0,0.5),(0.25,0.5),(0.25,1),(0.5,1),(0.75,1),(1.0,1.0)。
这6个点在二维坐标系中能绘出来。
看看图中,那个就是ROC曲线。
三、如果概率的序列是(1:0.4,2:0.6,3:0.5,4:0.7,5:0.8,6:0.9)。
与原来的序列一起,得到序列(从概率从高到低排)
0 0.9
0 0.8
0 0.7
0 0.6
1 0.5
1 0.4
绘制的步骤是:
11) 把概率序列从高到低排序,得到顺序(1:0.4,2:0.6,3:0.5,4:0.7,5:0.8,6:0.9);
12) 从概率最大开始取一个点作为正类,取到点6,计算得到TPR=0.0,FPR=0.25;
13) 从概率最大开始,再取一个点作为正类,取到点5,计算得到TPR=0.0,FPR=0.5;
14) 再从最大开始取一个点作为正类,取到点4,计算得到TPR=0.0,FPR=0.75;
15) 以此类推,得到6对TPR和FPR。
然后把这6对数据组成6个点(0.25,0.0),(0.5,0.0),(0.75,0.0),(1.0,0.0),(1.0,0.5),(1.0,1.0)。
这6个点在二维坐标系中能绘出来。
看看图中,那个就是ROC曲线。
2.3 什么意义
如上图的例子,总共6个点,2个正样本,4个负样本,取一个正样本和一个负样本的情况总共有8种。
上面的第一种情况,从上往下取,无论怎么取,正样本的概率总在负样本之上,所以分对的概率为1,AUC=1。再看那个ROC曲线,它的积分是什么?也是1,ROC曲线的积分与AUC相等。
上面第二种情况,如果取到了样本2和3,那就分错了,其他情况都分对了;所以分对的概率是0.875,AUC=0.875。再看那个ROC曲线,它的积分也是0.875,ROC曲线的积分与AUC相等。
上面的第三种情况,无论怎么取,都是分错的,所以分对的概率是0,AUC=0.0。再看ROC曲线,它的积分也是0.0,ROC曲线的积分与AUC相等。
很牛吧,其实AUC的意思是——Area Under roc Curve,就是ROC曲线的积分,也是ROC曲线下面的面积。
绘制ROC曲线的意义很明显,不断地把可能分错的情况扣除掉,从概率最高往下取的点,每有一个是负样本,就会导致分错排在它下面的所有正样本,所以要把它下面的正样本数扣除掉(1-TPR,剩下的正样本的比例)。总的ROC曲线绘制出来了,AUC就定了,分对的概率也能求出来了。
致谢
参考文献
[1] http://blog.csdn.net/chjjunking/article/details/5933105 . chjjunking的博客
[2] http://blog.csdn.net/abcjennifer/article/details/7359370 . 张睿卿的csdn博客