AUC 理解

AUC(Area under curve)是机器学习常用的二分类评测手段,直接含义是ROC曲线下的面积, 对于二分类模型,还有很多其他评价指标,比如 logloss,accuracy,precision。如果你经常关注数据挖掘比赛,比如 kaggle,那你会发现 AUC 和 logloss 基本是最常见的模型评价指标。

从AUC 判断分类器(预测模型)优劣的标准:
  • AUC = 1,是完美分类器;
  • AUC = [0.85, 0.95], 效果很好;
  • AUC = [0.7, 0.85], 效果一般;
  • AUC = [0.5, 0.7], 效果较低,但用于预测股票已经很不错了;
  • AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值;
  • AUC < 0.5,比随机猜测还差。

为什么 AUC 和 logloss 比 accuracy 更常用呢?

因为很多机器学习的模型对分类问题的预测结果都是概率,如果要计算 accuracy,需要先把概率转化成类别,这就需要手动设置一个阈值,如果对一个样本的预测概率高于这个预测,就把这个样本放进一个类别里面,低于这个阈值,放进另一个类别里面。
所以这个阈值很大程度上影响了 accuracy 的计算。使用 AUC 或者 logloss 可以避免把预测概率转换成类别。

如何计算

ROC曲线下面积:

横坐标正是 FPR (False Positive Rate),纵坐标是 TPR (True Positive Rate),计算公式: 

(梯形面积计算:上底+下底的合 * 高 /2,例如上图中的某个i下对应的面积)

由此引出True Positive Rate(真阳率)、False Positive(伪阳率)两个概念:

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

[公式]

[公式]

相关指标:

实际1,预测1:真正类(tp)
实际1,预测0:假负类(fn)
实际0,预测1:假正类(fp)
实际0,预测0:真负类(tn)
真实负样本总数=n=fp+tn
真实正样本总数=p=tp+fn

概率角度:

AUC 考虑的是样本的排序质量,它与排序误差有密切关系,在此,AUC可以在一定程度上理解为正样本排在负样本前面的概率,可得到计算公式:

其中,rank 为样本排序位置从 1 开始,∣P∣ 为正样本数,∣N∣ 为负样本数。

对该公式的解释:

举个例子:这里,我们将所有样本得到的值从小到大排列(这个不必特别强调升序降序,主要看rank怎么定义==> 小的probs具有小的rank值),rank我们定义为样本在这个排序序列中的index。

probs rank label
0.1 1 0
0.2 2 0
0.5 3 0
0.6 4 1
0.7 5 0
0.8 6

1

0.9 7 1

这里,probs为预测得到的概率,P(正例个数,即原本label=1的样本个数) 为3,N(负例个数,即原本label=0的样本个数)为4

我们要求的是AUC正例的rank比负例的rank大的概率,即P(rank正>rank负)。对于P个正例、N个负例,共有P*N(12)对(正例,负例)的组合对,我们要求AUC,需要求的是在所有组合对中,Rank正例大于Rank负例的比例是多少

我们看上表标红的正例:

对于rank为7的正例,共有rank-P个 rank正大于rank负的组合对:

rank7: (7, 7) (7,6) (7,5) (7,4) (7,3) (7,2) (7,1)    : rank7 - P = 4

以此类推:

rank6:rank6-P+1 = 6-3+1 = 4

rank4:rank4-P+2 = 4-3+2 = 3

最后求得AUC = 正例rank大于负例的组合对/所有组合对 = 4 + 4 + 3 / 12 = 0.9167

观察可得,我们把ranki的部分加和加和就得到了公式中的,把后面减去的1, 2.....P(等差数列)加和就得到了公式中的

AUC的优点

它不受类别不平衡问题的影响,不同的样本比例不会影响AUC的评测结果。

  • 例如在反欺诈场景,设欺诈类样本为正例,正例占比很少(假设0.1%),如果使用准确率评估,把所有的样本预测为负例,便可以获得99.9%的准确率
  • 但是如果使用AUC,把所有样本预测为负例,TPRate和FPRate同时为0(没有Positive),(0,0) 与 (1,1)连接,得出AUC仅为0.5,成功规避了样本不均匀带来的问题。

在训练时,可以直接使用AUC作为损失函数。

AUC指标本身和模型预测 score 绝对值无关,只关注排序效果,因此特别适合排序业务。

在python中,可直接调用sklearn中计算auc的方法~

原文地址:https://www.cnblogs.com/shona/p/12463232.html