前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【技术分享】机器学习模型评估之通俗理解AUC

【技术分享】机器学习模型评估之通俗理解AUC

原创
作者头像
腾讯云TI平台
修改2021-12-22 16:01:42
2.8K0
修改2021-12-22 16:01:42
举报
文章被收录于专栏:腾讯云TI平台腾讯云TI平台

本文原作者:陈亮,经授权后发布。

导语

机器学习模型的评估指标很多,对于分类问题常会看到AUC作为性能衡量指标,大家往往对AUC值本身感兴趣,如其具体值的物理含义等。本文希望不引入太多公式,简单讨论下AUC指标。

通俗理解AUC指标

AUC是二分类模型的评价指标。

AUC的通俗解释是:随机给定一个正样本A和一个负样本B,分类器对A预测输出为正样本的概率比分类器对B预测输出为正样本的概率 大的可能性。

即:随机挑选一个标签为1的样本A,再随机挑选一个标签为0的样本B。预测“样本A为1的概率”大于“样本B为1的概率”的概率就是AUC值。所以,AUC = 0.8的意思是说,随机挑选个标签为1的样本,它被排在随机挑的0样本的前面的概率是0.8。显然AUC是0.5的话,就说明这个模型和随便猜没什么两样。

AUC代表分类器的辨识度,AUC越大,往往表明分类辨识效果越好。

AUC值背后的含义

AUC的数值与每个预测概率的数值大小无关,在乎的是每个预测概率的排序。假设我们按照概率从大到小排。如果根据预测结果,所有标签为1的样本都排在了标签为0的样本前面,那么AUC就是1。而AUC的最小值为0.5,表示分类器完全无效,同随机猜测正反面一样。

AUC的值是ROC曲线下的面积,也正如其名称Area Under Curve。ROC曲线是统计里面的概率,基于样本的真实类别和预测概率来画的,其x轴是false positive rate,y轴是true positive rate。这就要介绍下这两个rate:对于二分类问题,一个样本只能是0或1两种类别,当用一个分类器进行概率预测的时候,对于真实为0的样本,我们可能预测其为0或1,真实为1的样本,我们也可能预测其为1或0,这样的四种可能性:

  • 真实为1,预测为1:true positive
  • 真实为1,预测为0:false negative
  • 真实为0,预测为1:false positive
  • 真实为0,预测为0:true negative

真实1

真实0

预测1

true positive样本数量为A

false positive样本数量为C

预测0

false negative样本数量为B

true negative样本数量为D

True positive rate = A/(A+B) False positive rate = C/(C+D)

True positive rate刻画的是分类器所识别出的正样本的比例,反映正类覆盖程度。False positive rate刻画的是分类器错认为正类的负样本占所有负样本的比例。分类模型将各个样本预测归到某个类,结果一般为实数值,如逻辑回归结果为0到1之间的实数值。就会涉及如何确定阈值,使得模型结果大于这个阈值时划为一类,否则划为另一类。假设确定阈值为0.6,大于这个值的样本为正类,小于的为负类,当减少阈值到0.5时,固然能找出更多的正类(提高了所识别出正样本的比例),但同时也将更多负样本当做了正类(升高了错认为正类的负样本占所有负样本的比例)

这样就较好理解上图中,ROC曲线的左下角(0,0)即为预测全部样本都为0时的点(A=0,C=0),右上角的(1,1)即为预测全部样本都为1时的点(B=0,D=0)。

另外ROC是Receiver Operating Characteristic的缩写,翻译为“接受者操作特性曲线”,其漫漫历史有机会再谈。

AUC与数据不平衡

在大多数机器学习分类任务中,我们都使用AUC作为分类器的性能衡量指标。AUC有些很好的特性:如不用设定阈值、对测试集的正负样本数量比例不敏感、还有可以根据随机分类的AUC值为0.5易作为参考比较。

然而有些场景下AUC值不一定适宜表征分类器性能,对于数据高度不平衡的场景,AUC值会偏高。虽然AUC对不平衡类别不敏感,但是会产生有误导的结果。考虑有大量负样本和极少量正样本的场景,在这种情况下,一个分类器很容易得到负的预测,

代码语言:javascript
复制
import numpy as np
from sklearn import metrics
# 样本数量为N
N = 10000
# 生成80%简单负样本,20%平衡的正负样本
a = [0,0,0,0,0,0,0,0,1,-1]
d = np.random.choice(a, size=N, replace=True, p=None)
label = np.zeros(d.size)
label[d>0] = 1

rand_preds, good_preds, better_preds = [], [], []
for i in d:
    rand = abs(i)*np.random.uniform(0,1)  
    rand_preds.append(rand)  # 对简单负样本分类正确,对其余随机预测
    good_preds.append(rand+i*0.1)  # 对简单负样本分类正确,对其余增加预测度
    better_preds.append(rand+i*0.3)
rand_auc = metrics.roc_auc_score(label,rand_preds)
good_auc = metrics.roc_auc_score(label,good_preds)
better_auc = metrics.roc_auc_score(label,better_preds)
print(rand_auc, good_auc, better_auc)

#输出为0.9451,0.9655,0.9918

即使rand_preds仅分类正确简单负样本,依然可以有很高的AUC值0.9451。由于有大量的负样本,三个分类器的AUC性能差别只有2%~3%。

总结

综上,AUC就是所有正样本中随机选取一个样本A,所有负样本中随机选取一个样本B,然后根据分类器对两个随机样本进行预测,把样本A预测为正类的概率=p1,把样本B预测为正类的概率=p0,p1>p0的概率即为AUC。

所以AUC反映的是分类器对样本的排序能力,根据这个解释,易理解AUC=0.5即完全随机对样本分类。另外值得提到的是,虽然AUC对样本类别是否均衡并不敏感(这也是不均衡样本通常用AUC评价分类器性能的一个原因),但是对于数据高度不平衡的场景,AUC值会带来理解偏差。

参考文献

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导语
  • 通俗理解AUC指标
  • AUC值背后的含义
  • AUC与数据不平衡
  • 总结
  • 参考文献
相关产品与服务
腾讯云 TI 平台
腾讯云 TI 平台(TencentCloud TI Platform)是基于腾讯先进 AI 能力和多年技术经验,面向开发者、政企提供的全栈式人工智能开发服务平台,致力于打通包含从数据获取、数据处理、算法构建、模型训练、模型评估、模型部署、到 AI 应用开发的产业 + AI 落地全流程链路,帮助用户快速创建和部署 AI 应用,管理全周期 AI 解决方案,从而助力政企单位加速数字化转型并促进 AI 行业生态共建。腾讯云 TI 平台系列产品支持公有云访问、私有化部署以及专属云部署。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档