Prediccion Mineria Datos

Author

Jaime Llanos Bardales

Predicción para Aprobación de Prestámos

Un banco requiere predecir si un cliente obtendrá la aprobación de un prestámo en base a una data histórica.

Data

Base de datos de 3 mil clientes detalla edad, el ingreso, monto préstamo, el historial de crédito y estado del crédito.

Installar Paquetes Necesarios:

install.packages(tidyverse”), # Manipulación y visualización

“caret”, # Modelado y machine learning

“readr”, # Lectura de datos

“ggplot2”, # Visualización

“corrplot”, # Correlaciones

“rpart”, # Árboles de decisión “rpart.plot”, # Graficar árboles

“cluster”, # Clustering

“factoextra”)) # Visualización de clustering

Cargar paquetes

library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.2     ✔ tibble    3.2.1
✔ lubridate 1.9.4     ✔ tidyr     1.3.1
✔ purrr     1.0.4     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(caret)
Cargando paquete requerido: lattice

Adjuntando el paquete: 'caret'

The following object is masked from 'package:purrr':

    lift
library(rpart)
library(rpart.plot)

Instalar paquete para leer archivos Excel

install.packages(“readxl”)

library(readxl)

Acceder a la Carpeta donde esta el archivo de excel

setwd("~/RStudio")

setwd(“X:/RStudio”)

Leer Archivo Excel (Cargar el dataset)

datos<-read_excel("prestamos.xlsx")

Ver la estructura de los datos

glimpse(datos)
Rows: 3,000
Columns: 5
$ edad              <dbl> 20, 45, 37, 41, 43, 38, 21, 31, 31, 30, 40, 39, 25, …
$ ingreso           <dbl> 4708, 9763, 3635, 4885, 9177, 4984, 9466, 9533, 3060…
$ monto_prestamo    <dbl> 41111, 60061, 50944, 26870, 66348, 43894, 29050, 268…
$ historial_credito <chr> "Bueno", "Bueno", "Bueno", "Malo", "Bueno", "Malo", …
$ aprobado          <chr> "No", "Si", "Si", "Si", "No", "Si", "Si", "Si", "Si"…

Análisis Exploratorio

Estadisticos basicos

summary(datos)
      edad         ingreso      monto_prestamo  historial_credito 
 Min.   :20.0   Min.   : 2504   Min.   :10039   Length:3000       
 1st Qu.:26.0   1st Qu.: 4347   1st Qu.:24845   Class :character  
 Median :33.0   Median : 6190   Median :39437   Mode  :character  
 Mean   :32.7   Mean   : 6200   Mean   :39999                     
 3rd Qu.:39.0   3rd Qu.: 8004   3rd Qu.:55711                     
 Max.   :45.0   Max.   :10000   Max.   :69997                     
   aprobado        
 Length:3000       
 Class :character  
 Mode  :character  
                   
                   
                   

Grafica de la distribucion de las variables Historial Credito y Estado

# Distribución por variable categórica
ggplot(datos, aes(x = historial_credito, fill = aprobado)) +
  geom_bar(position = "fill") +
  labs(title = "Relación entre historial y aprobación")

Correlacion

library(corrplot)
corrplot 0.95 loaded
corrplot(cor(datos %>% select(edad, ingreso, monto_prestamo)), 
         method = "circle")

Preparación de Datos

Convertir a factores

datos$historial_credito <- as.factor(datos$historial_credito)
datos$aprobado<-as.factor(datos$aprobado)

Dividir datos para entrenamiento y prueba

set.seed(123)
trainIndex <- createDataPartition(datos$aprobado, p = 0.7, list = FALSE)
trainData <- datos[trainIndex, ]
testData <- datos[-trainIndex, ]

Modelado con Arbol de Decision

modelo_arbol<-rpart(aprobado ~ ., data = trainData, method = "class")
rpart.plot(modelo_arbol)

Evaluacion del modelo

predicciones <- predict(modelo_arbol, testData, type = "class")
confusionMatrix(predicciones, testData$aprobado)
Confusion Matrix and Statistics

          Reference
Prediction  No  Si
        No 226 217
        Si 231 225
                                          
               Accuracy : 0.5017          
                 95% CI : (0.4685, 0.5349)
    No Information Rate : 0.5083          
    P-Value [Acc > NIR] : 0.6678          
                                          
                  Kappa : 0.0036          
                                          
 Mcnemar's Test P-Value : 0.5391          
                                          
            Sensitivity : 0.4945          
            Specificity : 0.5090          
         Pos Pred Value : 0.5102          
         Neg Pred Value : 0.4934          
             Prevalence : 0.5083          
         Detection Rate : 0.2514          
   Detection Prevalence : 0.4928          
      Balanced Accuracy : 0.5018          
                                          
       'Positive' Class : No              
                                          

Interpretación

Matriz de confusión: muestra aciertos y errores del modelo.

Precisión (Accuracy): proporción de casos correctamente clasificados.

Árbol de decisión: fácil de interpretar, muestra reglas de clasificación.

En este ejemplo, si el historial_credito es “Bueno” y el ingreso es alto, la probabilidad de aprobación aumenta.