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 positive∑Positive cases

FPR=∑False positive∑Negative cases

ACC=TPR⋅∑Positive cases+(1−FPR)⋅∑Negative cases∑Positive cases+∑Negative cases

ACCTPRFPR

ACC=TPR+1−FPR2

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=1−FPR

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.