机器学习-一篇入门

【算法】一篇入门之-AUC与ROC曲线是什么

作者 : 老饼 发表日期 : 2022-06-26 03:55:46 更新日期 : 2024-10-06 13:14:45
本站原创文章,转载请说明来自《老饼讲解-机器学习》www.bbbdata.com



AUC和ROC是专门针对输出概率或评分的二分类模型设计的模型效果评估指标

本文详细介绍什么是AUC、什么是ROC曲线,以及AUC、ROC的意义、用途和计算方法

通过本文可以快速了解AUC是什么、ROC曲线是什么、有什么用,如何计算,以及如何使用




    01. AUC与ROC曲线     



本节讲解什么是AUC与ROC曲线,快速了解AUC与ROC的定义与用途




      什么是ROC与AUC      


ROC与AUC有什么用
 
AUC全称为 Area Under Curve,ROC全称为 Receiver Operating Characteristic
AUC和ROC都用于评估二分类模型的效果,一个二分类模型往往是输出如下的评分:
 二分类模型的输出评分
 备注:评分越高代表样本越可能是正样本,当评分大于所设的阈值时,则判为正样本
这类模型一般不用准确率来评估模型效果,而是使用ROC曲线和AUC指标进行评估
 什么是ROC曲线
ROC指的是模型取不同阈值时,模型的虚警率FPR与查全率TPR的变化曲线,如下:
 AUC与ROC曲线
    其中,FPR与TPR指标分别如下:
 查全率TPR:正样本被成功检查出来的概率(1标签预测为1标签的个数/总样本个数)
 虚警率FPR:负样本被误检为正样本的概率(0标签预测为1标签的个数/总样本个数)
 什么是AUC
AUC指的是ROC曲线下的面积,用于评估ROC"拱"的程度,它相当于将ROC曲线指标化
由图可知,AUC的取值范围为,ROC曲线越拱,AUC则越大,代表模型效果越好
 AUC不会小于0.5,因为小于0.5时可以把预测结果反转,ROC曲线就会反转,此时AUC就大于0.5






    02. AUC与ROC曲线的意义     



本节讲解AUC与ROC曲线的意义,以及AUC多少才有效




       ROC与AUC的意义     


查全率TPR与虚警率FPR的意义   
 查全率(TPR)是正样本被成功检查出来的概率,虚警率(FPR)则是负样本被误检为正样本的概率
 在二分类模型中它们往往比准确率更重要,因为很多时候,查全率就是收益,虚警率就是成本
 查全率TPR与虚警率FPR的意义
 例如投放广告,查全(1类被检查出来)是收益:我们成功检查出了目标客户,他们都会产生收益
而虚警(0类被误检为1类)则是成本:非目标客户被当成了目标客户,会产生不必要的投放成本
ROC曲线与AUC的意义
我们希望查全率(收益)越高越好,虚警率(成本)越低越好
但两者往往不可兼得,所以ROC画出了取不同阈值时,所对应的各种【查全率,虚警率】组合
这样就可以让我们更直观地找出业务中最具性价比的一组【查全率,虚警率】,从而确定阈值
 ROC曲线与AUC的意义
由于ROC曲线越往上拱,就代表我们更有可能从中挑到一组性价比更好的【查全率,虚警率】
因此,越往上拱的ROC曲线意味着模型质量更高,即ROC的拱度在某种程度上代表了模型质量
而AUC则衡量了ROC的拱度,当ROC越拱时曲线下的面积越大,即AUC越大,也就代表模型质量越好







       AUC多少才有效果      


AUC越高,越有可能挑选到一个阈值使得模型FPR尽量低的同时,又能令TPR尽量的高
那么,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具体多少才可以投产,还需要根据具体业务具体分析






    03. AUC的计算与ROC的绘制-代码示例   




本节讲解如何根据模型评分画ROC曲线以及计算AUC




     ROC绘制与AUC计算实例     


在python中计算AUC最方便的是调用sklearn的metrics包来实现
只需先用roc_curve算出fpr, tpr,再调用auc函数计算auc值即可
 利用sklearn计算AUC的具体示例代码如下:
# -----调用sklearn包计算AUC--------
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')                           # 加标题
运行结果如下:
 
AUC计算结果
 ROC绘画结果
 ✍️ROC曲线看起来比较怪是因为本示例中的数据较少











 End 











联系老饼