目录
老饼讲解:一步一步上手学习

【介绍】一篇入门-AUC与ROC曲线

作者 : 老饼 发表日期 : 2026-01-06 17:16:21 更新日期 : 2026-05-11 22:40:07
老饼讲解-简单易懂,干货满满,爽过嗦螺!


ROC曲线(Receiver Operating Characteristic)是一种用来看二分类模型效果的曲线,而AUC(Area Under Curve)则是ROC曲线下的面积,它是用来评估二分类模型效果的一个指标,在机器学习中是二分类模型的常用评估指标,下面我们就详细来说说它们的背景意义,以及如何画出ROC曲线与计算AUC指标。

一、AUC与ROC曲线-背景

我们都知道,AUC与ROC都是服务于二分类模型的,在说AUC和ROC之前,我们不妨先来回顾一下二分类模型的输出是什么,这样才知道AUC和ROC计算的都是什么。如下,二分类模型输出的是如下的评分(或者概率):

二分类的模型输出

这里的评分(或者概率)指的是"样本属于正样本"的评分(或者概率),也就是它越高就代表样本越可能是正样本。而二分类模型呢,则一般会设置一个阈值,当这个评分大于所设的阈值时,就判为正样本。

二、ROC曲线是什么

好了,我们终于可以开始说说ROC曲线是什么了,为什么先说ROC曲线呢,因为有了ROC才有AUC,所以自然要先来看看ROC是什么,下面才会知道AUC是什么,闲话少说,让我们开始吧!

2.1. 什么是ROC曲线

ROC指的是模型取不同阈值时,模型的虚警率FPR与查全率TPR的变化曲线,如下:

 ROC曲线

其中,FPR与TPR指标分别如下:

查全率TPR:正样本被成功检查出来的概率(1标签预测为1标签的个数/1标签样本个数)

虚警率FPR:负样本被误检为正样本的概率(0标签预测为1标签的个数/0标签样本个数)

那么ROC曲线是个啥意思呢,其实只要把查全率当作是收益,把虚警率看作成本,那么ROC曲线展示的其实就是一条收益/成本的变化曲线了,也就是在模型的预测结果中,随着成本的增加,收益如何变化。

为什么可以把查全率当作收益,把虚警率当作成本呢? 举个具体例子,例如投放广告,查全(1类被检查出来)是收益:我们成功检查出了目标客户,他们都会产生收益,而虚警(0类被误检为1类)则是成本:非目标客户被当成了目标客户,会产生不必要的投放成本。

2.2. ROC曲线的意义

好了,为什么要画ROC曲线呢?因为我们希望查全率(收益)越高越好,虚警率(成本)越低越好,但两者往往不可兼得,所以ROC画出了取不同阈值时,所对应的各种【查全率,虚警率】组合,这样就可以让我们更直观地找出业务中最具性价比的一组【查全率,虚警率】,从而确定阈值。

ROC曲线的意义

由于ROC曲线越往上拱,就代表我们更有可能从中挑到一组性价比更好的【查全率,虚警率】,因此,越往上拱的ROC曲线意味着模型质量更高,即ROC的拱度在某种程度上代表了模型质量。

三、AUC指标是什么

3.1. 什么是AUC

搞懂了ROC,自然就秒懂AUC了,毕竟我们不能总盯着一条曲线去评估我们的模型,更需要的是一个指标,而AUC干的就是这事,它把ROC指标化了。ROC不是越拱越好吗,AUC(Area Under Curve)就通过计算ROC曲线下的面积,来评估ROC"拱"的程度,它相当于将ROC曲线指标化:

AUC是什么

由图可知,AUC的取值范围为,ROC曲线越拱,AUC则越大,代表模型效果越好。

 AUC不会小于0.5,因为小于0.5时可以把预测结果反转,ROC曲线就会反转,此时AUC就大于0.5


3.2. AUC多少才有效果

AUC越高,越有可能挑选到一个阈值使得模型FPR尽量低的同时,又能令TPR尽量的高,那么,AUC要达到多少,模型才算有效果呢?下面分享笔者日常建模时对AUC的一个感性经验认识:

AUC与模型效果

AUC与模型效果的关系具体如下:

     AUC<=0.58         :模型毫无效果

     0.58<AUC<=0.63:模型可能有效,也可能没效

     0.63<AUC<=0.68:模型开始生效,但模型投产很难真正有效益

     0.68<AUC<=0.73:模型开始生效,模型投产可能会有一定的效益

     0.73<AUC<=0.78:模型已经生效,模型投产基本会有效益

     0.78<AUC<=0.83:模型强

     0.83<AUC<=0.88:模型很强

     0.88>AUC            :模型超级强

虽然我也很想按0.6、0.7、0.8....这样进行区分,但AUC的效果变化的确不是这么整齐...总的来说,一般0.7~0.8之间的AUC是日常比较正常的有效数值,AUC达到0.75就算比较好了,但AUC具体多少才可以投产,还需要根据具体业务具体分析。

四、AUC与ROC-代码实现

最后,我们来看看在python中,要怎么计算AUC和画ROC曲线。最方便的是调用sklearn的metrics包来实现,只需先用roc_curve算出fpr, tpr,再调用auc函数计算auc值就可以了,具体代码示例如下:

'''
本代码用于展示如何用sklearn计算AUC
本代码来自《老饼讲解-机器学习》www.bbblearn.com
'''
from sklearn import metrics
import numpy as np 

#-----------标签与score数据----------------
# 特别说明:计算AUC可以输入类别的概率,也可以输入类别的评分,即score不一定需要在[0,1]之间
lable = np.array([0, 1 ,0,1 ,1,1 ,0 ,1,0,1,0,0,0,0,1,0])
score = np.array([0.2, 0.28,0.1 ,0.6,0.5, 0.3, 0.6, 0.8,0.2,0.25,0.4,0.2,0.5,0.3,0.18,0.18]) 

#---------计算fpr, tpr--------------------
fpr, tpr, thresholds = metrics.roc_curve(lable,score)                          # 计算不同阈值时的fpr与tpr
print('\nthresholds:'+str(thresholds))                                         # 打印阈值
print('FPR:',fpr.round(3))                                                     # 打印FPR
print('TPR:',tpr.round(3))                                                     # 打印TPR
													                          
# ---------计算AUC------------------------                                                
auc = metrics.auc(fpr, tpr)                                                    # 计算AUC
print('AUC:',auc.round(3))                                                     # 打印AUC
																		      
# ------绘制ROC曲线-----------------------                                               
import matplotlib.pyplot as plt                                               
plt.plot(fpr,tpr, marker='o',markerfacecolor='r', markersize=5)                # 绘制ROC曲线
plt.fill_between(fpr,0, tpr, facecolor='green', alpha=0.3)                     # 给ROC区域添加颜色
plt.xlim(0,1);plt.ylim(0,1);                                                   # 限制x,y轴的范围
plt.title('ROC');plt.xlabel('fpr');plt.ylabel('tpr')                           # 加标题
plt.show()                                                                     # 展示画布

代码运行结果如下:

AUC的计算结果

ROC曲线

ROC曲线看起来比较怪是因为本示例中的数据较少。

总结

ROC和AUC都是用来评估二分类模型的效果的,而ROC是一条曲线,AUC则是ROC曲线下的面积,可以认为AUC就是ROC的指标化,AUC在0.5-1之间,越大越好,AUC一般至少要0.68才能算模型有一点点效果。



图标 评论
添加评论