Mostrar / ocultar código
set.seed(45)
<- 30
n
<- data.frame(res = "si", score = rnorm(n, 1, 1))
si <- data.frame(res = "no", score = rnorm(n, 0, 1))
no
<- rbind(si, no) dat
José Luis Cañadas Reche
March 8, 2021
Anda la gente que si viendo a ver cómo calcular el AUC (roc), que si cómo se hace en spark o que si hay que tener en cuenta muchos puntos de corte y ver las tablas de clasificación asociadas. Eso está bien para contarlo, pero no para calcularlo.
El AUC se puede considerar como la probabilidad de que el score de un “sí” elegido al azar es mayor que el score de un “no” elegido al azar. No lo digo yo, lo cuenta mucho mejor que yo , Carlos en su entrada AUC = WILCOXON. De hecho, voy a coger sus mismos datos, salvo por la semilla, que no la indica.
Y como bien comenta Carlos, tanto Wilcoxon como el cálculo usual del AUC dan esa probabilidad. Para esto da igual que los scores sean incluso negativo, se trata de algo que da un orden.
Y copiando de su blog
Pero también podemos hacerlo muestreando.
Nos creamos función
Ahora muestreamos con reemplazamiento los scores correspondientes a etiqueta = TRUE, es decir a los sis
Y simplemente calculamos la probabilidad que buscamos haciendo la proporción de la veces qeu el score de un positivo gana al de un negativo.
Y es una buena aproximación, creemos función y pongamos que en caso de empate de score, ni pa ti ni pa mi.
Pues ya tenemos una forma “sencilla” de calcular auc’s, que se puede usar por ejemplo en sql.
Salud y buena tarde