AUC的一些基础知识

AUC的一些基础知识最近计算了搜索排序的 auc 指标 记录一下 AUC 很大一个好处是其对正负样本比例不敏感 AUC 一个正例 一个负例 预测正样本为正的概率值比预测负样本为正的概率值还要大的可能性

大家好,欢迎来到IT知识分享网。

本文主体来自 看完这篇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曲线

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



3.AUC

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

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

4.AUC计算

对于正样本概率最大的,假设排序编号为 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. 0.99999 

一些问题

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优点和缺点
6.求解AUC

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/129776.html

(0)
上一篇 2025-08-21 20:20
下一篇 2025-08-21 20:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信