AUC的一些基础知识

本文主体来自 看完这篇AUC文章,搞定任何有关AUC的面试不成问题~

1.混淆矩阵

在这里插入图片描述
假阳性率(False Positive Rate) 是在所有真实的负样本中,预测结果为正的比例, F P R = F P F P + T N FPR=\frac{FP}{FP+TN} FPR=FP+TNFP
真阳性率(True Positive Rate)(召回率Recall) 是在所有真实的正样本中,预测结果为正的比例, T P R = T P T P + F N TPR=\frac{TP}{TP+FN} TPR=TP+FNTP

2.ROC曲线

ROC曲线是(Receiver Operating Characteristic Curve),中文名是受试者工作特征曲线。
(1)ROC曲线的横坐标是假阳性率FPR,纵坐标是真阳性率TPR。
(2)明确计算AUC的时候,预测值y_pred一般都是[0, 1]的小数(代表预测为正样本的概率),真实值y_true为0或1。如果计算FPR和TPR,我们就需要知道预测的正负样本情况,但给的预测值是小数,如何划分预测的正负样本呢?答案是选取截断点。
(3)截断点是指区分正负预测结果的阈值。比如截断点=0.1,那就表示y_pred<0.1的为预测为负样本,y_pred>=0.1预测正样本。所以绘制AUC曲线需要不断移动“截断点”来得到所有的(FPR,TPR)点,然后把这些点用线段连起来就是ROC曲线了。

(4)截断点取值为 { + ∞ − ∞ } \{+\infty -\infty\} {+}和所有可能的取值就够了。
+ ∞ +\infty +表示所有都预测为负样本,(fpr, tpr) = (0, 0)。
− ∞ -\infty 表示所有都预测为正样本,(fpr, tpr) = (1, 1)。
也就是这两个坐标点固定有,所以一般截断点默认取值就是预测值的所有唯一值。
在这里插入图片描述

3.AUC

AUC(Area Under ROC Curve),顾名思义,即ROC曲线下的面积。
AUC越大,说明分类器越可能把正样本排在前面,衡量的是一种排序的性能。
那么问题来了,ROC曲线下的面积怎么就能衡量分类器的排序能力?且听慢慢道来。

如果ROC面积越大,说明曲线越往左上角靠过去。那么对于任意截断点,(FPR,TPR)坐标点越往左上角(0,1)靠,说明FPR较小趋于0(根据定义得知,就是在所有真实负样本中,基本没有预测为正的样本),TRP较大趋于1(根据定义得知,也就是在所有真实正样本中,基本全都是预测为正的样本)。并且上述是对于任意截断点来说的,很明显,那就是分类器对正样本的打分基本要大于负样本的打分(一般预测值也叫打分),衡量的不就是排序能力嘛!

比较常用的AUC的定义:随机从正样本和负样本中各选一个,分类器对于该正样本打分大于该负样本打分的概率。
从这里也可以看出AUC对正负样本比例不敏感

4.AUC计算

AUC如果按照原始定义ROC曲线下的面积来计算,非常之麻烦。
可以转换一下思路,按照上述给出的常用的AUC定义,即随机选出一对正负样本,分类器对于正样本打分大于负样本打分的概率。咱们就来算算这个概率到底是多少,那么也就算出AUC是多少了。

假设数据集一共有M个正样本,N个负样本,预测值也就是M+N个。我们将所有样本按照预测值进行从小到大排序,并排序编号由1到M+N。
在这里插入图片描述

对于正样本概率最大的,假设排序编号为 r a n k M rank_M rankM,比它概率小的负样本个数= r a n k M − M rank_M-M rankMM
对于正样本概率第二大的,假设排序编号为 r a n k M − 1 rank_{M-1} rankM1 ,比它概率小的负样本个数= r a n k M − ( M − 1 ) rank_M-(M-1) rankM(M1)
以此类推…
对于正样本概率最小的,假设排序编号为 r a n k 1 rank_1 rank1,比它概率小的负样本个数= r a n k 1 − 1 rank_1-1 rank11
那么在所有情况下,正样本打分大于负样本的个数= ∑ i ∈ 正样本 r a n k i − M ( 1 + M ) 2 \sum_{i\in正样本}rank_i-\frac{M(1+M)}{2} i正样本ranki2M(1+M)
所以,AUC的正式计算公式:
在这里插入图片描述

但是,还没有完,有一个小问题,可能大家没注意到。那就是如果有预测值是一样的,那么怎么进行排序编号呢?

其实很简单,对于预测值一样的样本,我们将这些样本原先的排号平均一下,作为新的排序编号就完事了。

5.python实现auc

有一堆样本,其中2000个负样本,8000个正样本,其中负样本的预测值为均匀分布U(0.4, 0.6),正样本的预测值为均匀分布U(0.5, 0.7)。求AUC。需要给出详细解答过程。

import pandas as pd
import numpy as np
from sklearn.metrics import roc_auc_score

y_pred = list(np.random.uniform(0.4,0.6,2000)) + list(np.random.uniform(0.5,0.7,8000))
y_true = [0]*2000 + [1]*8000


def cal_auc(y_true, y_pred):
    pair = list(zip(y_true, y_pred))
    pair.sort(key=lambda kv: kv[1])
    df = pd.DataFrame([[p[0], p[1], i+1] for i,p in enumerate(pair)], columns=['y_true', 'y_pred', 'rank'])
    for k,v in df['y_pred'].value_counts().items():
        if v >1:
            rank_mean = df[df['y_pred']==k]['rank'].mean()
            df.loc[df['y_pred']==k, 'rank']= rank_mean
    pos_df = df[df['y_true']==1]
    m = pos_df.shape[0]
    n = df.shape[0] - m
    return (pos_df['rank'].sum()-m*(m+1)/2.0) / (m*n)


print(cal_auc(y_true, y_pred))
print(roc_auc_score(y_true, y_pred))

结果:

0.8688703125
0.8688703124999999

一些问题

1.AUC含义

AUC是衡量模型分类能力的重要指标,其本质定义为从样本集中随机选择一个正例和负例,模型预估正例的概率得分大于负例概率得分的概率,主要衡量模型的排序能力

2.为什么说AUC能评估模型的排序能力

AUC越大,对应ROC曲线的面积越大,即越往左上角靠近,对于在任意阈值下坐标点越往左上角(0,1)靠近,则有TPR偏大接近1(这说明正样本基本都被模型预估成正例),FPR偏小接近0(这说明负样本基本都被模型预估成负例,也就是不存在模型预估成正例,而实际标签为负例的情况)。这样的效果是模型预估正样本的概率得分大于负例概率得分,这便是排序能力。

3.怎么理解模型AUC高,但实际误差却偏大

这也是AUC一个缺点,auc主要衡量模型的排序能力,忽略模型预估概率和对样本的拟合程度,比如对于二分类任务,将正样本全部预估0.51,将负样本全部预估成0.49,此时虽然AUC为1但交叉熵损失很大。

4.CTR模型训练,随机负采样为何对AUC影响不大?

AUC对正负例不均衡不敏感:

  • 从AUC和计算公式上看与正负例比例无关,随机选择一个正样本和负样本,模型预估正样本的得分大于负样本得分的概率。
  • 从ROC曲线上看,横轴FPR计算只包含负样本,纵轴TPR计算只包含正样本,横纵坐标不受正负样本比例影响。
5.AUC优点和缺点

优点:
AUC衡量的是模型的排序能力,比较适合排序类业务
对正负例均衡并不敏感,在样本不均衡的情况下,也能给出合理的评估结果
从AUC和计算公式上看与正负例比例无关,随机选择一个正样本和负样本,模型预估正样本的得分大于负样本得分的概率,
从ROC曲线上看,横轴只关心负样本,纵轴只关心正样本,横纵坐标不受正负样本比例影响(参考AUC为啥对正负样本比例不敏感?)
对于P、R和F1指标,需要手动设置阈值,当阈值不同时,结果也不一样,而AUC没有设置阈值之说,其得到的是整体的结果

缺点:
忽略了模型预估概率值和对正负样本的拟合程度
AUC对模型预估的具体概率值不敏感,通过计算公式知它会对预估概率排序,因此对序敏感而对概率值不敏感
比如正样本预估概率均比0.5大一点,负例均比0.5小一点,这种情况下AUC为1,但模型对正负例的拟合程度不高,交叉熵损失非常大,这就会出现AUC指标高,但实际偏差大的情况
无法反应准确率、召回率等业务常用指标
一些业务场景比较注重查全率:比如安全漏洞检查,希望能把全部漏洞查出来,即使准确率低一点也没关系
一些业务场景比较注重查准率

6.求解AUC

有一堆样本,其中2000个负样本,8000个正样本,其中负样本的预测值为均匀分布U(0.4, 0.6),正样本的预测值为均匀分布U(0.5, 0.7)。求AUC。需要给出详细解答过程。
在这里插入图片描述

CTR模型训练,随机负采样为何对AUC影响不大?
如何理解机器学习和统计中的AUC?
图解AUC和GAUC
AUC
推荐系统遇上深度学习(九)–评价指标AUC原理及实践
【回归基础】深入理解AUC指标

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值