Puno - Perú
2018-08-11
El otorgamiento de crédito es una de las principales operaciones de las Entidades Financieras, representa no sólo la fuente principal de ingresos, también puede representar la fuente de múltiples y significativos problemas.
Si existe créditos en retraso o de no pago estos son los causantes de insolvencia y descapitalización atentando contra la solidez y sostenimiento de la institución en el largo plazo.
¿De qué manera se puede estimar y validar los algoritmos de aprendizaje automático para predecir la morosidad en el otorgamiento de crédito y así conocer su nivel de certeza?
¿Cuál será el mejor método para comparar los algoritmos de aprendizaje automático y de este modo obtener el mejor de ellos para la predicción de la morosidad en el otorgamiento de crédito en las instituciones financieras?
¿El diseño adecuado de un sistema web permitirá la predicción de la morosidad en el otorgamiento de crédito en las instituciones financieras?
Estimar y validar los algoritmos de aprendizaje automático para predecir la morosidad en el otorgamiento de crédito en las instituciones financieras.
Comparar los algoritmos de aprendizaje automático y obtener el mejor algoritmo para la predicción de la morosidad en el otorgamiento de crédito en las instituciones financieras.
Implementar con el mejor algoritmo de aprendizaje automático un sistema web de predicción de la morosidad en el otorgamiento de crédito en las instituciones financieras.
Los algoritmos de aprendizaje automático proporcionan resultados eficientes en la predicción de la morosidad crediticia, todos con un grado de certeza superior al 70%.
El uso de validación cruzada permite comparar el desempeño conjunto de los algoritmos y por consiguiente obtener el mejor para predecir la morosidad en el otorgamiento de crédito.
El uso del mejor algoritmo de aprendizaje automático facilita la implementación del sistema web de predicción de morosidad en el otorgamiento de crédito.
El Crédito es la operacion financiera donde una entidad le concede a otra una cantidad de dinero en una cuenta a su disposicion, comprometiendose a devolver todo el dinero tomado, pagando ademas un interés por el uso de esa cantidad.
Minería Datos: Proceso de descubrir información útil a partir del análisis de grandes volúmenes de datos cuyo objetivo es predecir tendencias o comportamientos y obtener modelos que previamente eran desconocidos.
Aprendizaje Automático: Construcción de programas que utilizando la experiencia sean capaces de mejorar automáticamente su rendimiento (Aprendizaje supervisado y no supervisado
).
library(RODBC); library(DT)
canal<-odbcConnect("H-MYSQL",uid = "root")
datos<-sqlQuery(canal,"SELECT *FROM creditomodelo")
close(canal)
set.seed(134) # 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, ]
library(RODBC); library(rpart)
canal<-odbcConnect("H-MYSQL",uid = "root")
datos<-sqlQuery(canal,"SELECT *FROM creditomodelo")
datos<-datos[,-1]; datos$salario<-as.factor(datos$salario); datos$tiemporesidencia<-as.factor(datos$tiemporesidencia)
datos$diasatraso<-as.factor(datos$diasatraso); close(canal)
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,
control = rpart.control(minsplit = 60,
minbucket = 0.66,cp = 0.01,maxdepth = 30))
prediccion_arbolROC <- predict(modelo_arbol, prueba, type = "prob") # se usa para hallar plotROC
prediccion_arbol <- predict(modelo_arbol, prueba[,-20], type = "class") # se usa para hallar MC
MC <- table(prueba$resultado,prediccion_arbol);acierto <- sum(diag(MC))/sum(MC)
error <- 1-acierto; score_arbol <- prediccion_arbolROC[,2]
clase_arbol <- prueba$resultado
library(RODBC); library(randomForest)
canal<-odbcConnect("H-MYSQL",uid = "root")
datos<-sqlQuery(canal,"SELECT *FROM creditomodelo")
datos<-datos[,-1]; datos$salario<-as.factor(datos$salario)
datos$tiemporesidencia<-as.factor(datos$tiemporesidencia)
datos$diasatraso<-as.factor(datos$diasatraso); close(canal)
set.seed(134) # training 80% y testing 20%
dividir <- sample(2, nrow(datos), replace = TRUE, prob = c(0.8, 0.2))
entrenamiento <- datos[dividir == 1, ]; prueba <- datos[dividir == 2, ]
modelo_bosque<-randomForest(resultado~.,data = entrenamiento,importance=TRUE, ntree = 500)
prediccion_bosque <- predict(modelo_bosque, prueba[,-20], type = "class") # para hallar MC
prediccion_bosqueROC <- predict(modelo_bosque, prueba[,-20], type = "prob") # para hallar ROC
MC<-table(prueba$resultado,prediccion_bosque); acierto<-sum(diag(MC))/sum(MC)
error <- 1-acierto; score <- prediccion_bosqueROC[,2] ; clase <- prueba$resultado
library(RODBC); library(nnet)
canal<-odbcConnect("H-MYSQL",uid = "root")
datos<-sqlQuery(canal,"SELECT *FROM creditomodelo"); datos<-datos[,-1]
datos$salario<-as.factor(datos$salario)
datos$tiemporesidencia<-as.factor(datos$tiemporesidencia)
datos$diasatraso<-as.factor(datos$diasatraso); close(canal)
set.seed(134) # training 80% y testing 20%
dividir <- sample(2, nrow(datos), replace = TRUE, prob = c(0.8, 0.2))
entrenamiento <- datos[dividir == 1, ] ; prueba <- datos[dividir == 2, ]
modelo_red <- nnet(resultado~.,data = entrenamiento, MaxNWts = 16000,
size = 300, rang = 0.1, decay = 5e-4, maxit = 400,
trace = FALSE)
prediccion_red <- predict(modelo_red, prueba[,-20], type = "class") # para MC
prediccion_redROC <- predict(modelo_red, prueba[,-20], type = "raw") # para ROC
MC<-table(prueba$resultado,prediccion_red); acierto<-sum(diag(MC))/sum(MC)
error <- 1-acierto; score_red <- prediccion_redROC[,1]
clase_red <- prueba$resultado
library(RODBC); library(e1071)
canal<-odbcConnect("H-MYSQL",uid = "root")
datos<-sqlQuery(canal,"SELECT *FROM creditomodelo"); datos<-datos[,-1]
datos$salario<-as.factor(datos$salario); datos$tiemporesidencia<-as.factor(datos$tiemporesidencia)
datos$diasatraso<-as.factor(datos$diasatraso); close(canal)
set.seed(134) # training 80% y testing 20%
dividir <- sample(2, nrow(datos), replace = TRUE, prob = c(0.8, 0.2))
entrenamiento <- datos[dividir == 1, ] ; prueba <- datos[dividir == 2, ]
modelo_svmPol <- svm(resultado~., data = entrenamiento,kernel = "polynomial", probability = TRUE)
modelo_svmSig <- svm(resultado~., data = entrenamiento,kernel = "sigmoid", probability = TRUE)
modelo_svmRad <- svm(resultado~., data = entrenamiento,kernel = "radial", probability = TRUE)
modelo_svmLin <- svm(resultado~., data = entrenamiento,kernel = "linear", probability = TRUE)
prediccion_svmPol <- predict(modelo_svmPol, prueba[,-20], probability = TRUE)
prediccion_svmSig <- predict(modelo_svmSig, prueba[,-20], probability = TRUE)
prediccion_svmRad <- predict(modelo_svmRad, prueba[,-20], probability = TRUE)
prediccion_svmLin <- predict(modelo_svmLin, prueba[,-20], probability = TRUE)
MCPol<-table(prueba$resultado,prediccion_svmPol); MCSig<-table(prueba$resultado,prediccion_svmSig)
MCRad<-table(prueba$resultado,prediccion_svmRad); MCLin<-table(prueba$resultado,prediccion_svmLin)
aciertoPol<-sum(diag(MCPol))/sum(MCPol); aciertoSig<-sum(diag(MCSig))/sum(MCSig)
aciertoRad<-sum(diag(MCRad))/sum(MCRad); aciertoLin<-sum(diag(MCLin))/sum(MCLin)
errorPol <- 1-aciertoPol; errorSig <- 1-aciertoSig
errorRad <- 1 - aciertoRad; errorLin <- 1- aciertoLin
score_svmPol <- attributes(prediccion_svmPol)$probabilities[,2]; clase_svmPol <- prueba$resultado
score_svmSig <- attributes(prediccion_svmSig)$probabilities[,2]; clase_svmSig <- prueba$resultado
score_svmRad <- attributes(prediccion_svmRad)$probabilities[,2]; clase_svmRad <- prueba$resultado
score_svmLin <- attributes(prediccion_svmLin)$probabilities[,2]; clase_svmLin <- prueba$resultado