Queremos incrementar la retención de clientes y para eso queremos ver que factores son los que afectan a la permanencia de estos clientes. Hagamos un análisis exploratorio. Veamos como se ven nuestros estratos y a que conclusiones podemos llegar.

En primera, sin tener que hacer algún análisis, sabemos que la edad y su permanencia en el banco estan estrechamente relacionadas ya que estamos midiendo el tiempo (Tenure) en años. La edad mínima para pertenecer al banco es de 18 años, por lo que no nos extrañaría que tengamos más personas jóvenes en el banco y más personas mayores que hayan salido.

Veamos las proporciones de cuantos clientes se han salido del banco y veamos las característcas de algunas de estas proporciones para hacernos alguna idea de que está pasando.

with(datos, table(Exited))
## Exited
##    0    1 
## 7963 2037
with(datos, prop.table(table(Salida)))
## Salida
##     No     Si 
## 0.7963 0.2037

Aquí vemos que el 20% de los clientes se han salido en un periodo de 10 años. Queremos retener a la mayor cantidad de clientes posible. Veamos cuales son nuestros clientes más fieles y menos fieles. Veamos las proporciones de clientes que se han salido con respecto a nuestras covariables.

with(datos, prop.table(table(Tarjeta, Salida)))
##        Salida
## Tarjeta     No     Si
##      No 0.2332 0.0613
##      Si 0.5631 0.1424
with(datos, prop.table(table(Activo, Salida)))
##       Salida
## Activo     No     Si
##     No 0.3547 0.1302
##     Si 0.4416 0.0735
with(datos, prop.table(table(NumOfProducts, Salida)))
##              Salida
## NumOfProducts     No     Si
##             1 0.3675 0.1409
##             2 0.4242 0.0348
##             3 0.0046 0.0220
##             4 0.0000 0.0060
with(datos, prop.table(table(Sexon, Salida)))
##         Salida
## Sexon        No     Si
##   Mujer  0.3404 0.1139
##   Hombre 0.4559 0.0898
with(datos, prop.table(table(Geografia, Salida)))
##           Salida
## Geografia      No     Si
##   Francia  0.4204 0.0810
##   Alemania 0.1695 0.0814
##   España   0.2064 0.0413
with(datos, prop.table(table(Dinero, Salida)))
##                      Salida
## Dinero                        No         Si
##   (-1,1]              0.31173117 0.05000500
##   (1,9.72e+04]        0.10951095 0.02880288
##   (9.72e+04,1.28e+05] 0.18431843 0.06570657
##   (1.28e+05,2.51e+05] 0.19081908 0.05910591
with(datos, prop.table(table(Credito, Salida)))
##            Salida
## Credito         No     Si
##   (349,584] 0.1978 0.0556
##   (584,652] 0.1975 0.0526
##   (652,718] 0.2047 0.0455
##   (718,850] 0.1963 0.0500
with(datos, prop.table(table(Salario, Salida)))
##                   Salida
## Salario                No     Si
##   (11,5.1e+04]     0.2000 0.0500
##   (5.1e+04,1e+05]  0.2005 0.0495
##   (1e+05,1.49e+05] 0.1997 0.0503
##   (1.49e+05,2e+05] 0.1961 0.0539

En estas tablas podemos ver que hay ciertas poblaciones que se salen de manera desproporcionada con relación a las demás categorías de los mismos estratos. Los estratos y categorías son: Los No activos, los que tienen 1 o 3 o 4 cuentas de banco, las mujeres, los alemanes y las personas que tienen más dinero en su cuenta.

Esto nos puede dar una idea de que variables con estratos reducidos son significativas. Veamos los histogramas de algunas covariables para ver más claramente sus densidades.

with(datos, hist(Age))

with(datos, hist(CreditScore))

with(datos, hist(Balance))

with(datos, hist(EstimatedSalary))

with(datos, hist(NumOfProducts))

Aquí podemos ver que hay una gran población “jóven” en el banco. Otras observaciones: hay muchos clientes sin dinero en la cuenta, hay muchos clientes con 1 o 2 cuentas pero pocos con 3 o 4 y la densidad del salario estimado es bastante pareja entre los valores estimados.

Para tener una idea más clara de como se van saliendo nuestras distintas poblaciones del banco veamos sus curvas de supervivencia 1 a 1 para determinar si hay algunas covariables y categorías que afecten la velocidad a la que los clientes salen del banco.

survfit(D2 ~ Sexo, datos, conf.type = "log-log") %>% ggsurvplot(title = "Supervivencia por Sexo", conf.int = T, legend.title = "Sexo", legend.labs = c("Mujeres","Hombres"))

Este grafico representa la curva de supervivencia medida con respecto a la edad, vemos que hay una diferencia significativa entre la supervivencia de los hombres y las mujeres. Vemos que los hombres tienen más probabilidad de quedarse en el banco que las mujeres.

survfit(D2 ~ HasCrCard, datos, conf.type = "log-log") %>% ggsurvplot(title = "Supervivencia por Tarjeta", conf.int = T, legend.title = "Tarjeta", legend.labs = c("No","Si"))

Estas curvas no tienen una diferencia significativa entre los que tienen tarjeta de crédito y los que no.

survfit(D2 ~ IsActiveMember, datos, conf.type = "log-log") %>% ggsurvplot(title = "Supervivencia por Actividad", conf.int = T, legend.title = "Activo", legend.labs = c("No","Si"))

Estas curvas si tienen una diferencia significativa entre los miembros activos y los no activos. Los miembros activos duran más en el banco.

survfit(D2 ~ NumOfProducts, datos, conf.type = "log-log") %>% ggsurvplot(title = "Supervivencia por Número de Productos", conf.int = T, legend.title = "Productos", legend.labs = c("1","2","3","4"))

Es claro que los clientes con 1 o 2 cuentas se mantienen más tiempo en el banco que los que tienen 3 o 4 cuentas. Aunque debemos recordar que la gran mayoría de los clientes tienen 1 o 2 cuentas mientras que muy pocos tienen 3 o 4.

survfit(D2 ~ Edades, datos, conf.type = "log-log") %>% ggsurvplot(title = "Supervivencia por Edades", conf.int = T, legend.title = "Género", legend.labs = c("18-32","32-44","44-92"))

Ya habiamos dicho que la edad era un factor importante en la permanencia en el banco. No nos extraña que los jóvenes se queden más tiempo y entre más mayor el cliente menos tiempo se quedan.

survfit(D2 ~ Credito, datos, conf.type = "log-log") %>% ggsurvplot(title = "Supervivencia por Credito", conf.int = T, legend.title = "Credito", legend.labs = c("350-584","584-652","652-718","718-850"))

Las curvas de supervivencia parecen tener una diferencia pero no es significativa (ya que los intervalos de confianza intersectan). El crédito no parece tener mucha influencia en la permanencia de los clientes.

survfit(D2 ~ Geo, datos, conf.type = "log-log") %>% ggsurvplot(title = "Supervivencia por País", conf.int = T, legend.title = "País", legend.labs = c("Francia","Alemania","España"))

La diferencia en supervivencia entre los españoles y frances es no significativa, pero la difrencia entre estos y los alemanes es significativa. Parece que la geografía de los clientes afecta la permanencia en el banco.

survfit(D2 ~ Dinero, datos, conf.type = "log-log") %>% ggsurvplot(title = "Supervivencia por Balance", conf.int = T, legend.title = "Balance", legend.labs = c("-1-1","1-97199","97199-127644","127644-250898"))

Estas curvas nos indican que los clientes que no tienen dinero en el banco se quedan más tiempo en el banco que los que tienen balance positivo.

survfit(D2 ~ Salario, datos, conf.type = "log-log") %>% ggsurvplot(title = "Supervivencia por Salario Estimado", conf.int = T, legend.title = "Salario", legend.labs = c("11-51002","51002-100193","100193-149388","149388-199993"))

No hay diferencia significativa entre las curvas de los distintos salarios. No parece ser importante el salario estimado de los clientes.

Ahora, vamos a hacer un análisis de Cox para ver cuales son en realidad las covariables e interacciones más significativas en nuestra base de datos para saber que medidas debemos de tomar para incrementar la retención de clientes. Vamos a ver 3 modelos y determinar cual es el que más nos sirve usando una combinación de métodos. El primero es el sentido común. Queremos ver si la interacción de variables tiene sentido en el contexto de lo que queremos hacer y si es significativa. Tiene que cumplir los dos criterios para que la usemos.

cox1
## Call:
## coxph(formula = D2 ~ Age + Geo + CreditScore + Sexo + Balance + 
##     NumOfProducts + HasCrCard + EstimatedSalary + IsActiveMember, 
##     data = datos)
## 
##                       coef  exp(coef)   se(coef)       z      p
## Age              4.838e-02  1.050e+00  1.772e-03  27.304 <2e-16
## Geo              6.985e-02  1.072e+00  2.759e-02   2.531 0.0114
## CreditScore     -5.482e-04  9.995e-01  2.254e-04  -2.433 0.0150
## Sexo            -4.068e-01  6.658e-01  4.470e-02  -9.101 <2e-16
## Balance          3.614e-06  1.000e+00  3.898e-07   9.272 <2e-16
## NumOfProducts   -2.707e-02  9.733e-01  3.829e-02  -0.707 0.4796
## HasCrCard       -5.293e-02  9.484e-01  4.834e-02  -1.095 0.2735
## EstimatedSalary  3.335e-08  1.000e+00  3.850e-07   0.087 0.9310
## IsActiveMember  -7.626e-01  4.665e-01  4.747e-02 -16.064 <2e-16
## 
## Likelihood ratio test=1076  on 9 df, p=< 2.2e-16
## n= 10000, number of events= 2037

Aquí vemos que hay 3 covariables no significativas que vamos a ignorar ya que no brindan información sustancial.

cox2
## Call:
## coxph(formula = D2 ~ Age + Geo + CreditScore + Sexo + Balance + 
##     IsActiveMember)
## 
##                      coef  exp(coef)   se(coef)       z      p
## Age             4.844e-02  1.050e+00  1.770e-03  27.368 <2e-16
## Geo             6.913e-02  1.072e+00  2.761e-02   2.504 0.0123
## CreditScore    -5.439e-04  9.995e-01  2.254e-04  -2.413 0.0158
## Sexo           -4.067e-01  6.658e-01  4.468e-02  -9.103 <2e-16
## Balance         3.693e-06  1.000e+00  3.763e-07   9.813 <2e-16
## IsActiveMember -7.627e-01  4.664e-01  4.743e-02 -16.080 <2e-16
## 
## Likelihood ratio test=1074  on 6 df, p=< 2.2e-16
## n= 10000, number of events= 2037

Este va a ser nuestro modelo base, veamos si hay alguna interacción que puede mejorar al modelo.

cox6
## Call:
## coxph(formula = D2 ~ (Age + IsActiveMember + Balance)^2 + Geo + 
##     CreditScore + Sexo)
## 
##                              coef  exp(coef)   se(coef)       z        p
## Age                     7.432e-02  1.077e+00  3.686e-03  20.164  < 2e-16
## IsActiveMember          6.850e-01  1.984e+00  1.832e-01   3.739 0.000185
## Balance                 6.696e-06  1.000e+00  1.431e-06   4.679 2.88e-06
## Geo                     6.698e-02  1.069e+00  2.768e-02   2.420 0.015524
## CreditScore            -4.633e-04  9.995e-01  2.237e-04  -2.071 0.038360
## Sexo                   -3.929e-01  6.751e-01  4.474e-02  -8.781  < 2e-16
## Age:IsActiveMember     -3.616e-02  9.645e-01  3.566e-03 -10.140  < 2e-16
## Age:Balance            -9.021e-08  1.000e+00  3.106e-08  -2.904 0.003683
## IsActiveMember:Balance  1.956e-06  1.000e+00  7.835e-07   2.497 0.012523
## 
## Likelihood ratio test=1187  on 9 df, p=< 2.2e-16
## n= 10000, number of events= 2037
anova(cox2,cox6)
## Analysis of Deviance Table
##  Cox model: response is  D2
##  Model 1: ~ Age + Geo + CreditScore + Sexo + Balance + IsActiveMember
##  Model 2: ~ (Age + IsActiveMember + Balance)^2 + Geo + CreditScore + Sexo
##   loglik  Chisq Df P(>|Chi|)    
## 1 -16523                        
## 2 -16466 113.26  3 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Esta tabla nos da los valores para hacer la prueba LR, la cual nos da significativa. Entonces vemos que el modelo nuevo es más significativo que nuestro modelo base. Vamos a usar el nuevo modelo para llegar a nuestras últimas conclusiones.

Lo primero que vemos es que las covariables: Sexo, Edad, Es Miembro Activo, Balance, Credito y Geografía son significativas, y como vimos en sus curvas de supervivencia ya sabemos cuales estratos son los mas y menos riesgosos.

Lo último que falta ver son las tres interacciones y que combinaciones de covariables son las más riesgosas y menos riesgosas.

Tenemos que el riesgo relativo entre dos poblaciones, la unica diferencia entre ellas es la edad: un cliente de 25 y un cliente de 35. Tenemos que el riesgo de una persona de 25 relativo a una de 35 es de 0.6827687. De hecho podemos ver que entre más grande sea la diferencia más riesgoso tener personas mayores. Esto no es algo que podamos controlar para tener mayor retención, por lo que asumiremos desde ahora que tienen la misma edad todos, asumimos que es la media (39) para tener constancia.

Veamos si es más riesgoso tener un miembro activo con todo lo demás de la misma manera y balance promedio, como sabemos que hay altas densidad de clientes con balance 0 vamos a hacer varias comparaciones con miembros activos y no y distintos balances (0, 97199, 127644).

El riesgo de un cliente activo con edad y balance promedio relativo a una cliente no activo es de 0.5623488 por lo que los clientes activos permanecen mas que los inactivos. Veamos si se mantiene este riesgo para otros balances, veamos para balance 0 si esto se cumple.

El riesgo de un cliente activo con edad promedio y balance 0 relativo al de un cliente no activo con balance 0 es de 0.4842083. Esto nos dice que los clientes de activos con balance cero duran más tiempo que los no activos con balance cero. Lo que queremos es “activar” a los clientes no activos para mejorar retención.

El riesgo de un cliente activo con edad promedio y balance 97199 relativo al de un cliente no activo con balance 97199 es de 0.5855997. Nos conviene mantener a los clientes activos en este rango también para incrementar permanencia.

El riesgo de un cliente activo con edad promedio y balance 127644 relativo al de un cliente no activo con balance 127644 es de 0.7364867. Concluimos entonces que es importante mantener a los clientes activos en todos los balances para incrementar la permanencia de los clientes.

Lo último que nos falta verificar es ver si nos conviene que los clientes ahorren más (tengan más balance) o que gasten más. Comparemos riesgos relativos de clientes.

El riesgo de un cliente activo con edad promedio con balance 0 relativo al de un cliente activo con edad promedio y balance 97199 es de 0.6071368. Por lo que vemos es que los clientes con balance cero llevan menos riesgo que los de balance de 97199. Por lo que puede ser que le conviene al banco sugerir a los clientes que gasten más dinero.

El riesgo de un clente activo con edad promedio y balance 0 relativo al de un cliente activo con edad promedio y balance 127644 es de 0.5192863. Entre mayor balance más convieniente es para el banco insitir al cliente que gaste.

Podemos ya concluir y sugerir acciones para la retención de clientes.

Primero: Insistir que nuestros clientes sean más activos en sus cuentas. Esto puede ser mejorado el servicio a cliente y ofrecer ofertas/beneficios a los clientes del banco.

Segundo: Sugerir a los clientes que gasten más dinero. Sugerir que usen la cuenta de banco para pagar sus gastos, introducir meses sin intereses si usan este banco, etc.

Tercero: Credit Score, por nuestras curvas de supervivencia queremos apoyar a los clientes con Credit score bajo ya que esto ayuda a la retención de clientes.

Otras Sugerencias:

Hay más información que se puede sacar de este análisis. Una de estas es hacer un perfil para el cliente “ideal”, ya que hay cosas que el banco no puede cambiar de sus clientes como la edad, sexo y ubicación, pero sabemos que los hombres frances o españoles jóvenes son buenos clientes. Por lo que el banco puede buscar nuevos clientes que caigan en estos parametros para tener clientes que tengan riesgos bajos de salirse del banco.