EL objetivo de este proyecto es hacer un análisis de superviviencia de los clientes de un banco. Ver los detonantes de que los clientes dejen al banco y los puntos que se podrían mejorar para mejorar la retenión de clientes
Para hacer esto utlizaremos la base de datos que se nos proporcionó y le aplicaremos distintas pruebas estadísticas +Acontinuación muestro las primeras filas de nuestra base de datos con la inforamción pertinente de los clientes
head(banca)
## RowNumber CustomerId Surname CreditScore Geography Gender Age Tenure
## 1 1 15634602 Hargrave 619 France Female 42 2
## 2 2 15647311 Hill 608 Spain Female 41 1
## 3 3 15619304 Onio 502 France Female 42 8
## 4 4 15701354 Boni 699 France Female 39 1
## 5 5 15737888 Mitchell 850 Spain Female 43 2
## 6 6 15574012 Chu 645 Spain Male 44 8
## Balance NumOfProducts HasCrCard IsActiveMember EstimatedSalary Exited
## 1 0.00 1 1 1 101348.88 1
## 2 83807.86 1 0 1 112542.58 0
## 3 159660.80 3 1 0 113931.57 1
## 4 0.00 2 0 0 93826.63 0
## 5 125510.82 1 1 1 79084.10 0
## 6 113755.78 2 1 0 149756.71 1
## tsal nprod nedad pais sexo tarjeta producto
## 1 1 0 1 France Female 1 1
## 2 1 0 1 Spain Female 0 1
## 3 1 1 1 France Female 1 3
## 4 0 1 1 France Female 0 2
## 5 0 0 1 Spain Female 1 1
## 6 1 1 1 Spain Male 1 2
Seguido de esto, se le aplicó una prueba de kaplan-meier a los vectores que nos dicen el tiempo que lleva en el banco una persona o cuantó tiempo duró. De la prueba obtenemos la curva de supervivencia de los clientes es decir si siguen siendo clientes o no y la curva de riesgo acumulado para poder ver como se va incrementando su riesgo de desertar como clientes. De aquí en adelante al decir supervivencia de los clientes, nos referimos a que se mantengan como clientes.
ggsurvplot(fit = banca.km, data = banca, conf.int = T, title = "Curva de Supervivencia",
xlab = "Tiempo", ylab = "Probabilidad de supervivencia", legend.title = "Estimación",
legend.labs = "Kaplan-Meier")
ggsurvplot(fit = banca.km, data = banca, fun = 'cumhaz' ,conf.int = T, title = "Riesgo Acumulado",
xlab = "Tiempo", ylab = "Riesgo ", legend.title = "Estimación",
legend.labs = "Kaplan-Meier")
A continuación comenzamos a analizar la supervivencia de nuestros usuarios con base en diversos factores que los afectan y que nos muestran como es su relación con el banco. Además de los tiempos más críticos en los que los clientes dejan al banco. Como primer caso veremos la curva de supervivencia y la de riesgo de los clientes que tienen tarjeta de credito contra los que no, aunado a esto se le aplicara la prueba log-rank a estas curvas para ver sí sus modelos son realmente diferentes, es decir, sì existe una diferencia significativa para nosotros entre la superviviencia de los clientes que tienen targeta de crédito y los que no la tienen.
ggsurvplot(fit = cred.km, data = banca, conf.int = T, title = "Curva de Supervivencia tarjeta de cŕedito",
xlab = "Tiempo", ylab = "Probabilidad de supervivencia", legend.title = "Estimación",
legend.labs = c("Con Tarjeta","Sin Tarjeta"), pval = T, pval.method = T )
#Riesgo
ggsurvplot(fit = cred.km, data = banca, conf.int = T, fun = 'cumhaz', title = "Curva de Supervivencia tarjeta de cŕedito",
xlab = "Tiempo", ylab = "Probabilidad de supervivencia", legend.title = "Estimación",
legend.labs = c("Con Tarjeta","Sin Tarjeta"), pval = T, pval.method = T )
Como se puede apreciar en ambas gŕaficas, aproximadamente en el mes 8 existe un decenso considerable de clientes que sí utilizan tarjeta de cŕedito. Siendo que este es un producto que le reditua económicamente al banco y que sus ingresos son muy importantes como para quitarlo de los productos. Consideramos que es importante revisar las políticas que se aplican con los clientes y que es lo que los está disgustando tanto, más allá de las opciones triviales.
El pi-value que nos arroja es de .0001. Estadísticamente hablando esto nos dice que los modelos son distintos. Por lo que podemos asumir que la tarjeta de crédito es un buen factor a considerar.
Nuestro siguiente análisis se enfoca en un área muy importante y que a día de hoy está teniendo un gran crecimiento. Hablamos del uso de los productos del banco y como afecta la superviviencia de los usuarios. Usuarios que utilizan uno sólo vs usuarios que utlizan más productos
#supervivencia
ggsurvplot(fit = product.km, data = banca, conf.int = T, title = "Curva de Supervivencia uso de productos",
xlab = "Tiempo", ylab = "Riesgo", legend.title = "Estimación",
legend.labs = c("un producto","+ productos"), pval = T, pval.method = T )
#Riesgo
ggsurvplot(fit = product.km, data = banca, conf.int = T, fun = 'cumhaz', title = "Curva de riesgo uso de productos",
xlab = "Tiempo", ylab = "Riesgo", legend.title = "Estimación",
legend.labs = c("un producto","+ productos"), pval = T, pval.method = T)
Como se puede ver en las gŕaficas existe una gran diferencia entre las superviviencia de los clientes que utilizan un sólo producto del banco y los que utilizan más. Es importante recalcar que los usuarios que utlizan un sólo producto son un poco más del 50% de los clientes que tiene el banco. Por lo que exortamos al banco a invertir más capital en la generación de productos y hacerlos más atractivos para los clientes, ya que el uso de más de un producto además de que seguramente mejora la experiencia de los usuarios, parece aumentar la fidelidad de los mismos hacia el banco. Para que esto no se quede en algo simplemente visual. Le aplicamos la prueba log-rank a nuestros modelos. El resultado que se obtuvo en dicha prueba nos dice que este parametro efectivamente es importante en la supervivencia de los clientes.
Puede que el siguiente caso no sea de lo más común o intuitivo pero es importante analizar todas las variables que nos ofrece nuestra base para poder determinar realmente donde se encuentran nuestras fallas. En este caso se analiza la supervivencia de los usuarios que tienen sueldo estimado por debajo y por encima de la media de sueldos de nuestros clientes.
ggsurvplot(fit = tsal.km, data = banca, conf.int = T, title = "Curva de Supervivencia dependiendo del salario",
xlab = "Tiempo", ylab = "Riesgo", legend.title = "Estimación",
legend.labs = c("salario menor a la media","salario mayor a la media"), pval = T, pval.method = T )
#Riesgo
ggsurvplot(fit = tsal.km, data = banca, conf.int = T, fun = 'cumhaz', title = "Curva de riesgo dependiendo del salario",
xlab = "Tiempo", ylab = "Riesgo", legend.title = "Estimación",
legend.labs = c("salario menor a la media","salario mayor a la media"), pval = T, pval.method = T )
Se puede apreciar que al paso de los meses comienza a haber diferencias entre la suprviviencia de los clientes con más dinero con respecto a los que menos. Sería importante investigar que les está ofreciendo la competencia pues son los clientes con más dinero por lo tanto aportan más al capital de los bancos. Aun que nuestra prueba log-rank sigue siendo aceptada como que hay diferencia entre las supervivencias de nuestras dos clases de clientes es en menor medida que las dos pruebas anteriores.
ggsurvplot(fit = tsal.km, data = banca, conf.int = T, title = "Curva de Supervivencia dependiendo del salario",
xlab = "Tiempo", ylab = "Riesgo", legend.title = "Estimación",
legend.labs = c("salario menor a la media","salario mayor a la media"), pval = T, pval.method = T )
#Riesgo
ggsurvplot(fit = tsal.km, data = banca, conf.int = T, fun = 'cumhaz', title = "Curva de riesgo dependiendo del salario",
xlab = "Tiempo", ylab = "Riesgo", legend.title = "Estimación",
legend.labs = c("salario menor a la media","salario mayor a la media"), pval = T, pval.method = T )
En el siguiente caso analizaremos las edades de los clientes, los menores de 35 frente a los mayores. Esto es muy importante pues puede dar una buena pista de los grupos de edades que se deben atacar.
#supervivencia
ggsurvplot(fit = nedad.km, data = banca, conf.int = T, title = "Curva de Supervivencia dependiendo de la edad",
xlab = "Tiempo", ylab = "Riesgo", legend.title = "Estimación",
legend.labs = c("menor de 35","mayor de 35"), pval = T, pval.method = T )
#Riesgo
ggsurvplot(fit = nedad.km, data = banca, conf.int = T, fun = 'cumhaz', title = "Curva de riesgo dependiendo de la edad",
xlab = "Tiempo", ylab = "Riesgo", legend.title = "Estimación",
legend.labs = c("menor de 35","mayor de 35"), pval = T, pval.method = T )
Como se puede aprecier tanto visualmente como la prueba log-rank nos muestran que es una variable muy importante a considerar en la supervivencia de los clientes. Al ver que los clientes menores a 35 años suelen ser más fieles al banco o al menos tienen menor riesgo de irse podemos hacer la recomendación de atacar ese sector con más fuerza aun que por otro lado sería bueno revisar por que los clientes mayores a 35 años están teniendo tanto riesgo.
La siguiente fase de nuestro análisis viene con las estimaciones de riesgos proporcionales es decir la prueba de cox Donde podremos ver que tan significativos son nuestros modelos para la estimación de la supervivencia de nuestros clientes Y así saber que variables deberíamos ponerles más atención
Lo primero que analizaremos es el comportamiento que se da en los distintos países y sus significancia para modelar la supervivencia.
coxph(Surv(time, exited) ~ banca$Geography, data = banca)
## Call:
## coxph(formula = Surv(time, exited) ~ banca$Geography, data = banca)
##
## coef exp(coef) se(coef) z p
## banca$GeographyGermany 0.70876 2.03147 0.01570 45.157 <2e-16
## banca$GeographySpain 0.03120 1.03170 0.01912 1.632 0.103
##
## Likelihood ratio test=2238 on 2 df, p=< 2.2e-16
## n= 100000, number of events= 20370
Podemos ver que si comparamos a los usuarios de Alemania contra los de los otros dos países si cambian significativamente sus supervivencias, sin embargo entre España y Francia no hay una diferencia real entre los modelos que se generan. Por lo que se debe separar en esos dos sectores para hacer un análisis de su supervivencia y de acciones a tomar.
Ahora analizaremos las variables edad, salario, género y ubicación
coxph(Surv(time, exited) ~ banca$Age + banca$EstimatedSalary + banca$Gender + banca$Geography, data = banca)
## Call:
## coxph(formula = Surv(time, exited) ~ banca$Age + banca$EstimatedSalary +
## banca$Gender + banca$Geography, data = banca)
##
## coef exp(coef) se(coef) z p
## banca$Age 4.189e-02 1.043e+00 5.291e-04 79.177 <2e-16
## banca$EstimatedSalary 1.646e-07 1.000e+00 1.217e-07 1.353 0.1761
## banca$GenderMale -4.053e-01 6.668e-01 1.413e-02 -28.693 <2e-16
## banca$GeographyGermany 6.510e-01 1.917e+00 1.571e-02 41.434 <2e-16
## banca$GeographySpain 3.469e-02 1.035e+00 1.912e-02 1.814 0.0697
##
## Likelihood ratio test=8558 on 5 df, p=< 2.2e-16
## n= 100000, number of events= 20370
Aquí notamos que al considerar todas estas variables tanto España como el salario no son significativos para nuestro modelo. Es decir que no expican de la mejor manera la sobrevivencia de nuestros sujetos.
Un caso que nos parecio importante analizar es la significancia de la edad con los productos
coxph(Surv(time, exited) ~ banca$producto + banca$Age + banca$Age:banca$producto, data = banca)
## Call:
## coxph(formula = Surv(time, exited) ~ banca$producto + banca$Age +
## banca$Age:banca$producto, data = banca)
##
## coef exp(coef) se(coef)
## banca$producto+productos -1.1513059 0.3162236 0.0522472
## banca$Age 0.0379517 1.0386811 0.0006461
## banca$producto+productos:banca$Age 0.0092599 1.0093029 0.0011172
## z p
## banca$producto+productos -22.036 <2e-16
## banca$Age 58.737 <2e-16
## banca$producto+productos:banca$Age 8.288 <2e-16
##
## Likelihood ratio test=8380 on 3 df, p=< 2.2e-16
## n= 100000, number of events= 20370
La prueba nos arroja p values muy pequeños lo que nos indica que son muy significativos para modelar la supervivencia de nuestros usuarios y son varaibles que se deberán tomar muy encuenta a la hora de atacar los problemas
Por ultimo decidimos analizar el genero la edad y la interacción entre ambas variables
coxph(Surv(time, exited) ~ banca$Gender + banca$Age + banca$Gender:banca$Age, data = banca)
## Call:
## coxph(formula = Surv(time, exited) ~ banca$Gender + banca$Age +
## banca$Gender:banca$Age, data = banca)
##
## coef exp(coef) se(coef) z
## banca$GenderMale -0.5942971 0.5519504 0.0491766 -12.085
## banca$Age 0.0407662 1.0416085 0.0007064 57.709
## banca$GenderMale:banca$Age 0.0038362 1.0038436 0.0010503 3.653
## p
## banca$GenderMale < 2e-16
## banca$Age < 2e-16
## banca$GenderMale:banca$Age 0.00026
##
## Likelihood ratio test=6679 on 3 df, p=< 2.2e-16
## n= 100000, number of events= 20370
Vemos que aunque los tres p values estadísticamente hablando nos dicen que nuestros modemlos para predecir son significativos e incluso su interacción lo es aunque en menor medida.
En conclusión tenemos información para poder atacar los problemas y comenzar a solucionar los problemas de perdida de clienets . Por un ladonos dimos cuenta que los productos y la edad son muy significativos a la hr de predecir la superviviencia ademàs de que pueden afectar positivamente la misma por lo que se sabe a qeu grupos se debe atacar y que se debe comenzar a invertir tanto en el mejoramiento de los productos así como en su difusión.