auc 和loss_深入理解AUC

在机器学习的评估指标中,AUC是一个最常见也是最常用的指标之一。

AUC本身的定义是基于几何的,但是其意义十分重要,应用十分广泛。

本文作者深入理解AUC,并总结于下。

AUC是什么

在统计和机器学习中,常常用AUC来评估二分类模型的性能。AUC的全称是 area under the curve,即曲线下的面积。

通常这里的曲线指的是受试者操作曲线(Receiver operating characteristic, ROC)。

相比于准确率、召回率、F1值等依赖于判决阈值的评估指标,AUC则没有这个问题。

ROC曲线早在第二次世界大战期间就被使用在电子工程和雷达工程当中,被用于军事目标检测。

后来,ROC曲线也被应用到心理学、医学、机器学习和数据挖掘等领域的模型性能评估。

对于二分类问题,预测模型会对每一个样本预测一个得分s或者一个概率p。

然后,可以选取一个阈值t,让得分s>t的样本预测为正,而得分s

这样一来,根据预测的结果和实际的标签可以把样本分为4类:

正样本

负样本

预测为正

TP(真正例)

FP(假正例)

预测为负

FN(假负例)

TN(真负例)

随着阈值t选取的不同,这四类样本的比例各不相同。定义真正例率TPR和假正例率FPR为:

对于真正例率TPR,分子是得分>t里面正样本的数目,分母是总的正样本数目。

而对于假正例率FPR,分子是得分>t里面负样本的数目,分母是总的负样本数目。

因此,如果定义分别为得分大于t的样本中正负样本数目,为总的正负样本数目,

那么TPR和FPR可以表达为阈值t的函数

随着阈值t的变化,TPR和FPR在坐标图上形成一条曲线,这条曲线就是ROC曲线。

显然,如果模型是随机的,模型得分对正负样本没有区分性,那么得分大于t的样本中,正负样本比例和总体的正负样本比例应该基本一致。

也就是说

结合上面的式子可知TPR和FPR相等,对应的ROC曲线是一条直线!

反之,如果模型的区分性非常理想,也就是说正负样本的得分可以完全分开,所有的正样本都比负样本得分高,此时ROC曲线表现为「 字形。

因为正例得分都比负例搞,所以要么TPR=0要么FPR=0!

实际的模型的ROC曲线则是一条上凸的曲线,介于随机和理想的ROC曲线之间。而ROC曲线下的面积,即为AUC!

这里的x和y分别对应TPR和FPR,也是ROC曲线的横纵坐标。

AUC的概率解释

概率解释的证明

AUC常常被用来作为模型排序好坏的指标,原因在于AUC可以看做随机从正负样本中选取一对正负样本,其中正样本的得分大于负样本的概率!

这个结论很容易证明,考虑随机取得这对正负样本中,负样本得分在之间的概率为

如果很小,那么该正样本得分大于该负样本的概率为

所以,

注意积分区间,对应ROC图像最右上角的点,而对应ROC图像最左下角的点。所以,计算面积是。

可以看出,积分项里面实际上是这样一个事件的概率:随机取一对正负样本,负样本得分为t且正样本大于t!

因此,对这个概率微元积分就可以到正样本得分大于负样本的概率!

AUC的排序特性

根据上述概率解释,AUC实际上在说一个模型把正样本排在负样本前面的概率!

所以,AUC常用在排序场景的模型评估,比如搜索和推荐等场景!

这个解释还表明,如果将所有的样本的得分都加上一个额外的常数,并不改变这个概率,因此AUC不变!

因此,在广告等需要绝对的点击率场景下,AUC并不适合作为评估指标,而是用logloss等指标。

AUC对正负样本比例不敏感

利用概率解释,还可以得到AUC另外一个性质,对正负样本比例不敏感。

在训练模型的时候,如果正负比例差异比较大,例如正负比例为1:1000,训练模型的时候通常要对负样本进行下采样。当一个模型训练完了之后,用负样本下采样后的测试集计算出来的AUC和未采样的测试集计算的AUC基本一致,或者说前者是后者的无偏估计!

如果采样是随机的,对于给定的正样本,假定得分为,那么得分小于的负样本比例不会因为采样而改变!

例如,假设采样前负样本里面得分小于的样本占比为70%,如果采样是均匀的,即的负样本和的负样本留下的概率是相同的,那么显然采样后这个比例仍然是70%!

这表明,该正样本得分大于选取的负样本的概率不会因为采样而改变,也就是是不变的,因此,AUC也不变!

相比于其他评估指标,例如准确率、召回率和F1值,负样本下采样相当于只将一部分真实的负例排除掉了,然而模型并不能准确地识别出这些负例,所以用下采样后的样本来评估会高估准确率;因为采样只对负样本采样,正样本都在,所以采样对召回率并没什么影响。这两者结合起来,最终导致高估F1值!

AUC的计算

AUC可以直接根据ROC曲线,利用梯形积分进行计算。此外,还有一个比较有意思的是,可以

利用AUC与Wilcoxon-Mann-Whitney测试的U统计量的关系,来计算AUC。这可以从AUC的概率意义推导而来。

假设我们将测试集的正负样本按照模型预测得分 从小到大 排序,对于第个正样本,假设它的排序为 ,

那么说明排在这个正样本前面的总样本有 个,其中正样本有 个(因为这个正样本在所有的正样本里面排第j),

所以排在第j个正样本前面(得分比它小)的负样本个数为 个。也就是说,对于第j个正样本来说,其得分比随机取的一个负样本大(排序比它靠后)的概率是 ,其中是总的负样本数目。所以,平均下来,随机取的正样本得分比负样本大的概率为

所以

因此,很容易写出计算AUC的SQL代码

select

(ry - 0.5*n1*(n1+1))/n0/n1 as auc

from(

select

sum(if(y=0, 1, 0)) as n0,

sum(if(y=1, 1, 0)) as n1,

sum(if(y=1, r, 0)) as ry

from(

select y, row_number() over(order by score asc) as r

from(

select y, score

from some.table

)A

)B

)C

AUC的优化

采用极大似然估计对应的损失函数是logloss,因此极大似然估计的优化目标并不是AUC。

在一些排序场景下,AUC比logloss更贴近目标,因此直接优化AUC可以达到比极大似然估计更好的效果。

实际上,pairwise的目标函数就可以看做一种对AUC的近似。因为损失函数都是作用与正负样本得分差之上!

例如,

rank-SVM

rank-net

指数损失

TOP 损失

显然,这些损失函数都是对的正负样本对进行惩罚!

此外,也有一些其它对AUC近似度更好的损失函数,例如

分别表示正例和负例的得分。

这解释了为什么某些问题中,利用排序损失函数比logloss效果更好,因为在这些问题中排序比概率更重要!

AUC要到多少才算好的模型

AUC越大表示模型区分正例和负例的能力越强,那么AUC要达到多少才表示模型拟合的比较好呢?在实际建模中发现,预测点击的模型比预测下单的模型AUC要低很多,在月活用户里面预测下单和日活用户里面预测下单的AUC差异也很明显,预测用户未来1小时下单和预测未来1天的下单模型AUC差异也很大。这表明,AUC非常依赖于具体任务。

以预测点击和预测下单为例,下单通常决策成本比点击高很多,这使得点击行为比下单显得更加随意,也更加难以预测,所以导致点击率模型的AUC通常比下单率模型低很多。

那么月活用户和日活用户那个更容易区分下单与不下单用户呢?显然月活用户要容易一些,因为里面包含很多最近不活跃的用户,所以前者的AUC通常要高一些。

对于预测1小时和预测1天的模型,哪一个更加困难?因为时间越长,用户可能发生的意料之外的事情越多,也越难预测。举个极端的例子,预测用户下一秒中内会干啥,直接预测他会做正在干的事情即可,这个模型的准确率就会很高,但是预测长期会干啥就很困难了。所以对于这两个模型,后者更加困难,所以AUC也越低。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355752.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[HTML5amp;CSS3]Transform具体解释

Transform字面上就是变形,改变的意思。在CSS3中transform主要包含以下几种:旋转rotate、扭曲skew、缩放scale和移动translate以及矩阵变形matrix。以下我们一起来看看CSS3中transform的旋转rotate、扭曲skew、缩放scale和移动translate详细怎样实现。老样…

perl转python_将行转换为perl或python中的列

我认为你可以用一张桌子做好,所以我会告诉你如何做你要求的和我认为好的。$name "";$data {};open(IN, "build.txt");foreach my $line (){if($line ~ /Re: (.*)\n/) { # get building name$name $1;$name ~ s/ /_/;$data->{$name} []; …

比亚迪定薪后多久给offer_比亚迪车主给爱车做四门隔音,没想到两年后肠子都悔青...

许多车主都有过这样的经历:总感觉爱车的静谧性不够如意,为了提升隔音效果改善驾乘质感,往往产生给爱车做一个全车隔音的冲动。只不过冲动归冲动,在着手对车子进行隔音改造工程前,一定要选择靠谱的隔音材料,…

Centos开机自己主动挂载windows中的ntfs磁盘

装了windows和centos双系统后,发如今centos中无法进入windows中的磁盘,更不要说查看磁盘里的文件了! 原来默认情况下。centos不支持Widows NTFS硬盘分区读写,要想把NTFS格式的磁盘挂载到CentOS 以下须要安装第三方软件ntfs-3g。…

人工智能方向毕业设计_毕业季|广州美术学院视觉设计学院毕业设计展

视觉艺术设计学院成立于2010年9月,由广州美术学院最传统的装潢系和新兴的数码艺术设计系联合组建而成,2018年11月,艺术与科技专业并入学院。学院现拥有视觉传达设计、数字媒体艺术设计、动画、艺术与科技4个专业。视觉文化设计工作室 视觉文化…

江西住建云实名认证怎么弄_王者荣耀无限时间怎么弄 2020年无限时间账号

腾讯游戏都是有健康系统的,王者荣耀自然也不例外,王者还是第一批出健康系统的游戏,今年健康系统同时有时间限制和充值限制,未成年玩家一天最多只能玩1.5个小时,游戏现在有传闻无限时间账号,那么无限时间怎么…

coherence安装_在Oracle Coherence中分发Spring Bean

coherence安装本文展示了如何通过使用Oracle Coherence中的EntryProcessor和可移植对象格式(POF)功能来分发Spring Bean。 Coherence通过EntryProcessor API支持无锁编程模型。 此功能通过减少网络访问并在条目上执行隐式的低级锁定来提高系统性能。 此隐…

spring 的aop操作

转载于:https://www.cnblogs.com/hwgok/p/6760663.html

excel 公式 单引号 concat_Excel两个新函数帮你快速搞定批量连接

如果将两个文本连接起来,通常第一反应用连接符号"&"。使用连接符&连接文本字符记得曾经有记者采访刘强东问奶茶妹妹漂不漂亮,他竟然回答看不出来好赖…当时真觉得这家伙身在福中不知福,饱汉不知饿汉饥。果然之后还闹出一些…

向量表示 运动抛物线_ALevel物理知识点详解:抛物线运动

考培雅思留学申请一站式服务,专为有志于申请英国G5超级精英大学以及澳洲八大、新加坡顶尖高校的中学生设计。开设有数学、进阶数学、物理、化学、生物、经济、会计等理科、商科、人文类课程, 学生可根据优势学科、兴趣爱好自由选择3-4门学习。锦秋A-Leve…

练习~虚拟线上银行

数据库操作,网络编程及多线程的综合练习~ 客户端: UI层 1 import javax.swing.*;2 import java.awt.*;3 import java.awt.event.*;4 5 public class ATMUI{6 7 //主方法8 public static void main(String [] args){9 ATMUI ui new ATMUI();…

mybatisplus 操作另一个数据库的数据_MySQL数据库的基础操作

一、基本概念数据库术语数据库(database) - 保存有组织的数据的容器(通常是一个文件或一组文件)。数据表(table) - 某种特定类型数据的结构化清单。模式(schema) - 关于数据库和表的布局及特性的信息。模式定义了数据在表中如何存储,包含存储什么样的数据&#xff0…

JEP 277“增强弃用”非常好。 但这是一个更好的选择

维护API很难。 我们正在维护非常复杂的jOOQ API。 但是就语义版本而言,我们遵循相对宽松的规则 。 当您阅读Brian Goetz和其他人关于在JDK中保持向后兼容性的评论时,我只能对他们的工作表示敬意。 显然,我们都希望最终移除Vector &#xff…

ds哈希查找—二次探测再散列_大白话之哈希表和哈希算法

哈希表概念哈希表(散列表),是基于关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数(哈希函数&#xff…

QBC(Query By Criteria) QBE (Query By Example)

QBC 参考:(Hibernate的QBC查询) //is empty and is not emptyTestpublic void testQBC(){Session session sf.getCurrentSession();session.beginTransaction();//criterion 标准/准则/规范Criteria c session.createCriteria(Topic.class)//from Topic.add(Rest…

二叉搜索时与双向链表python_剑指Offer(二十六) 二叉搜索树和双向链表

题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路以及解答主要是使用递归,设置一个head和end,head只在第一次设置值,后面就是将end的…

python数据分析神器_太香了!墙裂推荐6个Python数据分析神器!!

hello,大家好我是东哥! 用Python处理数据大家都不陌生了,属常规操作,但常规之下还是也有些暗藏技巧的,本篇东哥分享6个好玩高效的操作,帮助大家提高效率。 一、Pandas Profiling Pandas Profiling提供数据的…

第五天敏捷冲刺

每日任务: 1.本次会议为第三次 Meeting会议; 2.由于本次会议人员都有各自的事情,所以都通过私聊组长来,讨论接下来的任务; 3.今天的代码部分coding:https://git.coding.net/ysh0904/wl2ban.git 4.燃尽图: 5…

jsf集成spring_Spring和JSF集成:分页

jsf集成spring使用大型数据集时,通常需要以分页格式显示数据。 分页是一个有趣的问题,因为它倾向于跨越应用程序的所有层,从视图层通过应用程序服务一直到对数据库的原始调用。 在获取分页数据时,有一些非常好的解决方案。 如果您…

mysql timestamp 并发_MySQL 实现 EF Code First TimeStamp/RowVersion 并发控制

在将项目迁移到MySQL 5.6.10数据库上时,遇到和迁移到PostgreSQL数据库相同的一个问题,就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Server数据库中的实现。先上网搜索解决方案,找到Ak.Ini的博文http://www.cnblogs.com/akini/arc…