AUC 是用在二分类问题中的评估指标
具有如下优点:
- 不需要指定阈值
- AUC值反应了排序能力,具体数值可以理解为给定一个正样本和负样本,正样本排序在负样本前面的概率
- 对负采样不敏感 在均匀采样情况下,一个正样本在采样前后负样本的比例是不变的, 所以 采样前后auc不变。
第2点其实也可以理解为对不同类别的区分能力,AUC值越高,说明分类器越能看出0、1类别之间的差别从而将样本进行正确的分类。
定义
AUC 即Area Under Curve , 而这个Cure 就是ROC曲线(Receiver operating characteristic)。 我们下面介绍下ROC曲线。 首先看下图的混淆矩阵(confusion matrix)
\(TPR= \frac{TP} {TP+FN}\) \(FPR= \frac{FP}{FP+TN}\)
TPR 表示召回率,即所有正样本中被预测为正例的比例; FPR 表示所有负样本中被预测为正样本的比例。
有了上面的定义,我们看下ROC曲线长啥样。
上图即ROC 曲线图。可以看到, ROC 曲线的横坐标是FPR, 纵坐标是TPR。 该曲线是由一组(FPR,TPR)坐标组成的曲线。 具体分析ROC曲线的四个特殊点。
- (0,0) 该点表示FPR和TPR都为0, 说明TP和FP都为0,即所有的样本都被预测为负样本, 那么只有在阈值最高(为1)的时候才会出现这种情况。
- (1,1)该点表示FPR和TPR 都为1, 即所有的样本都被预测为正样本,那么只有在阈值最低(为0)的时候才会出现这种情况
- (0,1) 该点表示TPR为1, FPR为0, 即所有的正样本都被预测为正样本,所有的负样本都被预测为负样本,这是最完美的情况
- (1,0) 该点表示TPR 为0, FPR为1, 即所有的正样本都被预测为负样本,所有的负样本都被预测为正样本,这是最糟糕的情况。 通过这四个点,可以看出
- 从左到右, 阈值是从高到低排列的。
- ROC曲线越靠近(0,1)点,说明分类效果越好。
- 随着阈值的降低,被分为正样本的样本越来越多,那么FP和TP 会同时变得更多,所以TPR和FPR会同时上升。 可以看出,ROC曲线是一条斜率为正的曲线。
计算
auc的计算应该可以分为两类
第一种方法是使用AUC的定义,即ROC 曲线下方的面积 具体来说,就是找到构成ROC曲线的(FPR,TPR)坐标集合,通过该坐标集合计算ROC 曲线下方的面积。 具体计算时就是计算一个一个梯形的面积,然后相加。
第二种方法是使用AUC的概率解释来计算 因为AUC 表示给定一个正样本和负样本,正样本排在负样本前面的概率。 而概率可以通过频率来近似,尤其是大数据量条件下。所以给定一个数据集,我们可以统计数据集的所有样本对中正样本排在负样本前面的概率。
首先,将样本按照预估得分进行升序排列;并维护如下变量:
Neg=0,表示当前的负样本数量为0,
Pos=0,表示当前的正样本数量为0,
NegBelowPos=0,表示比正样本得分低的负样本个数。
然后,从前向后遍历,
如果当前是负样本,则Neg+1;
如果当前样本是正样本,那么NegBelowPos+Neg,表示该正样本比Neg个负样本的得分高;同时将Pos+1。
遍历完之后,AUC通过下式得到:
\[AUC=\frac{NegBelowPos}{Pos*Neg}\]这个算法也有一个小小的变形:
\[AUC=\frac{\sum_{i \in pos} rank_i -\frac{Pos(1+Pos)}{2}}{Pos*Neg}\]解释一下这个公式,假设对于第i个正样本,假设排序为\(rank_i\),他前面的样本数为\(rank_i-1\),负样本数为\(rank_i-1-(i-1)=rank_i-i\),即第i个正样本,前面的负样本数为\(rank_i-i\)。那么所有正样本前面的负样本数量就是\(\sum_{i=1}^{Pos} rank_i - i\),稍加变形就得到了上面的表达式。
参考:
1.https://tracholar.github.io/machine-learning/2018/01/26/auc.html