¿Puede AUC-ROC estar entre 0-0.5?


Respuestas:


19

Un predictor perfecto proporciona una puntuación AUC-ROC de 1, un predictor que realiza conjeturas aleatorias tiene una puntuación AUC-ROC de 0,5.

Si obtiene un puntaje de 0, eso significa que el clasificador es perfectamente incorrecto, está prediciendo la elección incorrecta el 100% del tiempo. Si acaba de cambiar la predicción de este clasificador a la opción opuesta, entonces podría predecir perfectamente y tener una puntuación AUC-ROC de 1.

Entonces, en la práctica, si obtiene un puntaje de AUC-ROC entre 0 y 0.5, es posible que tenga un error en la forma en que etiquetó los objetivos de su clasificador o podría tener un algoritmo de entrenamiento incorrecto. Si obtiene un puntaje de 0.2, esto muestra que los datos contienen suficiente información para obtener un puntaje de 0.8, pero algo salió mal.


Creo que esta respuesta omite la posibilidad de que el modelo tenga un sobreajuste, por ejemplo, obtener un AUC de 0.8 en los datos de entrenamiento pero un AUC de 0.35 en los datos de retención.
Sycorax dice Reinstate Monica

1
@Sycorax: Hmm, puedo ver cómo el sobreajuste obviamente podría llevar a las AUC a un nivel de probabilidad (si estás tan lejos del verdadero modelo que tus predicciones son solo basura), pero ¿cómo sería (significativamente) por debajo de la posibilidad ?
Ruben van Bergen

1
Tendrá un AUC por debajo de 0.5 siempre que la clasificación en algún conjunto esté más cerca de estar atrasado que correcto. No es diferente del sobreajuste en cualquier otro contexto.
Sycorax dice Reinstate Monica

14

Pueden hacerlo, si el sistema que está analizando funciona por debajo del nivel de probabilidad. Trivialmente, podría construir fácilmente un clasificador con 0 AUC haciendo que siempre responda de manera opuesta a la verdad.

En la práctica, por supuesto, entrena a su clasificador en algunos datos, por lo que valores muy inferiores a 0.5 generalmente indicarían un error en su algoritmo, etiquetas de datos o elección de datos de entrenamiento / prueba. Por ejemplo, si cambió por error las etiquetas de clase en los datos de su tren, su AUC esperado sería 1 menos el AUC "verdadero" (dadas las etiquetas correctas). El AUC también podría ser <0.5 si divide sus datos en particiones de tren y prueba de tal manera que los patrones que se clasificarán fueran sistemáticamente diferentes. Esto podría suceder (por ejemplo) si una clase fuera más común en el tren en comparación con el conjunto de prueba, o si los patrones en cada conjunto tenían intercepciones sistemáticamente diferentes que no corrigió.

Por último, también podría ocurrir de forma aleatoria porque su clasificador está en el nivel de probabilidad a largo plazo, pero resultó "desafortunado" en su muestra de prueba (es decir, obtuvo algunos errores más que éxitos). Pero en ese caso, los valores deberían estar relativamente cerca de 0.5 (qué tan cerca depende de la cantidad de puntos de datos).


1

Lo siento, pero estas respuestas son peligrosamente incorrectas. No, no puede simplemente voltear AUC después de ver los datos. Imagina que estás comprando acciones, y siempre compraste una incorrecta, pero te dijiste a ti mismo, entonces está bien, porque si compraras lo contrario de lo que tu modelo estaba prediciendo, ganarías dinero.

El hecho es que hay muchas razones, a menudo no obvias, de cómo puede sesgar sus resultados y obtener un rendimiento consistentemente inferior al promedio. Si ahora voltea su AUC, podría pensar que es el mejor modelador del mundo, aunque nunca hubo ninguna señal en los datos.

Aquí hay un ejemplo de simulación. Observe que el predictor es solo una variable aleatoria sin relación con el objetivo. Además, tenga en cuenta que el AUC promedio es de alrededor de 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')

Resultados

ingrese la descripción de la imagen aquí

Por supuesto, no hay forma de que un clasificador pueda aprender algo de los datos, ya que los datos son aleatorios. La posibilidad de abajo AUC está ahí porque LOOCV crea un conjunto de entrenamiento sesgado y desequilibrado. Sin embargo, eso no significa que si no usa LOOCV, está a salvo. El punto de esta historia es que hay formas, muchas maneras en que los resultados pueden tener un rendimiento promedio inferior incluso si no hay nada en los datos, y por lo tanto, no debe cambiar las predicciones a menos que sepa lo que está haciendo. Y como tienes un rendimiento promedio inferior, no ves lo que estás haciendo :)

Aquí hay un par de documentos que tocaron este problema, pero estoy seguro de que otros también lo hicieron.

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


¡Esta debería ser la respuesta aceptada!
tdc
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.