Dokładność vs. pole pod krzywą ROC

16

Skonstruowałem krzywą ROC dla systemu diagnostycznego. Pole pod krzywą zostało następnie oszacowane nieparametrycznie na AUC = 0,89. Kiedy próbowałem obliczyć dokładność przy optymalnym ustawieniu progu (punkt najbliższy punktowi (0, 1)), dostałem dokładność układu diagnostycznego na 0,8, czyli mniej niż AUC! Kiedy sprawdziłem dokładność przy innym ustawieniu progu, który jest daleki od optymalnego progu, uzyskałem dokładność równą 0,92. Czy możliwe jest uzyskanie dokładności systemu diagnostycznego przy najlepszym ustawieniu progu niższej niż dokładność przy innym progu, a także niższej niż obszar pod krzywą? Proszę zobaczyć załączone zdjęcie.

wprowadź opis zdjęcia tutaj

Ali Sultan
źródło
1
Czy mógłbyś wskazać, ile próbek było w twojej analizie? Założę się, że to było bardzo niezrównoważone. Ponadto AUC i dokładność nie tłumaczą się w ten sposób (kiedy mówisz, że dokładność jest niższa niż AUC).
Firebug,
1
269469 są negatywne, a 37731 są pozytywne; może to być problem tutaj, zgodnie z odpowiedziami poniżej (nierównowaga klasy).
Ali Sultan
należy pamiętać, że problemem nie jest sam brak równowagi klas, to wybór środka oceny. Podsumowując, jest bardziej uzasadnione w tym scenariuszu lub można wprowadzić zrównoważoną dokładność. ZAUdo
Firebug,
I ostatnia rzecz, jeśli czujesz, że odpowiedź odpowiedziała na twoje pytanie, możesz rozważyć „zaakceptowanie” odpowiedzi (zielony znacznik wyboru). Nie jest to obowiązkowe, ale pomaga osobie, która udzieliła odpowiedzi, a także pomaga organizacji witryny (pytanie liczy się jako bez odpowiedzi, dopóki nie zrobisz tego), a być może osobom, które zadadzą to samo pytanie w przyszłości.
Firebug

Odpowiedzi:

8

To jest rzeczywiście możliwe. Najważniejsze jest, aby pamiętać, że na dokładność ma duży wpływ nierównowaga klas. Np. W twoim przypadku masz więcej próbek ujemnych niż próbek dodatnich, od kiedy FPR ( ) jest bliskie 0, a TPR (=TP=faP.faP.+T.N. ) wynosi 0,5, twoja dokładność (=TP+TNT.P.T.P.+faN. ) jest nadal bardzo wysoka.=T.P.+T.N.T.P.+faN.+faP.+T.N.

Innymi słowy, ponieważ masz dużo więcej próbek ujemnych, jeśli klasyfikator cały czas przewiduje 0, nadal będzie miał wysoką dokładność z FPR i TPR bliską zera.

To, co nazywacie ustawieniem optymalnego progu (punkt najbliższy punktowi (0, 1)) jest tylko jedną z wielu definicji optymalnego progu: niekoniecznie optymalizuje dokładność.

wprowadź opis zdjęcia tutaj

Franck Dernoncourt
źródło
10

faP.RT.P.RZAdodo

T.P.R=Prawdziwie pozytywnePozytywne przypadki

faP.R=Fałszywie pozytywnePrzypadki negatywne

ZAdodo=T.P.RPozytywne przypadki+(1-faP.R)Przypadki negatywnePozytywne przypadki+Przypadki negatywne

ZAdodoT.P.RfaP.R. Jeśli liczba negatywów i pozytywów jest taka sama:

ZAdodo=T.P.R+1-faP.R2)

Ale co gdyby N.-N.+? Następnie:

ZAdodo(N.-N.+)1-faP.R
Tak więc w tym przypadku maksymalny ZAdodo występuje minimalnie faP.R

Zobacz ten przykład, liczba pozytywnych liczb przewyższa liczbę 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

Zobacz, kiedy fpr0 accjest maksymalne.

A oto ROC, z adnotacją dokładności.

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)

wprowadź opis zdjęcia tutaj


The ZAUdo jest

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

Najważniejsze jest to, że możesz zoptymalizować dokładność w taki sposób, aby uzyskać fałszywy model ( tpr= 0 w moim przykładzie). To dlatego, że dokładność nie jest dobrym miernikiem, dychotomizacja wyniku powinna zostać pozostawiona decydentowi.

Mówi się, że optymalny próg to T.P.R=1-faP.R ponieważ w ten sposób oba błędy mają jednakową wagę, nawet jeśli dokładność nie jest optymalna.

Gdy masz niezrównoważone klasy, optymalizacja dokładności może być trywialna (np. Przewidzieć wszystkich jako klasę większościową).


Kolejna rzecz, której nie możesz tłumaczyć większość ZAUdośrodki do oszacowania dokładności takiej jak ta; zobacz te pytania:

I najważniejsze: dlaczego AUC jest wyższy dla klasyfikatora, który jest mniej dokładny niż dla bardziej dokładnego?

Firebug
źródło