Estoy buscando un método de agrupamiento óptimo (discretización) de una variable continua con respecto a una variable binaria de respuesta (objetivo) dada y con un número máximo de intervalos como parámetro.
ejemplo: tengo un conjunto de observaciones de personas con variables de "altura" (numeral continuo) y "has_back_pains" (binario). Quiero discretizar la altura en 3 intervalos (grupos) como máximo con diferentes proporciones de personas con dolores de espalda, de modo que el algoritmo maximice la diferencia entre los grupos (con restricciones dadas, por ejemplo, que cada intervalo tenga al menos x observaciones).
La solución obvia a este problema sería usar árboles de decisión (un modelo simple de una variable), pero no puedo encontrar ninguna función en R que tenga "número máximo de ramas" como parámetro; todos ellos dividen la variable en 2 gropus (<= x y> x). SAS miner tiene un parámetro de "rama máxima" pero estoy buscando una solución no comercial.
Algunas de mis variables tienen solo unos pocos valores únicos (y podrían tratarse como variables discretas), pero también quiero discretizarlas en un número menor de intervalos.
La solución más cercana a mi problema se implementa en el paquete smbinning en R (que se basa en la función ctree del paquete party) pero tiene dos inconvenientes: es imposible establecer el número de intervalos (sin embargo, puede encontrar una solución al cambiarlo el parámetro p) y no funciona cuando el vector de datos tiene menos de 10 valores únicos. De todos modos, puede ver el resultado de ejemplo aquí (las columnas Cutpoint y Odds son cruciales):
Cutpoint CntRec CntGood CntBad CntCumRec CntCumGood CntCumBad PctRec BadRate Odds LnOdds WoE IV
1 <= 272 9081 169 8912 9081 169 8912 0.1874 0.9814 0.0190 -3.9653 -0.6527 0.0596
2 <= 311 8541 246 8295 17622 415 17207 0.1762 0.9712 0.0297 -3.5181 -0.2055 0.0068
3 <= 335 2986 163 2823 20608 578 20030 0.0616 0.9454 0.0577 -2.8518 0.4608 0.0163
4 Missing 27852 1125 26727 48460 1703 46757 0.5747 0.9596 0.0421 -3.1679 0.1447 0.0129
5 Total 48460 1703 46757 NA NA NA 1.0000 0.9649 0.0364 -3.3126 0.0000 0.0956
Oh, soy plenamente consciente de que el binning resulta en la pérdida de información y que hay mejores métodos, pero lo usaré para la visualización de datos y trataré esas variables como un factor.
fuente
SPSS Algorithms Optimal Binning
.Respuestas:
Mientras leía este libro aquí (Nagarajan, 2103 [1]), me encontré con esta valiosa información que estoy citando descaradamente aquí:
Uso de conocimientos previos sobre los datos. Los límites de los intervalos se definen, para cada variable, para corresponder a escenarios significativamente diferentes del mundo real, como la concentración de un contaminante particular (ausente, peligroso, letal) o clases de edad (niños, adultos, ancianos).
Usar la heurística antes de aprender la estructura de la red. Algunos ejemplos son: Sturges, Freedman-Diaconis o las reglas de Scott (Venables y Ripley, 2002).
Elegir el número de intervalos y sus límites para equilibrar la precisión y la pérdida de información (Kohavi y Sahami, 1996), nuevamente una variable a la vez y antes de que se haya aprendido la estructura de la red. Un enfoque similar considerando pares de variables se presenta en Hartemink (2001).
Realizar el aprendizaje y la discretización de forma iterativa hasta que no se realice ninguna mejora (Friedman y Goldszmidt, 1996).
Estas estrategias representan diferentes compensaciones entre la precisión de la representación discreta de los datos originales y la eficiencia computacional de la transformación.
Esta información se proporciona, en caso de que desee justificar el método de agrupación que desea usar y no solo usar un paquete directamente.
[1]: Nagarajan R. (2013),
Bayesian Networks in R, con aplicaciones en biología de sistemas
Springer
fuente
Pruebe el paquete de información para R. https://cran.r-project.org/web/packages/Information/Information.pdf https://cran.r-project.org/web/packages/Information/vignettes/Information-vignette .html
El paquete de información tiene la funcionalidad para calcular WoE y IV (el número de contenedores es un parámetro flexible, el valor predeterminado es 10) y es un instrumento útil para la exploración de datos y, en consecuencia, para el binning. Sin embargo, la salida no contiene probabilidades; y no es posible especificar cero como un contenedor separado (para mis tareas, el cero suele ser un contenedor válido por derecho propio); y sería bueno obtener resultados del paquete de información que sería como el de smbinning. Sin embargo, dicho esto sobre las características agradables pero aún no disponibles del paquete de Información, otros paquetes R para WoE y IV (woe, klaR) no causaron la impresión de instrumentos tan útiles como el paquete de Información, de hecho, yo no pudo ejecutarlos después de 2-3 intentos. Para la tarea de dscretisation / binning, los paquetes de información y smbinning pueden funcionar bien juntos,
Para el binning real, utilicé data.table en lugar de la función cut (). Vea el enlace a mi publicación a continuación, contiene un código genérico en la parte inferior de la pregunta inicial: /programming/34939845/binning-variables-in-a-dataframe-with-input-bin-data- de-otro-marco de datos
Espero eso ayude.
fuente