Digamos que usted ha dividido sus datos en tren (desarrollo) y prueba, ha elegido algunos intervalos óptimos para sus variables y ha creado su modelo de regresión logística, y su objetivo es "préstamo que va mal" (crédito a @Wayne).
El modelo le dará la probabilidad de que un préstamo sea incobrable. Por supuesto, se puede multiplicar por 1.000 para crear una mayor "sensación de puntuación", lo que también es bueno cuando se presenta a personas que no tienen formación estadística (lo hace un poco más sencillo).
Ahora bien, cuando se quiere elegir un punto de corte (en la puntuación) para tomar medidas, esto se convierte en un proceso muy subjetivo, y yo no recomendaría tomar la estadística KS como punto de corte.
Lo que suelo hacer es que divido mis datos en mosaicos iguales, 10 mosaicos la mayoría de las veces, puedes ir a 20 también si quieres obtener una mirada más refinada de tu modelo.
Si se hace un mosaico, los datos se dividirán de forma equitativa y se podrán representar las probabilidades predichas frente a las observadas, lo que también puede servir para comprobar la calidad del modelo. Si hay un elemento de efectivo (por ejemplo, si se trata de ver si alguien va a devolver su préstamo, y se tiene una variable de efectivo que indica cuánto ha pagado), también se puede observar la distribución de efectivo en los mosaicos.
Ya he creado una función que crea su tabla de mosaicos y emite el gráfico que pegaré al final de esta respuesta. Pero los mosaicos pueden ser utilizados como una gran guía para la elección de sus puntos de corte, ya que crea un conjunto de grupos y se puede elegir qué grupos le gustaría centrarse en. Obviamente, asegúrese de hacer lo mismo con sus datos de prueba para asegurarse de que sus resultados son sólidos.
Si no he sido lo suficientemente claro, pregunte. Espero que esto haya servido de ayuda.
donde model is the name of your model y is your target variable cash is your cash variable df is your dataset / dataframe mt and st are main title and sub title respectively
tile <- function(model, y = ds1$target, cash = NULL, df = ds1, mt = "Model Lift Chart", st = " ") {
require(dplyr)
p1 <- predict(model, df, type = "response")
pred <- df$pred <- p1
df$Tile <- ntile(pred , 10)
if (is.null(cash)) {
predict <- aggregate(pred, by=list(Tile = df$Tile), FUN=mean)
observed <- aggregate(y, by=list(Tile = df$Tile), FUN=mean)
count <- aggregate(pred, by=list(Tile = df$Tile),FUN=length)
lift_mod <- data.frame(cbind(predict, observed, count))
lift_mod$Tile.1 <- NULL
lift_mod$Tile.2 <- NULL
lift_mod$predict <- lift_mod$x
lift_mod$observed <- lift_mod$x.1
lift_mod$count <- lift_mod$x.2
lift_mod$x <- NULL
lift_mod$x.1 <- NULL
lift_mod$x.2 <- NULL
} else {
predict <- aggregate(pred, by=list(Tile = df$Tile), FUN=mean)
observed <- aggregate(y, by=list(Tile = df$Tile), FUN=mean)
Cash_Mean <- aggregate(cash, by=list(Tile = df$Tile), FUN=mean)
count <- aggregate(pred, by=list(Tile = df$Tile),FUN=length)
lift_mod <- data.frame(cbind(predict, observed, Cash_Mean, count))
lift_mod$Tile.1 <- NULL
lift_mod$Tile.2 <- NULL
lift_mod$Tile.3 <- NULL
lift_mod$predict <- lift_mod$x
lift_mod$observed <- lift_mod$x.1
lift_mod$Cash_Mean <- lift_mod$x.2
lift_mod$count <- lift_mod$x.3
lift_mod$x <- NULL
lift_mod$x.1 <- NULL
lift_mod$x.2 <- NULL
lift_mod$x.3 <- NULL
}
print(lift_mod)
a <- sum(lift_mod$Cash_Mean[1:3])/sum(lift_mod$Cash_Mean)
b <- sum(lift_mod$Cash_Mean[8:10])/sum(lift_mod$Cash_Mean)
print(sprintf("Bottom 3 = %.*f", 3, a))
print(sprintf("Top 3 = %.*f", 3, b))
mplot(lift_mod$Tile, lift_mod$predict, lift_mod$observed, mt=mt, st=st, xl = "Tile", yl = "Output")
legend(x = "topleft", legend = c("Predict", "Actual"), lty = c(1, 1), col = c("steelblue2", "firebrick2"), pch = 19)
t <- lift_mod$observed
v <- t[2]
w <- t[8]
text(2, v, sprintf("Bottom 3 = %.*f%s", 1, a*100, "%"), col = "forestgreen", pos = 3, cex = 1.1)
text(8, w, sprintf("Top 3 = %.*f%s", 1, b*100, "%"), col = "forestgreen", pos = 3, cex = 1.1)
z <- lift_mod
}
0 votos
Las regresiones logísticas suelen estar bien calibradas. ¿Ha comprobado la calibración de su modelo? Además, ¿podría ampliar/definir la "tarjeta de puntuación"? Podría utilizar el resultado de la regresión logística como puntuación [0-1] y multiplicarlo por 100. Pero si "scorecard" implica más bien un corte rojo/amarillo/verde o rojo/verde, eso es otra cuestión.
0 votos
@Wayne Actualizó la pregunta en un esfuerzo por ser más específico sobre lo que estoy buscando.
0 votos
Bien, gracias. ¿Cuál es el objetivo de la regresión logística? Supongo que algo así como "préstamo exitoso" o "préstamo malo", por lo que está queriendo dividir la salida de la regresión logística [0,1] en bandas de algo así como "Riesgo alto -- Ningún préstamo", "Riesgo medio -- Préstamo con mayor tasa de interés", o "Riesgo bajo -- Préstamo con menor tasa de interés". ¿Es ese el objetivo y su meta con la salida? Si su objetivo es, por ejemplo, "Préstamo malo" y su regresión está bien calibrada, sólo necesita que las PYMES decidan en qué puntos de probabilidad (en [0,1]) quieren cortar las cosas.
0 votos
Es decir, si su objetivo es "Préstamo malo" y la regresión está bien calibrada, una puntuación de 0,2 dice que hay aproximadamente un 20% de probabilidades de que este préstamo sea malo, mientras que un 0,92 dice que hay aproximadamente un 92% de cambio de que este préstamo sea malo. (En opinión de su modelo, basado en sus datos de entrenamiento.) Entonces es sólo una cuestión de política determinar cuánto riesgo están dispuestos a tolerar y aún así extender un préstamo, o cuán bajo es el riesgo que requieren antes de dar mejores condiciones.
0 votos
@Wayne Eso es exactamente correcto. Entonces, ¿la mejor práctica es dejar la división en manos de las PYMES? ¿No hay una buena manera de probar diferentes configuraciones de banda sin datos adicionales?
0 votos
¿Tiene datos históricos sobre el $x_{ij}$ y las acciones y la escala de las acciones tomadas en el pasado? En otras palabras, ¿tiene usted datos históricos sobre el tema $i$ incluyendo las medidas tomadas
0 votos
@fcop Sí, ambos están disponibles.
1 votos
Entonces puedes hacer una ''regresión logística ordenada'', si te dará los coeficientes $\beta$ sino también los puntos de corte que se buscan. Creo que en R es con la función 'polr'. Su variable dependiente es ahora la ''clase de acción'', es decir, préstamo con bajo interés, mocano con alto interés, por lo que un factor ordenado (en lugar de 0/1 putcome) y se obtienen los coeficientes y puntos de corte como resultado
0 votos
En cuanto a tu pregunta, los puntos de separación en la regresión logística bien calibrada son lo que son: porcentaje de probabilidad (a ojos del modelo) de ser un préstamo malo/bueno. Es lo que es y todo lo que vaya más allá es política. La propuesta de @fcop de una regresión logística ordinal tiene mucho sentido, ya que su objetivo real es una elección de decisiones ordenadas: [ningún préstamo, ..., las mejores condiciones de préstamo posibles].
0 votos
@fcop ¡Gracias! Así que el uso de una regresión logística ordenada todavía me permitirá probar contra, digamos, la tasa de incumplimiento, pero cada entrada será ordenada en base a, en este ejemplo, la categoría de la tasa de interés.
0 votos
He formulado una respuesta.
0 votos
@Wayne: gracias, efectivamente está en el paquete MASS, debo admitir que no conozco los otros paquetes