Teniendo datos históricos de clientes activos y clientes desafilados, podrian aplicarse los siguientes pasos:
PASO 1: Cargar Datos y crear set de Entrenamiento y Test
El package C50 contiene datos de 5000 clientes, de los cuales se usan 3333 clientes para entrenar el Arbol de Decision (set de Entrenamiento) y 1667 para medir la precisión de la predicción (set de TEST). El resultado de esto sería algo como:
PASO 2: Crear algoritmo de Árbol de Decision
Se crea el arbol de decision usando los datos de Entrenamiento. Conceptualmente quedaría así:
PASO 3: Medir precisión del Árbol
Con las reglas creadas en el árbol, se aplican a los datos de TEST para realizar predicción y medir precisión del árbol. Conceptualmente quedaría así:
PASO 4: Graficar Arbol de Decision
Para visualizar las reglas creadas, se usa rpart.plot que graficar el arbol. Para mas detalles sobre rpart.plot ver referencia No. 3.
Nota: Para una mejor validación de un modelo y evitar overfitting, siempre es recomendable usar técnica de Validación Cruzada. Ver ejemplo publicado AQUI.
# Predecir Perdida de Clientes con Arbol de Decision # PASO 1: Carga Package y Set de datos # --------------------------------------------------------------------------- library(C50) library(rpart) library(rpart.plot) data(churn); # carga tablas Variables <-c(4,7,16,19,17,20) # variables elegidas Entrenamiento <-churnTrain[,Variables] # tabla entrenamiento Test <-churnTest [,Variables] # tabla Test # PASO 2: Crea Arbol de Decision # --------------------------------------------------------------------------- ModeloArbol<-rpart(churn ~ .,data=Entrenamiento,parms=list(split="information")) # PASO 3: Predice Desafiliación en datos de TEST # --------------------------------------------------------------------------- Prediccion <- predict(ModeloArbol, Test,type="class") # Prediccción en Test MC <- table(Test[, "churn"],Prediccion) # Matriz de Confusión # PASO 4: Crea Grafico # --------------------------------------------------------------------------- rpart.plot(ModeloArbol, type=1, extra=100,cex = .7, box.col=c("gray99", "gray88")[ModeloArbol$frame$yval])
1. Conceptos Arbol de Decision: http://web.fdi.ucm.es/posgrado/conferencias/JorgeMartin-slides.pdf
2. Detalles de rpart: http://cran.r-project.org/web/packages/rpart/rpart.pdf
3. Graficos con rpart.plot: http://www.milbo.org/rpart-plot/prp.pdf
4. Teoria Arbol de decision:
https://www.dropbox.com/s/adqd9hafnaq7t2o/ArbolDesicion_Teoria.pdf?dl=0
Hola, quisiera saber como puedo descargar los datos de prueba: Datos set de Entrenamiento y Test
ResponderEliminarMil gracias
Los archivos son de la libreria C50. Fijate en Paso 1, se crean 2 data.frame(churnTrain y churnTrain). Para bajarlo a disco puedes usar desde R: write.csv(churnTrain,"c:/carpeta/churnTrain.csv")
EliminarPor favor podrias colocar en algun link los datos de entrenamiento. Gracias
EliminarHola, que debo remplazar para hacerlo con unos datos diferentes?
ResponderEliminarExcelente aplicación Dr.Enmanuel Santana, pero tambien me gustaría ver aplicaciones sobre modelos de pronóstico(ARIMA-GARCH)
ResponderEliminarExcelente Web. Con respeto indico que el archivo de teoría del árbol de decisión no está en línea, agradezco que nos lo pueda compartir. Muchas gracias.
ResponderEliminarCarlos, ya está reparado el link. Gracias por avisar
EliminarMuchas gracias por compartir sus conocimientos.
ResponderEliminarPude correr todo con datos míos, todo OK menos cuando quiero ver la MC; sale el siguiente err:
> MC <- table(test[, "tipo_isib"],prediccion) # Matriz de Confusión
Error in sort.list(y) : 'x' must be atomic for 'sort.list'
Have you called 'sort' on a list?
"tipo_isib" es factor y tiene tres valores posibles. ¿Alguna sugerencia? Gracias
Hola, lo pude solucionar con:
Eliminarmc <- with(test,table(prediccion, tipo_isib)) saludos