很多时候我们都用到 ROC AUC 来评判一个二值分类器的优劣,其实 AUC ROC 息息相关, AUC 就是 ROC 曲线下部分的面积,所以需要首先知道什么是 ROC ROC 怎么得来的。然后我们要知道一般分类器会有个准确率 ACC ,那么既然有了 ACC ,为什么还要有 ROC 呢, ACC ROC 的区别又在哪儿,这是我喜欢的一种既生瑜何生亮问题。

最后又简单说明了一下有了 ROC 之后,为什么还要有 AUC

ROC简介

ROC曲线的横坐标为false positive rate(FPR)即负类样本中被判定为正类的比例,也就是传说中的误纳率

纵坐标为true positive rate(TPR)即正类样本中被判定为正类的样本,1-TPR也就是传说中的误拒率

接下来我们考虑 ROC 曲线图中的四个点和一条线。

第一个点, (0,1) ,即左上角的点,在这个点意味着 FPR=0 TPR=1 ,稍微翻译一下就是误纳率为 0 ,误拒率为 0 ,再翻译成人话就是负类样本中被判断为正类的比例为 0 ,说明负类样本都被判断为负类,判断正确,正类样本中被判断为正类的比例为 1 ,说明正类样本都被判断正确,所以 这是一个完美的分类器,它将所有的样本都正确分类。

第二个点, (1,0) ,即右下角的点,在这个点意味着 FPR=1 TPR=0 ,类似地分析可以发现这是一个最糟糕的分类器,因为它成功避开了所有的正确分类。把该判断为正类的判断为负类,把该判断为负类的判断为正类

第三个点, (0,0) ,即左下角的点,在这个点意味着 FPR=TPR=0 ,可以发现该分类器预测所有的样本都为负样本( negative ),在后面我们可以看到这种情况说明阈值选得过高。

第四个点( 1,1 ),即右下角的点,分类器实际上预测所有的样本都为正样本,在后面我们可以看到这种情况说明阈值选得过低。

如何画ROC曲线

由于每次从分类模型中只能得到一个用于判定分类结果的分数,要将这个分数与一个阈值进行比较,判定这个样本属于哪个类,所以我们可以更改阈值,得到不同的分类结果,也就是不同的TPR和FPR

之前说到当我们将threshold设置为1和0时,分别可以得到ROC曲线上的(0,0)和(1,1)两个点

将这些(FPR,TPR)对连接起来,就得到了ROC曲线。当threshold取值越多,ROC曲线越平滑。

既然有了ACC为什么要有ROC呢(既生瑜何生亮呢)

我们知道,我们常用 ACC 准确率来判断分类器分类结果的好坏,既然有了 ACC 为什么还需要 ROC 呢,很重要的一个因素是实际的样本数据集中经常会出现数据偏斜的情况,要么负类样本数大于正类样本数,要么正类样本数大于负类样本数。

比如说我负类样本数有 9,000 个,正类样本数有 100 个,如果阈值选得过高,正类样本都判断为负类,同样负类样本都判定为负类,那么准确率 90% ,看起来还不错,但是如果考虑 ROC 中的 TPR FPR 的话就会知道,此时的 TPR=0 FPR=0 ,也就是误纳率是 0 ,但是误拒率是 100% ,是左下角的点,并不是很好的一个点,而原来的 ACC 就不具有代表性

既然有了ROC为什么要有AUC呢(既生瑜何生亮呢)

使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而相对于AUC是个数值而言,对应AUC更大的分类器效果更好,数值更好判断一些。