Planteamiento de la problemática o inquietud

Nuestra investigación parte desde la observación que hemos realizado en el mercado financiero sobre lo dificíl que es para un joven empezando su vida laboral entrar al mundo crediticio debido a que las instituciones de intermediación financiera tienen estándares elevados para adquirir productos financieros, en este caso tarjetas de credito.

En nuestra institución se enfocan principalmente en clientes institucionales porque son los que le proveen mayores utilidades, por lo que los clientes “retail” no son el target principal del banco. En nuestro proyecto, utilizaremos una base de datos de 100,000 clientes para seleccionar un público de edades entre 20 a 25 años que sería un nuevo nicho que generaría mayores ingresos a lo largo del tiempo, tomando en cuenta que generaremos lealtad de marca al ofrecerles mejores beneficios que la competencia.

Objetivo General

Diseñar un producto de Tarjeta de Crédito enfocado en un público en edades de entre 20 a 25 años.

Objetivos Específicos

Seleccionar los mejores prospectos a fin de reducir el riesgo de default.

Evaluar a los prospectos para asignarles el producto que más se adecúe a sus necesidades.

Breve descripción de los datos

La data utilizada para el análisis contiene 100,000 observaciones y 35 variables, con sujetos con edades de entre 20 a 66 años.

Para fines de nuestro análisis filtraremos los datos por edades de entre 20 a 25 años.

Como se observa en el gráfico de más arriba, la distribución de las edades en ambos sexos es la misma para no tener diferencias por sexo. Vemos también que la mayoría de las observaciones se concentran en edades de 23 a 25 años.

Le mostramos a continuación la cantidad de sujetos por sexo:

Pueden apreciar que hay mas hombres que mujeres en edades de entre 20 a 25 años por lo que los hombres encabezaran los análisis posteriores.

En ese sentido, veámos como se distribuyen ambos sexos por edades:

Como se puede observar a medida que van aumentando las edades aumentan las obervaciones en cada una de las edades, por lo que la mayoría de las observaciones se encuentran en la edad de 25 años que es la edad máxima para aplicar para obtener la nueva tarjeta de crédito.

En el siguiente gráfico podrán observar la distribución de salarios por sexo y edad:

Como se observó en el gráfico anterior, los ingresos mayores son persividos por el sexo masculino. Se puede ver cierta relación entre las edades y el salario, es decir, a mayor edad mayor ingreso a excepción de algunos datos atípicos. En terminos generales, los ingresos obscilan entre DOP 17,352 A DOP 245,676.

Por otra parte veamos que relación se establece entre el score crediticio y los ingresos:

Antes que todo se debe explicar que es un score crediticio. El score crediticio es un puntaje que otorgan las sociedades de información crediticia a los consumidores de acuerdo a su comportamiento frente a sus obligaciones económicas, financieras, bancarias o comerciales. Este puntaje toma en cuenta diferentes factores relativos a dicho comportamiento, por lo que verlo enfrentado solo con los ingresos no va a indicar una relación concreta, como se observa en el gráfico de disperción.

Si podemos observar que el mayor volumen de observaciones se encuentran entre los 25,000 y 100,000 de ingresos y se observa que el mínimo score es de 656 puntos y el máximo es de 824 puntos.

Por otra parte, veamos como es el comportamiento de los posibles prospectos a analizar en cuanto a cantiad de tarjetas de crédito activas en el mercado por sexo:

En este gráfico se puede observar que la mayoría posee al menos 2 tarjetas de créditos activas en el mercado, sin embargo, un cliente puede tener activa una tarjeta de crédito y no utilizarla. Por esto, veamos que cantidad de esas tarjetas de crédito activas tienen un porcentaje de utilización por encima del 40%:

En este gráfico de dispersión se evidencia el comentario emitido anteriormente, puede haber personas que tengas varias tarjetas de crédito activas pero no significa que la utilicen todas, incluso, puede que la utilicen muy poco o no la utilicen. Esos clientes son buenos prospectos para evaluarlos y ofrecerles nuestro nuevo producto.

En ese orden de ideas, veámos el balance total promedio de utilización de los ultimos 6 meses que tienen las tarjetas de crédito activas de los prospectos:

Aquí también vemos que el balance total promedio no siempre se ve afectado por la cantidad de tarjetas de crédito activas, es decir, tener varias tarjetas de crédito no indica que aumente el consumo.

Para concluir esta exploración de los datos, veamos la variable resultado que es la capacidad de pago que determinó el buró de crédito que tiene el sujeto frente a sus ingresos dividiendolos por cantidad de cuentas en mora:

Podemos observar cierta relación positiva entre la capacidad de pago y los ingresos, de no ser porque para el cálculo de la capacidad de pago se toman en cuenta todas las variables antes mencionadas combinadas. De igual forma se evidencia que la muestra seleccionada en su mayoría tiene 0 cuentas activas en mora por lo que es un buen indicador para proceder con la selección de los sujetos adecuados que permitan reducir el riesgo de default.

Para seleccionar la muestra inicial para el proyecto debemos establecer los criterios o parámetros que se deben cumplir para poder optar por una de nuestras Tarjetas de Crédito. Primero tomaremos en cuenta el ingreso estimado, este deberá se mayor o igual a DOP$ 25,000. Otro factor es el CVScore, tiene que estar entre 650 y 750, la cantidad de mora máxima debe ser 0, la cantidad de Tarjetas de Crédito activas tiene que ser al menos 1, que nunca haya estado en atraso, que tenga solo 1 prestamo activo y que el total de la deuda que tenga sea 3 veces menor a su ingreso estimado.

Ya que tenemos la muestra que utilizaremos para ofrecer nuestro nuevo producto, ahora necesitamos establecer un limite para el producto. Esto lo realizaremos en base a la columna Balance Total Promedio en Tarjetas de Crédito en los ultimos 6 meses.

##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##       0    1014    2645    4677    6220   47791

En la distribución notamos que la mayoría se concentra por debajo de los DOP 10,000 en Balance Total promedio y que hay varios valores fuera de la media por lo que crearemos tres sub categorias de tarjeta baja, media y superior.

Para la baja, utilizaremos como límite para las tarjetas de crédito ofrecidas DOP 10,000, los criterios para esta subcategoría son que el Balance Total Promedio sea mayor a 0 y menor o igual que DOP 20,000. Para la media, utilizaremos como límite para las tarjetas de crédito ofrecidas DOP 20,000, los criterios para esta subcategoría son que el Balance Total Promedio sea mayor que DOP 20,000 y menor o igual a DOP 40,000. Para la superior, utilizaremos como límite para las tarjetas de crédito ofrecidas DOP 30,000,los criterios para esta subcategoría son que el Balance Total Promedio sea mayor a DOP 40,000 y menor o igual que DOP 60,000.

Los que tienen 0 en su Balance Total Promedio serán la clase Beginner estos obtendrán una tarjeta de crédito con un limite de DOP 5,000 y serán atendidos de manera especial para desarrollar nuestro propósito que es crear fidelidad de marca con los que están iniciando su vida en el mercado financiero.

Para ver como están compuestas las clases que acabamos de crear, veámos como se comporta el estimador de ingresos respecto a la clase recien creada.

Como se puede apreciar en el diagrama de puntos anterior, las clases creadas responden a una relación con el ingreso, debido al poder adquisitivo que tiene el sujeto.

Ahora veámos la cantidad de cada una de las clases en nuestra selección:

Como se puede observar más arriba, el 82% de nuestra selección fue de clase baja y solo un 0.7% fue de clase superior.

ahora veámos la misma gráfica por género:

Podemos identificar que dentro de nuestra selección hay mas hombres que mujeres, sin embargo la clase media está compuesta solo de mujeres.

En el gráfico anterior se evidencia que hay cierta relación entre las clases creadas para otorgar tarjetas de créditos a nuestros nuevos clientes y los ingresos estimados por el buró de crédito, sin embargo, en la clase beginner y bajar se puede notar que hay varios valores atípicos, debido a que la clase no solo se basa en el ingreso y puede que haya clientes con alto poder adquisitivo pero con mucha deuda adquirida en el mercado financiero.

## 
##          0          1 
## 0.01470588 0.98529412
## 
##          0          1 
## 0.04477612 0.95522388
## 
## Call:
## glm(formula = clase ~ `Balance_Total_ promedio TC últ 6 meses` + 
##     `Estimador de Ingresos` + CVScore, family = "binomial", data = sel_train)
## 
## Deviance Residuals: 
##        Min          1Q      Median          3Q         Max  
## -2.647e-05   2.110e-08   2.110e-08   2.110e-08   2.970e-05  
## 
## Coefficients:
##                                            Estimate Std. Error z value Pr(>|z|)
## (Intercept)                               1.367e+03  1.733e+06   0.001    0.999
## `Balance_Total_ promedio TC últ 6 meses` -4.056e-03  3.687e+00  -0.001    0.999
## `Estimador de Ingresos`                   1.009e-03  4.232e+00   0.000    1.000
## CVScore                                  -1.808e+00  2.279e+03  -0.001    0.999
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1.0424e+01  on 67  degrees of freedom
## Residual deviance: 2.2021e-09  on 64  degrees of freedom
## AIC: 8
## 
## Number of Fisher Scoring iterations: 25
## bchats_class
##  0  1 
##  3 64

En el gráfico que muestra los valores predichos por el modelo se puede apreciar que el modelo predijo mal uno de los casos con nivel medio o superior, esto debido a que no tenemos suficientes observaciones con esta clase.

## Loading required package: lattice
## 
## Attaching package: 'caret'
## The following object is masked from 'package:purrr':
## 
##     lift
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  0  1
##          0  2  1
##          1  1 63
##                                           
##                Accuracy : 0.9701          
##                  95% CI : (0.8963, 0.9964)
##     No Information Rate : 0.9552          
##     P-Value [Acc > NIR] : 0.4181          
##                                           
##                   Kappa : 0.651           
##                                           
##  Mcnemar's Test P-Value : 1.0000          
##                                           
##             Sensitivity : 0.66667         
##             Specificity : 0.98438         
##          Pos Pred Value : 0.66667         
##          Neg Pred Value : 0.98438         
##              Prevalence : 0.04478         
##          Detection Rate : 0.02985         
##    Detection Prevalence : 0.04478         
##       Balanced Accuracy : 0.82552         
##                                           
##        'Positive' Class : 0               
## 

En la matriz de confunción se puede ver que los resultados muestran un nivel de serteza alto, además que la especificidad del modelo es de 1, por lo que en terminos generales podemos inferir que nuestro modelo es bueno.

La curva ROC de igual forma nos muestra que el modelo es muy bueno ya que el ratio de los verdaderos positivos se mantiene muy cerca de 1 solo con un pequeño reajuste que debió de darse por la predicción incorrecta que antes mencionamos.

Random Forest

## 
##  0  1 
##  1 67
## 
##  0  1 
##  3 64
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.2'
## (as 'lib' is unspecified)
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.2'
## (as 'lib' is unspecified)
## randomForest 4.7-1.1
## Type rfNews() to see new features/changes/bug fixes.
## 
## Attaching package: 'randomForest'
## The following object is masked from 'package:dplyr':
## 
##     combine
## The following object is masked from 'package:ggplot2':
## 
##     margin
## 
## Call:
##  randomForest(x = train_data[-1], y = train_data$clase, ntree = 500) 
##                Type of random forest: regression
##                      Number of trees: 500
## No. of variables tried at each split: 1
## 
##           Mean of squared residuals: 0.01591498
##                     % Var explained: -9.84
##    y_pred
##     0.746133333333333 0.766 0.884 0.919966666666667 0.922 0.934 0.9523 0.974
##   0                 1     2     0                 0     0     0      0     0
##   1                 0     0     1                 2     1     1      1     1
##    y_pred
##     0.978 0.98 0.982133333333333 0.988 0.99 0.990133333333333 0.998  1
##   0     0    0                 0     0    0                 0     0  0
##   1     1    1                 1     1    1                 1     6 45

##                                        IncNodePurity
## Estimador de Ingresos                      0.1912677
## CVScore                                    0.1338052
## Balance_Total_ promedio TC últ 6 meses     0.5957722

Aqui de igual forma podemos observar que en la matriz de consfusión se muestra que el modelo confunde un 0 con un 1 por lo anteriormente mencionado. También podemos ver que la variable mas importante o destacable para el modelo es el balance promedio de utilización de tarjetas de crédito.

Diccionario de base de datos

  1. Nacionalidad: País de nacimiento del sujeto.

  2. Edad: Años de edad del sujeto.

  3. Sexo: Sexo del sujeto.

  4. CVScore: Puntaje crediticio ofrecido por el buró de crédito.

  5. Estimador de Ingresos: Cálculo realizado por el buró de crédito para estimar los ingresos del sujeto de acuerdo a su comportamiento de consumo.

  6. Mora Máxima Actual: Cantidad de veces máxima que ha estado en condición de mora.

  7. Veces_atraso_30: Cantidad de veces en atraso hasta 30 dias.

  8. Veces_atraso_60: Cantidad de veces en atraso hasta 60 dias.

  9. Veces_atraso_90: Cantidad de veces en atraso hasta 90 dias.

  10. Veces_atraso_+90: Cantidad de veces en atraso a mas de 90 dias.

  11. Cantidad de Cuentas Activas en Mora: Cantidad de cuentas en estado de mora que posee el sujeto.

  12. Cantidad_TC_Activa_Mercado: Cantidad de tarjetas de crédito que el sujeto tienen activas en el sistema financiero.

  13. Cantidad_PR_Activos_Mercado: Cantidad de préstamos que el sujeto tienen activas en el sistema financiero.

14.Total_Deuda_Mercado_RD: Deuda total en el mercado financiero de la República Dominicana.

15.Total_Deuda_Mercado_US: Deuda total en el mercado financiero de Estados Unidos.

16.Total_Limites_TC_Activas_RD: Total de límite en tarjetas de crédito activas en pesos dominicanos.

17.Total_Limites_TC_Activas_US: Total de límite en tarjetas de crédito activas en dólares estadounidenses.

18.Total_Adeudado_TC_RD: Total adeudado por el sujeto en tarjetas de crédito en pesos dominicanos.

19.Total_Adeudado_TC_US: Total adeudado por el sujeto en tarjetas de crédito en dólares estadounidenses.

20.Total_Adeudado_PR_RD: Total adeudado por el sujeto en préstamos en pesos dominicanos.

21.Total_Adeudado_PR_US: Total adeudado por el sujeto en préstamos en dólares estadounidenses.

22.Total_Cuotas_PR_RD: Suma total de cuotas de préstamos en pesos dominicanos.

23.Total_Cuotas_PR_US: Suma total de cuotas de préstamos en dólares estadounidenses.

24.Total_Cuotas_PR_Consumo_RD: Suma total de cuotas de préstamos de consumo en pesos dominicanos.

25.Total_Cuotas_PR_Hipotecario_RD: Suma total de cuotas de préstamos hipótecarios en pesos dominicanos.

26.Total_Cuotas_PR_LíneasCrédito_RD: Suma total de cuotas de préstamos con líneas de crédito en pesos dominicanos.

27.Total_Cuotas_PR_Comerciales_RD: Suma total de cuotas de préstamos comerciales en pesos dominicanos.

28.Cantidad de indagaciones: Cantidad de búsquedas del perfil crediticio del sujeto realizadas por las diferentes instituciones financieras.

29.Cantidad TC activas sobre 40% utilización: Cantidad de tarjetas de créditos activas con 40% o más de consumo en base al límite de crédito de la tarjeta.

30.Balance_Total_promedio TC últ 6 meses: Balance total promedio de tarjetas de crédito consumido en los último seis meses.

31.Ingreso ajustado: Cálculo realizado por el buró de crédito tomando en cuenta la situación financiera del sujeto.

32.Capacidad de Pago Nueva TC: Cantidad de veces que el sujeto tiene la capacidad de pagar una nueva tarjeta de crédito.

33.Resultado:Capacidad de pago que determinó el buró de crédito que tiene el sujeto.

34.Decisión: Elección de aprobar o rechazar al sujeto de acuerdo a parámetros establecidos por el buró de crédito.

35.Motivo_de_Rechazo: Razón por la que se rechazó el sujeto.

Anexos

ggplotly(ggplot(data, aes(x = factor(Sexo), y = Edad)) + geom_boxplot() +
  labs(x = "Sexo",
       title = "Distribución de edades por sexo"
       ))

ggplot(data = filter(data,Edad >= 20 & Edad <= 25), 
       aes(x = factor(Sexo), 
           fill = factor(Sexo))) + 
  geom_bar(position = "dodge")+
  labs(x = "Sexo",
       y = "Cantidad",
       title = "Cantidad de Sujetos por Sexo",
       caption = "Datos filtrados por edades de entre 20 a 25 años",
       fill = "Sexo")

ggplot(data = filter(data,Edad >= 20 & Edad <= 25), 
       aes(x = factor(Edad), 
           fill = factor(Sexo))) + 
  geom_bar(position = "dodge")+
  labs(x = "Edad",
       y = "Cantidad",
       title = "Distribución de Edades por Sexo",
       fill = "Sexo")


ggplot(filter(data,Edad >= 20 & Edad <= 25), aes(x = Edad, y = `Estimador de Ingresos`)) + 
  geom_point(aes(color = factor(Sexo))) +
  labs(
    x = "Edad", 
    y = "Ingresos",
    title = "Edades e Ingresos por Sexo",
    color = "Sexo",
    caption = "Los ingresos son estimaciones realizadas por el buró de crédito"
  )

ggplot(filter(data,Edad >= 20 & Edad <= 25), aes(x = Edad, y = `Estimador de Ingresos`)) + 
  geom_point(aes(color = factor(Sexo))) +
  labs(
    x = "Edad", 
    y = "Ingresos",
    title = "Edades e Ingresos por Sexo",
    color = "Sexo",
    caption = "Los ingresos son estimaciones realizadas por el buró de crédito"
  )

ggplot(filter(data,Edad >= 20 & Edad <= 25), aes(x = `Estimador de Ingresos`, y = CVScore)) + 
  geom_point(aes(color = factor(Sexo))) +
  labs(
    x = "Ingresos", 
    y = "Score Crediticio", 
    color = "Sexo",
    title = "Ingresos vs Score Crediticio",
    subtitle = "Sujetos en edades entre 20 a 25 años"
  )

ggplot(data = filter(data,Edad >= 20 & Edad <= 25), 
       aes(x = factor(Cantidad_TC_Activas_Mercado), 
           fill = factor(Sexo))) + 
  geom_bar(position = "dodge")+
  labs(x = "Tarjetas de Crédito Activas en el Mercado",
       y = "Cantidad",
       fill = "Sexo",
       title = "Cantidad de Tarjetas de Crédito Activas en el Mercado por Sexo")

ggplot(filter(data,Edad >= 20 & Edad <= 25), aes(x = Cantidad_TC_Activas_Mercado, y = `Cantidad TC activas sobre 40% utilización`)) + 
  geom_point(aes(color = factor(Sexo))) +
  labs(
    x = "Tarjetas de Crédito Activas", 
    y = "Tarjetos de Crédito utilizadas sobre 40%", 
    color = "Sexo",
    title = "Tarjetas de Crédito Activas vs Tarjetas Utilizadas",
    subtitle = "Tarjetas utilizadas mas de su 40% de capacidad"
  )

ggplot(filter(data,Edad >= 20 & Edad <= 25), aes(x = Cantidad_TC_Activas_Mercado, y = `Balance_Total_ promedio TC últ 6 meses`/1000)) + 
  geom_point(aes(color = factor(Sexo))) +
  labs(
    x = "Tarjetas de Crédito Activas", 
    y = "Balance Total Promedio de Utilización en miles", 
    color = "Sexo",
    title = "Tarjetas de Crédito Activas vs Balance Promedio de Utilización",
    subtitle = "Balance en base a los últimos 6 meses"
  )

ggplot(filter(data,Edad >= 20 & Edad <= 25), aes(x = Cantidad_TC_Activas_Mercado, y = `Balance_Total_ promedio TC últ 6 meses`/1000)) + 
  geom_point(aes(color = factor(Sexo))) +
  labs(
    x = "Tarjetas de Crédito Activas", 
    y = "Balance Total Promedio de Utilización en miles", 
    color = "Sexo",
    title = "Tarjetas de Crédito Activas vs Balance Total Promedio de Utilización",
    subtitle = "Balance en base a los últimos 6 meses"
  )

ggplot(filter(data,Edad >= 20 & Edad <= 25), aes(x = `Estimador de Ingresos`, y = Resultado/1000)) + 
  geom_point(aes(color = factor(`Cantidad de cuentas activas en mora`))) +
  labs(
    x = "Ingresos", 
    y = "Capacidad de pago (en miles DOP$)", 
    color = "Cuentas en Mora",
    title = "Ingresos frente a Capacidad de Pago",
    subtitle = "Por Cuentas en Mora",
    caption = "Los Ingresos son estimaciones realizadas por el buró de crédito"
  )

data.seleccion <- filter(data,`Estimador de Ingresos` >= 25000 & CVScore >=650 & CVScore <= 750 & `Mora_Maxima actual` == 0 & Cantidad_TC_Activas_Mercado <= 1 & Veces_Atraso_30 == 0 & Veces_Atraso_60 == 0 & Veces_Atraso_90 == 0 & `Veces_Atraso_+90` == 0 & Cantidad_PR_Activos_Mercado <= 1 & Total_Deuda_Mercado_RD*3 < `Estimador de Ingresos`)

summary(data.seleccion$`Balance_Total_ promedio TC últ 6 meses`)

ggplot(data.seleccion, aes(y = `Balance_Total_ promedio TC últ 6 meses`)) + geom_boxplot() +
  labs(title = "Distribución del Balance Total Promedio en TC",
       subtitle = "Utilización en los últimos 6 meses"
       )

data.seleccion <- data.seleccion %>% 
  mutate(clase = case_when(
    `Balance_Total_ promedio TC últ 6 meses` == 0 ~ "beginner",
    `Balance_Total_ promedio TC últ 6 meses` > 0 & `Balance_Total_ promedio TC últ 6 meses` <= 20000 ~ "baja",
     `Balance_Total_ promedio TC últ 6 meses` > 20000 & `Balance_Total_ promedio TC últ 6 meses` <= 40000 ~ "media",
     `Balance_Total_ promedio TC últ 6 meses` > 40000 & `Balance_Total_ promedio TC últ 6 meses` <= 60000 ~ "superior",
  ))

ggplot(data.seleccion, aes(x = `Estimador de Ingresos`, y = `Balance_Total_ promedio TC últ 6 meses`)) + 
  geom_point(aes(color = factor(clase))) +
  labs(
    x = "Estimador de Ingresos", 
    y = "Balance Promedio de Utilización TC", 
    color = "Clase TC",
    title = "Ingresos frente a Balance Total Promedio",
    subtitle = "Por Clase TC",
    caption = "Los Ingresos son estimaciones realizadas por el buró de crédito"
  )

pct_format = scales::percent_format(accuracy = .1)
cols_insp = c("beginner" = "skyblue",
              "baja" = "deepskyblue",
              "media" = "dodgerblue",
              "superior" = "steelblue4")

ggplot(data.seleccion, 
       aes(x = clase,
           fill = clase)) + 
  geom_bar(position = "dodge")+
 geom_text(aes(
      label = sprintf(
        '%d (%s)',
        ..count..,
        pct_format(..count.. / sum(..count..)))),
    stat = 'count',
    colour = 'black',
    size = 4,
    position = position_stack(vjust = 0.9)) + 
  scale_fill_manual(values = cols_insp)+
  labs(x = "Clase TC",
       y = "Cantidad",
       title = "Distribución de Clases")+
  theme_light()

ggplot(data.seleccion, 
       aes(x = clase, 
           fill = factor(Sexo))) + 
  geom_bar(position = "dodge")+
  labs(x = "Clase TC",
       y = "Cantidad",
       title = "Distribución de Clases por Sexo",
       fill = "Sexo")+
  geom_text(aes(
      label = sprintf(
        '%d (%s)',
        ..count..,
        pct_format(..count.. / sum(..count..)))),
    stat = 'count',
    colour = 'black',
    size = 4,
    position = position_stack(vjust = 0.5))+
  theme_light()

library("ggpubr")
library(ggplot2)
ggboxplot(data.seleccion, x = "clase", y = "Estimador de Ingresos", 
          color = "clase", palette = ("Dark2"),
          order = c("beginner", "baja", "media","superior"),
          ylab = "Estimador Ingresos", xlab = "Clase TC", title = "Distribución de Clases TC por Ingresos Estimados")

data.seleccion$clase <- case_when(
  data.seleccion$clase == "beginner"~1,
  data.seleccion$clase == "baja"~1,
  data.seleccion$clase == "media"~0,
  data.seleccion$clase == "superior"~0
)
data.seleccion$clase <- as.factor(data.seleccion$clase)

set.seed(1234, kind = "Mersenne-Twister") #Fijar semilla 
index <- caret::createDataPartition(data.seleccion$clase, p=0.5, list = FALSE)
sel_train <- data.seleccion[index, ]
sel_test <- data.seleccion[-index, ]

prop.table(table(sel_train$clase))
prop.table(table(sel_test$clase))

modsel <- glm(clase ~ `Balance_Total_ promedio TC últ 6 meses` + `Estimador de Ingresos` + CVScore, family = "binomial", data = sel_train)
summary(modsel)
anova(modsel)

bchats <- predict(modsel, newdata = sel_test, type = "response")
bchats_class <- factor(ifelse(bchats > 0.5, 1,0),
                       levels = c(0,1))
table(bchats_class)
bchats_link <- predict(modsel, newdata = sel_test, type = "link")
score_data <- data.frame(link = bchats_link,
                         response = bchats,
                         class = sel_test$clase,
                         stringsAsFactors = FALSE)
score_data %>% 
  ggplot(aes(link, response, col = class)) +
  geom_point() +
  theme(panel.background = element_blank())

#Actuales fuera de muestra
bc_actuals <- sel_test$clase

library(caret)
confusionMatrix(bchats_class,bc_actuals)

library(ROCR)
pred <- prediction(bchats, bc_actuals)
perf <- performance(pred,"tpr","fpr")
plot(perf)

data_arbol <- select(data.seleccion,clase,`Estimador de Ingresos`,CVScore,`Balance_Total_ promedio TC últ 6 meses`)

set.seed(1234, kind = "Mersenne-Twister")
index2 <- sample(nrow(data_arbol), nrow(data_arbol)*0.7)
train_data <- data_arbol[index,]
test_data <- data_arbol[-index,]
table(train_data$clase)
table(test_data$clase)

# Installing package
install.packages("caTools")       # For sampling the dataset
install.packages("randomForest")  # For implementing random forest algorithm
  
# Loading package
library(caTools)
library(randomForest)
  
# Fitting Random Forest to the train dataset
set.seed(120)  # Setting seed
classifier_RF = randomForest(x = train_data[-1],
                             y = train_data$clase,
                             ntree = 500)
  
classifier_RF
  
# Predicting the Test set results
y_pred = predict(classifier_RF, newdata = test_data[-1])
  
# Confusion Matrix
confusion_mtx <-  table(test_data$clase, y_pred)
confusion_mtx
  
# Plotting model
plot(classifier_RF)
  
# Importance plot
importance(classifier_RF)
  
# Variable importance plot
varImpPlot(classifier_RF)