Introducción

Un banco necesita poder tener la certeza de que la persona a la que le preste dinero se lo va a poder pagar, al final de cuentas el banco es un negocio y no es una caridad, por lo que necesita hacer dinero. La principal fuente de ingreso de los bancos es el otorgar créditos, ya sea a personas físicas o a personas morales, y depende de qué tan bien sepa hacerlo si será un banco exitoso o no, es por ello que se necesitan modelos que nos permitan acercarnos más a tener éxito en el negocio.

Por ello mediante la base de datos que obtuvimos de ciertas campañas de mercadotecnia en la que se habló con algunos clientes, podemos identificar ciertos patrones o hacer ciertos análisis que nos van a permitir detemrinar cuál es el tipo de cliente al que queremos acercarnos y al que quisiéramos poder otorgar u ofrecer un crédito en un futuro cercano.

Librerías

Primero importaremos las librerías que estaremos utilizando, en caso de no tenerlas instaladas simplemente hay que eliminar los “#” del código que dice instalar.

#install.packages("tidyverse")
#install.packages("dplyr")
#install.packages("ggplot2")
#install.packages("summarytools")

library(tidyverse)
library(dplyr)
library(ggplot2)
library(summarytools)

Llamar base de datos

Una vez llamadas las librerías procedemos a llamar la base de datos y la almacenamos en una variable llamada df o “dataframe”.

df <- read.csv("C:\\Users\\usuario\\Documents\\1 Tec\\Módulo 3\\bank.csv")

Entender los datos

Llamaremos a un resumen del dataframe completo para poder comprender las variables que tenemos y con las que estaremos trabajando.

glimpse(df)
## Rows: 4,521
## Columns: 17
## $ age       <int> 30, 33, 35, 30, 59, 35, 36, 39, 41, 43, 39, 43, 36, 20, 31, …
## $ job       <chr> "unemployed", "services", "management", "management", "blue-…
## $ marital   <chr> "married", "married", "single", "married", "married", "singl…
## $ education <chr> "primary", "secondary", "tertiary", "tertiary", "secondary",…
## $ default   <chr> "no", "no", "no", "no", "no", "no", "no", "no", "no", "no", …
## $ balance   <int> 1787, 4789, 1350, 1476, 0, 747, 307, 147, 221, -88, 9374, 26…
## $ housing   <chr> "no", "yes", "yes", "yes", "yes", "no", "yes", "yes", "yes",…
## $ loan      <chr> "no", "yes", "no", "yes", "no", "no", "no", "no", "no", "yes…
## $ contact   <chr> "cellular", "cellular", "cellular", "unknown", "unknown", "c…
## $ day       <int> 19, 11, 16, 3, 5, 23, 14, 6, 14, 17, 20, 17, 13, 30, 29, 29,…
## $ month     <chr> "oct", "may", "apr", "jun", "may", "feb", "may", "may", "may…
## $ duration  <int> 79, 220, 185, 199, 226, 141, 341, 151, 57, 313, 273, 113, 32…
## $ campaign  <int> 1, 1, 1, 4, 1, 2, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 5, 1, 1, 1, …
## $ pdays     <int> -1, 339, 330, -1, -1, 176, 330, -1, -1, 147, -1, -1, -1, -1,…
## $ previous  <int> 0, 4, 1, 0, 0, 3, 2, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 2, 0, 1, …
## $ poutcome  <chr> "unknown", "failure", "failure", "unknown", "unknown", "fail…
## $ y         <chr> "no", "no", "no", "no", "no", "no", "no", "no", "no", "no", …

Con esto vemos que estamos trabajando con 4,521 registros de 17 variables, la mayoría son texto caracter y algunos sí son variables numéricas.

Análisis de la información

El punto de este análisis será el de generar dos propuestas hacia la empresa para mejorar su operación y con ello sus rendimientos y su éxito a través de los años, por eso queremos comprender primero la muestra de la población con la que estamos trabajando, por lo que analizaremos ciertas variables individualmente.

Edad de la muestra

Con una diagrama de caja y bigotes nos daremos cuenta de los cuartiles en los que caen las edades de los posibles clientes y veremos medidas de tendencia.

ggplot(df, aes(y=age, fill="coral")) + geom_boxplot()

Con la gráfica observamos que la edad está un poco dispersa, pero se concentra en un 50% en un rango aproximado de entre los 33 y los 49 años, teniendo la media en una edad aproximada de 39 años. Con algunos datos atípicos que llegan de los 75 hasta los casi 90 años, con una edad mínima de unos 19 años.

Esto nos permite entender a la muestra que se nos dió y con ello podemos comenzar una análisis más profundo, como saber cuál es son los rangos por nivel educativo.

ggplot(df, aes(x=education, y=age, fill = education)) + geom_boxplot() + stat_summary(fun = "mean", geom = "point", shape = 16, size = 2, color = "black")

Con esta última gráfica observamos que tienen un menor rango intercuartil los niveles educativos secundario y terciario junto con una media más cercana a la mediana de la muestra. Por lo que sería conveniente enfocarnos un poco más en esos niveles educativos.

Vivienda

Queremos también conocer los activos de nuestra muestra, lo que haremos de igual manera basado por nivel educativo, ya que ya segmentamos más nuestra muestra a secundario y terciario para atacar a un segmento más joven y con menos dispersión.

ggplot(df, aes(x=housing, y=age, fill = housing)) + geom_boxplot() + stat_summary(fun = "mean", geom = "point", shape = 16, size = 2, color = "black")

Observamos que la media no se está separada de una forma considerable o alarmante de la mediana y que el 50% de la muestra se mantiene no dispersa, por lo que el utilizar esta varriable después no nos afectaría o sesgaría la información. Lo mismo haremos con los créditos y el default.

Créditos

ggplot(df, aes(x=loan, y=age, fill = loan)) + geom_boxplot() + stat_summary(fun = "mean", geom = "point", shape = 16, size = 2, color = "black")

Default

ggplot(df, aes(x=default, y=age, fill = default)) + geom_boxplot() + stat_summary(fun = "mean", geom = "point", shape = 16, size = 2, color = "black")

Ambos, el crédito y el default, son variables que no sesgarían nuestro análisis, por los que los utilizaremos en una tabla cruzada para poder analizar más la información financiera de los posibles clientes.

Información financiera

Tablas Cruzadas

Ya que conocemos un poco más la muestra con la que estamos trabajando es más sencillo saber cuáles variables podemos aplicar a cuál punto de la muestra para poder obtener la información que necesitamos, en este caso información financiera de la persona.

Para esto haremos una tabla cruzada sobre el default y la vivienda.

ctable(
  x = df$default,
  y = df$housing,
  prop = "c"
)
## Cross-Tabulation, Column Proportions  
## default * housing  
## Data Frame: df  
## 
## --------- --------- --------------- --------------- ---------------
##             housing              no             yes           Total
##   default                                                          
##        no             1931 ( 98.4%)   2514 ( 98.2%)   4445 ( 98.3%)
##       yes               31 (  1.6%)     45 (  1.8%)     76 (  1.7%)
##     Total             1962 (100.0%)   2559 (100.0%)   4521 (100.0%)
## --------- --------- --------------- --------------- ---------------

Esta información por si sola no nos dice mucho, por lo que ahora utilizaremos lo que ya habíamos decidido y la segmentaremos por los niveles educativos.

stby(
  list(
    x = df$housing,
    y = df$default
  ),
  INDICES = df$education,
  FUN = ctable,
)
## Cross-Tabulation, Row Proportions  
## housing * default  
## Data Frame: df  
## Group: education = primary  
## 
## --------- --------- ------------- ----------- --------------
##             default            no         yes          Total
##   housing                                                   
##        no             291 (98.6%)    4 (1.4%)   295 (100.0%)
##       yes             377 (98.4%)    6 (1.6%)   383 (100.0%)
##     Total             668 (98.5%)   10 (1.5%)   678 (100.0%)
## --------- --------- ------------- ----------- --------------
## 
## Group: education = secondary  
## 
## --------- --------- -------------- ----------- ---------------
##             default             no         yes           Total
##   housing                                                     
##        no              857 (97.8%)   19 (2.2%)    876 (100.0%)
##       yes             1403 (98.1%)   27 (1.9%)   1430 (100.0%)
##     Total             2260 (98.0%)   46 (2.0%)   2306 (100.0%)
## --------- --------- -------------- ----------- ---------------
## 
## Group: education = tertiary  
## 
## --------- --------- -------------- ----------- ---------------
##             default             no         yes           Total
##   housing                                                     
##        no              680 (99.0%)    7 (1.0%)    687 (100.0%)
##       yes              653 (98.5%)   10 (1.5%)    663 (100.0%)
##     Total             1333 (98.7%)   17 (1.3%)   1350 (100.0%)
## --------- --------- -------------- ----------- ---------------
## 
## Group: education = unknown  
## 
## --------- --------- ------------- ---------- --------------
##             default            no        yes          Total
##   housing                                                  
##        no             103 (99.0%)   1 (1.0%)   104 (100.0%)
##       yes              81 (97.6%)   2 (2.4%)    83 (100.0%)
##     Total             184 (98.4%)   3 (1.6%)   187 (100.0%)
## --------- --------- ------------- ---------- --------------

Observamos que en ningun segmento tuvo mucha relación el que la persona tuviera una vivienda o no en el resultado del default, por lo que se puede descartar como métrica para determinar el puntuaje de un posible cliente para determinar si es acreedor a algun crédito.

Crédito a default

stby(
  list(
    x = df$loan,
    y = df$education
  ),
  INDICES = df$default,
  FUN = ctable,
  prop = "c"
)
## Cross-Tabulation, Column Proportions  
## loan * education  
## Data Frame: df  
## Group: default = no  
## 
## ------- ----------- -------------- --------------- --------------- -------------- ---------------
##           education        primary       secondary        tertiary        unknown           Total
##    loan                                                                                          
##      no               580 ( 86.8%)   1858 ( 82.2%)   1163 ( 87.2%)   178 ( 96.7%)   3779 ( 85.0%)
##     yes                88 ( 13.2%)    402 ( 17.8%)    170 ( 12.8%)     6 (  3.3%)    666 ( 15.0%)
##   Total               668 (100.0%)   2260 (100.0%)   1333 (100.0%)   184 (100.0%)   4445 (100.0%)
## ------- ----------- -------------- --------------- --------------- -------------- ---------------
## 
## Group: default = yes  
## 
## ------- ----------- ------------- ------------- ------------- ------------ -------------
##           education       primary     secondary      tertiary      unknown         Total
##    loan                                                                                 
##      no                4 ( 40.0%)   32 ( 69.6%)   13 ( 76.5%)   2 ( 66.7%)   51 ( 67.1%)
##     yes                6 ( 60.0%)   14 ( 30.4%)    4 ( 23.5%)   1 ( 33.3%)   25 ( 32.9%)
##   Total               10 (100.0%)   46 (100.0%)   17 (100.0%)   3 (100.0%)   76 (100.0%)
## ------- ----------- ------------- ------------- ------------- ------------ -------------

Analizando ahora a la muestra que no estuvo en default, vemos que la mayoría de las personas en cualquier nivel educativo no tienen actualmente algun crédito abierto, por lo que es una gran área de oportunidad para el banco, y tiene la oportunidad de escoger el nivel educativo al que quiere tener como cliente base.

Frecuencia de los niveles

plot(factor(df$education),
     main="Gráfica de educación",
     xlab="Nivel educativo",
     ylab="Frecuencia",
     col=c("aquamarine", "seagreen3", "coral", "khaki1"))

Mediante la gráfica de barras anterior observamos la cantidad de personas que pertenecesn a cada uno de los niveles educativos, vemos que la gran mayoría se concentró en el nivel secundario, pero anteriormente vimos que el nivel secundario tiene 82.2% de personas aproximadamente sin crédito y el nivel terciario tiene un 87.%, lo que significa que hay más oportunidad de mercado si se enfocan en el nivel terciario.

Propuestas

Se recomienda:

  • Que la búsqueda de clientes se enfoque en entre los los cuartiles 1 y 2 del nivel terciario, para tener a gente más comprometida y más educada que tenga más posibilidad de pago.
  • Y que de igual manera sean personas jóvenes con posibilidad de mejorar su historial y seguir obteniendo crédito con el banco durante los siguientes años.