Precisão vs. área sob a curva ROC

16

Eu construí uma curva ROC para um sistema de diagnóstico. A área sob a curva foi então estimada não parametricamente como AUC = 0,89. Quando tentei calcular a precisão na configuração de limite ideal (o ponto mais próximo do ponto (0, 1)), obtive a precisão do sistema de diagnóstico em 0,8, que é menor que a AUC! Quando verifiquei a precisão em outra configuração de limite que está muito longe do limite ideal, obtive a precisão igual a 0,92. É possível obter a precisão de um sistema de diagnóstico na melhor configuração de limite mais baixa do que a precisão em outro limite e também mais baixa que a área sob a curva? Veja a imagem em anexo, por favor.

insira a descrição da imagem aqui

Ali Sultan
fonte
11
Você poderia indicar quantas amostras havia em sua análise? Aposto que estava desequilibrado. Além disso, a AUC e a precisão não se traduzem dessa maneira (quando você diz que a precisão é menor que a AUC).
Firebug
11
269469 são negativos e 37731 são positivos; este pode ser o problema aqui, de acordo com as respostas abaixo (desequilíbrio de classe).
Ali Sultan
tenha em mente que o problema não é o desequilíbrio de classe em si, é a escolha da medida de avaliação. Em suma, é mais razoável nesse cenário, ou você pode implementar uma precisão equilibrada. UMAvocêC
23816 Firebug
Uma última coisa, se você sentir que uma resposta respondeu à sua pergunta, considere "aceitar" a resposta (a marca de seleção verde). Isso não é obrigatório, mas ajuda a pessoa que respondeu e também ajuda a organização do site (a pergunta conta como não respondida até você fazer isso) e talvez as pessoas que fariam a mesma pergunta no futuro.
Firebug

Respostas:

8

É realmente possível. A chave é lembrar que a precisão é altamente afetada pelo desequilíbrio de classe. Por exemplo, no seu caso, você tem mais amostras negativas do que amostras positivas, desde quando o FPR ( =FPFP+TN ) está próximo de 0 e TPR (= ) é 0,5, sua precisão (=TP+TNTPTP+FN ) ainda é muito alto.=TP+TNTP+FN+FP+TN

Em outras palavras, como você tem muito mais amostras negativas, se o classificador predizer 0 o tempo todo, ele ainda obterá uma alta precisão com o FPR e o TPR perto de 0.

O que você chama de configuração de limite ideal (o ponto mais próximo do ponto (0, 1)) é apenas uma das muitas definições para o limite ideal: não necessariamente otimiza a precisão.

insira a descrição da imagem aqui

Franck Dernoncourt
fonte
10

Ok, lembre-se da relação entre a (taxa de falsos positivos), T P R (taxa de verdadeiro positivo) e A C CFPRTPRACC (precisão):

TPR=True positivePositive cases

FPR=False positiveNegative cases

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

ACCTPRFPR

ACC=TPR+1FPR2

NN+

ACC(NN+)1FPR
ACCFPR

Veja este exemplo, os negativos superam os positivos 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

Veja, quando fpr0 accé o máximo.

E aqui está o ROC, com precisão anotada.

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)

enter image description here


AUC

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

A conclusão é que você pode otimizar a precisão de uma maneira que resulte em um modelo falso ( tpr= 0 no meu exemplo). Como a precisão não é uma boa métrica, a dicotomização do resultado deve ser deixada para o tomador de decisão.

TPR=1FPR , porque dessa forma os dois erros têm peso igual, mesmo que a precisão não seja ótima.

Quando você tem classes desequilibradas, otimizar a precisão pode ser trivial (por exemplo, prever todos como classe majoritária).


AUC

E o mais importante de tudo: por que a AUC é mais alta para um classificador menos preciso do que para um que é mais preciso?

Firebug
fonte