Arboles DecisionEl crédito es la concesión de un préstamo de dinero al cliente por parte de la entidad financiera, con el compromiso de que en el futuro será devuelto en forma paulatina y gradual. El préstamo a un nuevo cliente conlleva una serie de fases como menciona Lara (2010) empieza por la promoción (en una agencia o en el campo), evaluación, aprobación, desembolso y recuperación del crédito, según el periodo pactado con el cliente Cuando un cliente ha tenido créditos anteriores, tiene un historial y ya no pasa por la fase de promoción.
La promoción del crédito lo realiza el promotor de crédito ubicando zonas potenciales donde pueda captar nuevos clientes, para proceder con la recepción de documentación e información sobre el crédito siendo atendido por el analista de crédito quien verifica los datos del cliente en las centrales de riesgos para su posterior evaluación a fin de presentarlos para su aprobación o rechazo; si es aprobado se procede a llenar la solicitud de crédito para luego proceder al desembolso del préstamo correspondiente. Todo el proceso por lo general se basa en juicio subjetivo del analista de crédito incurriendo muchas veces en errores que conllevan al riesgo de morosidad del cliente, la figura cambiaria si se contara con sistemas expertos que ayuden a la toma de decisión más certera.
Mitchell (2007) afirma que un árbol de decisión es un modelo de predicción que pertenece al enfoque de programación “divide y vencerás”, usado en inteligencia artificial.
El árbol predice la variable dependiente con base en el aprendizaje de reglas de decisión inferidas desde las características que poseen los datos; si la variable dependiente es categórica decimos que es un árbol de clasificación, y si es numérica es un árbol de regresión (Cardona, 2009).
Los árboles de decisión es un modelo de predicción surgido en el ámbito del machine learning (aprendizaje automático) y de la inteligencia artificial, que partiendo de una base de datos crea diagramas de construcciones lógicas que nos ayudan a resolver problemas (Beltrán, 2015).
Los árboles de decisión son llamados así porque su representación es similar a la de un árbol, cuyos elementos son: raíz, nodos, ramas y hojas. El nodo raíz y los nodos internos del árbol corresponden a una prueba del valor de unas de las propiedades y las ramas nodo son identificadas mediante los posibles valores de la prueba. En los nodos hoja del árbol se especifica el valor que se debe producir en el caso de alcanzar dicha hoja.
Los árboles de clasificación se asemejan mucho a los árboles de regresión, con la diferencia de que predicen variables respuesta cualitativas en lugar de continuas.
Para construir un árbol de clasificación se emplea el mismo método recursive binary splitting descrito en los árboles de regresión. Sin embargo, como la variable respuesta en cualitativa, no es posible emplear el RSS como criterio de selección de las divisiones óptimas. Existen varias alternativas, todas ellas con el objetivo de encontrar nodos lo más puros/homogéneos posible.
Existen diferentes paquetes en R que permiten la creación de modelos basados en árboles. Entre las mas conocidas tenemos los siguientes:
tree y rpart: contiene funciones para la creación y representación de árboles de regresión y clasificación.
rpart.plot: permite crear representaciones detalladas de modelos creados con rpart.
Se debe de instalar uitlizando los siguientes comandos:
install.packages("tree",dependencies = TRUE)
install.packages("rpart",dependencies = TRUE)
install.packages("rpar.plot",dependencies = TRUE)
rpart.Para generar un ejemplo de arboles de clasificacion realizaremos los siguientes pasos:
R en cosola o en su defecto Rstudio.library(rpart)
library(rpart.plot)
R:datos <- read.csv("D:/doctorado/usuario/ARBOLES-VERONICA/datos.csv",sep = ";",header = T)
datos$salario<-as.factor(datos$salario)
datos$tiemporesidencia<-as.factor(datos$tiemporesidencia)
datos$diasatraso<-as.factor(datos$diasatraso)
summary.summary(datos)
# generamos tabla entrenamiento y prueba aleatoriamente
set.seed(134)
# training 70% y testing 30%
dividir <- sample(2, nrow(datos), replace = TRUE, prob = c(0.8, 0.2))
entrenamiento <- datos[dividir == 1, ]
prueba <- datos[dividir == 2, ]
modelo_arbol<-rpart(resultado~., data = entrenamiento)
prediccion_arbol <- predict(modelo_arbol, prueba[,-20], type = "class")
modelo_arbol
plot(modelo_arbol)
text(modelo_arbol)
# calculamos la matriz de confusion
MC<-table(prueba$resultado,prediccion_arbol)
MC
# calculamos el error
acierto<-sum(diag(MC))/sum(MC)
acierto
error <- 1-acierto
error
confusionMatrix(prediccion_arbol,prueba[["resultado"]])
varImp(modelo_arbol)
library(rpart)
library(rpart.plot)
datos <- read.csv("C:/Users/JULIUS EL FENIX/Desktop/ARBOLES-VERONICA/datos.csv",sep = ";",header = T)
datos <- datos[-1]
datos$salario<-as.factor(datos$salario)
datos$tiemporesidencia<-as.factor(datos$tiemporesidencia)
datos$diasatraso<-as.factor(datos$diasatraso)
str(datos)
## 'data.frame': 200 obs. of 21 variables:
## $ salario : Factor w/ 4 levels "0","1","2","3": 2 3 1 2 2 1 1 3 1 3 ...
## $ sexo : Factor w/ 2 levels "Femenino","Masculino": 2 1 2 2 2 2 2 2 2 2 ...
## $ estadocivil : Factor w/ 5 levels "Casado","divorciada/separada",..: 1 4 1 5 1 5 1 5 3 5 ...
## $ edad : int 63 27 49 45 53 35 53 35 61 28 ...
## $ tiempoempleo : Factor w/ 5 levels "<1",">=7","1<=X<4",..: 2 3 4 4 3 3 2 3 4 5 ...
## $ vivienda : Factor w/ 2 levels "Alquilada","Propio": 2 2 2 1 1 1 2 1 2 2 ...
## $ tiemporesidencia : Factor w/ 4 levels "1","2","3","4": 4 2 3 4 4 4 4 2 4 2 ...
## $ telefono : Factor w/ 2 levels "No","Si": 2 1 1 1 1 2 1 2 1 1 ...
## $ trabajo : Factor w/ 3 levels "Empleado","Obrero/Agricultor",..: 1 1 2 1 1 2 1 3 2 3 ...
## $ historialcredito : Factor w/ 4 levels "creditos existentes",..: 1 2 1 2 3 2 2 2 2 1 ...
## $ diasatraso : Factor w/ 3 levels "0","1","2": 1 1 1 1 2 1 1 1 1 1 ...
## $ proposito : Factor w/ 6 levels "Aumento capital",..: 4 4 3 1 2 1 1 2 4 2 ...
## $ montodecredito : int 1169 5951 2096 7882 4870 9055 2835 6948 3059 5234 ...
## $ plazo : int 9 18 12 24 24 24 24 36 12 30 ...
## $ interes : Factor w/ 11 levels "34,5","36","38",..: 1 1 1 3 7 3 8 7 6 7 ...
## $ cuentaahorro : Factor w/ 5 levels "<1",">=10","1<=X<5",..: 5 1 1 1 1 5 4 1 2 1 ...
## $ otras.propiedades : Factor w/ 5 levels "Automovil","Casa",..: 2 2 2 5 4 4 5 1 2 1 ...
## $ fiador : Factor w/ 3 levels "co-solicitante",..: 3 3 3 2 3 3 3 3 3 3 ...
## $ creditosexistentes: int 2 1 1 1 2 1 1 1 1 2 ...
## $ personastrabajan : int 1 1 2 2 2 2 1 1 1 1 ...
## $ resultado : Factor w/ 2 levels "Bueno","Malo": 1 2 1 1 2 1 1 1 1 2 ...
summary(datos)
## salario sexo estadocivil edad
## 0:69 Femenino : 61 Casado :42 Min. :22.00
## 1:51 Masculino:139 divorciada/separada:44 1st Qu.:30.00
## 2:69 divorciado/separado: 5 Median :35.50
## 3:11 Soltera :17 Mean :38.38
## Soltero :92 3rd Qu.:45.00
## Max. :66.00
##
## tiempoempleo vivienda tiemporesidencia telefono
## <1 :32 Alquilada: 56 1:31 No:109
## >=7 :57 Propio :144 2:78 Si: 91
## 1<=X<4 :73 3:50
## 4<=X<7 :29 4:41
## Desempleado: 9
##
##
## trabajo historialcredito
## Empleado :137 creditos existentes : 64
## Obrero/Agricultor : 29 creditos pagados :108
## Profesional/calificado: 34 creditos pagados con retraso: 18
## sin creditos : 10
##
##
##
## diasatraso proposito montodecredito plazo
## 0:182 Aumento capital :62 Min. : 600 Min. : 6.00
## 1: 13 Automovil :24 1st Qu.: 1380 1st Qu.:12.00
## 2: 5 Educacion :24 Median : 2233 Median :18.00
## Electrodomestico:72 Mean : 3368 Mean :17.95
## Otros : 3 3rd Qu.: 4630 3rd Qu.:24.00
## Reparaciones :15 Max. :15945 Max. :36.00
##
## interes cuentaahorro otras.propiedades
## 34,5 :77 <1 :114 Automovil :70
## 49,5 :40 >=10 : 12 Casa :48
## 42 :24 1<=X<5 : 23 Maquinaria : 9
## 36 :22 5<=X<10: 17 Ninguno :30
## 41,5 :20 No : 34 Terreno-Construccion:43
## 38 : 9
## (Other): 8
## fiador creditosexistentes personastrabajan resultado
## co-solicitante: 7 Min. :1.00 Min. :1.00 Bueno:143
## garante : 11 1st Qu.:1.00 1st Qu.:1.00 Malo : 57
## ninguno :182 Median :1.00 Median :1.00
## Mean :1.42 Mean :1.15
## 3rd Qu.:2.00 3rd Qu.:1.00
## Max. :4.00 Max. :2.00
##
set.seed(134) # genera numeros aleatorios
# training 70% y testing 30%
dividir <- sample(2, nrow(datos), replace = TRUE, prob = c(0.7, 0.3))
entrenamiento <- datos[dividir == 1, ]
prueba <- datos[dividir == 2, ]
modelo_arbol<-rpart(resultado~., data = entrenamiento)
prediccion_arbol <- predict(modelo_arbol, prueba[,-21], type = "class")
modelo_arbol
## n= 139
##
## node), split, n, loss, yval, (yprob)
## * denotes terminal node
##
## 1) root 139 41 Bueno (0.7050360 0.2949640)
## 2) historialcredito=creditos existentes,creditos pagados 119 28 Bueno (0.7647059 0.2352941)
## 4) montodecredito< 3891.5 85 13 Bueno (0.8470588 0.1529412)
## 8) edad>=43 27 0 Bueno (1.0000000 0.0000000) *
## 9) edad< 43 58 13 Bueno (0.7758621 0.2241379)
## 18) salario=0,2,3 43 5 Bueno (0.8837209 0.1162791) *
## 19) salario=1 15 7 Malo (0.4666667 0.5333333) *
## 5) montodecredito>=3891.5 34 15 Bueno (0.5588235 0.4411765)
## 10) trabajo=Empleado,Obrero/Agricultor 27 9 Bueno (0.6666667 0.3333333) *
## 11) trabajo=Profesional/calificado 7 1 Malo (0.1428571 0.8571429) *
## 3) historialcredito=creditos pagados con retraso,sin creditos 20 7 Malo (0.3500000 0.6500000)
## 6) otras.propiedades=Automovil,Terreno-Construccion 11 5 Bueno (0.5454545 0.4545455) *
## 7) otras.propiedades=Casa,Ninguno 9 1 Malo (0.1111111 0.8888889) *
MC<-table(prueba$resultado,prediccion_arbol)
MC
## prediccion_arbol
## Bueno Malo
## Bueno 38 7
## Malo 11 5
# calculamos el error
acierto<-sum(diag(MC))/sum(MC)
acierto
## [1] 0.704918
error <- 1-acierto
error
## [1] 0.295082
plot(modelo_arbol)
text(modelo_arbol)
prp(modelo_arbol, type = 2, extra = 6, split.font = 3,
box.col = c("pink","palegreen3")[modelo_arbol$frame$yval])