“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
#cargar conjunto de datos
banco<-read.csv("https://raw.githubusercontent.com/VictorGuevaraP/Estadistica-R/master/Ejemplo_banco_missing.csv",
sep = ";" , stringsAsFactors = TRUE)
#Mostrar
head(banco)
# Verificar las columnas con missing
which(colSums(is.na(banco))!=0)
## edad hijos meses
## 3 4 7
#Realizar el analisis utilizando librerias
library(VIM)
library(mice)
resumen_missing <- aggr(banco, numbers=T)
summary(resumen_missing)
##
## 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
para determinar mejor lo patrones de comportamiento de missing se puede utilizar la siguiente función
#con libreria VIM
library(VIM)
matrixplot(banco)
otra reepresentacion
#con libreria mice
library(mice)
md.pattern(banco, rotate.names = TRUE)
## 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
LA libreria vistdat permite visualizar missing pero los ordena por tipo de pruebas
library(visdat)
vis_dat(banco)
para obtener columnas con %
vis_miss(banco)
#Coreccion de missing 2.1 Eliminar filas o columnas con missing(es recomendable optar por eliminar columnas si es el porcetaje de missing por arriba de 15% < para algunos expoertos el 30%>) solo para ejemplo se tiene se va a eliminar filas :
banco_corregido1<-na.omit(banco)
str(banco_corregido1)
## 'data.frame': 91 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 ...
## - attr(*, "na.action")= 'omit' Named int [1:9] 20 37 42 43 58 62 84 87 97
## ..- attr(*, "names")= chr [1:9] "20" "37" "42" "43" ...
# Verificar las columnas con missing
which(colSums(is.na(banco_corregido1))!=0)
## named integer(0)
#Aplicando tecnicas de importacion imputacion por medidas de tendencia entral
library(DMwR2)
banco_corregido2<-centralImputation(banco)
str(banco_corregido2)
## '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 : num 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 : num 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 ...
# Verificar las columnas con missing
which(colSums(is.na(banco_corregido2))!=0)
## named integer(0)
Utilizando otra libreria para imputar datos
library(VIM)
banco_corregido3<-initialise(banco, method ="median")
str(banco_corregido3)
## '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 : num 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 : num 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 ...
# Verificar las columnas con missing
which(colSums(is.na(banco_corregido3))!=0)
## named integer(0)
Imputacion usando vecinos mas cercanos
library(DMwR2)
banco_corregido4<-knnImputation(banco, k=5)
str(banco_corregido4)
## '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 : num 44 77 59 35 65 66 73 73 74 75 ...
## $ hijos : num 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 : num 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 ...
# Verificar las columnas con missing
which(colSums(is.na(banco_corregido4))!=0)
## named integer(0)