ROC曲线
ROC曲线的全称是“接收者操作特征曲线”(receiver operating characteristic curve),它是一种坐标图式的分析工具,用于:
- 选择最佳的信号侦测模型、舍弃次佳的模型。
- 在同一模型中设置最佳阈值。
ROC曲线渊源
ROC曲线起源于第二次世界大战时期雷达兵对雷达的信号判断。当时每一个雷达兵的任务就是去解析雷达的信号,但是当时的雷达技术还没有那么先进,存在很多噪声(比如一只大鸟飞过),所以每当有信号出现在雷达屏幕上,雷达兵就需要对其进行破译。有的雷达兵比较谨慎,凡是有信号过来,他都会倾向于解析成是敌军轰炸机,有的雷达兵又比较神经大条,会倾向于解析成是飞鸟。这个时候,雷达兵的上司就很头大了,他急需一套评估指标来帮助他汇总每一个雷达兵的预测信息,以及来评估这台雷达的可靠性。于是,最早的ROC曲线分析方法就诞生了,用来作为评估雷达可靠性的指标。
在那之后,ROC曲线就被广泛运用于医学以及机器学习领域。
二分类场景的ROC曲线和AUC
二分类问题
上面雷达判断是否飞机,就是一个二分类问题。
判断预测的结果有下面四种结局:
判断结果和实际 | |
---|---|
真阳性 (TP) | 判断为有飞机,实际上也有飞机。 |
伪阳性(FP) | 判断为有飞机,实际却没有飞机,可能是大雁。 |
真阴性(TN) | 判断为没有飞机,实际上也没有飞机。 |
伪阴性(FN) | 判断为没有飞机,实际却有飞机。 |
相关术语
- 阳性 (P, Positive)
正样本。 - 阴性 (N, Negative)
负样本。 - 真阳性 (TP, true positive)
表明实际是正样本预测成正样本的样本。 - 真阴性 (TN, true negative)
表明实际是负样本预测成负样本的样本。 - 伪阳性 (FP, false positive)
表明实际是负样本预测成正样本的样本。 - 伪阴性 (FN, false negative)
表明实际是正样本预测成负样本的样本。
ROC 曲线
ROC空间将伪阳性率(FPR)定义为 X 轴,真阳性率(TPR)定义为 Y 轴。范围都是[0,1]。
- 离左上角越近的点预测(诊断)准确率越高。
- 离右下角越近的点,预测越不准。
- 中间这条红色对角线,是随机猜测线。
相关术语
伪阳性率 (FPR, false positive rate)
在所有实际为阴性的样本中,被错误地判断为阳性之比率。
又称:错误命中率,假警报率 (false alarm rate)
FPR = FP / N = FP / (FP + TN)
真阳性率 (TPR, true positive rate)
在所有实际为阳性的样本中,被正确地判断为阳性之比率。
又称:命中率 (hit rate)、敏感度(sensitivity)
TPR = TP / P = TP / (TP + FN)
为什么ROC可以用来评估模型好坏?
对于某个二分类分类器来说,输出结果标签(0还是1)往往取决于输出的概率以及预定的概率阈值。
比如常见的阈值就是0.5,大于0.5的认为是正样本,小于0.5的认为是负样本。
- 如果增大这个阈值,预测错误(针对正样本而言,即指预测是正样本但是预测错误,下同)的概率就会降低,但是随之而来的就是预测正确的概率也降低;
- 如果减小这个阈值,那么预测正确的概率会升高但是同时预测错误的概率也会升高。
实际上,这种阈值的选取也一定程度上反映了分类器的分类能力。
我们当然希望无论选取多大的阈值,分类都能尽可能地正确,也就是希望该分类器的分类能力越强越好,一定程度上可以理解成一种鲁棒能力吧。
AUC值
ROC曲线一定程度上可以反映分类器的分类效果,但是不够直观,我们希望有这么一个指标,如果这个指标越大越好,越小越差,于是,就有了AUC。
AUC实际上就是ROC曲线下的面积。(英语:Area under the Curve of ROC (AUC ROC)),其意义是:
- 因为是在1x1的方格里求面积,AUC必在0~1之间。
- 假设阈值以上是阳性,以下是阴性;
- 若随机抽取一个阳性样本和一个阴性样本,分类器正确判断阳性样本的值高于阴性样本之概率 = AUC
- 简单说:AUC值越大的分类器,正确率越高。
从AUC判断分类器(预测模型)优劣的标准:
- AUC = 1,是完美分类器,采用这个预测模型时,存在至少一个阈值能得出完美预测。绝大多数预测的场合,不存在完美分类器。
- 0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设置阈值的话,能有预测价值。
- AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值。
- AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。
AUC的含义为,当随机挑选一个正样本和一个负样本,根据当前的分类器计算得到的score将这个正样本排在负样本前面的概率。
为什么用AUC?
为什么不用准确率(accuracy)?
在二分类中,如果正反例分布不平衡,而我们对minority class更感兴趣,这时accuracy评价指标基本没有参考价值,比如欺诈检测,癌症检测等场景。举个栗子:
在测试集里,有100个sample,99个反例,只有1个正例。如果我的模型不分青红皂白对任意一个sample都预测是反例,那么我的模型的accuracy是 正确的个数/总个数 = 99/100 = 99%。
为什么不用召回率(recall)和精确率(precision)?
召回率:把实际为真值的判断为真值的概率。
精确率:判断为真值,判断正确的概率(实际也为真值)。
recall = TP / (TP + FN)
precision = TP / (TP + FP)
一般说来,如果想要召回的多,精确率就要下降;想要精确率提升,召回的就少。因此,召回率与精确率是鱼与熊掌不可兼得。
为什么不用F1分数?
F1-score 可以看做是precision和recall的综合评价指标,公式为:
问题就是,如果你的两个模型,一个precision特别高,recall特别低,而另一个recall特别高,precision特别低的时候,F1-score可能是差不多的,你也不能基于此来作出选择。
AUC适用场景
AUC了是一个用来评估分类模型性能的常见指标,优点是:
- 适用于正负样本分布不一致的场景;
- 对于分类器性能的评价,不限定单一的分类阈值;
参考: