Archivo de la etiqueta: árboles de decisión

El sobremuestreo ¿mejora mi estimación?

El sobremuestreo (oversampling) es una técnica de muestreo que se emplea habitualmente cuando tenemos una baja proporción de casos positivos en clasificaciones binomiales. Los modelos pueden “despreciar” los casos positivos por ser muy pocos y nuestro modelo no funcionaría. Para incrementar el número de casos positivos se emplea el sobremuestreo. Ejemplos habituales pueden ser los modelos de fraude, un 99% de las compras son correctas, un 1% son fraudulentas. Si realizo un modelo puedo estar seguro al 99% de que todas mis compras son correctas, en este caso hemos de realizar un sobremuestreo para incrementar nuestros casos de fraude y poder detectar los patrones.

Personalmente no sabría deciros el porcentaje de casos positivos a partir del cual sería necesario llevar a cabo un proceso de remuestreo. A mi particularmente me gusta hacerlo siempre. Por lo menos realizar algunas pruebas para identificar aquellas variables que son más influyentes y comenzar a eliminar aquellas que no van a funcionar. Busco exagerar. Tampoco me quiero mojar mucho sobre la proporción de casos positivos y negativos, pero si estamos realizando un nuevo muestreo podemos emplear perfectamente un 50% para ambos, aquí si que dependemos del número de registros con el que estemos trabajando ya que al final el sobremuestreo será la repetición de los casos positivos sobre la tabla de entrada del modelo.

Sin embargo, cuando ya tengo decidido como va a ser mi modelo no me gusta realizar sobremuestreo. Lo considero un paso previo (algún lector del blog considerará estas palabras incoherentes). Después de toda esta exposición teórico-práctica de malos usos de un dinosaurio  en realidad lo que cabepreguntarse es ¿mejora la estimación un modelo con sobremuestreo?

Abrimos R y Tinn-R y manos a la obr Seguir leyendo El sobremuestreo ¿mejora mi estimación?

Árboles de decisión con SAS Base (con R por supuesto)

Con SAS Base podemos hacer árboles de decisión porque tenemos R. Así de sencillo. Vamos a utilizar SAS para gestionar nuestros datos y R será la herramienta que utilicemos para la realización del modelo de árbol de decisión. Posteriormente emplearemos las reglas generadas por el modelo para etiquetar a nuestros clientes en SAS. Con esta entrada pretendo ilustrar una serie de ejemplos en los que comunico SAS con R. Una herramienta nos sirve para el tratamiento de datos y la otra la utilizaremos para realizar modelos que no están al alcance de SAS. Para realizar esta comunicación SAS-R os planteo la creación en SAS de ficheros de texto con las instrucciones en R y la ejecución en modo batch de R con ese código creado en SAS. Aquí tenéis punto por punto el ejemplo:

El primer paso, como es habitual, es crear un conjunto de datos SAS con datos aleatorios que nos sirva de ejemplo Seguir leyendo Árboles de decisión con SAS Base (con R por supuesto)

Trucos R. Llevar a SAS las reglas de un árbol de decisión

Vuelvo hoy con el uso de rpart para la creación de árboles de decisión con R. Pero hoy, además de realizar un modelo de árbol con R quiero presentaros una función que nos permite guardar las reglas generadas con nuestro modelo en un fichero de texto para su posterior utilización con SAS. Retomamos un ejemplo visto con anterioridad en la bitácora con ligeras modificaciones:
#Inventamos un objeto para realizar el modelo
#En una cartera de clientes nuestro modelo tiene que identificar
#cuales contratan un PVI
#
clientes=20000
saldo_vista=runif(clientes,0,1)*10000
saldo_ppi=(runif(clientes,0.1,0.2)*rpois(clientes,1))*100000
saldo_fondos=(runif(clientes,0.1,0.9)*(rpois(clientes,1)-1>0))*100000
edad=rpois(clientes,60)
datos_ini<-data.frame(cbind(saldo_vista,saldo_ppi,saldo_fondos,edad))
datos_ini$saldo_ppi=(edad<=68)*datos_ini$saldo_ppi
#Creamos la variable objetivo a partir de un potencial
datos_ini$potencial=runif(1,0,1)+
(log(edad)/(log(68))/100) +
runif(1,0,0.001)*(saldo_vista>5000)+
runif(1,0,0.001)*(saldo_fondos>10000)+
runif(1,0,0.007)*(saldo_ppi>10000)-
runif(1,0,0.2)
datos_ini$pvi=as.factor((datos_ini$potencial>=quantile(datos_ini$potencial,
0.90))*1)
#
#Empleamos rpart para la realización del modelo
#
library(rpart)
arbol=rpart(as.factor(pvi)~edad+saldo_ppi+saldo_fondos,
data=datos_ini,method="anova",
control=rpart.control(minsplit=30, cp=0.0008) )

Tenemos un objeto rpart llamado arbol. En este punto necesitamos disponer de las reglas generadas por el modelo para SAS, donde el módulo específico para poder realizar determinados modelos tiene un precio muy alto. Buscando en Google encontraremos este link. En él tenemos una genial función de R list.rules.rpart que nos permite identificar las reglas que ha generado el modelo Seguir leyendo Trucos R. Llevar a SAS las reglas de un árbol de decisión

Monografico. Arboles de decisión con party

Los árboles de clasificación son una de las técnicas de análisis más utilizadas. No requieren supuestos distribucionales, permite detectar interacciones entre variables y no es muy sensible a la presencia de valores perdidos y outliers. En resumen, es una técnica que no quita mucho tiempo al analista para hacer consultas carentes de valor para sus responsables y permite identificar tanto perfiles positivos como perfiles negativos. Además, sus resultados son muy fáciles de interpretar. Tan fáciles que, INCLUSO, las áreas de negocio pueden entender sus resultados. Por todo esto estamos ante una de las técnicas más extendidas. En el blog ya hicimos un breve monográfico con rpart de R y nos quedaba realizar una revisión al paquete party. La metodología para esta rápida revisión será la habitual, planteamos un ejemplo y realizamos un análisis con las instrucciones de party. Seguir leyendo Monografico. Arboles de decisión con party

Sobre la historia de CART y rpart

Hace unos días conversábamos Raúl y yo sobre árboles de clasificación. En particular, hablábamos de CART, el algoritmo propietario de Salford Systems. Me intrigó saber cuál sería la diferencia entre dicho algoritmo y la alternativa existente en R, rpart.

El autor de dicho paquete, Terry Therneau,  tuvo la gentileza de ofrecer una introducción histórica al particular de la que ofrezco algunos fragmentos que traduzco yo mismo a continuación:

[…]

Tanto el programa comercial CART como la función rpart() están basados en el libro Classification and Regression Trees. Como lector y revisor de alguno de sus primeros borradores, llegué a dominar la materia. CART comenzó como un enorme programa en Fortran que escribió Jerry Friedman y que sirvió para contrastar las ideas contenidas en el libro. Tuve el código durante un tiempo y realicé algunos cambios, pero me resultó demasiado frustrante el trabajar con él. Fortran no es el lenguaje adecuado para un algoritmo recursivo […]. Salford Systems adquirió los derechos de dicho código e ignoro si alguna de las líneas origininales permanecen en él todavía. Mantuve muchas conversaciones con su principal programador (hace 15 o 20 años) sobre procedimientos para hacerlo más eficiente, esencialmente un problema interesante de indexación óptima.

La versión original de rpart coincidía con CART de manera casi absoluta. La única diferencia reseñable estaba en los surrogates: yo me decantaba por el surrogate con el mayor número de coincidencias mientras que CART lo hacía por el que tenía mayor porcentaje de coincidencias. La consecuencia es que rpart favorece aquellas variables con menos missings. Desde entonces, ambos programas han evolucionado. Yo no he tenido tiempo de trabajar de manera sustancial en rpart durante los últimos diez años. No es de extrañar, por tanto, que los gráficos y la visualización hayan quedado algo anticuados; lo que es más sorprendente es que todavía subsistan.

Rpart se llama rpart porque los autores registraron comercialmente el término CART. Era la mejor alternativa que se me ocurrió entonces. Me parece curioso que una de las consecuencias de haber registrado “CART” es que ahora se utilice “particionamiento recursivo” mucho más a menudo que CART como nombre genérico para los métodos basados en árboles.

[…]

El lector queda invitado a extraer sus propias conclusiones.