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.
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)
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")
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.
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.
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.
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.
ggplot(df, aes(x=loan, y=age, fill = loan)) + geom_boxplot() + stat_summary(fun = "mean", geom = "point", shape = 16, size = 2, color = "black")
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.
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.
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.
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.
Se recomienda: