详解ROC曲线和AUC

Posted by boydfd on 2021-11-01 10:00:00 +0800

Recently by the same author:


喝水方案升级之路

You may find interesting:


大语言模型中一个调皮的EOS token


如何用智能地教狗狗上厕所

博客原文地址

ROC的定义

在信号检测理论中,接收者操作特征曲线(receiver operating characteristic curve,或者叫ROC曲线)是一种坐标图式的分析工具,用于 (1) 选择最佳的信号侦测模型、舍弃次佳的模型。 (2) 在同一模型中设置最佳阈值。

– 来自wiki

说人话就是,ROC曲线可以用图形的方式呈现模型的结果。 并且直观地让人:

  1. 判断两个模型谁好谁差(也会存在难以判断的情况)
  2. 从图中找到一个模型的最佳阈值点来划分正例和反例

混淆矩阵

假设:基于2分类。

既然要判断一个模型的好坏,首先我们要有的基本概念就是,样本本身有正例有负例,而模型的预测也有正有负。所以我们会得到一个矩阵,称之为混淆矩阵:

  1. 伪阳性率(FPR):判定为正例却不是真正例的概率,即真负例中判为正例的概率
  2. 真阳性率(TPR):判定为正例也是真正例的概率,即真正例中判为正例的概率(也即正例召回率)
  3. 伪阴性率(FNR):判定为负例却不是真负例的概率,即真正例中判为负例的概率。
  4. 真阴性率(TNR):判定为负例也是真负例的概率,即真负例中判为负例的概率。

混淆矩阵

ROC

先不管ROC的横纵轴定义,先看一下下面这个图:

roc曲线+样本点

模型对每个样本都会预测一个分数,我们找到所有的正例,按模型预测的分数将样本从下往上排在纵轴上,同时按模型预测的分数将所有负样本从左往右排在横轴上(样本点之间的间距需要一样)。

这个时候,我们需要随便定义一个阈值,超过这个阈值的样本,我们将其视为正例,小于等于这个阈值的,我们将其视为负例。

roc阈值0.7

一旦定义了阈值,我们就得到了一个分类器。这个分类器以0.7作为阈值,将模型得分大于等于0.7的预测为正例,得分小于0.7的预测为负例。

所以我们会得到这样的划分:

roc-0.7-threshold-with-sign

由于我们一开始是等间距进行划分的,所以我们可以讲每一小格的值都看成是1/正例的总数量或1/负例的总数量 : 记纵轴的一格大小为:1/#p 记横轴轴的一格大小为:1/#n

#p表示正例的总数 #n表示负例的总数

所以纵轴0.7样本对应的值为3/#p = 3/8 所以横轴0.75样本对应的值为1/#n = 1/4

到这,其实大家应该也发现了,其实上面的两个值分别是TP/P和FP/N。

而ROC曲线就是从最大的阈值开始,根据阈值以FP/N为横坐标值TP/P为纵坐标值,画一个点 然后不断地降低阈值,并重复画点 最终将所有的点连起来的曲线。

roc-one-by-one

一开始由于纵轴下边和横轴左边的样本点的分数比较高,

评估模型的排序能力

对于样本类别不平衡不敏感

AUC of ROC

概率推导

几何推导

AUC计算

几何计算

问题:会出现梯形

公式计算

U统计

参考文献

[1]. ROC曲线 概率推导 几何推导