¿Es correcto evaluar controladores individuales con el valor AUC?

Aug 18 2020

Tengo una discusión con mi supervisor sobre el uso de AUC para determinar, básicamente, la importancia de tres controladores diferentes que constan de múltiples variables cada uno. Afirma que puedo ver el valor de AUC para el modelo general y luego tratar de ejecutar un modelo similar solo usando un controlador a la vez, obtener el valor de AUC para cada controlador y luego evaluar la importancia de cada controlador.

Inherent driver: 2 variables
Static driver: 2 variables
Dynamic driver: 7 variables

Entonces, mi salida AUC de un modelo binario de ElasticNet sería la siguiente:

Overall AUC score (all drivers included): 0.89

Luego realizo el mismo modelo de ElasticNet pero solo con mis dos variables seleccionadas en inherent drivery la variable dependiente. Y así sucesivamente con los siguientes controladores, etc., etc. Los valores de AUC son los siguientes:

Inherent driver:                          0.58
Static driver:                            0.67
Dynamic driver:                           0.88
  1. ¿Me dice entonces el resultado que mi dynamic driveres relativamente más importante, o simplemente es mejor para distinguir 0 de 1?
  2. ¿Es esto incluso un método estadísticamente sólido? Si no, ¿de qué otra manera puedo evaluarlo?

EDITAR:

       V1  dependent  V2    V3    V4     V5    V6     V7    V8   V9     V10   V11
1      -1.3     0     494.  34.1  2.23   43.0  4.58   46.7  283. 0.442  34.5   0
2      -4.2     0     231.  16.9  1.01   69.4  0      66.4  277. 0.959  11.1   0
3     -11.7     0     646.  132.  20.5   88.0  0.063  34.0  291. 5.63   21     0
4      -9.3     0     44.0  16.4  0.397  39.1  2.37   77.6  279. 7.24   31.8   0
5     -14.2     0     88.2  128.  40.6   83.4  1.09   47.2  284. 8.23   2.92   0
6      19.4     0     382.  49.4  1.15   54.4  0.914  53.6  279. 3.03   16.8   1

df <- df %>% select(V1, dependent, V2, V3, V4, V5, V6, V7, V8, V9, V11, V12)
training.samples <- df$dependent %>% createDataPartition(p = 0.8, list = FALSE)
train <- df[training.samples, ]
test <- df[-training.samples, ]
x.train <- data.frame(train[, names(train) != "dependent"])
x.train <- data.matrix(x.train)
y.train <- train$dependent
x.test <- data.frame(test[, names(test) != "dependent"])
x.test <- data.matrix(x.test)
y.test <- test$dependent
list.of.fits.overall.model <- list()
for (i in 0:10){
fit.name <- paste0("alpha", i/10) 
list.of.fits.overall.model[[fit.name]] <- cv.glmnet(x.train, y.train, type.measure = c("auc"), alpha = i/10, family = "binomial", nfolds = 10, foldid = foldid, parallel = TRUE)
}
predicted <- predict(list.of.fits.overall.model[[fit.name]], s = list.of.fits.overall.model[[fit.name]]$lambda.1se, newx = x.test, type = "response")
#PLOT AUC
pred <- prediction(predicted, y.test)
perf <- performance(pred, "tpr", "fpr")
plot(perf)
abline(a = 0, b = 1, lty = 2, col = "red")
auc_ROCR <- performance(pred, measure = "auc")
auc_ROCR <- [email protected][[1]]
auc_ROCR

Ahora repito todo el procedimiento de modelado de red elástica (búsqueda de compensación óptima de cresta/lazo y valor de penalización óptimo) con solo dos variables. Básicamente, cambio lo siguiente:

df.inherent <- df %>% select(V1, dependent, V2)
training.samples <- df.inherent$dependent %>% createDataPartition(p = 0.8, list = FALSE)
train <- df.inherent[training.samples, ]
test <- df.inherent[-training.samples, ]
x.train <- data.frame(train[, names(train) != "dependent"])
x.train <- data.matrix(x.train)
y.train <- train$dependent
x.test <- data.frame(test[, names(test) != "dependent"])
x.test <- data.matrix(x.test)
y.test <- test$dependent
list.of.fits.inherent <- list()
for (i in 0:10){
fit.name <- paste0("alpha", i/10) 
list.of.fits.inherent[[fit.name]] <- cv.glmnet(x.train, y.train, type.measure = c("auc"), alpha = i/10, family = "binomial", nfolds = 10, foldid = foldid, parallel = TRUE)
}
predicted <- predict(list.of.fits.inherent[[fit.name]], s = list.of.fits.inherent[[fit.name]]$lambda.1se, newx = x.test, type = "response")

Entonces, finalmente, lo último que @EDM cuestionó en los comentarios.

Respuestas

2 EdM Aug 20 2020 at 00:47

Dado que la penalización es importante para su modelado, está en un camino potencialmente bueno, pero necesita incorporar información sobre el error potencial en su métrica de calidad de AUC. No puede comparar un AUC de 0,58 con uno de 0,67 a menos que sepa cuán variables pueden ser esas estimaciones.

Una forma sencilla de manejar esto sería repetir el proceso con múltiples (digamos varios cientos) divisiones de prueba/entrenamiento en lugar de una sola como lo realiza actualmente. Las divisiones de prueba/tren individuales pueden ser poco confiables con conjuntos de datos que tienen algo por debajo de varios miles de casos . (Como probablemente necesitaría menos de 200 casos en la clase minoritaria para ajustar un modelo no penalizado con 11 predictores de manera confiable, asumo que no tiene varios miles de casos y, por lo tanto, debería hacer más remuestreo en cualquier caso). Luego usa la variabilidad entre los (varios cientos) valores de AUC del conjunto de prueba para medir si las diferencias entre los subconjuntos predictores son o no estadísticamente confiables.

Es posible que esté mejor con un enfoque similar basado en el arranque en lugar de múltiples divisiones de prueba/entrenamiento. Primero usa todos los datos para ajustar un modelo completo. De esa manera, obtiene un modelo completo que, a diferencia de su enfoque, usa todos los datos disponibles para construir y no depende de los caprichos de una división de prueba/entrenamiento en particular.

Luego, repite todo el proceso de modelado (incluida la elección de alphay lambdaa través de la validación cruzada interna) en unos pocos cientos de muestras de arranque del conjunto de datos, y utiliza el conjunto de datos completo como conjunto de prueba en cada caso. Bajo el principio de arranque, que es análogo a construir modelos en múltiples muestras de toda la población de interés y luego probarlos en la población. De este modo, obtiene una estimación razonable de la calidad del proceso de modelado: optimismo (sobreajuste) en los valores de los coeficientes y sesgo y variabilidad en las estimaciones de su medida de calidad.

En términos de modelado, incluso si elige usar AUC como su medida final, debe usar la desviación en lugar de AUC como criterio para la elección de validación cruzada de alphay lambda. El AUC (o índice C) no es muy sensible para distinguir entre modelos. Además, piense detenidamente si lambda.1sees una buena opción en este caso. Eso ayuda a obtener un modelo parsimonioso, pero con tan pocos predictores para comenzar (solo 2 en su segundo ejemplo), es posible que esté mucho mejor con el lambda.minvalor que minimiza el error de validación cruzada (nuevamente, es mejor hacerlo con desviación incluso si su final la evaluación debe hacerse con AUC).