Roc

modelplotr

R
Si leéis algo y tropezáis con un gráfico como es que lo que lo rodea vale la pena. En este caso, lo que lo rodea es este texto que algún LLM me ha resumido así: El texto analiza la importancia de evaluar el valor comercial de los modelos predictivos y las limitaciones de las métricas de evaluación tradicionales como la curva ROC. Presenta cuatro gráficos de evaluación (ganancias acumuladas, elevación acumulada, respuesta y respuesta acumulada) y tres gráficos financieros (costos e ingresos, ganancias y retorno de la inversión) que pueden ayudar a explicar el valor comercial de un modelo.

Sobre la curva ROC como medida de bondad de clasificadores

Esta entrada se entiende mal sin esta otra donde se daba noticia de un clasificador que era mucho mejor o peor (de acuerdo con ciertas métricas) según la tasa de prevalencia de la clase relevante a pesar de que tanto su sensibilidad como su especificidad no eran particularmente malas. Efectivamente, con lo del coronavirus hemos reaprendido a darle la vuelta a las probabilidades condicionales y aplicar el teorema de Bayes para ver qué cabía esperar de un clasificador cuyas bondades se predican en términos de la sensibilidad y la especificidad.

Cotas superiores para el AUC

El AUC tiene una cota superior de 1. Concedido. Pero alguien se quejó de que el AUC = 0.71 que aparece aquí era bajo. Se ve que ignora esto. Donde está todo tan bien contado que no merece la pena tratar de reproducirlo o resumirlo aquí.

Curvas ROC no cóncavas: ¿por qué, por qué, por qué?

El otro día me enseñaron una rareza: una curva ROC no cóncava. Digamos que como El gráfico que la acompaña aquí, explica un par de cositas. El artículo enlazado discute cómo combinar clasificadores para construir otro cuya curva ROC sea la envolvente convexa del original.

El AUC es la probabilidad de que...

Voy a constuir unos datos artificiales y un modelo de clasificación binaria, library(mgcv) library(ggplot2) library(pROC) n <- 10000 dat <- gamSim(1, n=n, dist="binary", scale=.33) lr.fit <- gam(y ~ s(x0, bs="cr") + s(x1, bs="cr") + s(x2, bs="cr") + s(x3, bs="cr"), family=binomial, data=dat, method="REML") y luego (mal hecho: debería hacerlo sobre un conjunto de validación distinto) a obtener las predicciones para las observaciones res <- data.frame(real = factor(dat$y), prob = predict(lr.fit, type = "response")) que