IMPUTACIÓN DE DATOS

Para el siguiente trabajo se realizar un analisis de la base de datos para una institucion financiera con respecto a las características de sus clientes. Se proceder a inspeccionar si dicha base cuenta con datos faltantes, y si es de serlo, se los imputar por varios métodos que se presentan a continuación.

Estructura de los Datos

## 'data.frame':    2637 obs. of  19 variables:
##  $ X               : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Clientes        : Factor w/ 2 levels "Buenos","Malos": 1 1 1 1 1 1 1 1 1 1 ...
##  $ Calificacion    : Factor w/ 5 levels "A","B","C","D",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ Vivienda        : Factor w/ 4 levels "Alquilada","Familiar",..: 2 2 2 2 2 2 2 2 2 2 ...
##  $ Genero          : Factor w/ 2 levels "Femenino","Masculino": 2 2 2 2 2 2 2 2 2 2 ...
##  $ Region          : Factor w/ 3 levels "Amazonia","Costa",..: 2 2 2 2 2 2 2 2 2 2 ...
##  $ Dependiente     : Factor w/ 2 levels "No","Si": 1 1 1 1 1 1 1 1 1 1 ...
##  $ Estado.civil    : Factor w/ 5 levels "Casado","Divorciado",..: 3 3 3 3 3 3 3 3 3 3 ...
##  $ Edad            : int  35 19 27 27 21 21 26 42 29 21 ...
##  $ Cargas          : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Cuenta.ahorro   : Factor w/ 2 levels "No","Si": 2 2 2 1 2 1 2 1 2 1 ...
##  $ Cuenta.corriente: Factor w/ 2 levels "No","Si": 1 2 1 1 2 2 1 1 1 1 ...
##  $ Ingresos        : int  360 292 325 314 456 900 386 NA 300 900 ...
##  $ Dias.atraso     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Score           : int  917 874 NA NA NA 898 NA 880 NA 874 ...
##  $ Endeu           : num  43.8 54.2 33 51.5 42.4 ...
##  $ Numero.entidades: int  1 1 1 1 1 1 1 4 1 1 ...
##  $ Numero.TC       : int  2 2 2 2 2 2 2 2 2 2 ...
##  $ Antig           : int  0 0 0 0 0 0 0 0 0 0 ...

La base de datos cuenta con 19 variables, entre cuantitativas y cualitativas, que representan tanto las características socioeconómicas, como de riesgo para cada cliente de la institución financiera analizada.

Inspeccion Gráfica

vis_miss(Creditos)

En este primer gráfico se puede observar que se cuenta con el 98.2% de datos completos, y un 1.8% de datos faltantes que se distribuyen entre las variables Ingresos, Score, Endeudamiento Promedio y la Antiguedad de los clientes en sus trabajos.

gg_miss_var(Creditos)

Como se puede observar la variable Score, la cual refleja la puntuaciónn de los clientes con respecto al riesgo que incurre las instituciones financieras al otorgarle un crédito,información proporcionada por la central de Riesgo. Seguida del endeudamiento promedio con má¡s de 200 datos perdidos.

aggr(Creditos,numbers=T,sortVar=T)
## Warning in plot.aggr(res, ...): not enough horizontal space to display
## frequencies

## 
##  Variables sorted by number of missings: 
##          Variable      Count
##             Score 0.12665908
##             Endeu 0.10276830
##          Ingresos 0.09404626
##             Antig 0.01365188
##                 X 0.00000000
##          Clientes 0.00000000
##      Calificacion 0.00000000
##          Vivienda 0.00000000
##            Genero 0.00000000
##            Region 0.00000000
##       Dependiente 0.00000000
##      Estado.civil 0.00000000
##              Edad 0.00000000
##            Cargas 0.00000000
##     Cuenta.ahorro 0.00000000
##  Cuenta.corriente 0.00000000
##       Dias.atraso 0.00000000
##  Numero.entidades 0.00000000
##         Numero.TC 0.00000000

Finalmente en este último gráfico se ve como están distribuidos los datos faltantes, en la cual la variable Score representa más del 12% de dichos datos, así como en las variables antes mencionadas, mientras que para el resto de variables no existen datos fltantes.

Acontinuación se presentará con exactitud cuantos datos faltantes tiene cada una de las variables, así como cada una de las observaciones, para luego realizar la imputación de dichos datos.

Valores NAs

sum(is.na(Creditos))
## [1] 889

Valores NAs por Variables

miss_var_summary(Creditos)
## # A tibble: 19 x 3
##    variable         n_miss pct_miss
##    <chr>             <int>    <dbl>
##  1 Score               334    12.7 
##  2 Endeu               271    10.3 
##  3 Ingresos            248     9.40
##  4 Antig                36     1.37
##  5 X                     0     0   
##  6 Clientes              0     0   
##  7 Calificacion          0     0   
##  8 Vivienda              0     0   
##  9 Genero                0     0   
## 10 Region                0     0   
## 11 Dependiente           0     0   
## 12 Estado.civil          0     0   
## 13 Edad                  0     0   
## 14 Cargas                0     0   
## 15 Cuenta.ahorro         0     0   
## 16 Cuenta.corriente      0     0   
## 17 Dias.atraso           0     0   
## 18 Numero.entidades      0     0   
## 19 Numero.TC             0     0

Son 889 datos faltantes distribuidos entre las variables, Score con 334, Endeudamiento promedio con 271, Ingresos con 248, Antiguedad con 36 datos perdido, representando el 12.7%, 10.3%,9.40%, 1.37% respectivamente para cada una de las variables.

NAs por casos (filas)

miss_case_table(Creditos)
## # A tibble: 4 x 3
##   n_miss_in_case n_cases pct_cases
##            <int>   <int>     <dbl>
## 1              0    1899    72.0  
## 2              1     602    22.8  
## 3              2     121     4.59 
## 4              3      15     0.569

La siguiente tabla muestra el n?mero de datos faltantes por casos u observaciones. Existen 1899 casos(filas) en la cual no se encuentran datos perdidos, 602 casos en la que una variable de esos casos tiene datos faltantes, 121 casos con dos variables con dichos datos y finalmente 15 filas en las cuales existen en 3 variables datos faltantes.

NAs por clientes buenos y malos

Creditos %>% group_by(Clientes) %>% miss_var_table()
## # A tibble: 10 x 4
## # Groups:   Clientes [2]
##    Clientes n_miss_in_var n_vars pct_vars
##    <fct>            <int>  <int>    <dbl>
##  1 Buenos               0     14    77.8 
##  2 Buenos              10      1     5.56
##  3 Buenos              60      1     5.56
##  4 Buenos              98      1     5.56
##  5 Buenos             106      1     5.56
##  6 Malos                0     14    77.8 
##  7 Malos               26      1     5.56
##  8 Malos              142      1     5.56
##  9 Malos              173      1     5.56
## 10 Malos              274      1     5.56

Para las personas que estan determinados como buenos y malos clientes, exiten 14 variables en las cuales no existen datos perdidos, de igual manera y en 4 variables en las cuales se distribuyen los datos faltantes como por ejemplo para los clientes buenos existen 274 datos perdidos y para malos clientes 615.

Métodos de Imputación

Para la imputación de los datos faltantes se consideraron tres métodos los cuales son, mediante la media, regresión y árboles de clasificación. Se las realizar tanto para las variable Antiguedad como para Score, y una vez elegido el método a utilizar se realizará para todas las variables dosde existan datos perdidos.

Media

par(mfrow=c(1,2))
plot(density(Creditos$Antig,na.rm = T),col=2,main="Antiguedad")
lines(density(Data_Impu_Media$Antig),col=3)
plot(density(Creditos$Score,na.rm = T),col=2,main="Score")
lines(density(Data_Impu_Media$Score),col=3)

La línea roja representa la base sin incluir los datos faltantes, y la roja, el ajuste que se tiene una vez imputado por la media. Como se observa para la variable Score el ajuste no es tan bueno, debido a que este método subestima la varianza y altera las relaciones entre las variables, además se ven sesgadas casi cualquier estimaci?n que no sea la media.

Regresión

par(mfrow=c(1,2))
plot(density(Creditos$Antig,na.rm = T),col=2,main="Antiguedad")
lines(density(Data_Impu_Regresion$Antig),col=3)
plot(density(Creditos$Score,na.rm = T),col=2,main="Score")
lines(density(Data_Impu_Regresion$Score),col=3)

La imputación mediante regresión permite una mejor imputación en relación a la media sin embargo tambien tiene limitaciones, ya que la imputación de regresión fortalece artificialmente las relaciones en los datos, las correlaciones están sesgadas hacia arriba y la variabilidad está subestimada.

Árboles de clasificación

par(mfrow=c(1,2))
plot(density(Creditos$Antig,na.rm = T),col=2,main="Antiguedad")
lines(density(Data_Impu_Arboles$Antig),col=3)
plot(density(Creditos$Score,na.rm = T),col=2,main="Score")
lines(density(Data_Impu_Arboles$Score),col=3)

Finalmente este método se ajusta mejor a los datos ya que genera un conjunto de datos completo y se puede aplicar con confianza en los casos en el que estemos seguros de cuáles deberían ser los valores faltantes.

Comparación de Métodos de Imputación

summary(Data_Impu_Media )
##      Score           Antig       
##  Min.   :634.0   Min.   :  0.00  
##  1st Qu.:882.0   1st Qu.:  0.00  
##  Median :912.0   Median : 21.00  
##  Mean   :897.5   Mean   : 30.78  
##  3rd Qu.:945.0   3rd Qu.: 50.00  
##  Max.   :974.0   Max.   :126.00
summary(Data_Impu_Regresion)
##      Score           Antig       
##  Min.   :634.0   Min.   :  0.00  
##  1st Qu.:882.0   1st Qu.:  0.00  
##  Median :912.0   Median : 21.00  
##  Mean   :897.2   Mean   : 30.79  
##  3rd Qu.:945.0   3rd Qu.: 50.00  
##  Max.   :974.0   Max.   :126.00
summary(Data_Impu_Arboles)
##      Score           Antig       
##  Min.   :634.0   Min.   :  0.00  
##  1st Qu.:874.0   1st Qu.:  0.00  
##  Median :921.0   Median : 21.00  
##  Mean   :896.2   Mean   : 30.91  
##  3rd Qu.:948.0   3rd Qu.: 50.00  
##  Max.   :974.0   Max.   :126.00

Como se puede observar no existe una gran variacion en cuanto a las medidas descriptivas entre los métodos.

##      Media Desv.Est Varianza
## 1 30.78239 31.44579 988.8379
##      Media Desv.Est Varianza
## 1 30.78789 31.44932   989.06
##      Media Desv.Est Varianza
## 1 30.91013 31.74789 1007.929

La media es muy similar en todos los metodos sin embargo varían en la varianza y como obsevamos en las demás medidas descriptivas se podria utilizar el árbol de clasificacion, sin embargo por la media tambien se pueden aproximar ya que es uno de los métodos más utilizados en los estudios.

Selección del Método

Aplicación al resto de variables

Creditos1$X<-Creditos$X 
Base_Limpia<-merge(Creditos,Creditos1, by=("X"),all=F)
Base_Final<-Base_Limpia[,-c(13,15,16,19)]
sum(is.na(Base_Final))
## [1] 0

Como se puede observar la base final no cuenta con ningun dato faltante en ninguna de las variables.

Conclusiones

El análisis de datos faltantes es fundamental al momento de analizar los datos, de igual manera el método de imputación que se aplica, ya que de eso depende que tan sesgados están nuestros resultados.

Se puede utilizar en esta base los árboles de clasificación, sin embargo imputar por la medio igual sería un buen método.

Sería interesante realizar los análisis sin estos datos imputados y con dichos datos, para ver si realmente existen cambios o si varian los resultados y así poder tener un análisis más completo.