Kann AUC-ROC zwischen 0-0,5 liegen?


16

Können AUC-ROC-Werte zwischen 0 und 0,5 liegen? Gibt das Modell jemals Werte zwischen 0 und 0,5 aus?

Antworten:


19

Ein perfekter Prädiktor ergibt einen AUC-ROC-Wert von 1, ein Prädiktor, der zufällige Vermutungen anstellt, ergibt einen AUC-ROC-Wert von 0,5.

Wenn Sie eine Punktzahl von 0 erhalten, was bedeutet, dass der Klassifikator vollkommen falsch ist, wird die falsche Auswahl in 100% der Fälle vorhergesagt. Wenn Sie nur die Vorhersage dieses Klassifikators in die entgegengesetzte Wahl geändert haben, könnte dies perfekt vorhergesagt werden und einen AUC-ROC-Wert von 1 haben.

Wenn Sie also in der Praxis einen AUC-ROC-Wert zwischen 0 und 0,5 erhalten, haben Sie möglicherweise einen Fehler in der Art und Weise, wie Sie Ihre Klassifikatorziele benannt haben, oder Sie haben möglicherweise einen schlechten Trainingsalgorithmus. Wenn Sie eine Punktzahl von 0,2 erhalten, zeigt dies, dass die Daten genügend Informationen enthalten, um eine Punktzahl von 0,8 zu erhalten, aber etwas ist schiefgelaufen.


Ich denke, diese Antwort überspringt die Möglichkeit, dass das Modell eine Überanpassung aufweist, z. B. eine AUC von 0,8 für Trainingsdaten, aber eine AUC von 0,35 für Holdout-Daten.
Sycorax sagt Reinstate Monica

1
@Sycorax: Hmm, ich kann sehen, wie eine Überanpassung die AUC offensichtlich dahin treiben könnte, wo sie auf dem Zufallsniveau liegt (wenn Sie so weit vom wahren Modell entfernt sind, dass Ihre Vorhersagen nur Müll sind), aber wie würde sie (deutlich) unter dem Zufall liegen ?
Ruben van Bergen

1
Sie haben eine AUC von weniger als 0,5, wenn das Ranking eines Sets eher rückwärts als korrekt ist. Es unterscheidet sich nicht von einer Überanpassung in einem anderen Kontext.
Sycorax sagt Reinstate Monica

14

Dies ist möglich, wenn das von Ihnen analysierte System unter dem Zufallsniveau liegt. Trivialerweise könnte man einen Klassifikator mit 0 AUC leicht konstruieren, indem er immer entgegen der Wahrheit antwortet.

In der Praxis trainieren Sie Ihren Klassifikator natürlich mit einigen Daten, sodass Werte, die sehr viel kleiner als 0,5 sind, normalerweise auf einen Fehler in Ihrem Algorithmus, in den Datenbeschriftungen oder in der Auswahl der Zug- / Testdaten hinweisen. Wenn Sie beispielsweise fälschlicherweise die Klassenbezeichnungen in Ihren Zugdaten geändert haben, ist Ihre erwartete AUC 1 minus der "wahren" AUC (bei richtigen Bezeichnungen). Die AUC kann auch <0,5 sein, wenn Sie Ihre Daten so in Train & Test-Partitionen aufteilen, dass die zu klassifizierenden Muster systematisch unterschiedlich sind. Dies kann beispielsweise der Fall sein, wenn eine Klasse im Zug häufiger vorkommt als das Test-Set, oder wenn die Muster in jedem Set systematisch unterschiedliche Abschnitte aufwiesen, die Sie nicht korrigiert haben.

Letztendlich könnte es auch zufällig passieren, weil Ihr Klassifikator auf lange Sicht zufällig ist, aber in Ihrem Testmuster "Pech" hat (dh Sie erhalten ein paar Fehler mehr als Erfolge). In diesem Fall sollten die Werte jedoch relativ nahe bei 0,5 liegen (wie nahe dies von der Anzahl der Datenpunkte abhängt).


0

Es tut mir leid, aber diese Antworten sind gefährlich falsch. Nein, Sie können AUC nicht einfach umdrehen, nachdem Sie die Daten gesehen haben. Stellen Sie sich vor, Sie kaufen Aktien und haben immer die falsche gekauft, aber Sie haben sich gesagt, das ist in Ordnung, denn wenn Sie das Gegenteil von dem kaufen würden, was Ihr Modell vorhergesagt hat, würden Sie Geld verdienen.

Die Sache ist, dass es viele, oft nicht offensichtliche Gründe gibt, warum Sie Ihre Ergebnisse verzerren und dauerhaft unterdurchschnittliche Leistungen erzielen können. Wenn Sie jetzt Ihre AUC umdrehen, denken Sie vielleicht, Sie sind der beste Modellierer der Welt, obwohl die Daten nie ein Signal enthielten.

Hier ist ein Simulationsbeispiel. Beachten Sie, dass der Prädiktor nur eine Zufallsvariable ohne Beziehung zum Ziel ist. Beachten Sie auch, dass die durchschnittliche AUC bei 0,3 liegt.

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')

Ergebnisse

Bildbeschreibung hier eingeben

Natürlich kann ein Klassifikator auf keinen Fall etwas aus den Daten lernen, da die Daten zufällig sind. Die folgende AUC-Chance ist vorhanden, da LOOCV einen voreingenommenen, unausgeglichenen Trainingssatz erstellt. Dies bedeutet jedoch nicht, dass Sie in Sicherheit sind, wenn Sie LOOCV nicht verwenden. Der Sinn dieser Geschichte ist, dass es viele Möglichkeiten gibt, wie die Ergebnisse eine niedrigere durchschnittliche Leistung erzielen können, selbst wenn die Daten nichts enthalten. Daher sollten Sie die Vorhersagen nicht umdrehen, es sei denn, Sie wissen, was Sie tun. Und da du eine durchschnittliche Leistung hast, siehst du nicht, was du tust :)

Hier sind ein paar Artikel, die dieses Problem angesprochen haben, aber ich bin sicher, andere haben es auch getan

Jamalabadi et al. 2016 https://onlinelibrary.wiley.com/doi/full/10.1002/hbm.23140

Snoek et al 2019 https://www.ncbi.nlm.nih.gov/pubmed/30268846

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.