CASO: BANCO “PERUBANK”

“PERUBANK” Es una institución financiera que cuenta con miles de clientes en todo el territorio nacional, esta organización brinda un conjunto de servicios a personas o empresas. En uno de sus servicios sobre préstamos personales en su cartera de clientes se registra y se hace seguimiento de los prestamos ofrecidos a tales clientes. Para la institución es importante evaluar la morosidad de los prestamos brindados, por lo que registra los datos y el seguimiento que se realiza durante un periodo. Los datos de “Ejemplo_banco_missing.csv” corresponden a los registros de los clientes que solicitaron un préstamo y si este fue cancelado o terminó en mora, en este ejemplo las variables que se toman en cuenta son:
• Sexo: El género del cliente
• Fono: Si el cliente tiene teléfono personal
• Edad: Edad del cliente
• Hijos: Número de hijos del cliente
• Garante: Si el cliente cuenta con garante
• Aval: Si el cliente avala algún préstamo
• Meses: Meses que el cliente registra en la institución
• Renta: Renta del cliente
• Mora: Resultado del prestamos (si fue mora o no)

Con esta información se solicita realizar un analizar la morosidad de los créditos brindados

# Cargamos el conjunto de datos al área de trabajo
banco<-read.csv("https://raw.githubusercontent.com/VictorGuevaraP/Estadistica-R/master/Ejemplo_banco_missing.csv", 
                    sep = ";" , stringsAsFactors = TRUE)
# Mostramos las 6 primeras observaciones 
head(banco)
# Mostramos la estructura de los datos 
str(banco)
## 'data.frame':    100 obs. of  9 variables:
##  $ sexo   : Factor w/ 3 levels "","Femenino",..: 3 3 3 3 3 2 2 3 3 3 ...
##  $ fono   : Factor w/ 2 levels "No","Si": 2 2 1 1 2 2 2 1 2 1 ...
##  $ edad   : int  44 77 59 35 65 66 73 73 74 75 ...
##  $ hijos  : int  3 4 5 5 0 1 5 0 0 1 ...
##  $ garante: Factor w/ 2 levels "No","Si": 2 2 1 2 1 1 2 1 1 2 ...
##  $ aval   : Factor w/ 3 levels "","No","Si": 3 2 3 3 3 2 3 2 3 3 ...
##  $ meses  : int  63 62 59 58 56 54 53 53 53 53 ...
##  $ renta  : Factor w/ 3 levels "","Fija","Variable": 2 2 2 2 2 2 2 2 2 2 ...
##  $ mora   : Factor w/ 2 levels "No","Si": 1 2 2 2 1 1 2 1 1 2 ...

1. VERIFICACIÓN DE VALORES PERDIDOS

# Verificamos las columnas que tienen valores perdidos
which(colSums(is.na(banco))!=0)
##  edad hijos meses 
##     3     4     7
# Verificamos las filas que tienen valores perdidos
a<-which(rowSums(is.na(banco))!=0)
length(a)*100/dim(banco)[1]
## [1] 9
# Verificamos si hay patrón de los datos faltantes
library(VIM)
library(mice)
missingraf=aggr(banco,numbers=T)

# Mostramos el resumen de la gráfica
summary(missingraf)
## 
##  Missings per variable: 
##  Variable Count
##      sexo     0
##      fono     0
##      edad     5
##     hijos     2
##   garante     0
##      aval     0
##     meses     2
##     renta     0
##      mora     0
## 
##  Missings in combinations of variables: 
##       Combinations Count Percent
##  0:0:0:0:0:0:0:0:0    91      91
##  0:0:0:0:0:0:1:0:0     2       2
##  0:0:0:1:0:0:0:0:0     2       2
##  0:0:1:0:0:0:0:0:0     5       5
# Representación matricial missing (Esto se realiza con el fin de evaluar patrones de comportamiento)
matrixplot(banco)

# Otra forma de representación
library(mice)
md.pattern(banco,rotate.names = T)

##    sexo fono garante aval renta mora hijos meses edad  
## 91    1    1       1    1     1    1     1     1    1 0
## 5     1    1       1    1     1    1     1     1    0 1
## 2     1    1       1    1     1    1     1     0    1 1
## 2     1    1       1    1     1    1     0     1    1 1
##       0    0       0    0     0    0     2     2    5 9
# Visualización diferenciando tipo de datos
library(visdat)
vis_dat(banco)

vis_miss(banco)

Según los resultados no se observa patrón de comportamiento, por lo que puede considerar un caso de missing completamente aleatorio.

2. Corrección de missing

# a.    Eliminado todos los valores missing
banco_correccion1<- na.omit(banco)
which(colSums(is.na(banco_correccion1))!=0)
## named integer(0)
# Verificamos las dimensiones (comparemos la perdida de información)
dim(banco_correccion1)
## [1] 91  9
# b.    Aplicando técnicas de imputación
# Imputación por medidas de tendencia central
library(DMwR2)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
## 
## Attaching package: 'DMwR2'
## The following object is masked from 'package:VIM':
## 
##     kNN
banco_correccion2<-centralImputation(banco) #DMwR, mediana (númerico), moda(no númerico)
which(colSums(is.na(banco_correccion2))!=0)
## named integer(0)
# Verificamos las dimensiones
dim(banco_correccion2)
## [1] 100   9
# Imputación por medidas de tendencia central utilizando la mediana
library(VIM)
banco_correccion3<-initialise(banco,method="median") #media (continuos) mediana (discretos), moda(no númerico)
#Verificamos las dimensiones
dim(banco_correccion3)
## [1] 100   9
# Utilizando K-Vecinos más cercanos
banco_correccion4<-knnImputation(banco, k=10)
dim(banco_correccion4)
## [1] 100   9