工作中经常要和香饽饽算法工程师对接。作为一名开发狗,虽然“抽特征、做模型、玄学调参、搞策略”这四部曲都不太懂,但是为了能够正常交流,同时也不至于被忽悠,那么,算法同学嘴里是不时蹦出领域名词儿还是要了解一下的啦。
今天就说说算法同学经常挂在嘴边的一个指标——AUC。
AUC ROC简介
AUC是Area Under Curve的简写,这里的Curve其实是指ROC曲线。
ROC曲线又是什么鬼?ROC全称receiver operating characteristic curve,翻译为受试者工作特性曲线。先不用管这个不明所以的鬼翻译,直接看ROC曲线的横纵坐标都是啥。
ROC示意图
ROC曲线的X轴是假阳性率(FP),Y轴为真阳性率(TP)。
假阳性率=真实类别为0但是预测为1的样本数/真实类别为0的样本数
真阳性率=真实类别为1预测也为1的样本数/真实类别为1的样本数
从这里也可以看出,AUC只能用于二分类模型的评估。
那么关于FP和TP,我们找一些直观的感受看看:
a.如果一个算法直接把所有的样本,都预测为正样本,那么显然FP=1.0,TP=1.0;这个可以对应ROC曲线的右上角那个点。
b.如果一个算法直接把所有的样本,都预测为负样本,那么显然FP=0.0,TP=0.0;这个可以对应ROC曲线的左下角那个点。
到这里,我遇到了我在看ROC曲线时的一个不解的地方:
为什么对于1个二分类算法,能够画出一条ROC曲线(无数个点)出来呢?ROC曲线的每一点代表什么含义呢?
看了ROC曲线的具体绘制过程,应该就可以理解了。
ROC曲线的绘制
我们在使用一个二分类算法做预测时,一般的是会给出样本属于正样本的概率Pi。
然后,我们会选定一个阈值P0,当Pi>=P0时,预测为正样本;当Pi<P0时预测为负样本。
至此,选定一个算法A,每选定一个阈值P0, 都可以算出FP/TP,也就对应了ROC曲线上的一个点。
那具体绘制ROC曲线时,这些阈值如何选取,FP/TP组合成的所有点又该如何排列呢?
具体流程是这样:
- 将所有测试样本的预测概率Pi按照从大到小排列
- 从大到小,依次取各个Pi的值作为阈值。
- 考虑P0=P1的情况,这时只有一个样本被预测为1,其余所有样本都被预测为0。这里FP和TP都会很小,所以这个点会接近左下角。
- 随着阈值P0不断变小(条件放宽),预测为1的样本越来越多,FP和TP都应该越来越大。表现为ROC曲线由左下角向右上角不断蔓延。
- 考虑P0=Pn的情况,这时所有样本都被预测为1。这时FP=TP=1.0,这时ROC曲线达到右上角。
所以,ROC曲线其实有三个要素:算法A,测试数据D,阈值集合P。它评价了一个算法A,在测试数据D上,选取不同的阈值P时,假阳性率和真阳性率的表现。
当然,真阳性率越大,假阳性率越小越好。所以表现为ROC曲线越上凸,算法的分类效果越优秀。
AUC(ROC曲线下的面积),就可以用来评价ROC曲线的上凸程度。
一般,AUC的值是要大于0.5的,因为直接使用正负样本的自然概率来预测,得到的AUC就是0.5(可以思考下为什么哈)。
另外,还有一个指标logloss,也经常和AUC一起用于评价分类效果。有兴趣的同学可以对比着学习下。
推荐阅读:
使用双buffer无锁化
不要拷贝
关于内存泄露的一场虚惊
转载请注明出处: blog.guoyb.com/2018/06/23/…