1.什么是AUC?

推荐 搜索场景下的auc理解_凝眸伏笔的博客-CSDN博客_搜索auc

随机抽出一对样本(一个正样本,一个负样本),然后用训练得到的分类器来对这两个样本进行预测,预测得到正样本的概率大于负样本概率的概率。

  • TPRate的意义是所有真实类别为1的样本中,预测类别为1的比例。:真正率
  • FPRate的意义是所有真实类别为0的样本中,预测类别为1的比例。:假正率

 AUC的优势:

AUC的计算方法同时考虑了分类器对于正例和负例的分类能力,在样本不平衡的情况下,依然能够对分类器作出合理的评价。

2.AUC对均匀正负样本采样不敏感

正由于AUC对分值本身不敏感,故常见的正负样本采样,并不会导致auc的变化。比如在点击率预估中,处于计算资源的考虑,有时候会对负样本做负采样,但由于采样完后并不影响正负样本的顺序分布。

3.AUC值本身有何意义

我们在实际业务中,常常会发现点击率模型的auc要低于购买转化率模型的auc。正如前文所提,AUC代表模型预估样本之间的排序关系,即正负样本之间预测的gap越大,auc越大.

4.如何计算AUC?

计算AUC时,推荐2个方法。

方法一:

在有M个正样本,N个负样本的数据集里。一共有M*N对样本(一对样本即,一个正样本与一个负样本)。统计这M*N对样本里,正样本的预测概率大于负样本的预测概率的个数。

举一个例子:

ID label pro
A 0 0.1
B 0 0.4
C 1 0.35
D 1 0.8

假设有4条样本。2个正样本,2个负样本,那么M*N=4。即总共有4个样本对。分别是:
(D,B),(D,A),(C,B),(C,A)。在(D,B)样本对中,正样本D预测的概率大于负样本B预测的概率(也就是D的得分比B高),记为1,同理,对于(C,B)。正样本C预测的概率小于负样本C预测的概率,记为0.最后可以算得,总共有3个符合正样本得分高于负样本得分,故最后的AUC为(1+1+1+0)/4 = 0.75

在这个案例里,没有出现得分一致的情况,假如出现得分一致的时候,例如:

ID label pro
A 0 0.1
B 0 0.4
C 1 0.4
D 1 0.8

同样本是4个样本对,对于样本对(C,B)其I值为0.5。

最后的AUC为 (1+1+1+0.5)/4 = 0.875

方法二:

另外一个方法就是利用下面的公式:

例子:

ID label pro
A 0 0.1
B 0 0.4
C 1 0.35
D 1 0.8

将这个例子排序。按概率排序后得到:

ID label pro rank
A 0 0.1 1
C 1 0.35 2
B 0 0.4 3
D 1 0.8 4

按照上面的公式,只把正样本的序号加起来也就是只把样本C,D的rank值加起来后减去一个常数项:M(M+1)/2 =[ (4+2) -2*(2+1)/2]/2*2=0.75

这个时候,我们有个问题,假如出现得分一致的情况怎么办?下面举一个例子说明:

ID label pro
A 1 0.8
B 1 0.7
C 0 0.5
D 0 0.5
E 1 0.5
F 1 0.5
G 0 0.3

在这个例子中,我们有4个取值概率为0.5,而且既有正样本也有负样本的情况。计算的时候,其实原则就是相等得分的rank取平均值。具体来说如下:

先排序:

ID label pro rank
G 0 0.3 1
F 1 0.5 2
E 1 0.5 3
D 0 0.5 4
C 0 0.5 5
B 1 0.7 6
A 1 0.8 7

这里需要注意的是:相等概率得分的样本,无论正负,谁在前,谁在后无所谓。

由于只考虑正样本的rank值:
对于正样本A,其rank值为7
对于正样本B,其rank值为6
对于正样本E,其rank值为(5+4+3+2)/4
对于正样本F,其rank值为(5+4+3+2)/4
最后我们得到:

[ (7 + 6 + )  + (5+4+3+2)/4 + (5+4+3+2)/4 - 4(4+1)/2] / 4*3 = 10/12=5/6

其python的代码:

import numpy as np
from sklearn.metrics import roc_auc_score
y_true = np.array([1,1,0,0,1,1,0])
y_scores = np.array([0.8,0.7,0.5,0.5,0.5,0.5,0.3])
print "y_true is ",y_true
print "y_scores is ",y_scores
print "AUC is",roc_auc_score(y_true, y_scores)y_true = np.array([0, 0, 1, 1])
y_scores = np.array([0.1, 0.4, 0.35, 0.8])
print "y_true is ",y_true
print "y_scores is ",y_scores
print "AUC is ",roc_auc_score(y_true, y_scores)

其他:

1.为什么auc和logloss比accuracy更常用?

答:模型分类问题预测得到的是概率,如果需要计算accuracy,则需要对这个概率设置一个阈值,而这个阈值极大的影响了accuracy的计算。使用auc和logloss避免把概率准换为类别。可以直接使用预测得到的概率来计算。

除此之外,虽然准确率可以判断总的正确率,但是在样本不平衡的情况下,并不能作为很好的指标来衡量结果。由于样本不平衡的问题,导致了得到的高准确率结果含有很大的水分。即如果样本不平衡,准确率就会失效。

2.精准率

精准率(Precision)又叫查准率,它是针对预测结果而言的,它的含义是在所有被预测为正的样本中实际为正的样本的概率,意思就是在预测为正样本的结果中,我们有多少把握可以预测正确,其公式如下:

3. 召回率

召回率(Recall)又叫查全率,它是针对原样本而言的,它的含义是在实际为正的样本中被预测为正样本的概率,其公式如下:

召回率的应用场景:比如拿网贷违约率为例,相对好用户,我们更关心坏用户,不能错放过任何一个坏用户。因为如果我们过多的将坏用户当成好用户,这样后续可能发生的违约金额会远超过好用户偿还的借贷利息金额,造成严重偿失。召回率越高,代表实际坏用户被预测出来的概率越高,它的含义类似:宁可错杀一千,绝不放过一个。

参考:
1. AUC的计算方法_kingsam_的博客-CSDN博客_auc计算公式

2.如何理解机器学习和统计中的AUC? - 知乎

AUC的两种计算方式相关推荐

  1. 子网掩码的两种计算方式

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/70946041冷血之心的博客) 关注微信公众号(文强的技术小屋),学 ...

  2. Oracle表记录字节长长度的两种计算方式

    一.获取某个用户下某个表行记录的长度        这个长度是表字段定义的长度,获取方法: select owner, table_name, column_name, data_type, data ...

  3. 二分查找算法的两种实现方式:非递归实现和递归实现

    二分查找的条件是对一组有序数组的查找,这一点很容易忘记,在使用二分查找的时候先要对数组进行排序. 先说一下二分查找的思路:一个有序数组,想要查找一个数字key的下标,首先算出中间下标mid,利用mid ...

  4. Windows校验文件哈希hash的两种常用方式

    大家经常都到哪儿去下载软件和应用程序呢?有没想过下载回来的软件.应用程序或资源是否安全呢?在 Windows 10 和 Office 2016 发布当初,很多没权限的朋友都使用第三方网站去下载安装映像 ...

  5. 计算 java_两种计算Java对象大小的方法(转)

    原文:http://blog.csdn.net/iter_zc/article/details/41822719 另一篇类似文章:http://www.cnblogs.com/magialmoon/p ...

  6. 聊聊JVM(三)两种计算Java对象大小的方法

    普通对象的结构如下,按64位机器的长度计算 1. 对象头(_mark), 8个字节 2. Oop指针,如果是32G内存以下的,默认开启对象指针压缩,4个字节 3. 数据区 4.Padding(内存对齐 ...

  7. android中资源文件的两种访问方式,Android_Android学习笔记-保存文件(Saving Files),Android设备有两种文件存储区域 - phpStudy...

    Android学习笔记-保存文件(Saving Files) Android设备有两种文件存储区域: 内部存储和外部存储 ("internal" and "externa ...

  8. iOS活动倒计时的两种实现方式

    代码地址如下: http://www.demodashi.com/demo/11076.html 在做些活动界面或者限时验证码时, 经常会使用一些倒计时突出展现. 现提供两种方案: 一.使用NSTim ...

  9. mybatis 级联查询兑现_MyBatis之自查询使用递归实现 N级联动效果(两种实现方式)...

    A:首先先看下一个简单的面试题 斐波那契数列 计算数组{1,1,2,3,5,8.......} 第30位值 规律:1 1 从第三项开始,每一项都是前两项之和 有两种实现方式 第一种方式: public ...

最新文章

  1. 在Ubuntu 14.04 64bit上安装Markdown和绘图软件Haroopad
  2. libcurl使用多线程下载大文件源码示例!
  3. python要学多久-python需要学多久?自学两年也很难达到企业标准!
  4. Device eth0 does not seem to be present, delaying initialization.转载
  5. 2层,3层,4层交换机的区别与特点!!
  6. 杭电2035--人见人爱A^B
  7. 计算机双一流a水平大学,教育部公布:全国双一流A类名单出炉,36所大学上榜,你的大学在内吗...
  8. 编写0号中断的处理程序
  9. java 19 - 5 Throwable的几个常见方法
  10. 深度学习:循环神经网络(RNN)
  11. html灯箱效果代码,WordPress纯代码实现图片灯箱lightbox效果
  12. Tablayout初始全部不选中,初始默认选中一个,初始全部选中的设置
  13. python学习--max和reduce函数
  14. 基于单片机的数字温度计设计
  15. LINE开发(二)开发LINE Notify 创建服务篇
  16. Oracle帐户被锁了,怎么解锁
  17. 网络协议分析(最全)
  18. 实现将网页多条磁力链接一次性全部下载
  19. 智能定位手环方案开发
  20. 现代企业管理-管理概论

热门文章

  1. TypeScript-class学习笔记---遍历Tree
  2. Excel插入可以勾选的复选框
  3. python爬虫:多线程收集/验证IP从而搭建有效IP代理池
  4. 收藏!!BAT 程序员们常用的开发工具
  5. Ubuntu16.04+U盘启动+120G固态+1T硬盘安装
  6. IN Tech 年度盘点|英特尔2021技术发展亮点
  7. 压着谷歌打!ChatGPT提前上岗微软搜索,现在就能用,纳德拉:竞赛今天才开始...
  8. Vue 中实现点击按钮
  9. 一举刷新 54 个中文 NLP 任务基准,大模型加持下的EasyDL有多强?
  10. java棋类游戏代码_Java 棋类游戏源代码程序