L'AUC-ROC può essere tra 0-0,5?


16

I valori AUC-ROC possono essere compresi tra 0-0,5? Il modello emette mai valori compresi tra 0 e 0,5?

Risposte:


19

Un predittore perfetto dà un punteggio AUC-ROC di 1, un predittore che fa ipotesi casuali ha un punteggio AUC-ROC di 0,5.

Se si ottiene un punteggio pari a 0, ciò significa che il classificatore è perfettamente errato, prevede una scelta errata al 100% delle volte. Se hai appena cambiato la previsione di questo classificatore con la scelta opposta, allora potrebbe prevedere perfettamente e avere un punteggio AUC-ROC di 1.

Quindi, in pratica, se ottieni un punteggio AUC-ROC compreso tra 0 e 0,5, potresti avere un errore nel modo in cui hai etichettato i tuoi obiettivi di classificazione o potresti avere un algoritmo di allenamento scadente. Se ottieni un punteggio di 0,2, questo mostra che i dati contengono informazioni sufficienti per ottenere un punteggio di 0,8 ma qualcosa è andato storto.


Penso che questa risposta salti la possibilità che il modello abbia un eccesso di equipaggiamento, ad esempio ottenendo AUC di 0,8 su dati di allenamento ma AUC di 0,35 su dati di controllo.
Sycorax dice di reintegrare Monica il

1
@Sycorax: Hmm, posso vedere come il sovradimensionamento potrebbe ovviamente portare l'AUC a un livello casuale (se sei così lontano dal vero modello che le tue previsioni sono solo spazzatura), ma come andrebbe (significativamente) sotto il caso ?
Ruben van Bergen,

1
Avrai un AUC inferiore a 0,5 ogni volta che la classifica su un set è più vicina all'essere arretrata che corretta. Non è diverso dal sovralimentazione in qualsiasi altro contesto.
Sycorax dice di reintegrare Monica il

14

Possono, se il sistema che stai analizzando funziona al di sotto del livello casuale. In sostanza, potresti facilmente costruire un classificatore con 0 AUC facendolo sempre rispondere in senso contrario alla verità.

In pratica, naturalmente, si allena il proprio classificatore su alcuni dati, quindi valori molto inferiori a 0,5 indicherebbero in genere un errore nell'algoritmo, nelle etichette dei dati o nella scelta dei dati del treno / test. Ad esempio, se hai scambiato per errore le etichette di classe nei dati del tuo treno, la tua AUC prevista sarebbe 1 meno la AUC "vera" (con le etichette corrette). L'AUC potrebbe anche essere <0,5 se si dividono i dati in treni e testare le partizioni in modo tale che i modelli da classificare fossero sistematicamente diversi. Ciò potrebbe accadere (ad esempio) se una classe fosse più comune nel treno rispetto al set di test o se i pattern di ciascun set avessero intercettazioni sistematicamente diverse per le quali non è stato corretto.

Infine, potrebbe anche accadere in modo casuale perché il tuo classificatore è a livello casuale nel lungo periodo, ma è capitato di ottenere "sfortunato" nel tuo campione di test (cioè ottenere alcuni più errori che successi). Ma in quel caso i valori dovrebbero essere relativamente vicini a 0,5 (quanto vicino dipende dal numero di punti dati).


1

Mi dispiace, ma queste risposte sono pericolosamente sbagliate. No, non puoi semplicemente capovolgere l'AUC dopo aver visto i dati. Immagina di acquistare azioni e di aver sempre acquistato quella sbagliata, ma hai detto a te stesso, quindi va bene, perché se acquistassi il contrario di quello che il tuo modello prevedeva, allora guadagneresti.

Il fatto è che ci sono molte, spesso non ovvie ragioni per cui è possibile distorcere i risultati e ottenere prestazioni costantemente al di sotto della media. Se ora capovolgi la tua AUC, potresti pensare di essere il miglior modellatore al mondo, sebbene non ci sia mai stato alcun segnale nei dati.

Ecco un esempio di simulazione. Si noti che il predittore è solo una variabile casuale senza relazione con il target. Si noti inoltre che l'AUC media è di circa 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')

risultati

inserisci qui la descrizione dell'immagine

Naturalmente, non è possibile che un classificatore apprenda qualcosa dai dati poiché i dati sono casuali. La breve possibilità che AUC sia presente perché LOOCV crea un set di allenamento parziale e sbilanciato. Tuttavia, ciò non significa che se non usi LOOCV, sei al sicuro. Il punto di questa storia è che ci sono modi, molti modi in cui i risultati possono avere prestazioni medie inferiori anche se non c'è nulla nei dati, e quindi non dovresti capovolgere le previsioni se non sai cosa stai facendo. E dal momento che hai una performance media inferiore, non vedi cosa stai facendo :)

Ecco un paio di articoli che hanno toccato questo problema, ma sono sicuro che anche altri lo hanno fatto

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


Questa dovrebbe essere la risposta accettata!
martedì
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.