Czy AUC-ROC może wynosić od 0 do 0,5?

16

Czy wartości AUC-ROC mogą zawierać się w przedziale 0–0,5? Czy model generuje kiedykolwiek wartości od 0 do 0,5?

Mężczyzna
źródło

Odpowiedzi:

19

Idealny predyktor daje wynik AUC-ROC równy 1, predyktor, który losowo zgaduje, ma wynik AUC-ROC równy 0,5.

Jeśli uzyskasz wynik 0, co oznacza, że ​​klasyfikator jest całkowicie niepoprawny, w 100% przypadków przewiduje nieprawidłowy wybór. Jeśli właśnie zmieniłeś przewidywanie tego klasyfikatora na przeciwny wybór, może on doskonale przewidzieć i mieć wynik AUC-ROC równy 1.

Tak więc w praktyce, jeśli uzyskasz wynik AUC-ROC od 0 do 0,5, możesz popełnić błąd w sposobie oznaczania celów klasyfikacyjnych lub mieć zły algorytm treningowy. Jeśli uzyskasz wynik 0,2, oznacza to, że dane zawierają wystarczającą ilość informacji, aby uzyskać wynik 0,8, ale coś poszło nie tak.

Hugh
źródło
Sądzę, że ta odpowiedź pomija możliwość, że model jest przeregulowany, na przykład uzyskując AUC 0,8 dla danych treningowych, ale AUC 0,35 dla danych wstrzymujących.
Sycorax mówi Przywróć Monikę
1
@Sycorax: Hmm, widzę, jak nadmierne dopasowanie może oczywiście doprowadzić AUC do poziomu przypadkowego (jeśli jesteś tak daleki od prawdziwego modelu, że twoje przewidywania są po prostu śmieciem), ale jak poszedłby (znacznie) poniżej przypadku ?
Ruben van Bergen
1
Będziesz miał AUC poniżej 0,5 za każdym razem, gdy ranking w niektórych zestawach jest bliższy cofnięciu niż poprawności. Nie różni się niczym od nadmiernego dopasowania w jakimkolwiek innym kontekście.
Sycorax mówi Przywróć Monikę
14

Mogą, jeśli analizowany system działa poniżej poziomu szansy. Po prostu, można łatwo skonstruować klasyfikator z 0 AUC, zawsze odpowiadając prawdzie.

W praktyce oczywiście trenujesz klasyfikator na niektórych danych, więc wartości znacznie mniejsze niż 0,5 zwykle wskazują na błąd w algorytmie, etykietach danych lub wyborze danych pociągu / testu. Na przykład, jeśli omyłkowo zmieniłeś etykiety klas w danych pociągu, oczekiwany AUC wyniósłby 1 minus „prawdziwy” AUC (przy prawidłowych etykietach). AUC może również wynosić <0,5, jeśli podzielisz dane na partycje pociągów i testów w taki sposób, że wzorce, które mają być klasyfikowane, były systematycznie różne. Może się to zdarzyć (na przykład), jeśli jedna klasa była bardziej powszechna w pociągu w porównaniu do zestawu testowego lub jeśli wzorce w każdym zestawie miały systematycznie różne przechwyty, dla których nie poprawiono.

Wreszcie może się to zdarzyć losowo, ponieważ klasyfikator znajduje się na poziomie prawdopodobieństwa na dłuższą metę, ale zdarzył się, że dostał „pecha” w próbce testowej (tj. Otrzymał kilka błędów więcej niż sukcesów). Ale w takim przypadku wartości powinny nadal być względnie bliskie 0,5 (jak blisko zależy od liczby punktów danych).

Ruben van Bergen
źródło
1

Przykro mi, ale te odpowiedzi są niebezpiecznie błędne. Nie, nie można po prostu odwrócić AUC po wyświetleniu danych. Wyobraź sobie, że kupujesz akcje i zawsze kupowałeś niewłaściwy, ale powiedziałeś sobie, to jest w porządku, ponieważ jeśli kupowałbyś przeciwieństwo tego, co przewidywał twój model, zarabiałbyś pieniądze.

Chodzi o to, że istnieje wiele, często nieoczywistych powodów, dla których możesz wpływać na wyniki i konsekwentnie osiągać wyniki poniżej średniej. Jeśli teraz zmienisz swoje AUC, możesz pomyśleć, że jesteś najlepszym modelarzem na świecie, chociaż w danych nigdy nie było żadnego sygnału.

Oto przykład symulacji. Zauważ, że predyktor jest zmienną losową bez związku z celem. Zauważ też, że średnie AUC wynosi około 0,3.

library(MLmetrics)
aucs <- list()
for (sim in seq_len(100)){
  n <- 100
  df <- data.frame(x=rnorm(n),
               y=c(rep(0, n/2), rep(1, n/2)))

  predictions <- list()
  for(i in seq_len(n)){
    train <- df[-i,]
    test <- df[i,]

    glm_fit <- glm(y ~ x, family = 'binomial', data = train)
    predictions[[i]] <- predict(glm_fit, newdata = test, type = 'response')
  }
  predictions <- unlist(predictions)
  aucs[[sim]] <- MLmetrics::AUC(predictions, df$y)
}
aucs <- unlist(aucs)
plot(aucs); abline(h=mean(aucs), col='red')

Wyniki

wprowadź opis zdjęcia tutaj

Oczywiście nie ma możliwości, aby klasyfikator mógł dowiedzieć się czegokolwiek z danych, ponieważ dane są losowe. Poniżej znajduje się szansa na AUC, ponieważ LOOCV tworzy stronniczy, niezrównoważony zestaw treningowy. Nie oznacza to jednak, że jeśli nie używasz LOOCV, jesteś bezpieczny. Chodzi o to, że istnieje wiele sposobów, w jaki wyniki mogą mieć średnią wydajność, nawet jeśli nie ma nic w danych, i dlatego nie powinieneś zmieniać prognoz, chyba że wiesz, co robisz. A ponieważ masz poniżej średniej wydajności, nie widzisz, co robisz :)

Oto kilka artykułów na ten temat, ale jestem pewien, że inni też to zrobili

Jamalabadi i in. 2016 https://onlinelibrary.wiley.com/doi/full/10.1002/hbm.23140

Snoek i in. 2019 https://www.ncbi.nlm.nih.gov/pubmed/30268846

rep_ho
źródło
To powinna być zaakceptowana odpowiedź!
tdc