机器学习之AUC

深入理解AUC

AUC是什么

aucroc曲线的面积,常用来评价二分类系统的好坏。

AUC如何计算

对于二分类问题,预测模型会对每一个预测样本一个得分p,然后选取一个阈值t,当p&gt;tp&gt;tp>t时,样本预测为正,当p&lt;=tp&lt;=tp<=t时样本预测为负。根据样本自身的标签值和模型预测的标签值,我们可以把样本划分为四个部分。分别是TPFPTNFN。如下图所示:

混淆矩阵
随着阈值t选取的不同,这四类样本的比例各不相同。定义TPR(真正例率)和FPR(假正例率)分别如下:

TPR=TPTP+FNTPR=\frac{TP}{TP+FN}TPR=TP+FNTP

FPR=FPFP+TNFPR=\frac{FP}{FP+TN}FPR=FP+TNFP

  • TPR的意义是所有真实类别为1的样本中,预测类别为1的比例
  • FPR的意义是所有真实类别为0的样本中,预测类别为1的比例

当阈值t发生变化时,TPRFPR会随之变化。我们将TPRFPR写成关于t的变量形式。定义N+(t)N_{+}(t)N+(t)N−(t)N_{-}(t)N(t)分别为得分大于ttt的样本中正负样本的数目,N+N_{+}N+N−N_{-}N为总的正负样本数目,则:
TPR(t)=N+(t)N+TPR(t)=\frac{N_{+}(t)}{N_{+}}TPR(t)=N+N+(t)
FPR(t)=N−(t)N−FPR(t)=\frac{N_{-}(t)}{N_{-}}FPR(t)=NN(t)

TPR为横轴,FPR为纵轴,随着阈值t的变化,点(TPR,FPR)(TPR,FPR)(TPR,FPR)会在坐标轴上画出一条曲线,这条曲线就是ROC曲线。
显然,如果模型是随机的,模型得分对正负样本没有区分性,那么得分大于t的样本中正负样本的比例应该和总的正负样本比例基本一致。也就是说
N+(t)N−(t)=N+N−\frac{N_{+}(t)}{N_{-}(t)}=\frac{N_{+}}{N_{-}}N(t)N+(t)=NN+
从上式可以看出此时ROC曲线是一条直线。
反之,如果模型的区分性非常理想,也就是说正负样本的得分可以完全分开,所有的正样本都比负样本得分高,此时ROC曲线表现为字形。
ORC曲线
实际的模型ROC曲线则是一条上凸的曲线,介于随机和理想的ROC曲线之间。二ROC曲线的面积即为AUC

AUC=∫t=∞+∞y(t)dx(t)AUC=\int _{t=\infty}^{+\infty}y(t)dx(t)AUC=t=+y(t)dx(t)
这里的xxxyyy分别是FPRTPR,是ROC曲线的横纵坐标。

ROC曲线上有几个值得关注的点:

  • (0,1):此时FPR=0FPR=0FPR=0,TPR=1TPR=1TPR=1模型最好,混淆矩阵是对角矩阵
  • (0,0):FPR=0FPR=0FPR=0TPR=0TPR=0TPR=0,此时当t≥1t \ge 1t1时取到,即样本预测全部为负样本,混淆矩阵第一行全为0
  • (1,1):FPR=1FPR=1FPR=1TPR=1TPR=1TPR=1,此时当t≤0t \le 0t0时取到,即样本预测全部为正样本,混淆矩阵第二行全为0

AUC的概率解释

AUC常常被用来作为模型排序好坏的指标,原因在于AUC可以看做随机从正负样本中选取一对正负样本,其中正样本的得分大于负样本的概率!考虑随机取得这对正负样本中,负样本得分在[t,t+Δt][t,t+\Delta t][t,t+Δt]之间的概率为
P(t≤s−&lt;t+Δt)=P(s−&gt;t)−P(s−&gt;t+Δt)P(t \le s_{-} &lt; t+\Delta t)=P(s_{-}&gt;t)-P(s_{-}&gt;t+\Delta t)P(ts<t+Δt)=P(s>t)P(s>t+Δt)
=N−(t)−N−(t+Δt)N−=x(t)−x(t+Δt)=−Δx(t)=\frac{N_{-}(t)-N_{-}(t+\Delta t)}{N_{-}}=x(t)-x(t+\Delta t)=-\Delta x(t)=NN(t)N(t+Δt)=x(t)x(t+Δt)=Δx(t)

如果Δt\Delta tΔt很小,那么该正样本得分大于该负样本的概率为
P(s+&gt;s−∣t≤s−&lt;t+Δt)≈P(s+&gt;t)=N+(t)N+=y(t)P(s_{+}&gt;s_{-}|t \le s_{-} &lt; t+\Delta t) \approx P(s_{+}&gt;t)=\frac{N_{+}(t)}{N_{+}}=y(t)P(s+>sts<t+Δt)P(s+>t)=N+N+(t)=y(t)
所以,P(s+&gt;s−)=∑P(t≤s−&lt;t+Δt)P(s+&gt;s−∣t≤s−&lt;t+Δt)=−∫t=−∞∞y(t)dx(t)=∫t=∞−∞y(t)dx(t)=AUCP(s_{+}&gt;s_{-})=\sum P(t \le s_{-} &lt; t+ \Delta t)P(s_{+}&gt;s_{-}|t \le s_{-} &lt; t+ \Delta t)=-\int_{t=-\infty}^{\infty}y(t)dx(t)=\int_{t=\infty}^{-\infty}y(t)dx(t)=AUCP(s+>s)=P(ts<t+Δt)P(s+>sts<t+Δt)=t=y(t)dx(t)=t=y(t)dx(t)=AUC

这个积分表示为随机在样本里面取一对正负样本,正样本的得分大于负样本的概率

AUC的排序特性

根据上面的概率解释,AUC实际上在说一个模型把正样本排在负样本前面的概率!所以AUC常用在排序场景的模型评估,比如搜索和推荐等场景!这个解释还表明,如果将所有的样本得分加上一个额外的常数并不改变这个概率,因此AUC不变。因此,在广告等需要绝对的点击率场景下,AUC并不适合作为评估指标,而是用logloss等指标。

AUC对正负样本比例不敏感

利用概率解释还可以得到AUC另一个性质:对正负样本比例不敏感。在训练模型的时候,如果正负样本差异较大,我们经常会对正样本进行过采样或者对负样本进行下采样。当一个模型训练完了之后,用负样本下采样后的测试集计算出来的AUC和未采样的测试集计算的AUC基本一致,或者说前者是后者的无偏估计!对于阈值t来说,党对正样本或者负样本进行均衡采样时,大于t或者小于t的样本是等比例变化的,即k∗N+(t)k∗N+=N+(t)N+\frac{k*N_{+}(t)}{k*N_{+}}=\frac{N_{+}(t)}{N_{+}}kN+kN+(t)=N+N+(t)k∗N−(t)k∗N−=N−(t)N−\frac{k*N_{-}(t)}{k*N_{-}}=\frac{N_{-}(t)}{N_{-}}kNkN(t)=NN(t)。无论哪种情况,积分式大小不发生变化。

相比于其他评估指标,例如准确率、召回率和F1值,负样本下采样相当于只将一部分真实的负例排除掉了,然而模型并不能准确地识别出这些负例,所以用下采样后的样本来评估会高估准确率;因为采样只对负样本采样,正样本都在,所以采样对召回率并没什么影响。这两者结合起来,最终导致高估F1值!

AUC的计算

AUC可以直接根据ROC曲线,利用梯形积分进行计算。此外,还有一个比较有意思的是,可以 利用AUCWilcoxon-Mann-Whitney测试的U统计量的关系,来计算AUC。这可以从AUC的概率意义推导而来。

假设我们将测试集的正负样本按照模型预测得分从小到大排序,对于第jjj个正样本,假设它的排序为rjr_{j}rj,那么说明排在这个正样本前面的总样本有rj−1r_{j}-1rj1个,其中正样本有j−1j-1j1个,所以排在前面的负样本个数为rj−jr_{j}-jrjj个。也就是说,对于第jjj个正样本来说,其得分比随机取的一个负样本大的概率为(rj−j)/N−(r_{j}-j)/N_{-}(rjj)/N,其中N−N_{-}N是总的负样本数目。所以,平均下来,随机取的正样本得分比负样本大的概率为
1N∑j=1N+(rj−j)/N−=∑j=1N+rj−N+(N++1)/2N+N−\frac{1}{N}\sum_{j=1}^{N_{+}}(r_j-j)/N_-=\frac{\sum_{j=1}^{N_+}r_j-N_+(N_++1)/2}{N_+N_-}N1j=1N+(rjj)/N=N+Nj=1N+rjN+(N++1)/2
所以AUC=∑j=1N+rj−N+(N++1)/2N+N−AUC=\frac{\sum_{j=1}^{N_+}r_j-N_+(N_++1)/2}{N_+N_-}AUC=N+Nj=1N+rjN+(N++1)/2

一个更加简单的解释:
将得分从小到大排序,阈值t+∞+\infty+−∞-\infty变化。当阈值右边增加一个正样本时,TPTPTP增加一个,这个正样本对面积的贡献率为1N+rj−jN−\frac{1}{N_+} \frac{r_j-j}{N_{-}}N+1Nrjj,将所有的正样本贡献率加起来即是ROC面积。即为∑j=1N+1N+rj−jN−=∑j=1N+rj−N+(N++1)/2N+N−\sum_{j=1}^{N_+}\frac{1}{N_+} \frac{r_j-j}{N_{-}}=\frac{\sum_{j=1}^{N_+}r_j-N_+(N_++1)/2}{N_+N_-}j=1N+N+1Nrjj=N+Nj=1N+rjN+(N++1)/2

AUC计算的其它形式

AUC=∑i=1N+∑j=1N−δ(si+−sj−)N+N−AUC=\frac{\sum_{i=1}^{N_+}\sum_{j=1}^{N_-}\delta(s_i^+-s_j^-)}{N_+N_-}AUC=N+Ni=1N+j=1Nδ(si+sj)
其中当x&gt;0x&gt;0x>0δ(x)=1δ(x)=1δ(x)=1,当x&lt;0x&lt;0x<0时,δ(x)=0\delta(x)=0δ(x)=0,我们将δ\deltaδ函数“软化”,即用sigmoidsigmoidsigmoid函数来替代,那么AUCAUCAUC就是可作为直接优化目标来进行微分。

softAUC=∑i=1N+∑j=1N−σ(si+−sj−)N+N−softAUC=\frac{\sum_{i=1}^{N_+}\sum_{j=1}^{N_-}\sigma(s_i^+-s_j^-)}{N_+N_-}softAUC=N+Ni=1N+j=1Nσ(si+sj)

AUC的优化

采用极大似然估计对应的损失函数是logloss,因此极大似然估计的优化目标并不是AUC。在一些排序场景下,AUClogloss更贴近目标,因此直接优化AUC可以达到比极大似然估计更好的结果。 实际上,pairwise的目标函数就可以看做一种对AUC的近似。因为损失函数都是作用与正负样本得分差之上! 例如,

类别优化目标
rank-SVMmax(0,−s++s−+Δ)max(0, -s_++s_-+\Delta)max(0,s++s+Δ)
rank-netlog(1+exp(−(s+−s−)))log(1+exp(-(s_+-s_-)))log(1+exp((s+s)))
指数损失exp(−(s+−s−))exp(-(s_+-s_-))exp((s+s))
TOP损失∑smax(0,−sc+s+Δ)\sum_smax(0,-s_c+s+\Delta)smax(0,sc+s+Δ)

显然,这些损失函数都是对s+&lt;s−s_+&lt;s_-s+<s的正负样本对进行惩罚!此外,也有一些其它对AUC近似度更好的损失函数,例如
E[(1−wT(s+−s−))2]=1n+n−∑i=1n+∑j=1n−(1−wT(si+−sj−))2\mathbf{E} \left[ (1-w^T(s_+ - s_-))^2 \right] \\ = \frac{1}{n_+n_-} \sum_{i=1}^{n_+} \sum_{j=1}^{n_-} (1-w^T(s_{i}^+ - s_{j}^-))^2E[(1wT(s+s))2]=n+n1i=1n+j=1n(1wT(si+sj))2
si+,sj−s_i^+, s_j^-si+,sj分别表示正例和负例的得分。 这解释了为什么某些问题中,利用排序损失函数比logloss效果更好,因为在这些问题中排序比概率更重要!

AUC要到多少才算好的模型

AUC越大表示模型区分正例和负例的能力越强,那么AUC要达到多少才表示模型拟合的比较好呢?在实际建模中发现,预测点击的模型比预测下单的模型AUC要低很多,在月活用户里面预测下单和日常用户里面预测下单的AUC差异也很明显,预测用户未来1小时下单和预测未来1天下单的模型AUC差异也很大。这表明,AUC非常依赖于具体任务。

以预测点击和预测下单为例,下单通常决策成本比点击高很多,这使得点击行为比下单显得更加随意,也更加难以预测,所以导致点击率模型的AUC通常比下单率模型低很多。

那么月活用户和日活用户那个更容易区分下单与不下单用户呢?显然月活用户要容易一些,因为里面包含很多最近不活跃的用户,所以前者的AUC通常要高一些。

对于预测1小时和预测1天的模型,哪一个更加困难?因为时间越长,用户可能发生的意料之外的事情越多,也越难预测。举个极端的例子,预测用户下一秒中内会干啥,直接预测他会做正在干的事情即可,这个模型的准确率就会很高,但是预测长期会干啥就很困难了。所以对于这两个模型,后者更加困难,所以AUC也越低。

### 机器学习中的AUC评估指标 #### AUC的概念及其意义 AUC(Area Under Curve)是指ROC曲线下方的面积,这一概念专用于衡量二分模型的表现[^1]。具体而言,AUC反映了当随机抽取一个正样本和一个负样本时,模型给出前者具有更高预测概率的可能性大小[^2]。 对于不同水平的AUC值所对应的模型性能如下: - **AUC = 1**:意味着这是一个完美的分器,在任何阈值下均能做出完全正确的预测; - **0.5 < AUC < 1**:表明此分器优于随机猜测,适当调整决策边界后可获得有价值的预测结果; - **AUC = 0.5**:相当于随机猜测的结果,此时模型不具备实际应用价值; - **AUC < 0.5**:则说明当前模型表现甚至不如随机选择,不过通过反转预测方向反而可以获得较好的效果[^4]。 #### 如何计算AUC? 一种常见的方式是基于梯形法则近似求解积分来估算ROC曲线下的区域面积。另一种方法则是利用Mann-Whitney U统计量直接从数据集中获取两个别间相对排名差异的信息来进行估计。 以下是Python环境下使用`sklearn.metrics`库函数快速实现AUC计算的例子: ```python from sklearn import metrics import numpy as np # 假设已有真实标签 y_true 和预测得分/概率 y_score y_true = np.array([0, 0, 1, 1]) y_scores = np.array([0.1, 0.4, 0.35, 0.8]) fpr, tpr, thresholds = metrics.roc_curve(y_true, y_scores) auc_value = metrics.auc(fpr, tpr) print("The computed AUC value is:", auc_value) ``` 这种方法不仅简化了编程工作量,而且提高了准确性与效率。 #### AUC与其他评价指标的关系 值得注意的是,虽然AUC广泛应用于各竞赛以及工业界项目之中,但它并非唯一的选择。其他常用的度量还包括Log Loss、Accuracy、Precision等。其中,Log Loss更适合处理那些输出为连续型概率分布的任务;而像Accuracy这样的离散化后的评判标准,则可能因为人为设定的不同阈值得到截然不同的结论[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值