PAQUETES NECESARIOS

knitr::opts_chunk$set(
    echo = TRUE,
    fig.height = 10,
    fig.width = 15,
    message = FALSE,
    warning = FALSE,
    cache = TRUE
)
library(here)
## here() starts at /Users/wilberthgonzalezvargas/Desktop/Master en Ciencia de Datos/Trabajo_Final/Proyecto_Final_Wilberth_Gonzalez
library(readr)
library(tidyr)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(dummy)
## dummy 0.1.3
## dummyNews()
library(ggplot2)
library(ggforce)
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(FactoMineR)
library(cluster)  
library(fmsb)
library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
#library(devtools)
library(sf)
## Linking to GEOS 3.13.0, GDAL 3.8.5, PROJ 9.5.1; sf_use_s2() is TRUE
library(scales)
## 
## Attaching package: 'scales'
## The following object is masked from 'package:readr':
## 
##     col_factor
library(ggrepel)
library(visNetwork)
library(igraph)
## 
## Attaching package: 'igraph'
## The following objects are masked from 'package:dplyr':
## 
##     as_data_frame, groups, union
## The following object is masked from 'package:tidyr':
## 
##     crossing
## The following objects are masked from 'package:stats':
## 
##     decompose, spectrum
## The following object is masked from 'package:base':
## 
##     union
library(fastDummies)
library(stringr)
library(knitr)
library(umap)


set.seed(123)

FUNCIONES NECESARIAS

LETRAS MAYUSCULAS

to_upper <- function(x) toupper(chartr("áéíóúÁÉÍÓÚ", "aeiouAEIOU", x))

TRANSFORMACION A VARIABLES NUMERICAS

variables.num <- function (data) 
{
    if (is.null(data)) {
        return(NULL)
    }
    res <- base::subset(data, select = sapply(data, class) %in% 
        c("numeric", "integer"))
    return(res)
}

DATOS CARTERA

DATOS

Cartera_Credito = read.csv("CarteraCreditoDiciembre2022.DEL", sep = ";", dec = ".", header = T)

Cartera_Credito$NUMERO_OPERACION <- seq_len(nrow(Cartera_Credito))
Cartera_Credito$NOMBRE <- NULL

head(Cartera_Credito[, !names(Cartera_Credito) %in% c("CEDULA")])
##   NUMERO_OPERACION FECHA_FORMALIZACION FECHA_VENCIMIENTO        TIPO_SOCIO
## 1                1          2018-02-09        2026-09-04 PENSIONADO JUPEMA
## 2                2          2018-08-24        2029-01-04 PENSIONADO JUPEMA
## 3                3          2000-10-30        2024-10-01 PENSIONADO JUPEMA
## 4                4          2016-07-26        2023-02-04 PENSIONADO JUPEMA
## 5                5          2020-04-29        2032-09-04 PENSIONADO JUPEMA
## 6                6          2016-08-11        2023-03-04 PENSIONADO JUPEMA
##          DESCRIPCION_PRESTAMO SUB_TIPO_PRESTAMO DIAS_MOROSOS INTERES_ACTUAL
## 1                   CORRIENTE                 0            0          11.00
## 2        PERSONAL ALTERNATIVO                 0            0          14.85
## 3 TARJETA CREDITO CHIP-INTER.                 0            0          16.80
## 4                   CORRIENTE                 0            0          11.00
## 5     ESPECIAL EXTRAORDINARIO                 0            0          11.00
## 6                   CORRIENTE                 0            0          11.00
##   SALDO_PRESTAMO CATEGORIA_RIESGO PLAZO_OPERACION      SECTOR_ECONOMICO
## 1      750214.45               A1             102              PERSONAL
## 2     9288877.15               A1             124              PERSONAL
## 3         500.54               A1              84              PERSONAL
## 4      120167.75               A1              78     PERSONAL ESPECIAL
## 5    13402117.75               A1             148 CANCELACI\xd3N DEUDAS
## 6       77973.90               A1              78              PERSONAL
##   CUOTA_AUX TIPO_TASA MONTO_ESTIMACION          GARANTIA VALOR_GARANTIA
## 1     20421      FIJA          3780.87 POLIZA S.S.V.M.N.        1300000
## 2    193993  VARIABLE         46942.50    SEGURO CAUCION       12000000
## 3       900  VARIABLE             2.50          CONTRATO         902985
## 4     60909      FIJA           605.61 POLIZA S.S.V.M.N.        3200000
## 5    187227      FIJA         67542.95    SEGURO CAUCION       14885000
## 6     26457      FIJA           392.97 POLIZA S.S.V.M.N.        1390000
##   SALDO_PRODUCTOS SALARIO_LIQUIDO SALARIO_NOMINAL LUGAR_DEDUC_PRINCIPAL
## 1         5960.05        271058.9        487677.1               INTEGRA
## 2        99623.20        437719.7        704362.3               INTEGRA
## 3            0.00        373413.6        547520.0               INTEGRA
## 4          954.65        315291.4        512035.0               INTEGRA
## 5       106472.40        519070.3        991084.6               INTEGRA
## 6          619.45        174946.0       1004376.0               INTEGRA
##         SEX FECHA_NACIMIENTO ESTADO_CIVIL CONDICION_PLAZA OFICINA_TRAMITE
## 1  FEMENINO       1920-07-20        VIUDO       PROPIEDAD OFICINA CENTRAL
## 2  FEMENINO       1923-01-16        VIUDO       PROPIEDAD OFICINA CENTRAL
## 3  FEMENINO       1924-03-11       CASADO       PROPIEDAD OFICINA CENTRAL
## 4 MASCULINO       1925-04-28       CASADO       PROPIEDAD OFICINA CENTRAL
## 5  FEMENINO       1926-10-04        VIUDO       PROPIEDAD OFICINA CENTRAL
## 6  FEMENINO       1926-12-26        VIUDO       PROPIEDAD OFICINA CENTRAL
##   ESTIMA_GENER_DIREC ESTIMA_GENER_CONTI ESTIMA_ESPEC_DI_PC ESTIMA_ESPEC_DI_PD
## 1            3780.87                  0                  0                  0
## 2           46942.50                  0                  0                  0
## 3               2.50                  0                  0                  0
## 4             605.61                  0                  0                  0
## 5           67542.95                  0                  0                  0
## 6             392.97                  0                  0                  0
##   ESTIMA_ESPEC_CO_PC ESTIMA_ESPEC_CO_PD ESTIMA_CSD ESTIMA_NO_GENERADORA
## 1                  0                  0    7561.75                    0
## 2                  0                  0   93885.00                    0
## 3                  0                  0       0.00                    0
## 4                  0                  0       0.00                    0
## 5                  0                  0       0.00                    0
## 6                  0                  0       0.00                    0
##   COMPROMISO_SAL IND_COMP_PAGO CAPACIDAD_PAGO FECHA_CAMBIO_TASA
## 1           0.44             1              1        2018-04-01
## 2           0.37             1              1        2022-11-01
## 3           0.31             1              1                  
## 4           0.38             1              1        2016-08-01
## 5           0.47             1              1        2021-11-01
## 6           0.82             1              1        2016-09-01
##   FRECUENCIA_INTERES_VARIABLE PARA_INT_VAR COMPONENTE_VARIABLE_INTERES
## 1                           0            0                         1.0
## 2                           4            4                         8.0
## 3                           4            4                        16.8
## 4                           0            0                         1.0
## 5                           0            0                        57.0
## 6                           0            0                         1.0
##   COMPONENTE_FIJO_INTERES LIMITE_INFERIOR_TASA LIMITE_SUPERIOR_TASA
## 1                       0                 11.0                 11.0
## 2                       9                 14.0                 23.0
## 3                       0                 16.8                 26.8
## 4                       0                 11.0                 11.0
## 5                       0                  0.0                  0.0
## 6                       0                 11.0                 11.0
##   SALARIO_COMPROMETIDO SALARIO_NOM_AJUSTADO PORCENTAJE_COMPROMETIDO
## 1               123809             367765.7                   33.66
## 2               401286             635799.7                   63.11
## 3                26500             411613.6                    6.00
## 4                    0                  0.0                    0.00
## 5               242232             810331.4                   29.89
## 6                84566             259797.0                   32.00
##   ESTADO_OPERACION ESTADO_OPERACION_CREDITICIA OPER_CON_PRORROGA
## 1        AL D\xcdA                           1                 N
## 2        AL D\xcdA                           1                 N
## 3        AL D\xcdA                           1                 N
## 4        AL D\xcdA                           1                 N
## 5        AL D\xcdA                           1                 N
## 6        AL D\xcdA                           1                 N
##   LUGAR_DEDUC_PREST MONTO_DESEMBOLSAR_615 MONTO_DESEMBOLSAR_619
## 1           INTEGRA                   0.0                     0
## 2           INTEGRA                   0.0                     0
## 3           INTEGRA              902484.5                     0
## 4           INTEGRA                   0.0                     0
## 5           INTEGRA                   0.0                     0
## 6           INTEGRA                   0.0                     0

EXPLORACION Y VERIFICACION

#DIMENSIÓN DE LA TABLA ORIGINAL
 
dim(Cartera_Credito) 
## [1] 214700     55
#REALIZO UN STR PARA DETERMINAR EL FORMATO DE LAS VARIABLES ORIGINALES
 
str(Cartera_Credito[, !names(Cartera_Credito) %in% c("CEDULA")]) 
## 'data.frame':    214700 obs. of  53 variables:
##  $ NUMERO_OPERACION           : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ FECHA_FORMALIZACION        : chr  "2018-02-09" "2018-08-24" "2000-10-30" "2016-07-26" ...
##  $ FECHA_VENCIMIENTO          : chr  "2026-09-04" "2029-01-04" "2024-10-01" "2023-02-04" ...
##  $ TIPO_SOCIO                 : chr  "PENSIONADO JUPEMA" "PENSIONADO JUPEMA" "PENSIONADO JUPEMA" "PENSIONADO JUPEMA" ...
##  $ DESCRIPCION_PRESTAMO       : chr  "CORRIENTE" "PERSONAL ALTERNATIVO" "TARJETA CREDITO CHIP-INTER." "CORRIENTE" ...
##  $ SUB_TIPO_PRESTAMO          : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ DIAS_MOROSOS               : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ INTERES_ACTUAL             : num  11 14.8 16.8 11 11 ...
##  $ SALDO_PRESTAMO             : num  750214 9288877 501 120168 13402118 ...
##  $ CATEGORIA_RIESGO           : chr  "A1" "A1" "A1" "A1" ...
##  $ PLAZO_OPERACION            : int  102 124 84 78 148 78 101 99 123 63 ...
##  $ SECTOR_ECONOMICO           : chr  "PERSONAL" "PERSONAL" "PERSONAL" "PERSONAL ESPECIAL" ...
##  $ CUOTA_AUX                  : num  20421 193993 900 60909 187227 ...
##  $ TIPO_TASA                  : chr  "FIJA" "VARIABLE" "VARIABLE" "FIJA" ...
##  $ MONTO_ESTIMACION           : num  3780.9 46942.5 2.5 605.6 67542.9 ...
##  $ GARANTIA                   : chr  "POLIZA S.S.V.M.N." "SEGURO CAUCION" "CONTRATO" "POLIZA S.S.V.M.N." ...
##  $ VALOR_GARANTIA             : num  1300000 12000000 902985 3200000 14885000 ...
##  $ SALDO_PRODUCTOS            : num  5960 99623 0 955 106472 ...
##  $ SALARIO_LIQUIDO            : num  271059 437720 373414 315291 519070 ...
##  $ SALARIO_NOMINAL            : num  487677 704362 547520 512035 991085 ...
##  $ LUGAR_DEDUC_PRINCIPAL      : chr  "INTEGRA" "INTEGRA" "INTEGRA" "INTEGRA" ...
##  $ SEX                        : chr  "FEMENINO" "FEMENINO" "FEMENINO" "MASCULINO" ...
##  $ FECHA_NACIMIENTO           : chr  "1920-07-20" "1923-01-16" "1924-03-11" "1925-04-28" ...
##  $ ESTADO_CIVIL               : chr  "VIUDO" "VIUDO" "CASADO" "CASADO" ...
##  $ CONDICION_PLAZA            : chr  "PROPIEDAD" "PROPIEDAD" "PROPIEDAD" "PROPIEDAD" ...
##  $ OFICINA_TRAMITE            : chr  "OFICINA CENTRAL" "OFICINA CENTRAL" "OFICINA CENTRAL" "OFICINA CENTRAL" ...
##  $ ESTIMA_GENER_DIREC         : num  3780.9 46942.5 2.5 605.6 67542.9 ...
##  $ ESTIMA_GENER_CONTI         : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ ESTIMA_ESPEC_DI_PC         : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ ESTIMA_ESPEC_DI_PD         : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ ESTIMA_ESPEC_CO_PC         : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ ESTIMA_ESPEC_CO_PD         : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ ESTIMA_CSD                 : num  7562 93885 0 0 0 ...
##  $ ESTIMA_NO_GENERADORA       : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ COMPROMISO_SAL             : num  0.44 0.37 0.31 0.38 0.47 0.82 0.19 0.69 0.69 0.69 ...
##  $ IND_COMP_PAGO              : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ CAPACIDAD_PAGO             : num  1 1 1 1 1 1 1 1 1 1 ...
##  $ FECHA_CAMBIO_TASA          : chr  "2018-04-01" "2022-11-01" "" "2016-08-01" ...
##  $ FRECUENCIA_INTERES_VARIABLE: num  0 4 4 0 0 0 0 0 4 0 ...
##  $ PARA_INT_VAR               : num  0 4 4 0 0 0 0 0 4 0 ...
##  $ COMPONENTE_VARIABLE_INTERES: num  1 8 16.8 1 57 1 1 57 8 10 ...
##  $ COMPONENTE_FIJO_INTERES    : num  0 9 0 0 0 0 0 0 9 0 ...
##  $ LIMITE_INFERIOR_TASA       : num  11 14 16.8 11 0 11 11 0 14 0 ...
##  $ LIMITE_SUPERIOR_TASA       : num  11 23 26.8 11 0 11 11 0 23 0 ...
##  $ SALARIO_COMPROMETIDO       : num  123809 401286 26500 0 242232 ...
##  $ SALARIO_NOM_AJUSTADO       : num  367766 635800 411614 0 810331 ...
##  $ PORCENTAJE_COMPROMETIDO    : num  33.7 63.1 6 0 29.9 ...
##  $ ESTADO_OPERACION           : chr  "AL D\xcdA" "AL D\xcdA" "AL D\xcdA" "AL D\xcdA" ...
##  $ ESTADO_OPERACION_CREDITICIA: int  1 1 1 1 1 1 1 1 1 1 ...
##  $ OPER_CON_PRORROGA          : chr  "N" "N" "N" "N" ...
##  $ LUGAR_DEDUC_PREST          : chr  "INTEGRA" "INTEGRA" "INTEGRA" "INTEGRA" ...
##  $ MONTO_DESEMBOLSAR_615      : num  0 0 902484 0 0 ...
##  $ MONTO_DESEMBOLSAR_619      : num  0 0 0 0 0 0 0 0 0 0 ...
#ESTADISTICAS BASICAS DE LA TABLA ORIGINAL
 
summary(Cartera_Credito[, !names(Cartera_Credito) %in% c("CEDULA")]) 
##  NUMERO_OPERACION FECHA_FORMALIZACION FECHA_VENCIMIENTO   TIPO_SOCIO       
##  Min.   :     1   Length:214700       Length:214700      Length:214700     
##  1st Qu.: 53676   Class :character    Class :character   Class :character  
##  Median :107350   Mode  :character    Mode  :character   Mode  :character  
##  Mean   :107350                                                            
##  3rd Qu.:161025                                                            
##  Max.   :214700                                                            
##  DESCRIPCION_PRESTAMO SUB_TIPO_PRESTAMO  DIAS_MOROSOS     INTERES_ACTUAL 
##  Length:214700        Min.   :0         Min.   :   0.00   Min.   : 5.00  
##  Class :character     1st Qu.:0         1st Qu.:   0.00   1st Qu.:10.00  
##  Mode  :character     Median :0         Median :   0.00   Median :11.00  
##                       Mean   :0         Mean   :   4.79   Mean   :11.54  
##                       3rd Qu.:0         3rd Qu.:   0.00   3rd Qu.:11.15  
##                       Max.   :0         Max.   :3497.00   Max.   :18.00  
##  SALDO_PRESTAMO     CATEGORIA_RIESGO   PLAZO_OPERACION SECTOR_ECONOMICO  
##  Min.   :       0   Length:214700      Min.   :  2.0   Length:214700     
##  1st Qu.:  812234   Class :character   1st Qu.: 84.0   Class :character  
##  Median : 2565817   Mode  :character   Median :100.0   Mode  :character  
##  Mean   : 5182545                      Mean   :108.8                     
##  3rd Qu.: 6697152                      3rd Qu.:123.0                     
##  Max.   :93469728                      Max.   :367.0                     
##    CUOTA_AUX        TIPO_TASA         MONTO_ESTIMACION     GARANTIA        
##  Min.   :      0   Length:214700      Min.   :       0   Length:214700     
##  1st Qu.:  21918   Class :character   1st Qu.:    5243   Class :character  
##  Median :  56305   Mode  :character   Median :   18716   Mode  :character  
##  Mean   :  87202                      Mean   :  148778                     
##  3rd Qu.: 129994                      3rd Qu.:   52585                     
##  Max.   :1694104                      Max.   :44737180                     
##  VALOR_GARANTIA     SALDO_PRODUCTOS   SALARIO_LIQUIDO   SALARIO_NOMINAL   
##  Min.   :    5000   Min.   :      0   Min.   :      0   Min.   :       0  
##  1st Qu.: 1225000   1st Qu.:   4741   1st Qu.: 209218   1st Qu.:  769446  
##  Median : 3600000   Median :  20132   Median : 352827   Median : 1139205  
##  Mean   : 6577111   Mean   :  47322   Mean   : 384565   Mean   : 1105471  
##  3rd Qu.: 9200000   3rd Qu.:  58555   3rd Qu.: 526116   3rd Qu.: 1400858  
##  Max.   :94316000   Max.   :3559562   Max.   :5663526   Max.   :12790003  
##  LUGAR_DEDUC_PRINCIPAL     SEX            FECHA_NACIMIENTO   ESTADO_CIVIL      
##  Length:214700         Length:214700      Length:214700      Length:214700     
##  Class :character      Class :character   Class :character   Class :character  
##  Mode  :character      Mode  :character   Mode  :character   Mode  :character  
##                                                                                
##                                                                                
##                                                                                
##  CONDICION_PLAZA    OFICINA_TRAMITE    ESTIMA_GENER_DIREC ESTIMA_GENER_CONTI 
##  Length:214700      Length:214700      Min.   :     0     Min.   :     0.00  
##  Class :character   Class :character   1st Qu.:  1300     1st Qu.:     0.00  
##  Mode  :character   Mode  :character   Median :  8318     Median :     0.00  
##                                        Mean   : 21633     Mean   :    13.95  
##                                        3rd Qu.: 28311     3rd Qu.:     0.00  
##                                        Max.   :470386     Max.   :142908.25  
##  ESTIMA_ESPEC_DI_PC ESTIMA_ESPEC_DI_PD ESTIMA_ESPEC_CO_PC ESTIMA_ESPEC_CO_PD
##  Min.   :     0.0   Min.   :       0   Min.   :   0.000   Min.   :0         
##  1st Qu.:     0.0   1st Qu.:       0   1st Qu.:   0.000   1st Qu.:0         
##  Median :     0.0   Median :       0   Median :   0.000   Median :0         
##  Mean   :   990.5   Mean   :  137879   Mean   :   0.027   Mean   :0         
##  3rd Qu.:     0.0   3rd Qu.:       0   3rd Qu.:   0.000   3rd Qu.:0         
##  Max.   :390058.0   Max.   :44737180   Max.   :5775.000   Max.   :0         
##    ESTIMA_CSD     ESTIMA_NO_GENERADORA COMPROMISO_SAL   IND_COMP_PAGO  
##  Min.   :     0   Min.   :0            Min.   :0.0000   Min.   :1.000  
##  1st Qu.:     0   1st Qu.:0            1st Qu.:0.4900   1st Qu.:1.000  
##  Median :     0   Median :0            Median :0.6600   Median :1.000  
##  Mean   : 30227   Mean   :0            Mean   :0.6341   Mean   :1.091  
##  3rd Qu.: 34046   3rd Qu.:0            3rd Qu.:0.7800   3rd Qu.:1.000  
##  Max.   :940773   Max.   :0            Max.   :1.0000   Max.   :3.000  
##  CAPACIDAD_PAGO  FECHA_CAMBIO_TASA  FRECUENCIA_INTERES_VARIABLE  PARA_INT_VAR  
##  Min.   :1.000   Length:214700      Min.   :0.000               Min.   :0.000  
##  1st Qu.:1.000   Class :character   1st Qu.:0.000               1st Qu.:0.000  
##  Median :1.000   Mode  :character   Median :0.000               Median :0.000  
##  Mean   :1.123                      Mean   :1.288               Mean   :1.184  
##  3rd Qu.:1.000                      3rd Qu.:4.000               3rd Qu.:4.000  
##  Max.   :4.000                      Max.   :9.000               Max.   :4.000  
##  COMPONENTE_VARIABLE_INTERES COMPONENTE_FIJO_INTERES LIMITE_INFERIOR_TASA
##  Min.   :  1.0               Min.   :0.00            Min.   : 0.000      
##  1st Qu.:  1.0               1st Qu.:0.00            1st Qu.: 0.000      
##  Median :  8.0               Median :0.00            Median :11.000      
##  Mean   : 25.6               Mean   :1.39            Mean   : 7.884      
##  3rd Qu.: 57.0               3rd Qu.:0.00            3rd Qu.:11.000      
##  Max.   :173.0               Max.   :9.00            Max.   :16.800      
##  LIMITE_SUPERIOR_TASA SALARIO_COMPROMETIDO SALARIO_NOM_AJUSTADO
##  Min.   : 0.00        Min.   :      0      Min.   :      0     
##  1st Qu.: 0.00        1st Qu.: 126122      1st Qu.: 416303     
##  Median :11.00        Median : 267644      Median : 648579     
##  Mean   :10.15        Mean   : 306650      Mean   : 647223     
##  3rd Qu.:14.00        3rd Qu.: 447315      3rd Qu.: 851393     
##  Max.   :26.80        Max.   :2743455      Max.   :5852026     
##  PORCENTAJE_COMPROMETIDO ESTADO_OPERACION   ESTADO_OPERACION_CREDITICIA
##  Min.   :       0        Length:214700      Min.   :1.000              
##  1st Qu.:      24        Class :character   1st Qu.:1.000              
##  Median :      48        Mode  :character   Median :1.000              
##  Mean   :    4484                           Mean   :1.082              
##  3rd Qu.:      71                           3rd Qu.:1.000              
##  Max.   :66528661                           Max.   :5.000              
##  OPER_CON_PRORROGA  LUGAR_DEDUC_PREST  MONTO_DESEMBOLSAR_615
##  Length:214700      Length:214700      Min.   :      0      
##  Class :character   Class :character   1st Qu.:      0      
##  Mode  :character   Mode  :character   Median :      0      
##                                        Mean   :  62348      
##                                        3rd Qu.:      0      
##                                        Max.   :9029850      
##  MONTO_DESEMBOLSAR_619
##  Min.   :       0     
##  1st Qu.:       0     
##  Median :       0     
##  Mean   :    2796     
##  3rd Qu.:       0     
##  Max.   :28581650

SELECCION DE VARIABLES

# SELECCION DE VARIABLES
 
Cartera_Credito_Final <- select(Cartera_Credito, CEDULA, NUMERO_OPERACION, TIPO_SOCIO, DESCRIPCION_PRESTAMO, DIAS_MOROSOS, INTERES_ACTUAL, SALDO_PRESTAMO, CATEGORIA_RIESGO, PLAZO_OPERACION, TIPO_TASA, GARANTIA, SALARIO_LIQUIDO, LUGAR_DEDUC_PRINCIPAL, SEX, FECHA_NACIMIENTO, ESTADO_CIVIL, CONDICION_PLAZA, OFICINA_TRAMITE, CAPACIDAD_PAGO, PORCENTAJE_COMPROMETIDO)

head(Cartera_Credito_Final[, !names(Cartera_Credito_Final) %in% c("CEDULA")])
##   NUMERO_OPERACION        TIPO_SOCIO        DESCRIPCION_PRESTAMO DIAS_MOROSOS
## 1                1 PENSIONADO JUPEMA                   CORRIENTE            0
## 2                2 PENSIONADO JUPEMA        PERSONAL ALTERNATIVO            0
## 3                3 PENSIONADO JUPEMA TARJETA CREDITO CHIP-INTER.            0
## 4                4 PENSIONADO JUPEMA                   CORRIENTE            0
## 5                5 PENSIONADO JUPEMA     ESPECIAL EXTRAORDINARIO            0
## 6                6 PENSIONADO JUPEMA                   CORRIENTE            0
##   INTERES_ACTUAL SALDO_PRESTAMO CATEGORIA_RIESGO PLAZO_OPERACION TIPO_TASA
## 1          11.00      750214.45               A1             102      FIJA
## 2          14.85     9288877.15               A1             124  VARIABLE
## 3          16.80         500.54               A1              84  VARIABLE
## 4          11.00      120167.75               A1              78      FIJA
## 5          11.00    13402117.75               A1             148      FIJA
## 6          11.00       77973.90               A1              78      FIJA
##            GARANTIA SALARIO_LIQUIDO LUGAR_DEDUC_PRINCIPAL       SEX
## 1 POLIZA S.S.V.M.N.        271058.9               INTEGRA  FEMENINO
## 2    SEGURO CAUCION        437719.7               INTEGRA  FEMENINO
## 3          CONTRATO        373413.6               INTEGRA  FEMENINO
## 4 POLIZA S.S.V.M.N.        315291.4               INTEGRA MASCULINO
## 5    SEGURO CAUCION        519070.3               INTEGRA  FEMENINO
## 6 POLIZA S.S.V.M.N.        174946.0               INTEGRA  FEMENINO
##   FECHA_NACIMIENTO ESTADO_CIVIL CONDICION_PLAZA OFICINA_TRAMITE CAPACIDAD_PAGO
## 1       1920-07-20        VIUDO       PROPIEDAD OFICINA CENTRAL              1
## 2       1923-01-16        VIUDO       PROPIEDAD OFICINA CENTRAL              1
## 3       1924-03-11       CASADO       PROPIEDAD OFICINA CENTRAL              1
## 4       1925-04-28       CASADO       PROPIEDAD OFICINA CENTRAL              1
## 5       1926-10-04        VIUDO       PROPIEDAD OFICINA CENTRAL              1
## 6       1926-12-26        VIUDO       PROPIEDAD OFICINA CENTRAL              1
##   PORCENTAJE_COMPROMETIDO
## 1                   33.66
## 2                   63.11
## 3                    6.00
## 4                    0.00
## 5                   29.89
## 6                   32.00
# HAGO UN STR PARA DETERMINAR EL TIPO DE FORMATO QUE TIENEN LAS VARIABLES SELECCIONADAS Y CONOCER SI ALGUNAS NECESITAN UNA TRANSFORMACION
 
str(Cartera_Credito_Final[, !names(Cartera_Credito_Final) %in% c("CEDULA")]) 
## 'data.frame':    214700 obs. of  19 variables:
##  $ NUMERO_OPERACION       : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ TIPO_SOCIO             : chr  "PENSIONADO JUPEMA" "PENSIONADO JUPEMA" "PENSIONADO JUPEMA" "PENSIONADO JUPEMA" ...
##  $ DESCRIPCION_PRESTAMO   : chr  "CORRIENTE" "PERSONAL ALTERNATIVO" "TARJETA CREDITO CHIP-INTER." "CORRIENTE" ...
##  $ DIAS_MOROSOS           : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ INTERES_ACTUAL         : num  11 14.8 16.8 11 11 ...
##  $ SALDO_PRESTAMO         : num  750214 9288877 501 120168 13402118 ...
##  $ CATEGORIA_RIESGO       : chr  "A1" "A1" "A1" "A1" ...
##  $ PLAZO_OPERACION        : int  102 124 84 78 148 78 101 99 123 63 ...
##  $ TIPO_TASA              : chr  "FIJA" "VARIABLE" "VARIABLE" "FIJA" ...
##  $ GARANTIA               : chr  "POLIZA S.S.V.M.N." "SEGURO CAUCION" "CONTRATO" "POLIZA S.S.V.M.N." ...
##  $ SALARIO_LIQUIDO        : num  271059 437720 373414 315291 519070 ...
##  $ LUGAR_DEDUC_PRINCIPAL  : chr  "INTEGRA" "INTEGRA" "INTEGRA" "INTEGRA" ...
##  $ SEX                    : chr  "FEMENINO" "FEMENINO" "FEMENINO" "MASCULINO" ...
##  $ FECHA_NACIMIENTO       : chr  "1920-07-20" "1923-01-16" "1924-03-11" "1925-04-28" ...
##  $ ESTADO_CIVIL           : chr  "VIUDO" "VIUDO" "CASADO" "CASADO" ...
##  $ CONDICION_PLAZA        : chr  "PROPIEDAD" "PROPIEDAD" "PROPIEDAD" "PROPIEDAD" ...
##  $ OFICINA_TRAMITE        : chr  "OFICINA CENTRAL" "OFICINA CENTRAL" "OFICINA CENTRAL" "OFICINA CENTRAL" ...
##  $ CAPACIDAD_PAGO         : num  1 1 1 1 1 1 1 1 1 1 ...
##  $ PORCENTAJE_COMPROMETIDO: num  33.7 63.1 6 0 29.9 ...

LIMPIEZA DE DATOS

#TRANSFORMACIÓN DE VARIABLES NECESARIAS
 
Cartera_Credito_Final$CEDULA <- as.factor(Cartera_Credito_Final$CEDULA)
Cartera_Credito_Final$NUMERO_OPERACION <- as.factor(Cartera_Credito_Final$NUMERO_OPERACION)
Cartera_Credito_Final$FECHA_NACIMIENTO <- as.Date(Cartera_Credito_Final$FECHA_NACIMIENTO)
Cartera_Credito_Final$TIPO_SOCIO <- as.factor(Cartera_Credito_Final$TIPO_SOCIO)
Cartera_Credito_Final$DESCRIPCION_PRESTAMO <- as.factor(Cartera_Credito_Final$DESCRIPCION_PRESTAMO)
Cartera_Credito_Final$CATEGORIA_RIESGO <- as.factor(Cartera_Credito_Final$CATEGORIA_RIESGO)
Cartera_Credito_Final$TIPO_TASA <- as.factor(Cartera_Credito_Final$TIPO_TASA)
Cartera_Credito_Final$GARANTIA <- as.factor(Cartera_Credito_Final$GARANTIA)
Cartera_Credito_Final$LUGAR_DEDUC_PRINCIPAL <- as.factor(Cartera_Credito_Final$LUGAR_DEDUC_PRINCIPAL)
Cartera_Credito_Final$SEX <- as.factor(Cartera_Credito_Final$SEX)
Cartera_Credito_Final$ESTADO_CIVIL <- as.factor(Cartera_Credito_Final$ESTADO_CIVIL)
Cartera_Credito_Final$CONDICION_PLAZA <- as.factor(Cartera_Credito_Final$CONDICION_PLAZA)
Cartera_Credito_Final$OFICINA_TRAMITE <- as.factor(Cartera_Credito_Final$OFICINA_TRAMITE)


#CREO UNA VARIABLE A RAIZ DE LOS DIAS DE MOROSIDAD PARA SABER SI UNA OPERACION TIENE MOROSIDAD O NO

Cartera_Credito_Final$MOROSIDAD <- as.factor(ifelse(Cartera_Credito_Final$DIAS_MOROSOS > 0, "SI", "NO"))

#CREO UNA VARIABLE A BASE DE LA VARIABLE TIPO_SOCIO PARA REALIZAR UNA MEJOR AGRUPACION PARA DISMINUIR LA CANTIDAD DE NIVELES Y DEJAR SOLO 4 NIVELES PENSIONADO, ACTIVO, FALLECIDO Y EXSOCIO

Cartera_Credito_Final$TIPO_SOCIO_FINAL <- ifelse(Cartera_Credito_Final$TIPO_SOCIO %in% c("PENSIONADO CAPITAL", "PENSIONADO CCSS", "PENSIONADO HACIENDA", "PENSIONADO JUPEMA"), "PENSIONADO", ifelse(Cartera_Credito_Final$TIPO_SOCIO == "ACTIVO", "ACTIVO", ifelse(Cartera_Credito_Final$TIPO_SOCIO == "FALLECIDO", "FALLECIDO", "EXSOCIO")))

#CREO UNA VARIABLE A BASE DE LA VARIABLE LUGAR_DEDUC_PRINCIPAL PARA REALIZAR UNA MEJOR AGRUPACION Y TENER MENOS NIVELES DEBIDO A QUE SE RESUME EN DOS EFECTIVO O AUTOMATICA

Cartera_Credito_Final$LUGAR_DEDUCCION_FINAL <- ifelse(Cartera_Credito_Final$LUGAR_DEDUC_PRINCIPAL == "EFECTIVO", "PAGO_EFECTIVO", "DEDUCCION_AUTOMATICA")

#CREO UNA VARIABLE PARA AGRUPAR EN 4 SEGMENTOS LOS TIPOS DE PRESTAMOS, LOS SEGMENTOS QUE SE VAN A UTILIZAR SON LOS UTILIZADOS POR LA SUGEF "CONSUMO", "VEHICULO", "TARJETAS" Y "VIVIENDA"

Cartera_Credito_Final$SEGMENTO_CARTERA <- ifelse(Cartera_Credito_Final$DESCRIPCION_PRESTAMO %in% c("VEHICULO NUEVO", "VEHICULO USADO", "ECOLÓGICO PARA VEHÍCULO"), "VEHICULO", ifelse(Cartera_Credito_Final$DESCRIPCION_PRESTAMO %in% c("TARJETA CREDITO CHIP-DORADA", "TARJETA CREDITO CHIP-INTER.", "TARJETA CREDITO CHIP-LOCAL", "TARJETA CREDITO-DORADA", "TARJETA CREDITO-INTER.", "TARJETA CREDITO-LOCAL"), "TARJETAS", ifelse(Cartera_Credito_Final$DESCRIPCION_PRESTAMO %in% c("VIVIENDA CANCELACIÓN DE HIPOTECA", "VIVIENDA FIDUCIARIO", "VIVIENDA HIPOTECARIO SINIESTROS", "VIVIENDA INTERMEDIO", "VIVIENDA MONTO MAYOR", "AMPLIACION DE TOPE", "BIENES ADJUDICADOS", "BIENES INMUEBLES", "HIPOTECARIO ALTERNATIVO", "VIVIENDA HIPOTECARIO TASA VARIABLE"), "VIVIENDA", "CONSUMO")))

#CREO UNA VARIABLE A BASE DE LA GARANTIA PARA AGRUPAR TIPOS DE GARANTIA QUE SON IGUALES, SIN EMBARGO, TIENEN NOMBRES DIFERENTES, LO ANTERIOR PARA TENER MENOS NIVELES

Cartera_Credito_Final$GARANTIA_FINAL <- ifelse(Cartera_Credito_Final$GARANTIA %in% c("GARANTIA COLATERAL", "SEGURO CAUCION", "SEGURO CREDITO"), "GARANTIA_ESPECIAL", ifelse(Cartera_Credito_Final$GARANTIA == "APORTES CAPITAL", "APORT_CAPITAL", ifelse(Cartera_Credito_Final$GARANTIA == "FIDUCIARIA", "FIDUCIARIA", ifelse(Cartera_Credito_Final$GARANTIA == "CONTRATO", "CONTRATO", ifelse(Cartera_Credito_Final$GARANTIA == "CONTRATO DE CONTROL SOBRE CUENTAS", "CONTRATO DE CONTROL SOBRE CUENTAS", ifelse(Cartera_Credito_Final$GARANTIA == "HIPOTECARIA", "HIPOTECARIA", ifelse(Cartera_Credito_Final$GARANTIA == "MIXTA", "MIXTA", ifelse(Cartera_Credito_Final$GARANTIA == "POLIZA S.S.V.M.N.", "POLIZA SSVMN", "PRENDARIA"))))))))


#CREO UNA VARIABLE A BASE DEL ESTADO VICIL PARA AGRUPAR LOS TIPOS DE ESTADO CIVIL EN SOLTERO, CASADO O DIVORCIADO Y ASI TENER MENOS NIVELES

Cartera_Credito_Final$ESTADO_CIVIL_FINAL <- ifelse(Cartera_Credito_Final$ESTADO_CIVIL %in% c("SOLTERO", "VIUDO", "NO DISPONIBLE", "SEPARACION JUDICIAL", "DESCONOCIDO"), "SOLTERO", ifelse(Cartera_Credito_Final$ESTADO_CIVIL %in% c("CASADO", "UNION LIBRE"), "CASADO", "DIVORCIADO"))

head(Cartera_Credito_Final[, !names(Cartera_Credito_Final) %in% c("CEDULA")])
##   NUMERO_OPERACION        TIPO_SOCIO        DESCRIPCION_PRESTAMO DIAS_MOROSOS
## 1                1 PENSIONADO JUPEMA                   CORRIENTE            0
## 2                2 PENSIONADO JUPEMA        PERSONAL ALTERNATIVO            0
## 3                3 PENSIONADO JUPEMA TARJETA CREDITO CHIP-INTER.            0
## 4                4 PENSIONADO JUPEMA                   CORRIENTE            0
## 5                5 PENSIONADO JUPEMA     ESPECIAL EXTRAORDINARIO            0
## 6                6 PENSIONADO JUPEMA                   CORRIENTE            0
##   INTERES_ACTUAL SALDO_PRESTAMO CATEGORIA_RIESGO PLAZO_OPERACION TIPO_TASA
## 1          11.00      750214.45               A1             102      FIJA
## 2          14.85     9288877.15               A1             124  VARIABLE
## 3          16.80         500.54               A1              84  VARIABLE
## 4          11.00      120167.75               A1              78      FIJA
## 5          11.00    13402117.75               A1             148      FIJA
## 6          11.00       77973.90               A1              78      FIJA
##            GARANTIA SALARIO_LIQUIDO LUGAR_DEDUC_PRINCIPAL       SEX
## 1 POLIZA S.S.V.M.N.        271058.9               INTEGRA  FEMENINO
## 2    SEGURO CAUCION        437719.7               INTEGRA  FEMENINO
## 3          CONTRATO        373413.6               INTEGRA  FEMENINO
## 4 POLIZA S.S.V.M.N.        315291.4               INTEGRA MASCULINO
## 5    SEGURO CAUCION        519070.3               INTEGRA  FEMENINO
## 6 POLIZA S.S.V.M.N.        174946.0               INTEGRA  FEMENINO
##   FECHA_NACIMIENTO ESTADO_CIVIL CONDICION_PLAZA OFICINA_TRAMITE CAPACIDAD_PAGO
## 1       1920-07-20        VIUDO       PROPIEDAD OFICINA CENTRAL              1
## 2       1923-01-16        VIUDO       PROPIEDAD OFICINA CENTRAL              1
## 3       1924-03-11       CASADO       PROPIEDAD OFICINA CENTRAL              1
## 4       1925-04-28       CASADO       PROPIEDAD OFICINA CENTRAL              1
## 5       1926-10-04        VIUDO       PROPIEDAD OFICINA CENTRAL              1
## 6       1926-12-26        VIUDO       PROPIEDAD OFICINA CENTRAL              1
##   PORCENTAJE_COMPROMETIDO MOROSIDAD TIPO_SOCIO_FINAL LUGAR_DEDUCCION_FINAL
## 1                   33.66        NO       PENSIONADO  DEDUCCION_AUTOMATICA
## 2                   63.11        NO       PENSIONADO  DEDUCCION_AUTOMATICA
## 3                    6.00        NO       PENSIONADO  DEDUCCION_AUTOMATICA
## 4                    0.00        NO       PENSIONADO  DEDUCCION_AUTOMATICA
## 5                   29.89        NO       PENSIONADO  DEDUCCION_AUTOMATICA
## 6                   32.00        NO       PENSIONADO  DEDUCCION_AUTOMATICA
##   SEGMENTO_CARTERA    GARANTIA_FINAL ESTADO_CIVIL_FINAL
## 1          CONSUMO      POLIZA SSVMN            SOLTERO
## 2          CONSUMO GARANTIA_ESPECIAL            SOLTERO
## 3         TARJETAS          CONTRATO             CASADO
## 4          CONSUMO      POLIZA SSVMN             CASADO
## 5          CONSUMO GARANTIA_ESPECIAL            SOLTERO
## 6          CONSUMO      POLIZA SSVMN            SOLTERO
#REALIZAO UN STR PARA DETERMINAR QUE EL CAMBIO DE FORMATO EN LAS VARIABLES SE HAYA REALIZADO DE MANERA CORRECTA
 
str(Cartera_Credito_Final[, !names(Cartera_Credito_Final) %in% c("CEDULA")])  
## 'data.frame':    214700 obs. of  25 variables:
##  $ NUMERO_OPERACION       : Factor w/ 214700 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 ...
##  $ TIPO_SOCIO             : Factor w/ 7 levels "ACTIVO","EXSOCIO",..: 7 7 7 7 7 7 7 7 7 7 ...
##  $ DESCRIPCION_PRESTAMO   : Factor w/ 36 levels "AMPLIACION DE TOPE",..: 6 17 24 6 12 6 32 12 17 11 ...
##  $ DIAS_MOROSOS           : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ INTERES_ACTUAL         : num  11 14.8 16.8 11 11 ...
##  $ SALDO_PRESTAMO         : num  750214 9288877 501 120168 13402118 ...
##  $ CATEGORIA_RIESGO       : Factor w/ 8 levels "A1","A2","B1",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ PLAZO_OPERACION        : int  102 124 84 78 148 78 101 99 123 63 ...
##  $ TIPO_TASA              : Factor w/ 3 levels "FIJA","FIJA VARIABLE",..: 1 3 3 1 1 1 1 1 3 1 ...
##  $ GARANTIA               : Factor w/ 11 levels "APORTES CAPITAL",..: 8 10 2 8 10 8 8 10 8 1 ...
##  $ SALARIO_LIQUIDO        : num  271059 437720 373414 315291 519070 ...
##  $ LUGAR_DEDUC_PRINCIPAL  : Factor w/ 17 levels "A.N.D.E","A.P.S.E",..: 7 7 7 7 7 7 7 7 7 7 ...
##  $ SEX                    : Factor w/ 2 levels "FEMENINO","MASCULINO": 1 1 1 2 1 1 1 1 1 1 ...
##  $ FECHA_NACIMIENTO       : Date, format: "1920-07-20" "1923-01-16" ...
##  $ ESTADO_CIVIL           : Factor w/ 8 levels "CASADO","DESCONOCIDO",..: 8 8 1 1 8 8 8 1 1 1 ...
##  $ CONDICION_PLAZA        : Factor w/ 2 levels "INTERINO","PROPIEDAD": 2 2 2 2 2 2 2 2 2 2 ...
##  $ OFICINA_TRAMITE        : Factor w/ 13 levels "ALAJUELA","CARTAGO",..: 8 8 8 8 8 8 10 8 8 8 ...
##  $ CAPACIDAD_PAGO         : num  1 1 1 1 1 1 1 1 1 1 ...
##  $ PORCENTAJE_COMPROMETIDO: num  33.7 63.1 6 0 29.9 ...
##  $ MOROSIDAD              : Factor w/ 2 levels "NO","SI": 1 1 1 1 1 1 1 1 1 1 ...
##  $ TIPO_SOCIO_FINAL       : chr  "PENSIONADO" "PENSIONADO" "PENSIONADO" "PENSIONADO" ...
##  $ LUGAR_DEDUCCION_FINAL  : chr  "DEDUCCION_AUTOMATICA" "DEDUCCION_AUTOMATICA" "DEDUCCION_AUTOMATICA" "DEDUCCION_AUTOMATICA" ...
##  $ SEGMENTO_CARTERA       : chr  "CONSUMO" "CONSUMO" "TARJETAS" "CONSUMO" ...
##  $ GARANTIA_FINAL         : chr  "POLIZA SSVMN" "GARANTIA_ESPECIAL" "CONTRATO" "POLIZA SSVMN" ...
##  $ ESTADO_CIVIL_FINAL     : chr  "SOLTERO" "SOLTERO" "CASADO" "CASADO" ...

DATOS DE ACCIONISTAS

DATOS

#LECTURA DE BASE DE DATOS
 
Datos_Accionistas <- read.csv("Datos_Accionistas.DEL", sep = ";", dec = ".", header = T)
Datos_Accionistas$NOMBRE <- NULL


head(Datos_Accionistas[, !names(Datos_Accionistas) %in% c("CEDULA")])
##   TIPO_SOCIO LUGAR_DEDUC_PRINCIPAL FECHA_NACIMIENTO PROVINCIA_HAB CANTON_HAB
## 1    EXSOCIO              EFECTIVO                                          
## 2    EXSOCIO              EFECTIVO                                          
## 3    EXSOCIO              EFECTIVO                                          
## 4    EXSOCIO               INTEGRA                                          
## 5    EXSOCIO              EFECTIVO                                          
## 6  FALLECIDO              EFECTIVO       1890-03-03                         
##   DISTRITO_HAB CONDICION_PLAZA  GENERO1 TOTAL_ADEUDADO     PROFESION
## 1                                                    0              
## 2                                                    0              
## 3                                                    0              
## 4                                                    0              
## 5                                                    0              
## 6                     INTERINO FEMENINO              0 NO REGISTRADA
##   ESTADO_CIVIL OCUPACION
## 1                       
## 2                       
## 3                       
## 4                       
## 5                       
## 6      SOLTERO

EXPLORACION Y VERIFICACION

#DIMENSIÓN DE LA TABLA ORIGINAL
 
dim(Datos_Accionistas) 
## [1] 191343     14
#SE DETERMINA EL TIPO DE FORMATO DE TODAS LAS VARIABLES ORIGINALES PARA CONOCER SI DEBO REALIZAR ALGUNA TRANSFORMACION
 
str(Datos_Accionistas[, !names(Datos_Accionistas) %in% c("CEDULA")]) 
## 'data.frame':    191343 obs. of  12 variables:
##  $ TIPO_SOCIO           : chr  "EXSOCIO" "EXSOCIO" "EXSOCIO" "EXSOCIO" ...
##  $ LUGAR_DEDUC_PRINCIPAL: chr  "EFECTIVO" "EFECTIVO" "EFECTIVO" "INTEGRA" ...
##  $ FECHA_NACIMIENTO     : chr  "" "" "" "" ...
##  $ PROVINCIA_HAB        : chr  "" "" "" "" ...
##  $ CANTON_HAB           : chr  "" "" "" "" ...
##  $ DISTRITO_HAB         : chr  "" "" "" "" ...
##  $ CONDICION_PLAZA      : chr  "" "" "" "" ...
##  $ GENERO1              : chr  "" "" "" "" ...
##  $ TOTAL_ADEUDADO       : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ PROFESION            : chr  "" "" "" "" ...
##  $ ESTADO_CIVIL         : chr  "" "" "" "" ...
##  $ OCUPACION            : chr  "" "" "" "" ...
#SE REALIZA UN SUMMARY PARA GENERAR ESTADISTICAS BASICAS SOBRE LA TABLA ORIGINAL
 
summary(Datos_Accionistas[, !names(Datos_Accionistas) %in% c("CEDULA")]) 
##   TIPO_SOCIO        LUGAR_DEDUC_PRINCIPAL FECHA_NACIMIENTO   PROVINCIA_HAB     
##  Length:191343      Length:191343         Length:191343      Length:191343     
##  Class :character   Class :character      Class :character   Class :character  
##  Mode  :character   Mode  :character      Mode  :character   Mode  :character  
##                                                                                
##                                                                                
##                                                                                
##   CANTON_HAB        DISTRITO_HAB       CONDICION_PLAZA      GENERO1         
##  Length:191343      Length:191343      Length:191343      Length:191343     
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##  TOTAL_ADEUDADO       PROFESION         ESTADO_CIVIL        OCUPACION        
##  Min.   :        0   Length:191343      Length:191343      Length:191343     
##  1st Qu.:        0   Class :character   Class :character   Class :character  
##  Median :        0   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :  5747099                                                           
##  3rd Qu.:  6925801                                                           
##  Max.   :129730800

SELECCION DE DATOS

#SELECCION DE VARIABLES
 
Datos_Accionistas_Final <- select(Datos_Accionistas, CEDULA, TIPO_SOCIO, LUGAR_DEDUC_PRINCIPAL, FECHA_NACIMIENTO, PROVINCIA_HAB, CONDICION_PLAZA, GENERO1, PROFESION, ESTADO_CIVIL)

head(Datos_Accionistas_Final[, !names(Datos_Accionistas_Final) %in% c("CEDULA")])
##   TIPO_SOCIO LUGAR_DEDUC_PRINCIPAL FECHA_NACIMIENTO PROVINCIA_HAB
## 1    EXSOCIO              EFECTIVO                               
## 2    EXSOCIO              EFECTIVO                               
## 3    EXSOCIO              EFECTIVO                               
## 4    EXSOCIO               INTEGRA                               
## 5    EXSOCIO              EFECTIVO                               
## 6  FALLECIDO              EFECTIVO       1890-03-03              
##   CONDICION_PLAZA  GENERO1     PROFESION ESTADO_CIVIL
## 1                                                    
## 2                                                    
## 3                                                    
## 4                                                    
## 5                                                    
## 6        INTERINO FEMENINO NO REGISTRADA      SOLTERO
# HAGO UN STR PARA DETERMINAR EL TIPO DE FORMATO QUE TIENEN LAS VARIABLES
 
str(Datos_Accionistas_Final[, !names(Datos_Accionistas_Final) %in% c("CEDULA")]) 
## 'data.frame':    191343 obs. of  8 variables:
##  $ TIPO_SOCIO           : chr  "EXSOCIO" "EXSOCIO" "EXSOCIO" "EXSOCIO" ...
##  $ LUGAR_DEDUC_PRINCIPAL: chr  "EFECTIVO" "EFECTIVO" "EFECTIVO" "INTEGRA" ...
##  $ FECHA_NACIMIENTO     : chr  "" "" "" "" ...
##  $ PROVINCIA_HAB        : chr  "" "" "" "" ...
##  $ CONDICION_PLAZA      : chr  "" "" "" "" ...
##  $ GENERO1              : chr  "" "" "" "" ...
##  $ PROFESION            : chr  "" "" "" "" ...
##  $ ESTADO_CIVIL         : chr  "" "" "" "" ...

LIMPIEZA DE DATOS

# TRANSFORMACIÓN DE VARIABLES
 
Datos_Accionistas_Final$CEDULA <- as.factor(Datos_Accionistas_Final$CEDULA)
Datos_Accionistas_Final$FECHA_NACIMIENTO <- as.Date(Datos_Accionistas_Final$FECHA_NACIMIENTO, format = "%Y-%m-%d")
Datos_Accionistas_Final$TIPO_SOCIO <- as.factor(Datos_Accionistas_Final$TIPO_SOCIO)
Datos_Accionistas_Final$LUGAR_DEDUC_PRINCIPAL <- as.factor(Datos_Accionistas_Final$LUGAR_DEDUC_PRINCIPAL)
Datos_Accionistas_Final$PROVINCIA_HAB <- as.factor(Datos_Accionistas_Final$PROVINCIA_HAB)
Datos_Accionistas_Final$CONDICION_PLAZA <- as.factor(Datos_Accionistas_Final$CONDICION_PLAZA)
Datos_Accionistas_Final$GENERO1 <- as.factor(Datos_Accionistas_Final$GENERO1)
Datos_Accionistas_Final$PROFESION <- as.factor(Datos_Accionistas_Final$PROFESION)
Datos_Accionistas_Final$ESTADO_CIVIL <- as.factor(Datos_Accionistas_Final$ESTADO_CIVIL)
 
#RENOMBRAR VARIABLES
 
Datos_Accionistas_Final <- Datos_Accionistas_Final %>% dplyr::rename("GENERO" = GENERO1, "PROVINCIA_HABITACION" = PROVINCIA_HAB)

#CREO UNA VARIABLE CON LA EDAD AL 31 DE DICIEMBRE DE 2022, USANDO LA FECHA DE NACIMIENTO, DIVIDO ENTRE 365.25 PARA CONSIDERAR LOS A;OS BISIESTOS
FECHA_CORTE <- as.Date("2022-12-31")

DIFERENCIA_DIAS <- as.numeric(difftime(FECHA_CORTE,
                                       Datos_Accionistas_Final$FECHA_NACIMIENTO,
                                       units = "days"))

Datos_Accionistas_Final$EDAD <- floor(DIFERENCIA_DIAS / 365.25)

head(Datos_Accionistas_Final[, !names(Datos_Accionistas_Final) %in% c("CEDULA")])
##   TIPO_SOCIO LUGAR_DEDUC_PRINCIPAL FECHA_NACIMIENTO PROVINCIA_HABITACION
## 1    EXSOCIO              EFECTIVO             <NA>                     
## 2    EXSOCIO              EFECTIVO             <NA>                     
## 3    EXSOCIO              EFECTIVO             <NA>                     
## 4    EXSOCIO               INTEGRA             <NA>                     
## 5    EXSOCIO              EFECTIVO             <NA>                     
## 6  FALLECIDO              EFECTIVO       1890-03-03                     
##   CONDICION_PLAZA   GENERO     PROFESION ESTADO_CIVIL EDAD
## 1                                                       NA
## 2                                                       NA
## 3                                                       NA
## 4                                                       NA
## 5                                                       NA
## 6        INTERINO FEMENINO NO REGISTRADA      SOLTERO  132
#SE DETERMINA QUE EL CAMBIO DE FORMATO EN LAS VARIABLES Y LA INCORPOACION DE LA EDAD, SE HAYA REALIZADO DE MANERA CORRECTA
 
str(Datos_Accionistas_Final[, !names(Datos_Accionistas_Final) %in% c("CEDULA")]) 
## 'data.frame':    191343 obs. of  9 variables:
##  $ TIPO_SOCIO           : Factor w/ 9 levels "ACTIVO","EXSOCIO",..: 2 2 2 2 2 3 8 2 2 2 ...
##  $ LUGAR_DEDUC_PRINCIPAL: Factor w/ 21 levels "","0.00","A.N.D.E",..: 9 9 9 10 9 9 10 9 9 9 ...
##  $ FECHA_NACIMIENTO     : Date, format: NA NA ...
##  $ PROVINCIA_HABITACION : Factor w/ 11 levels "","ALAJUELA",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ CONDICION_PLAZA      : Factor w/ 3 levels "","INTERINO",..: 1 1 1 1 1 2 3 1 1 1 ...
##  $ GENERO               : Factor w/ 3 levels "","FEMENINO",..: 1 1 1 1 1 2 3 1 1 1 ...
##  $ PROFESION            : Factor w/ 171 levels "","ABOGADO","ABOGADO  CIVILISTA",..: 1 1 1 1 1 118 75 1 1 1 ...
##  $ ESTADO_CIVIL         : Factor w/ 10 levels "","CASADO","DESCONOCIDO",..: 1 1 1 1 1 8 8 1 1 1 ...
##  $ EDAD                 : num  NA NA NA NA NA 132 106 NA NA 44 ...

PROYECTO FINAL

DATOS UTILIZADOS

INTEGRACION BASES DE DATOS

# SE UNE LA INFORMACION DE LAS TABLAS Datos_Accionistas_Final con Cartera_Credito_Final POR LA VARIABLE CEDULA
 
BASE_INTEGRADA <- inner_join(Cartera_Credito_Final, Datos_Accionistas_Final, by = "CEDULA") 
 
BASE_INTEGRADA$CEDULA <- NULL

head(BASE_INTEGRADA)
##   NUMERO_OPERACION      TIPO_SOCIO.x        DESCRIPCION_PRESTAMO DIAS_MOROSOS
## 1       2018013397 PENSIONADO JUPEMA                   CORRIENTE            0
## 2       2018094110 PENSIONADO JUPEMA        PERSONAL ALTERNATIVO            0
## 3 5459622915005604 PENSIONADO JUPEMA TARJETA CREDITO CHIP-INTER.            0
## 4       2016093435 PENSIONADO JUPEMA                   CORRIENTE            0
## 5       2020031045 PENSIONADO JUPEMA     ESPECIAL EXTRAORDINARIO            0
## 6       2016100292 PENSIONADO JUPEMA                   CORRIENTE            0
##   INTERES_ACTUAL SALDO_PRESTAMO CATEGORIA_RIESGO PLAZO_OPERACION TIPO_TASA
## 1          11.00      750214.45               A1             102      FIJA
## 2          14.85     9288877.15               A1             124  VARIABLE
## 3          16.80         500.54               A1              84  VARIABLE
## 4          11.00      120167.75               A1              78      FIJA
## 5          11.00    13402117.75               A1             148      FIJA
## 6          11.00       77973.90               A1              78      FIJA
##            GARANTIA SALARIO_LIQUIDO LUGAR_DEDUC_PRINCIPAL.x       SEX
## 1 POLIZA S.S.V.M.N.        271058.9                 INTEGRA  FEMENINO
## 2    SEGURO CAUCION        437719.7                 INTEGRA  FEMENINO
## 3          CONTRATO        373413.6                 INTEGRA  FEMENINO
## 4 POLIZA S.S.V.M.N.        315291.4                 INTEGRA MASCULINO
## 5    SEGURO CAUCION        519070.3                 INTEGRA  FEMENINO
## 6 POLIZA S.S.V.M.N.        174946.0                 INTEGRA  FEMENINO
##   FECHA_NACIMIENTO.x ESTADO_CIVIL.x CONDICION_PLAZA.x OFICINA_TRAMITE
## 1         1920-07-20          VIUDO         PROPIEDAD OFICINA CENTRAL
## 2         1923-01-16          VIUDO         PROPIEDAD OFICINA CENTRAL
## 3         1924-03-11         CASADO         PROPIEDAD OFICINA CENTRAL
## 4         1925-04-28         CASADO         PROPIEDAD OFICINA CENTRAL
## 5         1926-10-04          VIUDO         PROPIEDAD OFICINA CENTRAL
## 6         1926-12-26          VIUDO         PROPIEDAD OFICINA CENTRAL
##   CAPACIDAD_PAGO PORCENTAJE_COMPROMETIDO MOROSIDAD TIPO_SOCIO_FINAL
## 1              1                   33.66        NO       PENSIONADO
## 2              1                   63.11        NO       PENSIONADO
## 3              1                    6.00        NO       PENSIONADO
## 4              1                    0.00        NO       PENSIONADO
## 5              1                   29.89        NO       PENSIONADO
## 6              1                   32.00        NO       PENSIONADO
##   LUGAR_DEDUCCION_FINAL SEGMENTO_CARTERA    GARANTIA_FINAL ESTADO_CIVIL_FINAL
## 1  DEDUCCION_AUTOMATICA          CONSUMO      POLIZA SSVMN            SOLTERO
## 2  DEDUCCION_AUTOMATICA          CONSUMO GARANTIA_ESPECIAL            SOLTERO
## 3  DEDUCCION_AUTOMATICA         TARJETAS          CONTRATO             CASADO
## 4  DEDUCCION_AUTOMATICA          CONSUMO      POLIZA SSVMN             CASADO
## 5  DEDUCCION_AUTOMATICA          CONSUMO GARANTIA_ESPECIAL            SOLTERO
## 6  DEDUCCION_AUTOMATICA          CONSUMO      POLIZA SSVMN            SOLTERO
##        TIPO_SOCIO.y LUGAR_DEDUC_PRINCIPAL.y FECHA_NACIMIENTO.y
## 1 PENSIONADO JUPEMA                 INTEGRA         1920-07-20
## 2 PENSIONADO JUPEMA                 INTEGRA         1923-01-16
## 3 PENSIONADO JUPEMA                 INTEGRA         1924-03-11
## 4 PENSIONADO JUPEMA                 INTEGRA         1925-04-28
## 5 PENSIONADO JUPEMA                 INTEGRA         1926-10-04
## 6 PENSIONADO JUPEMA                 INTEGRA         1926-12-26
##   PROVINCIA_HABITACION CONDICION_PLAZA.y    GENERO PROFESION ESTADO_CIVIL.y
## 1             SAN JOSE         PROPIEDAD  FEMENINO  EDUCADOR          VIUDO
## 2             SAN JOSE         PROPIEDAD  FEMENINO  EDUCADOR          VIUDO
## 3             SAN JOSE         PROPIEDAD  FEMENINO  EDUCADOR         CASADO
## 4             SAN JOSE         PROPIEDAD MASCULINO  EDUCADOR         CASADO
## 5             SAN JOSE         PROPIEDAD  FEMENINO  EDUCADOR          VIUDO
## 6             SAN JOSE         PROPIEDAD  FEMENINO  EDUCADOR          VIUDO
##   EDAD
## 1  102
## 2   99
## 3   98
## 4   97
## 5   96
## 6   96

EXPLORACION Y VERIFICACION

#DIMENSION DE LA TABLA FINAL
 
dim(BASE_INTEGRADA) 
## [1] 214700     34
#REALIZO UN STR PARA VERIFICA QUE EL FORMATO DE LAS VARIABLES DE LA TABLA FINAL A UTILIZAR
 
str(BASE_INTEGRADA) 
## 'data.frame':    214700 obs. of  34 variables:
##  $ NUMERO_OPERACION       : Factor w/ 214700 levels "2004027002","2006012083",..: 28535 40291 213315 9418 93742 9630 26815 5290 21105 24263 ...
##  $ TIPO_SOCIO.x           : Factor w/ 7 levels "ACTIVO","EXSOCIO",..: 7 7 7 7 7 7 7 7 7 7 ...
##  $ DESCRIPCION_PRESTAMO   : Factor w/ 36 levels "AMPLIACION DE TOPE",..: 6 17 24 6 12 6 32 12 17 11 ...
##  $ DIAS_MOROSOS           : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ INTERES_ACTUAL         : num  11 14.8 16.8 11 11 ...
##  $ SALDO_PRESTAMO         : num  750214 9288877 501 120168 13402118 ...
##  $ CATEGORIA_RIESGO       : Factor w/ 8 levels "A1","A2","B1",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ PLAZO_OPERACION        : int  102 124 84 78 148 78 101 99 123 63 ...
##  $ TIPO_TASA              : Factor w/ 3 levels "FIJA","FIJA VARIABLE",..: 1 3 3 1 1 1 1 1 3 1 ...
##  $ GARANTIA               : Factor w/ 11 levels "APORTES CAPITAL",..: 8 10 2 8 10 8 8 10 8 1 ...
##  $ SALARIO_LIQUIDO        : num  271059 437720 373414 315291 519070 ...
##  $ LUGAR_DEDUC_PRINCIPAL.x: Factor w/ 17 levels "A.N.D.E","A.P.S.E",..: 7 7 7 7 7 7 7 7 7 7 ...
##  $ SEX                    : Factor w/ 2 levels "FEMENINO","MASCULINO": 1 1 1 2 1 1 1 1 1 1 ...
##  $ FECHA_NACIMIENTO.x     : Date, format: "1920-07-20" "1923-01-16" ...
##  $ ESTADO_CIVIL.x         : Factor w/ 8 levels "CASADO","DESCONOCIDO",..: 8 8 1 1 8 8 8 1 1 1 ...
##  $ CONDICION_PLAZA.x      : Factor w/ 2 levels "INTERINO","PROPIEDAD": 2 2 2 2 2 2 2 2 2 2 ...
##  $ OFICINA_TRAMITE        : Factor w/ 13 levels "ALAJUELA","CARTAGO",..: 8 8 8 8 8 8 10 8 8 8 ...
##  $ CAPACIDAD_PAGO         : num  1 1 1 1 1 1 1 1 1 1 ...
##  $ PORCENTAJE_COMPROMETIDO: num  33.7 63.1 6 0 29.9 ...
##  $ MOROSIDAD              : Factor w/ 2 levels "NO","SI": 1 1 1 1 1 1 1 1 1 1 ...
##  $ TIPO_SOCIO_FINAL       : chr  "PENSIONADO" "PENSIONADO" "PENSIONADO" "PENSIONADO" ...
##  $ LUGAR_DEDUCCION_FINAL  : chr  "DEDUCCION_AUTOMATICA" "DEDUCCION_AUTOMATICA" "DEDUCCION_AUTOMATICA" "DEDUCCION_AUTOMATICA" ...
##  $ SEGMENTO_CARTERA       : chr  "CONSUMO" "CONSUMO" "TARJETAS" "CONSUMO" ...
##  $ GARANTIA_FINAL         : chr  "POLIZA SSVMN" "GARANTIA_ESPECIAL" "CONTRATO" "POLIZA SSVMN" ...
##  $ ESTADO_CIVIL_FINAL     : chr  "SOLTERO" "SOLTERO" "CASADO" "CASADO" ...
##  $ TIPO_SOCIO.y           : Factor w/ 9 levels "ACTIVO","EXSOCIO",..: 8 8 8 8 8 8 8 8 8 8 ...
##  $ LUGAR_DEDUC_PRINCIPAL.y: Factor w/ 21 levels "","0.00","A.N.D.E",..: 10 10 10 10 10 10 10 10 10 10 ...
##  $ FECHA_NACIMIENTO.y     : Date, format: "1920-07-20" "1923-01-16" ...
##  $ PROVINCIA_HABITACION   : Factor w/ 11 levels "","ALAJUELA",..: 10 10 10 10 10 10 2 10 10 10 ...
##  $ CONDICION_PLAZA.y      : Factor w/ 3 levels "","INTERINO",..: 3 3 3 3 3 3 3 3 3 3 ...
##  $ GENERO                 : Factor w/ 3 levels "","FEMENINO",..: 2 2 2 3 2 2 2 2 2 2 ...
##  $ PROFESION              : Factor w/ 171 levels "","ABOGADO","ABOGADO  CIVILISTA",..: 75 75 75 75 75 75 75 75 75 75 ...
##  $ ESTADO_CIVIL.y         : Factor w/ 10 levels "","CASADO","DESCONOCIDO",..: 10 10 2 2 10 10 10 2 2 2 ...
##  $ EDAD                   : num  102 99 98 97 96 96 97 95 95 95 ...

LIMPIEZA

# ELIMINO LAS COLUMNAS QUE ESTAN REPETIDAS DEBIDO A QUE ESTAN EN LAS DOS TABLAS Y SE CAMBIAN LOS NOMBRES A LOS QUE SE LES AGREGO UN .x
 
BASE_INTEGRADA <- select(BASE_INTEGRADA, -TIPO_SOCIO.y, -LUGAR_DEDUC_PRINCIPAL.y, -FECHA_NACIMIENTO.y, -CONDICION_PLAZA.y, -ESTADO_CIVIL.y) %>% 
  dplyr::rename("TIPO_SOCIO" = TIPO_SOCIO.x, "LUGAR_DEDUCCION" = LUGAR_DEDUC_PRINCIPAL.x, "FECHA_NACIMIENTO" = FECHA_NACIMIENTO.x, "ESTADO_CIVIL" = ESTADO_CIVIL.x, "CONDICION_PLAZA" = CONDICION_PLAZA.x) 
 

# REALIZO IN NA.OMIT PARA ELIMINAR LOS NA´s EN CASO DE EXISTIR EN LA TABLA
 
BASE_INTEGRADA <- na.omit(BASE_INTEGRADA)

head(BASE_INTEGRADA)
##   NUMERO_OPERACION        TIPO_SOCIO        DESCRIPCION_PRESTAMO DIAS_MOROSOS
## 1       2018013397 PENSIONADO JUPEMA                   CORRIENTE            0
## 2       2018094110 PENSIONADO JUPEMA        PERSONAL ALTERNATIVO            0
## 3 5459622915005604 PENSIONADO JUPEMA TARJETA CREDITO CHIP-INTER.            0
## 4       2016093435 PENSIONADO JUPEMA                   CORRIENTE            0
## 5       2020031045 PENSIONADO JUPEMA     ESPECIAL EXTRAORDINARIO            0
## 6       2016100292 PENSIONADO JUPEMA                   CORRIENTE            0
##   INTERES_ACTUAL SALDO_PRESTAMO CATEGORIA_RIESGO PLAZO_OPERACION TIPO_TASA
## 1          11.00      750214.45               A1             102      FIJA
## 2          14.85     9288877.15               A1             124  VARIABLE
## 3          16.80         500.54               A1              84  VARIABLE
## 4          11.00      120167.75               A1              78      FIJA
## 5          11.00    13402117.75               A1             148      FIJA
## 6          11.00       77973.90               A1              78      FIJA
##            GARANTIA SALARIO_LIQUIDO LUGAR_DEDUCCION       SEX FECHA_NACIMIENTO
## 1 POLIZA S.S.V.M.N.        271058.9         INTEGRA  FEMENINO       1920-07-20
## 2    SEGURO CAUCION        437719.7         INTEGRA  FEMENINO       1923-01-16
## 3          CONTRATO        373413.6         INTEGRA  FEMENINO       1924-03-11
## 4 POLIZA S.S.V.M.N.        315291.4         INTEGRA MASCULINO       1925-04-28
## 5    SEGURO CAUCION        519070.3         INTEGRA  FEMENINO       1926-10-04
## 6 POLIZA S.S.V.M.N.        174946.0         INTEGRA  FEMENINO       1926-12-26
##   ESTADO_CIVIL CONDICION_PLAZA OFICINA_TRAMITE CAPACIDAD_PAGO
## 1        VIUDO       PROPIEDAD OFICINA CENTRAL              1
## 2        VIUDO       PROPIEDAD OFICINA CENTRAL              1
## 3       CASADO       PROPIEDAD OFICINA CENTRAL              1
## 4       CASADO       PROPIEDAD OFICINA CENTRAL              1
## 5        VIUDO       PROPIEDAD OFICINA CENTRAL              1
## 6        VIUDO       PROPIEDAD OFICINA CENTRAL              1
##   PORCENTAJE_COMPROMETIDO MOROSIDAD TIPO_SOCIO_FINAL LUGAR_DEDUCCION_FINAL
## 1                   33.66        NO       PENSIONADO  DEDUCCION_AUTOMATICA
## 2                   63.11        NO       PENSIONADO  DEDUCCION_AUTOMATICA
## 3                    6.00        NO       PENSIONADO  DEDUCCION_AUTOMATICA
## 4                    0.00        NO       PENSIONADO  DEDUCCION_AUTOMATICA
## 5                   29.89        NO       PENSIONADO  DEDUCCION_AUTOMATICA
## 6                   32.00        NO       PENSIONADO  DEDUCCION_AUTOMATICA
##   SEGMENTO_CARTERA    GARANTIA_FINAL ESTADO_CIVIL_FINAL PROVINCIA_HABITACION
## 1          CONSUMO      POLIZA SSVMN            SOLTERO             SAN JOSE
## 2          CONSUMO GARANTIA_ESPECIAL            SOLTERO             SAN JOSE
## 3         TARJETAS          CONTRATO             CASADO             SAN JOSE
## 4          CONSUMO      POLIZA SSVMN             CASADO             SAN JOSE
## 5          CONSUMO GARANTIA_ESPECIAL            SOLTERO             SAN JOSE
## 6          CONSUMO      POLIZA SSVMN            SOLTERO             SAN JOSE
##      GENERO PROFESION EDAD
## 1  FEMENINO  EDUCADOR  102
## 2  FEMENINO  EDUCADOR   99
## 3  FEMENINO  EDUCADOR   98
## 4 MASCULINO  EDUCADOR   97
## 5  FEMENINO  EDUCADOR   96
## 6  FEMENINO  EDUCADOR   96
# SE VERIFICA LA DIMENSIÓN DE LOS DATOS DE LA TABLA FINAL
 
dim(BASE_INTEGRADA) 
## [1] 214700     29
#SE REALIZA UN STR PARA VER EL FORMATO DE DATOS FINALES
 
str(BASE_INTEGRADA) 
## 'data.frame':    214700 obs. of  29 variables:
##  $ NUMERO_OPERACION       : Factor w/ 214700 levels "2004027002","2006012083",..: 28535 40291 213315 9418 93742 9630 26815 5290 21105 24263 ...
##  $ TIPO_SOCIO             : Factor w/ 7 levels "ACTIVO","EXSOCIO",..: 7 7 7 7 7 7 7 7 7 7 ...
##  $ DESCRIPCION_PRESTAMO   : Factor w/ 36 levels "AMPLIACION DE TOPE",..: 6 17 24 6 12 6 32 12 17 11 ...
##  $ DIAS_MOROSOS           : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ INTERES_ACTUAL         : num  11 14.8 16.8 11 11 ...
##  $ SALDO_PRESTAMO         : num  750214 9288877 501 120168 13402118 ...
##  $ CATEGORIA_RIESGO       : Factor w/ 8 levels "A1","A2","B1",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ PLAZO_OPERACION        : int  102 124 84 78 148 78 101 99 123 63 ...
##  $ TIPO_TASA              : Factor w/ 3 levels "FIJA","FIJA VARIABLE",..: 1 3 3 1 1 1 1 1 3 1 ...
##  $ GARANTIA               : Factor w/ 11 levels "APORTES CAPITAL",..: 8 10 2 8 10 8 8 10 8 1 ...
##  $ SALARIO_LIQUIDO        : num  271059 437720 373414 315291 519070 ...
##  $ LUGAR_DEDUCCION        : Factor w/ 17 levels "A.N.D.E","A.P.S.E",..: 7 7 7 7 7 7 7 7 7 7 ...
##  $ SEX                    : Factor w/ 2 levels "FEMENINO","MASCULINO": 1 1 1 2 1 1 1 1 1 1 ...
##  $ FECHA_NACIMIENTO       : Date, format: "1920-07-20" "1923-01-16" ...
##  $ ESTADO_CIVIL           : Factor w/ 8 levels "CASADO","DESCONOCIDO",..: 8 8 1 1 8 8 8 1 1 1 ...
##  $ CONDICION_PLAZA        : Factor w/ 2 levels "INTERINO","PROPIEDAD": 2 2 2 2 2 2 2 2 2 2 ...
##  $ OFICINA_TRAMITE        : Factor w/ 13 levels "ALAJUELA","CARTAGO",..: 8 8 8 8 8 8 10 8 8 8 ...
##  $ CAPACIDAD_PAGO         : num  1 1 1 1 1 1 1 1 1 1 ...
##  $ PORCENTAJE_COMPROMETIDO: num  33.7 63.1 6 0 29.9 ...
##  $ MOROSIDAD              : Factor w/ 2 levels "NO","SI": 1 1 1 1 1 1 1 1 1 1 ...
##  $ TIPO_SOCIO_FINAL       : chr  "PENSIONADO" "PENSIONADO" "PENSIONADO" "PENSIONADO" ...
##  $ LUGAR_DEDUCCION_FINAL  : chr  "DEDUCCION_AUTOMATICA" "DEDUCCION_AUTOMATICA" "DEDUCCION_AUTOMATICA" "DEDUCCION_AUTOMATICA" ...
##  $ SEGMENTO_CARTERA       : chr  "CONSUMO" "CONSUMO" "TARJETAS" "CONSUMO" ...
##  $ GARANTIA_FINAL         : chr  "POLIZA SSVMN" "GARANTIA_ESPECIAL" "CONTRATO" "POLIZA SSVMN" ...
##  $ ESTADO_CIVIL_FINAL     : chr  "SOLTERO" "SOLTERO" "CASADO" "CASADO" ...
##  $ PROVINCIA_HABITACION   : Factor w/ 11 levels "","ALAJUELA",..: 10 10 10 10 10 10 2 10 10 10 ...
##  $ GENERO                 : Factor w/ 3 levels "","FEMENINO",..: 2 2 2 3 2 2 2 2 2 2 ...
##  $ PROFESION              : Factor w/ 171 levels "","ABOGADO","ABOGADO  CIVILISTA",..: 75 75 75 75 75 75 75 75 75 75 ...
##  $ EDAD                   : num  102 99 98 97 96 96 97 95 95 95 ...
#SE REALIZA UN SUMMARY PARA REVIZAR QUE NO EXISTAN DATOS ATIPICOS EN LOS DATOS
 
summary(BASE_INTEGRADA) 
##    NUMERO_OPERACION                TIPO_SOCIO    
##  2004027002:     1   ACTIVO             :149203  
##  2006012083:     1   EXSOCIO            :  2546  
##  2006023622:     1   FALLECIDO          :   349  
##  2006023623:     1   PENSIONADO CAPITAL :  3956  
##  2006046714:     1   PENSIONADO CCSS    :  1842  
##  2006057269:     1   PENSIONADO HACIENDA:     5  
##  (Other)   :214694   PENSIONADO JUPEMA  : 56799  
##               DESCRIPCION_PRESTAMO  DIAS_MOROSOS     INTERES_ACTUAL 
##  CORRIENTE              :51939     Min.   :   0.00   Min.   : 5.00  
##  ESPECIAL EXTRAORDINARIO:24180     1st Qu.:   0.00   1st Qu.:10.00  
##  PERSONAL ALTERNATIVO   :20049     Median :   0.00   Median :11.00  
##  ESPECIAL               :17473     Mean   :   4.79   Mean   :11.54  
##  SALUD                  :17236     3rd Qu.:   0.00   3rd Qu.:11.15  
##  VIVIENDA FIDUCIARIO    :16218     Max.   :3497.00   Max.   :18.00  
##  (Other)                :67605                                      
##  SALDO_PRESTAMO     CATEGORIA_RIESGO PLAZO_OPERACION         TIPO_TASA     
##  Min.   :       0   A1     :172167   Min.   :  2.0   FIJA         :151150  
##  1st Qu.:  812234   B1     : 25357   1st Qu.: 84.0   FIJA VARIABLE:     5  
##  Median : 2565817   E      :  6717   Median :100.0   VARIABLE     : 63545  
##  Mean   : 5182545   A2     :  3930   Mean   :108.8                         
##  3rd Qu.: 6697152   B2     :  2806   3rd Qu.:123.0                         
##  Max.   :93469728   D      :  1657   Max.   :367.0                         
##                     (Other):  2066                                         
##                   GARANTIA     SALARIO_LIQUIDO  
##  SEGURO CAUCION       :73375   Min.   :      0  
##  APORTES CAPITAL      :60083   1st Qu.: 209218  
##  POLIZA S.S.V.M.N.    :22746   Median : 352827  
##  GARANT\xcdA COLATERAL:17657   Mean   : 384565  
##  CONTRATO             :16741   3rd Qu.: 526116  
##  HIPOTECARIA          :12842   Max.   :5663526  
##  (Other)              :11256                    
##                  LUGAR_DEDUCCION          SEX         FECHA_NACIMIENTO    
##  INTEGRA                 :205722   FEMENINO :154144   Min.   :1920-07-20  
##  CAPITALIZACION COLECTIVA:  3964   MASCULINO: 60556   1st Qu.:1960-11-09  
##  PENSIONADOS CCSS        :  1861                      Median :1971-06-05  
##  PLANILLA CAJA DE ANDE   :  1517                      Mean   :1970-03-14  
##  EFECTIVO                :  1412                      3rd Qu.:1981-02-25  
##  U.N.A                   :    58                      Max.   :2003-06-06  
##  (Other)                 :   166                                          
##                  ESTADO_CIVIL     CONDICION_PLAZA          OFICINA_TRAMITE 
##  CASADO                :105010   INTERINO : 56906   OFICINA CENTRAL:73755  
##  SOLTERO               : 50748   PROPIEDAD:157794   CARTAGO        :17974  
##  DIVORCIADO            : 33233                      HEREDIA        :15318  
##  UNION LIBRE           : 15259                      LIBERIA        :14250  
##  VIUDO                 :  9201                      SANTA CRUZ     :13915  
##  SEPARACI\xd3N JUDICIAL:  1241                      SAN CARLOS     :11939  
##  (Other)               :     8                      (Other)        :67549  
##  CAPACIDAD_PAGO  PORCENTAJE_COMPROMETIDO MOROSIDAD   TIPO_SOCIO_FINAL  
##  Min.   :1.000   Min.   :       0        NO:199602   Length:214700     
##  1st Qu.:1.000   1st Qu.:      24        SI: 15098   Class :character  
##  Median :1.000   Median :      48                    Mode  :character  
##  Mean   :1.123   Mean   :    4484                                      
##  3rd Qu.:1.000   3rd Qu.:      71                                      
##  Max.   :4.000   Max.   :66528661                                      
##                                                                        
##  LUGAR_DEDUCCION_FINAL SEGMENTO_CARTERA   GARANTIA_FINAL     ESTADO_CIVIL_FINAL
##  Length:214700         Length:214700      Length:214700      Length:214700     
##  Class :character      Class :character   Class :character   Class :character  
##  Mode  :character      Mode  :character   Mode  :character   Mode  :character  
##                                                                                
##                                                                                
##                                                                                
##                                                                                
##  PROVINCIA_HABITACION       GENERO                     PROFESION     
##  SAN JOSE  :53700              :  2546   EDUCADOR           :169486  
##  ALAJUELA  :41798     FEMENINO :152571   CONSERJE           : 14327  
##  GUANACASTE:27811     MASCULINO: 59583   ADMINISTRADOR      :  4933  
##  CARTAGO   :23930                        COCINERO           :  4020  
##  HEREDIA   :23778                        AGENTE DE SEGURIDAD:  3654  
##  PUNTARENAS:22847                        OFICIAL            :  3632  
##  (Other)   :20836                        (Other)            : 14648  
##       EDAD       
##  Min.   : 19.00  
##  1st Qu.: 41.00  
##  Median : 51.00  
##  Mean   : 52.31  
##  3rd Qu.: 62.00  
##  Max.   :102.00  
## 
#GUARDO LA BASE CON LOS DATOS FINAL A UTILIZAR

write.table(BASE_INTEGRADA, file = "BASE_INTEGRADA.csv", row.names = TRUE, sep = ";", dec = ".")

GENERO UNA MUESTRA DE LA TABLA FINAL CON UN 25% DE LA BASE_INTEGRADA

set.seed(123)

# HAGO UNA MUESTRA ELEATORIA SIMPLE
n_total <- nrow(BASE_INTEGRADA)
tam_muestra <- floor(0.25 * n_total)

idx_muestra <- sample(seq_len(n_total), size = tam_muestra)

BASE_INTEGRADA_MUESTRA <- BASE_INTEGRADA[idx_muestra, ]

# GUARDO EL ARCHIVO DE LA MUESTRA PARA REPRODUCIBILIDAD
write.csv(BASE_INTEGRADA_MUESTRA, "BASE_INTEGRADA_MUESTRA.csv")
# SE VERIFICA LA DIMENSIÓN DE LOS DATOS DE LA TABLA FINAL

dim(BASE_INTEGRADA_MUESTRA)
## [1] 53675    29
#SE REALIZA UN SUMMARY PARA REVIZAR QUE NO EXISTAN DATOS ATIPICOS EN LOS DATOS
summary(BASE_INTEGRADA_MUESTRA)
##    NUMERO_OPERACION               TIPO_SOCIO   
##  2006012083:    1   ACTIVO             :37231  
##  2006046714:    1   EXSOCIO            :  682  
##  2006059239:    1   FALLECIDO          :   81  
##  2006061231:    1   PENSIONADO CAPITAL :  995  
##  2006063664:    1   PENSIONADO CCSS    :  483  
##  2007001672:    1   PENSIONADO HACIENDA:    1  
##  (Other)   :53669   PENSIONADO JUPEMA  :14202  
##               DESCRIPCION_PRESTAMO  DIAS_MOROSOS      INTERES_ACTUAL 
##  CORRIENTE              :13020     Min.   :   0.000   Min.   : 5.00  
##  ESPECIAL EXTRAORDINARIO: 6048     1st Qu.:   0.000   1st Qu.:10.00  
##  PERSONAL ALTERNATIVO   : 5015     Median :   0.000   Median :11.00  
##  ESPECIAL               : 4426     Mean   :   4.742   Mean   :11.53  
##  SALUD                  : 4375     3rd Qu.:   0.000   3rd Qu.:11.15  
##  VIVIENDA FIDUCIARIO    : 3942     Max.   :3467.000   Max.   :18.00  
##  (Other)                :16849                                       
##  SALDO_PRESTAMO     CATEGORIA_RIESGO PLAZO_OPERACION         TIPO_TASA    
##  Min.   :       0   A1     :42937    Min.   :  2.0   FIJA         :37820  
##  1st Qu.:  798147   B1     : 6375    1st Qu.: 84.0   FIJA VARIABLE:    1  
##  Median : 2550597   E      : 1738    Median :100.0   VARIABLE     :15854  
##  Mean   : 5172301   A2     :  996    Mean   :108.8                        
##  3rd Qu.: 6669115   B2     :  663    3rd Qu.:123.0                        
##  Max.   :81534723   D      :  418    Max.   :367.0                        
##                     (Other):  548                                         
##                   GARANTIA     SALARIO_LIQUIDO  
##  SEGURO CAUCION       :18262   Min.   :      0  
##  APORTES CAPITAL      :14942   1st Qu.: 208664  
##  POLIZA S.S.V.M.N.    : 5760   Median : 351113  
##  GARANT\xcdA COLATERAL: 4482   Mean   : 383607  
##  CONTRATO             : 4196   3rd Qu.: 525674  
##  HIPOTECARIA          : 3204   Max.   :4820529  
##  (Other)              : 2829                    
##                  LUGAR_DEDUCCION         SEX        FECHA_NACIMIENTO    
##  INTEGRA                 :51382   FEMENINO :38467   Min.   :1922-04-15  
##  CAPITALIZACION COLECTIVA:  998   MASCULINO:15208   1st Qu.:1960-10-27  
##  PENSIONADOS CCSS        :  489                     Median :1971-05-10  
##  EFECTIVO                :  394                     Mean   :1970-03-06  
##  PLANILLA CAJA DE ANDE   :  362                     3rd Qu.:1981-02-13  
##  U.N.A                   :   14                     Max.   :2003-04-29  
##  (Other)                 :   36                                         
##                  ESTADO_CIVIL    CONDICION_PLAZA         OFICINA_TRAMITE 
##  CASADO                :26174   INTERINO :14400   OFICINA CENTRAL:18568  
##  SOLTERO               :12649   PROPIEDAD:39275   CARTAGO        : 4536  
##  DIVORCIADO            : 8316                     HEREDIA        : 3875  
##  UNION LIBRE           : 3893                     LIBERIA        : 3582  
##  VIUDO                 : 2335                     SANTA CRUZ     : 3457  
##  SEPARACI\xd3N JUDICIAL:  306                     ALAJUELA       : 2899  
##  (Other)               :    2                     (Other)        :16758  
##  CAPACIDAD_PAGO  PORCENTAJE_COMPROMETIDO MOROSIDAD  TIPO_SOCIO_FINAL  
##  Min.   :1.000   Min.   :       0        NO:49848   Length:53675      
##  1st Qu.:1.000   1st Qu.:      24        SI: 3827   Class :character  
##  Median :1.000   Median :      48                   Mode  :character  
##  Mean   :1.124   Mean   :    3966                                     
##  3rd Qu.:1.000   3rd Qu.:      70                                     
##  Max.   :4.000   Max.   :44521300                                     
##                                                                       
##  LUGAR_DEDUCCION_FINAL SEGMENTO_CARTERA   GARANTIA_FINAL     ESTADO_CIVIL_FINAL
##  Length:53675          Length:53675       Length:53675       Length:53675      
##  Class :character      Class :character   Class :character   Class :character  
##  Mode  :character      Mode  :character   Mode  :character   Mode  :character  
##                                                                                
##                                                                                
##                                                                                
##                                                                                
##  PROVINCIA_HABITACION       GENERO                    PROFESION    
##  SAN JOSE  :13429              :  682   EDUCADOR           :42360  
##  ALAJUELA  :10314     FEMENINO :38043   CONSERJE           : 3551  
##  GUANACASTE: 6965     MASCULINO:14950   ADMINISTRADOR      : 1240  
##  CARTAGO   : 6041                       COCINERO           :  943  
##  HEREDIA   : 6028                       AGENTE DE SEGURIDAD:  942  
##  PUNTARENAS: 5630                       OFICIAL            :  894  
##  (Other)   : 5268                       (Other)            : 3745  
##       EDAD       
##  Min.   : 19.00  
##  1st Qu.: 41.00  
##  Median : 51.00  
##  Mean   : 52.33  
##  3rd Qu.: 62.00  
##  Max.   :100.00  
## 

FASE 1: LEO EL ARCHIVO DE LA MUESTRA GENERADO ANTERIORMENTE

# LECTURA MUESTRA

BASE_INTEGRADA <- read.csv(
  "BASE_INTEGRADA_MUESTRA.csv",
  stringsAsFactors = TRUE,
  sep = ",",
  dec = ".",
  encoding = "latin1",
  row.names = 1
)


# ELIMINAR VARIABLES TRANSFORMADAS / DUPLICADAS

BASE_INTEGRADA$FECHA_NACIMIENTO <- NULL
BASE_INTEGRADA$PROFESION <- NULL
BASE_INTEGRADA$GARANTIA <- NULL 
BASE_INTEGRADA$LUGAR_DEDUCCION <- NULL 
BASE_INTEGRADA$DESCRIPCION_PRESTAMO <- NULL
BASE_INTEGRADA$TIPO_SOCIO <- NULL
BASE_INTEGRADA$ESTADO_CIVIL <- NULL

# NORMALIZO ESTADO_CIVIL_FINAL
if ("ESTADO_CIVIL_FINAL" %in% names(BASE_INTEGRADA)) {
  BASE_INTEGRADA$ESTADO_CIVIL_FINAL <- str_squish(toupper(BASE_INTEGRADA$ESTADO_CIVIL_FINAL))
}

# TRANSFORMO CAPACIDAD_PAGO COMO FACTOR
if ("CAPACIDAD_PAGO" %in% names(BASE_INTEGRADA)) {
  BASE_INTEGRADA$CAPACIDAD_PAGO <- as.factor(BASE_INTEGRADA$CAPACIDAD_PAGO)
}

# TRANSFORMO NUMERO DE OPERACION A CARACTER
if ("NUMERO_OPERACION" %in% names(BASE_INTEGRADA)) {
  BASE_INTEGRADA$NUMERO_OPERACION <- as.character(BASE_INTEGRADA$NUMERO_OPERACION)
}

# REVISION FINAL
dim(BASE_INTEGRADA)
## [1] 53675    22
head(BASE_INTEGRADA)
##        NUMERO_OPERACION DIAS_MOROSOS INTERES_ACTUAL SALDO_PRESTAMO
## 182735       2022013967            0          11.00      5578670.0
## 188942       2022007532            0          11.15      2902136.0
## 134058       2018059235            0          11.00      1668058.5
## 124022       2020061615            0          11.00     16446664.7
## 160997       2022001328            0          10.00       901776.8
## 103065       2021017027            0          11.00      8121418.3
##        CATEGORIA_RIESGO PLAZO_OPERACION TIPO_TASA SALARIO_LIQUIDO       SEX
## 182735               A1             121      FIJA        459739.0  FEMENINO
## 188942               A1              96  VARIABLE        278562.0 MASCULINO
## 134058               B1             101      FIJA        661597.8  FEMENINO
## 124022               A1             145      FIJA        515852.5  FEMENINO
## 160997               A1              36      FIJA        559856.6  FEMENINO
## 103065               A1              72      FIJA        243593.4  FEMENINO
##        CONDICION_PLAZA OFICINA_TRAMITE CAPACIDAD_PAGO PORCENTAJE_COMPROMETIDO
## 182735       PROPIEDAD OFICINA CENTRAL              1                   16.92
## 188942       PROPIEDAD         CARTAGO              1                   66.62
## 134058       PROPIEDAD        GUAPILES              2                   81.16
## 124022       PROPIEDAD      SANTA CRUZ              1                   39.14
## 160997       PROPIEDAD OFICINA CENTRAL              1                   57.17
## 103065       PROPIEDAD         HEREDIA              1                   55.65
##        MOROSIDAD TIPO_SOCIO_FINAL LUGAR_DEDUCCION_FINAL SEGMENTO_CARTERA
## 182735        NO           ACTIVO  DEDUCCION_AUTOMATICA          CONSUMO
## 188942        NO           ACTIVO  DEDUCCION_AUTOMATICA          CONSUMO
## 134058        NO           ACTIVO  DEDUCCION_AUTOMATICA          CONSUMO
## 124022        NO       PENSIONADO  DEDUCCION_AUTOMATICA          CONSUMO
## 160997        NO       PENSIONADO  DEDUCCION_AUTOMATICA          CONSUMO
## 103065        NO       PENSIONADO  DEDUCCION_AUTOMATICA          CONSUMO
##           GARANTIA_FINAL ESTADO_CIVIL_FINAL PROVINCIA_HABITACION    GENERO EDAD
## 182735         PRENDARIA             CASADO             SAN JOSE  FEMENINO   43
## 188942         PRENDARIA            SOLTERO              CARTAGO MASCULINO   39
## 134058     APORT_CAPITAL         DIVORCIADO              HEREDIA  FEMENINO   45
## 124022 GARANTIA_ESPECIAL             CASADO           GUANACASTE  FEMENINO   59
## 160997             MIXTA            SOLTERO             SAN JOSE  FEMENINO   77
## 103065      POLIZA SSVMN            SOLTERO              HEREDIA  FEMENINO   78
str(BASE_INTEGRADA)
## 'data.frame':    53675 obs. of  22 variables:
##  $ NUMERO_OPERACION       : chr  "2022013967" "2022007532" "2018059235" "2020061615" ...
##  $ DIAS_MOROSOS           : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ INTERES_ACTUAL         : num  11 11.2 11 11 10 ...
##  $ SALDO_PRESTAMO         : num  5578670 2902136 1668058 16446665 901777 ...
##  $ CATEGORIA_RIESGO       : Factor w/ 8 levels "A1","A2","B1",..: 1 1 3 1 1 1 1 1 1 1 ...
##  $ PLAZO_OPERACION        : int  121 96 101 145 36 72 185 108 101 84 ...
##  $ TIPO_TASA              : Factor w/ 3 levels "FIJA","FIJA VARIABLE",..: 1 3 1 1 1 1 3 1 1 3 ...
##  $ SALARIO_LIQUIDO        : num  459739 278562 661598 515852 559857 ...
##  $ SEX                    : Factor w/ 2 levels "FEMENINO","MASCULINO": 1 2 1 1 1 1 2 1 2 1 ...
##  $ CONDICION_PLAZA        : Factor w/ 2 levels "INTERINO","PROPIEDAD": 2 2 2 2 2 2 2 2 1 2 ...
##  $ OFICINA_TRAMITE        : Factor w/ 13 levels "ALAJUELA","CARTAGO",..: 8 2 4 13 8 5 8 8 7 8 ...
##  $ CAPACIDAD_PAGO         : Factor w/ 4 levels "1","2","3","4": 1 1 2 1 1 1 1 1 1 1 ...
##  $ PORCENTAJE_COMPROMETIDO: num  16.9 66.6 81.2 39.1 57.2 ...
##  $ MOROSIDAD              : Factor w/ 2 levels "NO","SI": 1 1 1 1 1 1 1 1 1 1 ...
##  $ TIPO_SOCIO_FINAL       : Factor w/ 4 levels "ACTIVO","EXSOCIO",..: 1 1 1 4 4 4 4 1 1 1 ...
##  $ LUGAR_DEDUCCION_FINAL  : Factor w/ 2 levels "DEDUCCION_AUTOMATICA",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ SEGMENTO_CARTERA       : Factor w/ 4 levels "CONSUMO","TARJETAS",..: 1 1 1 1 1 1 4 4 1 2 ...
##  $ GARANTIA_FINAL         : Factor w/ 9 levels "APORT_CAPITAL",..: 9 9 1 5 7 8 6 5 5 2 ...
##  $ ESTADO_CIVIL_FINAL     : chr  "CASADO" "SOLTERO" "DIVORCIADO" "CASADO" ...
##  $ PROVINCIA_HABITACION   : Factor w/ 9 levels "","ALAJUELA",..: 9 3 6 5 9 6 5 9 7 6 ...
##  $ GENERO                 : Factor w/ 3 levels "","FEMENINO",..: 2 3 2 2 2 2 3 2 3 2 ...
##  $ EDAD                   : int  43 39 45 59 77 78 59 40 37 42 ...

FASE 2: MODELADO

# CORE PARA MODELADO

vars_id <- c("NUMERO_OPERACION")

vars_num <- c(
  "DIAS_MOROSOS",
  "SALDO_PRESTAMO",
  "PLAZO_OPERACION",
  "INTERES_ACTUAL",
  "SALARIO_LIQUIDO",
  "PORCENTAJE_COMPROMETIDO",
  "EDAD"
)

vars_cat <- c(
  "CATEGORIA_RIESGO",
  "CAPACIDAD_PAGO",
  "SEGMENTO_CARTERA",
  "GARANTIA_FINAL",
  "TIPO_TASA",
  "GENERO",
  "PROVINCIA_HABITACION"
)

vars_core <- intersect(c(vars_id, vars_num, vars_cat), names(BASE_INTEGRADA))

BASE_MODEL_CORE <- BASE_INTEGRADA %>%
  select(all_of(vars_core))

# NUMERICAS
vars_num_ok <- intersect(vars_num, names(BASE_MODEL_CORE))
BASE_MODEL_CORE[vars_num_ok] <- lapply(BASE_MODEL_CORE[vars_num_ok], function(x) as.numeric(as.character(x)))

# CATEGORICAS
vars_cat_ok <- intersect(vars_cat, names(BASE_MODEL_CORE))
BASE_MODEL_CORE[vars_cat_ok] <- lapply(BASE_MODEL_CORE[vars_cat_ok], as.factor)

# ELIMINO LOS NA
BASE_MODEL_CORE <- na.omit(BASE_MODEL_CORE)

# CREO BASE FINAL PARA FAMD (SIN VARIABLE ID)
BASE_FAMD <- BASE_MODEL_CORE %>% select(-any_of(vars_id))

kable(head(BASE_FAMD))
DIAS_MOROSOS SALDO_PRESTAMO PLAZO_OPERACION INTERES_ACTUAL SALARIO_LIQUIDO PORCENTAJE_COMPROMETIDO EDAD CATEGORIA_RIESGO CAPACIDAD_PAGO SEGMENTO_CARTERA GARANTIA_FINAL TIPO_TASA GENERO PROVINCIA_HABITACION
182735 0 5578670.0 121 11.00 459739.0 16.92 43 A1 1 CONSUMO PRENDARIA FIJA FEMENINO SAN JOSE
188942 0 2902136.0 96 11.15 278562.0 66.62 39 A1 1 CONSUMO PRENDARIA VARIABLE MASCULINO CARTAGO
134058 0 1668058.5 101 11.00 661597.8 81.16 45 B1 2 CONSUMO APORT_CAPITAL FIJA FEMENINO HEREDIA
124022 0 16446664.7 145 11.00 515852.5 39.14 59 A1 1 CONSUMO GARANTIA_ESPECIAL FIJA FEMENINO GUANACASTE
160997 0 901776.8 36 10.00 559856.6 57.17 77 A1 1 CONSUMO MIXTA FIJA FEMENINO SAN JOSE
103065 0 8121418.3 72 11.00 243593.4 55.65 78 A1 1 CONSUMO POLIZA SSVMN FIJA FEMENINO HEREDIA
str(BASE_FAMD)
## 'data.frame':    53675 obs. of  14 variables:
##  $ DIAS_MOROSOS           : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ SALDO_PRESTAMO         : num  5578670 2902136 1668058 16446665 901777 ...
##  $ PLAZO_OPERACION        : num  121 96 101 145 36 72 185 108 101 84 ...
##  $ INTERES_ACTUAL         : num  11 11.2 11 11 10 ...
##  $ SALARIO_LIQUIDO        : num  459739 278562 661598 515852 559857 ...
##  $ PORCENTAJE_COMPROMETIDO: num  16.9 66.6 81.2 39.1 57.2 ...
##  $ EDAD                   : num  43 39 45 59 77 78 59 40 37 42 ...
##  $ CATEGORIA_RIESGO       : Factor w/ 8 levels "A1","A2","B1",..: 1 1 3 1 1 1 1 1 1 1 ...
##  $ CAPACIDAD_PAGO         : Factor w/ 4 levels "1","2","3","4": 1 1 2 1 1 1 1 1 1 1 ...
##  $ SEGMENTO_CARTERA       : Factor w/ 4 levels "CONSUMO","TARJETAS",..: 1 1 1 1 1 1 4 4 1 2 ...
##  $ GARANTIA_FINAL         : Factor w/ 9 levels "APORT_CAPITAL",..: 9 9 1 5 7 8 6 5 5 2 ...
##  $ TIPO_TASA              : Factor w/ 3 levels "FIJA","FIJA VARIABLE",..: 1 3 1 1 1 1 3 1 1 3 ...
##  $ GENERO                 : Factor w/ 3 levels "","FEMENINO",..: 2 3 2 2 2 2 3 2 3 2 ...
##  $ PROVINCIA_HABITACION   : Factor w/ 9 levels "","ALAJUELA",..: 9 3 6 5 9 6 5 9 7 6 ...

FASE 3: METODO AFCM (FAMD) – REDUCCION DE DIMENSION

# APLICO FAMD AL ESTAR USANNDO VARIABLES MIXTAS

Modelo_FAMD <- FAMD(BASE_FAMD, ncp = 5, graph = FALSE)

# VER INERCIA
fviz_screeplot(Modelo_FAMD, addlabels = TRUE)

# VER VARIABLES
fviz_famd_var(Modelo_FAMD, repel = TRUE, ggtheme = theme_minimal())

# INDIVIDUOS
fviz_famd_ind(Modelo_FAMD, repel = TRUE, ggtheme = theme_minimal())

FASE 4: METODO CLUSTERING SOBRE COMPONENTES

# COMPONENTES DE INDIVIDUOS

componentes <- as.data.frame(Modelo_FAMD$ind$coord)

# HAGO UNA SELECCION DE P COMPONENTES DE 5 AL IGUAL QUE EL NCP
p <- 5
X <- componentes[, 1:p]

dim(X)
## [1] 53675     5
head(X)
##              Dim.1      Dim.2       Dim.3       Dim.4       Dim.5
## 182735 -0.60302142 -0.7636101 -0.58375852 -0.28978952  0.22331853
## 188942  0.32567050 -0.3631928 -0.56560100  0.06646286  0.05991201
## 134058  0.05957503 -0.6629466  2.01138748 -0.38317959 -0.77571909
## 124022 -1.24255147  0.3261432 -0.03823085 -0.46682160  0.05667013
## 160997  0.22571215 -1.5877282  0.24684448 -2.05173479  1.22596045
## 103065 -0.02702216 -0.9562729  0.74387783 -2.49249285  1.31238847

FASE 5: METODO K-MEDIAS (CODO DE JAMBU Y SILHOUETTE)

5.1 CODO/INERCIA

# CODO DE JAMBU SOBRE COMPONENTES

InerciaIC <- rep(0, 10)

for(k in 1:10){
  km <- kmeans(X, centers = k, nstart = 50)
  InerciaIC[k] <- km$tot.withinss
}

plot(InerciaIC, type = "b")

GENERO UNA SUBMUESTRA PARA LOS MODELOS

set.seed(123)

m_sub <- 8000 
idx_sub <- sample(seq_len(nrow(X)), size = min(m_sub, nrow(X)))

X_sub <- X[idx_sub, , drop = FALSE]
D_sub <- dist(X_sub)

5.2 SILHOUETTE PARA ENCONTRAR EL K OPTIMO

# SILHOUETTE PROMEDIO PARA SELECCIONAR k

sil <- rep(NA, 10)

for(k in 2:10){
  km_sub <- kmeans(X_sub, centers = k, nstart = 50)
  s <- silhouette(km_sub$cluster, D_sub)
  sil[k] <- mean(s[, 3])
}

plot(2:10, sil[2:10], type = "b")

k_opt <- which.max(sil)
k_opt
## [1] 3

FASE 6: K-MEDIAS FINAL SOBRE COMPONENTES Y TABLA CON LOS CLUSTER

# K-MEANS FINAL

Modelo_Kmeans <- kmeans(X, centers = k_opt, nstart = 50, iter.max = 500)

# HAGO TABLA CON EL CLUSTER
BASE_CLUSTER_CORE <- BASE_MODEL_CORE %>%
  mutate(CLUSTER = Modelo_Kmeans$cluster)

table(BASE_CLUSTER_CORE$CLUSTER)
## 
##     1     2     3 
##  3191 45505  4979
kable(head(BASE_CLUSTER_CORE))
NUMERO_OPERACION DIAS_MOROSOS SALDO_PRESTAMO PLAZO_OPERACION INTERES_ACTUAL SALARIO_LIQUIDO PORCENTAJE_COMPROMETIDO EDAD CATEGORIA_RIESGO CAPACIDAD_PAGO SEGMENTO_CARTERA GARANTIA_FINAL TIPO_TASA GENERO PROVINCIA_HABITACION CLUSTER
182735 2022013967 0 5578670.0 121 11.00 459739.0 16.92 43 A1 1 CONSUMO PRENDARIA FIJA FEMENINO SAN JOSE 2
188942 2022007532 0 2902136.0 96 11.15 278562.0 66.62 39 A1 1 CONSUMO PRENDARIA VARIABLE MASCULINO CARTAGO 2
134058 2018059235 0 1668058.5 101 11.00 661597.8 81.16 45 B1 2 CONSUMO APORT_CAPITAL FIJA FEMENINO HEREDIA 2
124022 2020061615 0 16446664.7 145 11.00 515852.5 39.14 59 A1 1 CONSUMO GARANTIA_ESPECIAL FIJA FEMENINO GUANACASTE 2
160997 2022001328 0 901776.8 36 10.00 559856.6 57.17 77 A1 1 CONSUMO MIXTA FIJA FEMENINO SAN JOSE 2
103065 2021017027 0 8121418.3 72 11.00 243593.4 55.65 78 A1 1 CONSUMO POLIZA SSVMN FIJA FEMENINO HEREDIA 2

FASE 7: VISUALIZACIONN DEL PLANO PRINCIPAL/SOBREPOSICION CON FAMD

# INDIVIDUOS FAMD COLOREADOS POR CLUSTER

fviz_famd_ind(
  Modelo_FAMD,
  habillage = as.factor(Modelo_Kmeans$cluster),
  repel = TRUE,
  ggtheme = theme_minimal(),
  legend.title = "Cluster"
)

FASE 8: APLICO UN CLUSTERING JERARQUICO WARD SOBRE COMPONENTES PARA VALIDAR

Nota: Para jerárquico y silhouette se estiman en submuestra por complejidad computacional, pero el modelo final (K-means) se entrena en el conjunto completo de la muestra.

# JERARQUICO (WARD) SOBRE COMPONENTES

hc <- hclust(D_sub, method = "ward.D2")

plot(hc, cex = 0.5)
rect.hclust(hc, k = k_opt)

grupos_hc <- cutree(hc, k = k_opt)
table(grupos_hc)
## grupos_hc
##    1    2    3 
## 6822  725  453
# COMPARACION DE ASIGNACIONES
table(
  Kmeans = Modelo_Kmeans$cluster[idx_sub],
  Jerarquico = grupos_hc
)
##       Jerarquico
## Kmeans    1    2    3
##      1   13    0  439
##      2 6808    0   14
##      3    1  725    0

FASE 9: METODO UMAP SOBRE COMPONENTES

# UMAP SOBRE COMPONENTES

n_neighbors <- min(100, max(15, floor(sqrt(nrow(X_sub)))))

cfg <- umap.defaults
cfg$n_neighbors <- n_neighbors
cfg$min_dist <- 0.1
cfg$n_components <- 2

um <- umap(X_sub, config = cfg)

UMAP2D <- as.data.frame(um$layout)
colnames(UMAP2D) <- c("UMAP1", "UMAP2")
UMAP2D$cluster <- as.factor(Modelo_Kmeans$cluster[idx_sub])

ggplot(UMAP2D, aes(x = UMAP1, y = UMAP2, color = cluster)) +
  geom_point(alpha = 0.6) +
  theme_minimal() +
  labs(title = "UMAP sobre componentes FAMD (submuestra)", color = "Cluster")

FASE 10: TABLAS PARA VER LOS CLUSTER

10.1 PERFIL NUMERICO

# PERFIL NUMERICO POR CLUSTER

perfil_num <- BASE_CLUSTER_CORE %>%
  group_by(CLUSTER) %>%
  summarise(
    n = n(),
    DIAS_MOROSOS_media = mean(DIAS_MOROSOS, na.rm = TRUE),
    SALDO_media = mean(SALDO_PRESTAMO, na.rm = TRUE),
    PLAZO_media = mean(PLAZO_OPERACION, na.rm = TRUE),
    INTERES_media = mean(INTERES_ACTUAL, na.rm = TRUE),
    SALARIO_media = mean(SALARIO_LIQUIDO, na.rm = TRUE),
    COMPROMISO_media = mean(PORCENTAJE_COMPROMETIDO, na.rm = TRUE),
    EDAD_media = mean(EDAD, na.rm = TRUE)
  )

kable(perfil_num)
CLUSTER n DIAS_MOROSOS_media SALDO_media PLAZO_media INTERES_media SALARIO_media COMPROMISO_media EDAD_media
1 3191 8.031025 23222033.1 263.5914 10.60798 442982.6 32160.774 48.66625
2 45505 4.808263 4366027.9 100.6710 11.02251 378485.9 1683.477 52.47553
3 4979 2.026712 973220.2 84.0000 16.80000 392354.7 6758.517 53.32456

10.2 Perfil categórico (frecuencias y porcentajes)

# ============================
# PERFIL CATEGORICO (FRECUENCIAS)
# ============================
perfil_cat <- function(data, var){
  data %>%
    count(CLUSTER, .data[[var]]) %>%
    group_by(CLUSTER) %>%
    mutate(porc = n / sum(n)) %>%
    ungroup()
}

vars_cat_perf <- c("CATEGORIA_RIESGO","CAPACIDAD_PAGO","SEGMENTO_CARTERA","GARANTIA_FINAL","TIPO_TASA","GENERO","PROVINCIA_HABITACION")
vars_cat_perf <- intersect(vars_cat_perf, names(BASE_CLUSTER_CORE))

for(v in vars_cat_perf){
  cat("\n\n### Variable:", v, "\n")
  print(kable(perfil_cat(BASE_CLUSTER_CORE, v)))
}
## 
## 
## ### Variable: CATEGORIA_RIESGO 
## 
## 
## | CLUSTER|CATEGORIA_RIESGO |     n|      porc|
## |-------:|:----------------|-----:|---------:|
## |       1|A1               |  2706| 0.8480100|
## |       1|A2               |    24| 0.0075212|
## |       1|B1               |   321| 0.1005954|
## |       1|B2               |    18| 0.0056409|
## |       1|C1               |    17| 0.0053275|
## |       1|C2               |    12| 0.0037606|
## |       1|D                |    14| 0.0043873|
## |       1|E                |    79| 0.0247571|
## |       2|A1               | 36376| 0.7993847|
## |       2|A2               |   864| 0.0189869|
## |       2|B1               |  5435| 0.1194374|
## |       2|B2               |   567| 0.0124602|
## |       2|C1               |   308| 0.0067685|
## |       2|C2               |   149| 0.0032744|
## |       2|D                |   356| 0.0078233|
## |       2|E                |  1450| 0.0318646|
## |       3|A1               |  3855| 0.7742519|
## |       3|A2               |   108| 0.0216911|
## |       3|B1               |   619| 0.1243222|
## |       3|B2               |    78| 0.0156658|
## |       3|C1               |    38| 0.0076321|
## |       3|C2               |    24| 0.0048202|
## |       3|D                |    48| 0.0096405|
## |       3|E                |   209| 0.0419763|
## 
## 
## ### Variable: CAPACIDAD_PAGO 
## 
## 
## | CLUSTER|CAPACIDAD_PAGO |     n|      porc|
## |-------:|:--------------|-----:|---------:|
## |       1|1              |  2835| 0.8884362|
## |       1|2              |   342| 0.1071764|
## |       1|3              |     8| 0.0025071|
## |       1|4              |     6| 0.0018803|
## |       2|1              | 40034| 0.8797715|
## |       2|2              |  5413| 0.1189540|
## |       2|3              |    26| 0.0005714|
## |       2|4              |    32| 0.0007032|
## |       3|1              |  4284| 0.8604137|
## |       3|2              |   681| 0.1367745|
## |       3|3              |     9| 0.0018076|
## |       3|4              |     5| 0.0010042|
## 
## 
## ### Variable: SEGMENTO_CARTERA 
## 
## 
## | CLUSTER|SEGMENTO_CARTERA |     n|      porc|
## |-------:|:----------------|-----:|---------:|
## |       1|CONSUMO          |    78| 0.0244437|
## |       1|VIVIENDA         |  3113| 0.9755563|
## |       2|CONSUMO          | 39868| 0.8761235|
## |       2|VEHICULO         |   935| 0.0205472|
## |       2|VIVIENDA         |  4702| 0.1033293|
## |       3|TARJETAS         |  4979| 1.0000000|
## 
## 
## ### Variable: GARANTIA_FINAL 
## 
## 
## | CLUSTER|GARANTIA_FINAL                    |     n|      porc|
## |-------:|:---------------------------------|-----:|---------:|
## |       1|CONTRATO DE CONTROL SOBRE CUENTAS |    15| 0.0047007|
## |       1|GARANTIA_ESPECIAL                 |     2| 0.0006268|
## |       1|HIPOTECARIA                       |  3173| 0.9943591|
## |       1|MIXTA                             |     1| 0.0003134|
## |       2|APORT_CAPITAL                     | 14451| 0.3175695|
## |       2|CONTRATO DE CONTROL SOBRE CUENTAS |   182| 0.0039996|
## |       2|FIDUCIARIA                        |  1851| 0.0406768|
## |       2|GARANTIA_ESPECIAL                 | 18326| 0.4027250|
## |       2|HIPOTECARIA                       |    31| 0.0006812|
## |       2|MIXTA                             |   366| 0.0080431|
## |       2|POLIZA SSVMN                      |  5757| 0.1265136|
## |       2|PRENDARIA                         |  4541| 0.0997912|
## |       3|APORT_CAPITAL                     |   491| 0.0986142|
## |       3|CONTRATO                          |  4196| 0.8427395|
## |       3|FIDUCIARIA                        |    28| 0.0056236|
## |       3|GARANTIA_ESPECIAL                 |   232| 0.0465957|
## |       3|POLIZA SSVMN                      |     3| 0.0006025|
## |       3|PRENDARIA                         |    29| 0.0058245|
## 
## 
## ### Variable: TIPO_TASA 
## 
## 
## | CLUSTER|TIPO_TASA     |     n|      porc|
## |-------:|:-------------|-----:|---------:|
## |       1|FIJA          |  1876| 0.5879035|
## |       1|VARIABLE      |  1315| 0.4120965|
## |       2|FIJA          | 35944| 0.7898912|
## |       2|FIJA VARIABLE |     1| 0.0000220|
## |       2|VARIABLE      |  9560| 0.2100868|
## |       3|VARIABLE      |  4979| 1.0000000|
## 
## 
## ### Variable: GENERO 
## 
## 
## | CLUSTER|GENERO    |     n|      porc|
## |-------:|:---------|-----:|---------:|
## |       1|          |    63| 0.0197430|
## |       1|FEMENINO  |  2306| 0.7226575|
## |       1|MASCULINO |   822| 0.2575995|
## |       2|          |   554| 0.0121745|
## |       2|FEMENINO  | 32331| 0.7104934|
## |       2|MASCULINO | 12620| 0.2773322|
## |       3|          |    65| 0.0130548|
## |       3|FEMENINO  |  3406| 0.6840731|
## |       3|MASCULINO |  1508| 0.3028721|
## 
## 
## ### Variable: PROVINCIA_HABITACION 
## 
## 
## | CLUSTER|PROVINCIA_HABITACION |     n|      porc|
## |-------:|:--------------------|-----:|---------:|
## |       1|ALAJUELA             |   708| 0.2218740|
## |       1|CARTAGO              |   464| 0.1454090|
## |       1|GUANACASTE           |   364| 0.1140708|
## |       1|HEREDIA              |   334| 0.1046694|
## |       1|LIMON                |   250| 0.0783453|
## |       1|PUNTARENAS           |   236| 0.0739580|
## |       1|SAN JOSE             |   835| 0.2616735|
## |       2|                     |     1| 0.0000220|
## |       2|ALAJUELA             |  8726| 0.1917591|
## |       2|CARTAGO              |  5024| 0.1104054|
## |       2|FLORIDA              |     1| 0.0000220|
## |       2|GUANACASTE           |  6075| 0.1335018|
## |       2|HEREDIA              |  5110| 0.1122954|
## |       2|LIMON                |  4558| 0.1001648|
## |       2|PUNTARENAS           |  4970| 0.1092188|
## |       2|SAN JOSE             | 11040| 0.2426107|
## |       3|ALAJUELA             |   880| 0.1767423|
## |       3|CARTAGO              |   553| 0.1110665|
## |       3|GUANACASTE           |   526| 0.1056437|
## |       3|HEREDIA              |   584| 0.1172926|
## |       3|LIMON                |   458| 0.0919863|
## |       3|PUNTARENAS           |   424| 0.0851577|
## |       3|SAN JOSE             |  1554| 0.3121109|

FASE 11: Radar

# ============================
# RADAR CON NUMERICAS (NORMALIZADAS 0-1)
# ============================
radar_base <- BASE_CLUSTER_CORE %>%
  group_by(CLUSTER) %>%
  summarise(across(all_of(vars_num_ok), ~mean(.x, na.rm = TRUE))) %>%
  as.data.frame()

rownames(radar_base) <- paste0("Cluster ", radar_base$CLUSTER)
radar_base$CLUSTER <- NULL

# Eliminar variables con varianza cero (si existieran)
radar_base <- radar_base[, sapply(radar_base, function(x) sd(x, na.rm = TRUE) > 0), drop = FALSE]

# Normalizar 0-1
radar_norm <- as.data.frame(lapply(radar_base, function(x){
  (x - min(x)) / (max(x) - min(x) + 1e-9)
}))

maximos <- rep(1, ncol(radar_norm))
minimos <- rep(0, ncol(radar_norm))
radar_plot <- rbind(maximos, minimos, radar_norm)

radarchart(
  radar_plot,
  axistype = 1,
  pcol = 1:nrow(radar_norm),
  plwd = 2,
  title = "Perfil numérico por clúster (normalizado)"
)

legend("topright", legend = rownames(radar_norm), bty = "n", lwd = 2, col = 1:nrow(radar_norm))

FASE 12: Exportar base final con clúster (muestra)

# ============================
# EXPORTAR RESULTADO FINAL (MUESTRA)
# ============================
BASE_FINAL_MUESTRA <- BASE_INTEGRADA %>%
  filter(row.names(BASE_INTEGRADA) %in% row.names(BASE_MODEL_CORE)) %>%
  mutate(CLUSTER = Modelo_Kmeans$cluster)

write.csv(BASE_FINAL_MUESTRA, "BASE_INTEGRADA_MUESTRA_CON_CLUSTER.csv")