ROC 曲线下的精度与面积

机器算法验证 可靠性 准确性 奥克
2022-01-22 16:45:39

我为诊断系统构建了 ROC 曲线。然后非参数估计曲线下面积为 AUC = 0.89。当我尝试在最佳阈值设置(最接近点 (0, 1) 的点)下计算准确度时,我得到诊断系统的准确度为 0.8,小于 AUC!当我检查另一个远离最佳阈值的阈值设置的精度时,我得到的精度等于 0.92。是否有可能使诊断系统在最佳阈值设置下的准确度低于另一个阈值的准确度,也低于曲线下面积?请看附图。

在此处输入图像描述

2个回答

好的,记住两者之间的关系FPR(误报率),TPR(真阳性率)和ACC(准确性):

TPR=True positivePositive cases

FPR=False positiveNegative cases

ACC=TPRPositive cases+(1FPR)Negative casesPositive cases+Negative cases

所以,ACC可以表示为加权平均TPRFPR. 如果负数和正数相同:

ACC=TPR+1FPR2

但是如果NN+? 然后:

ACC(NN+)1FPR
所以,在这种情况下,最大ACC发生在最小FPR


看这个例子,负数超过正数 1000:1。

data = c(rnorm(10L), rnorm(10000L)+1)
lab = c(rep(1, 10L), rep(-1, 10000L))
plot(data, lab, col = lab + 3)
tresh = c(-10, data[lab == 1], 10)
do.call(function(x) abline(v = x, col = "gray"), list(tresh))

pred = lapply(tresh, function (x) ifelse(data <= x, 1, -1))
res = data.frame(
  acc = sapply(pred, function(x) sum(x == lab)/length(lab)),
  tpr = sapply(pred, function(x) sum(lab == x & x == 1)/sum(lab == 1)),
  fpr = sapply(pred, function(x) sum(lab != x & x == 1)/sum(lab != 1))
)

res[order(res$acc),]

#> res[order(res$acc),]
#           acc tpr    fpr
#12 0.000999001 1.0 1.0000
#11 0.189110889 1.0 0.8117
#9  0.500099900 0.9 0.5003
#2  0.757742258 0.8 0.2423
#5  0.763136863 0.7 0.2368
#4  0.792007992 0.6 0.2078
#10 0.807292707 0.5 0.1924
#3  0.884215784 0.4 0.1153
#7  0.890709291 0.3 0.1087
#6  0.903096903 0.2 0.0962
#8  0.971428571 0.1 0.0277
#1  0.999000999 0.0 0.0000

看,什么时候fpr是 0acc是最大的。

这是 ROC,带有准确注释。

plot(sort(res$fpr), sort(res$tpr), type = "S", ylab = "TPR", xlab = "FPR")
text(sort(res$fpr), sort(res$tpr), pos = 4L, lab = round(res$acc[order(res$fpr)], 3L))
abline(a = 0, b = 1)
abline(a = 1, b = -1)

在此处输入图像描述


AUC

1-sum(res$fpr[-12]*0.1)
#[1] 0.74608

最重要的是,您可以通过一种导致虚假模型的方式优化准确性(tpr在我的示例中为 = 0)。那是因为准确性不是一个好的指标,结果的二分法应该留给决策者。

最优阈值被称为TPR=1FPR行,因为这样两个错误的权重相等,即使准确性不是最佳的。

当您有不平衡的类时,优化准确性可能是微不足道的(例如,将每个人预测为多数类)。


另一件事,你不能翻译大多数AUC测量这样的准确性估计;看到这些问题:

最重要的是:为什么一个不太准确的分类器比一个更准确的分类器的 AUC 更高?

这确实是可能的。关键是要记住准确率受类不平衡的影响很大。例如,在您的情况下,负样本比正样本多,因为当 FPR (=FPFP+TN) 接近于 0,而 TPR (=TPTP+FN) 为 0.5,您的准确度 (=TP+TNTP+FN+FP+TN) 仍然很高。

换句话说,由于你有更多的负样本,如果分类器一直预测为 0,它仍然会在 FPR 和 TPR 接近 0 的情况下获得很高的准确率。

您所说的最佳阈值设置(最接近点 (0, 1) 的点)只是最佳阈值的众多定义之一:它不一定会优化准确性。

在此处输入图像描述