Precisione rispetto all'area sotto la curva ROC


16

Ho costruito una curva ROC per un sistema diagnostico. L'area sotto la curva è stata quindi stimata in modo non parametrico come AUC = 0,89. Quando ho provato a calcolare la precisione con l'impostazione della soglia ottimale (il punto più vicino al punto (0, 1)), ho ottenuto che la precisione del sistema diagnostico era 0,8, che è inferiore all'AUC! Quando ho verificato la precisione con un'altra impostazione di soglia che è molto lontana dalla soglia ottimale ho ottenuto la precisione pari a 0,92. È possibile ottenere l'accuratezza di un sistema diagnostico con la migliore impostazione di soglia inferiore all'accuratezza su un'altra soglia e anche inferiore all'area sotto la curva? Vedi l'immagine allegata per favore.

inserisci qui la descrizione dell'immagine


1
Potresti indicare quanti campioni ci sono stati nella tua analisi? Scommetto che è stato fortemente squilibrato. Inoltre, l'AUC e l'accuratezza non si traducono in questo modo (quando si dice che l'accuratezza è inferiore all'AUC), affatto.
Firebug,

1
269469 sono negativi e 37731 sono positivi; questo potrebbe essere il problema qui secondo le risposte sotto (lo squilibrio di classe).
Ali Sultan,

tieni presente che il problema non è di per sé uno squilibrio di classe, è la scelta della misura di valutazione. Tutto sommato, è più ragionevole in questo scenario o potresti implementare una precisione bilanciata. AUC
Firebug

Un'ultima cosa, se senti che una risposta ha risposto alla tua domanda, potresti considerare di "accettare" la risposta (il segno di spunta verde). Questo non è obbligatorio, ma aiuta la persona che ha risposto e aiuta anche l'organizzazione del sito (la domanda conta come senza risposta fino a quando non lo fai), e forse le persone che farebbero la stessa domanda in futuro.
Firebug

Risposte:


8

È davvero possibile. La chiave è ricordare che l'accuratezza è fortemente influenzata dallo squilibrio di classe. Ad esempio, nel tuo caso, hai più campioni negativi che campioni positivi, da quando l'FPR ( ) è vicino a 0 e TPR (=TP=FPFP+TN ) è 0,5, la tua precisione (=TP+TNTPTP+FN ) è ancora molto alto.=TP+TNTP+FN+FP+TN

Per dirlo altrimenti, poiché hai molti più campioni negativi, se il classificatore prevede sempre 0, otterrà comunque un'alta precisione con FPR e TPR vicini a 0.

Ciò che chiamate impostazione della soglia ottimale (il punto più vicino al punto (0, 1)) è solo una delle molte definizioni per la soglia ottimale: non necessariamente ottimizza l'accuratezza.

inserisci qui la descrizione dell'immagine


10

Va bene, ricorda la relazione tra (False Positive Rate), T P R (True Positive Rate) e A C C (Precisione):FPRTPRACC

TPR=True positivePositive cases

FPR=False positiveNegative cases

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

ACCTPRFPR

ACC=TPR+1FPR2

N-»N+

UNCC(N-»N+)1-FPR
UNCCFPR

Vedi questo esempio, i negativi superano i positivi 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

Vedi, quando fprè 0 accè massimo.

Ed ecco il ROC, con precisione annotata.

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)

inserisci qui la descrizione dell'immagine


UNUC

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

La linea di fondo è che puoi ottimizzare l'accuratezza in un modo risultando in un modello falso ( tpr= 0 nel mio esempio). Questo perché l'accuratezza non è una buona metrica, la dicotomizzazione del risultato dovrebbe essere lasciata al decisore.

TPR=1FPR

Quando si hanno classi squilibrate, l'ottimizzazione della precisione può essere banale (ad esempio prevedere tutti come classe di maggioranza).


AUC

E la cosa più importante di tutte: perché l'AUC è più alta per un classificatore meno preciso rispetto a uno più accurato?

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.