Estadística Avanzada IV
Integrantes:
Keyla Alba Molina
Jhonatan Martinez
Endy Salom Acosta
Como Grupo de Analítica en un banco, ustedes han sido contactados por el Departamento de Mercadeo para apoyar la segmentación de clientes. Por ello tienen acceso a una base de datos que corresponde a una muestra de clientes y sus saldos, además de algunas variables demográficas. La creencia inicial es que, a lo largo del país, los clientes podrían tener diferentes perfiles de egresos. A partir de estos perfiles, el banco planea diseñar productos financieros específicos.
El Departamento de Mercadeo quiere que, en parte, su Grupo de Analítica determine si existen diferencias importantes en los saldos de la cuentas bancarias cuando se realiza la segmentación de clientes por age, job, education, marital status, entre otras variables.
El conjunto de datos fue extraído de Kaggle. El objetivo es utilizar los elementos de EDA y visualización para entender este conjunto de datos, responder preguntas puntuales y generar otras en virtud de los análisis realizados
Las variables relevantes en este caso son:
balance: bank balance; key variable of interestjob: the title of the job (management, technician, etc)marital: marital status (single, married or divorced)education: different levels of education (primary, secondary, tertiary, unknown)default: the customer defaulted (yes or no)loan: the customer took out a loan (yes or no)Lea los datos y seleccione sólo las columnas correspondientes a las variables relevantes. Cuántos clientes se muestrearon este año? Recuerde que el archivo bank-full.csv se encuentra en Google Drive.
## lectura de datos
library(readr)
library(magrittr)
library(dplyr)
library(tidyverse)
library(kableExtra)
library(knitr)
datos <- read_csv("bank-full.csv")
datos %<>% select("balance","job","marital","education",
"default", "loan","housing")
kable(datos[1:15,],caption= "Base de datos: Clientes") %>%
kable_paper("hover", full_width = F) %>%
column_spec(1, width = "10em", background = "beige")%>%
kable_styling(fixed_thead = F)%>%
scroll_box(width = "800px", height = "450px")
| balance | job | marital | education | default | loan | housing |
|---|---|---|---|---|---|---|
| 2143 | management | married | tertiary | no | no | yes |
| 29 | technician | single | secondary | no | no | yes |
| 2 | entrepreneur | married | secondary | no | yes | yes |
| 1506 | blue-collar | married | unknown | no | no | yes |
| 1 | unknown | single | unknown | no | no | no |
| 231 | management | married | tertiary | no | no | yes |
| 447 | management | single | tertiary | no | yes | yes |
| 2 | entrepreneur | divorced | tertiary | yes | no | yes |
| 121 | retired | married | primary | no | no | yes |
| 593 | technician | single | secondary | no | no | yes |
| 270 | admin. | divorced | secondary | no | no | yes |
| 390 | admin. | single | secondary | no | no | yes |
| 6 | technician | married | secondary | no | no | yes |
| 71 | technician | married | unknown | no | no | yes |
| 162 | services | married | secondary | no | no | yes |
NROW(datos) #Número de clientes
[1] 45211
Una vez importados los datos, se verificó que el número de clientes registrados en la base para este año fue de 45.211
Analice la variable balance. Qué explicación merece el hecho de que exista un rango tan amplio de los datos? Existen observaciones sin sentido?
library(ggplot2)
options(scipen = 999) # para evitar notación cientifica
library(vioplot)
library(zoo)
par(mfrow=c(1,2))
hist(datos$balance, col="blue",main="Histograma (Balance)")
vioplot(datos$balance, col="blue",main="Gráfico de Violin (Balance)")
Los gráficos anteriores (Histograma y Violín) muestran una concentración de balance entre -8019 y aproximadamente 20000 indicando que gran parte de los clientes cuentan con un balance dentro del rango mencionado anteriormente.
summary(datos$balance)
Min. 1st Qu. Median Mean 3rd Qu. Max.
-8019 72 448 1362 1428 102127
Teniendo en cuenta que un balance (activos - pasivos) es un estado financiero que refleja en un momento determinado la información económica y financiera de una persona o empresa, y que consiste en la diferencia de activos y pasivos, el valor obtenido puede ser negativo (en caso de tener deudas superiores) o positivos (cuando los activos son mayores), es posible que el rango total sea muy amplio; en este caso la variable balance de las 45.211 personas refleja un rango de -8019 hasta 102127, lo cual indica que existen personas con un estado financiero desfavorable, ademas, la mitad de las personas aproximadamente 22606 personas tienen un balance por encima de 448. En otras palabras, la variable balance tiene sentido debido a la naturaleza de esta variable, los dato estarán dispersos en un rango muy grande.
Use las variables marital, education, default, job, housing, loan. Cuál es la distribución de clientes en cada una de estas características? Qué pasa con balance en cada caso? Concluya.
datos %<>% mutate_if(is.character, as.factor)
library(dplyr)
datos_1 <- read_csv("bank-full.csv")
res_marital<- datos_1 %<>% select("balance","marital")
datos_2 <- read_csv("bank-full.csv")
res_education<- datos_2 %<>% select("balance","education")
datos_3 <- read_csv("bank-full.csv")
res_loan<- datos_3 %<>% select("balance","loan")
datos_4 <- read_csv("bank-full.csv")
res_job<- datos_4 %<>% select("balance","job")
datos_5 <- read_csv("bank-full.csv")
res_hou<- datos_5 %<>% select("balance","housing")
datos_6 <- read_csv("bank-full.csv")
res_def<- datos_6 %<>% select("balance","default")
ggplot(res_education, aes(x=education)) +
geom_density(alpha=0.4, fill="blue")+
ggtitle("Distribución de Balance según nivel de Educación")+
xlab("Nivel de Educación")+
ylab("Balance")+
theme_minimal()
En el gráfico anterior se puede notar que el balance en los clientes, teniendo en cuenta su nivel de educación primaria, secundaria, terciaria tienen distribuciones diferentes, los clientes que de educación primaria presentan una distribución sesgada hacia la derecha mostrando que la mayoria de ellos tiene balances por encima de su promedio; muy diferente a los clientes de secundaria y terciaria que presentan distribución normal siendo la educación terciaria normal mesocurtica es decir con mayor dispersión en el balance de estos los cuales se encuentran alrededor de los promedios; ya sea por encima o por debajo.
ggplot(res_marital, aes(x=marital)) +
geom_density(alpha=0.4, fill="blue")+
ggtitle("Distribución de Balance según Marital")+
xlab("Marital")+
ylab("Balance")+
theme_minimal()
Teniendo en cuenta la distribución de clientes según su estado civil, se puede observar que los divorciados presentan una distribución sesgada hacia la derecha (Chi-Cuadrado) indicando que en su mayoria presentan los balances por encima del promedio, los clientes casados revelan que sus balances se encuentran normalmente distribucidos alrededor del promedio, diferente a los solteros que muestran un sesgo hacia la izquierda es decir sus balances estan por debajo del promedio
ggplot(res_loan, aes(x=loan)) +
geom_density(alpha=0.4, fill="blue")+
ggtitle("Distribución de Balance según Loan")+
xlab("Loan")+
ylab("Balance")+
theme_minimal()
El gráfico de la distribución de clientes según a los que se les efectua un prestamo indica que a los que se les niega el prestamo, se encuentra sesgadamente hacia la derecha mostrando que tienen sus balances por encima del promedio y aquellos clientes a los que se les realiza el prestamo muestran un balance por debajo del promedio es decir se encuentran sesgadamente hacia la izquierda
ggplot(res_hou, aes(x=housing)) +
geom_density(alpha=0.4, fill="blue")+
ggtitle("Distribución de Balance según Housing")+
xlab("Housing")+
ylab("Balance")+
theme_minimal()
Observando los clientes con alojamiento y sin alojamiento se encuentra que los clientes con alojamiento tienen sus balances por debajo del promedio es decir sesgadamente hacia la izquierda y aquellos clientes sin alojamiento mustran un sesgo hacia la derecha mostrando que en su mayoria tienen balances muy por encima del promedio
ggplot(res_def, aes(x=default)) +
geom_density(alpha=0.4, fill="blue")+
ggtitle("Distribución de Balance según Default")+
xlab("Default")+
ylab("Balance")+
theme_minimal()
El gráfico de la variables defecto muestra distribuciones contrarias, es decir en la caracteristica NO, se encuentra sesgada hacia la derecha mostrando un balance por encima del promedio y en la caracteristica SI se observa un sesgo hacia la izquierda indicando mayor dispersión en los balances por debajo del promedio o negativos
ggplot(res_job, aes(x=job)) +
geom_density(alpha=0.4, fill="blue")+
ggtitle("Distribución de Balance según Job")+
xlab("Job")+
ylab("Balance")+
theme_minimal()
La distribucón de los clientes según su profesión indica diversidad de distribuciones entre sus diferentes caracteristicas, en la mayoria de Jobis se visualiza que los balances de estos clientes se encuentran normalmente distribuidos excepto la primera profesión donde el balances de esos clientes presentan un sesgo hacia la derecha mostrando que en su mayoria los balances estan por encima del promedio
El año pasado el balance promedio de los clientes del banco fue $1341.12. Cuánto más alto es este año? Podríamos pensar en que la diferencia, en caso de que exista, es estadísticamente significativa? (Nota: No realice la prueba de hipótesis – use EDA para responder).
prom1<-1341.12;prom1
[1] 1341.12
mean(datos$balance)
[1] 1362.272
prom2<-mean(datos$balance); prom2
[1] 1362.272
var<-round((((prom2-prom1)/prom1)*100),2);var
[1] 1.58
Para este año, el balance promedio tuvo una variación positiva de 1.58% respecto al año anterior. Esta diferencia podria no ser significativa, puesto a que la media es sensible a valores extremos. La variable balance tiene valores extremos muy alto, por lo que un incremento en la media de este año puede estar relacionado a aquellos pocos con balance muy alto
En este banco estamos interesados en identificar diferencias entre grupos de clientes en términos del balance promedio. Sobre qué grupos deberíamos enfocarnos y por qué? Cuál es el mejor grupo de clientes para ofrecer un loan? Qué podemos decir de nuestros clientes de acuerdo con el tipo de education?.
#Education
resum_edu<- datos %>% group_by(education)%>%
summarise(balance=mean(balance))
ggplot(resum_edu, aes( x=education,y=balance))+
geom_bar(stat="identity", position=position_dodge(),fill="cyan3")+
ggtitle("Promedio del Balance según nivel de educación")+
xlab("Nivel de educación")+
ylab("Prom. balance")
#job
resum_job<- datos %>% group_by(job)%>%
summarise(balance=mean(balance))
ggplot(resum_job, aes( x=reorder(job,-balance),y=balance))+
geom_bar(stat="identity", position=position_dodge(),fill="darkolivegreen3")+
ggtitle("Promedio del Balance según profesión")+
xlab("Profesión")+
ylab("Prom. balance")+
coord_flip()
#housing
resum_hou<- datos %>% group_by(housing)%>%
summarise(balance=mean(balance))
ggplot(resum_hou, aes( x=reorder(housing,-balance),y=balance))+
geom_bar(stat="identity", position=position_dodge(),fill="cadetblue")+
ggtitle("Promedio del Balance según housing")+
xlab("housing")+
ylab("Prom. balance")
#Default
resum_def<- datos %>% group_by(default)%>%
summarise(balance=mean(balance))
ggplot(resum_def, aes( x=reorder(default,-balance),y=balance))+
geom_bar(stat="identity", position=position_dodge(),fill="darkolivegreen2")+
ggtitle("Promedio del Balance según default")+
xlab("default")+
ylab("Prom. balance")
#Loan
resum_lo<- datos %>% group_by(loan)%>%
summarise(balance=mean(balance))
ggplot(resum_lo, aes( x=reorder(loan,-balance),y=balance))+
geom_bar(stat="identity", position=position_dodge(),fill="cadetblue")+
ggtitle("Promedio del Balance según loan")+
xlab("loan")+
ylab("Prom. balance")
#Marital
resum_mar<- datos %>% group_by(marital)%>%
summarise(balance=mean(balance))
ggplot(resum_mar, aes( x=reorder(marital,-balance),y=balance))+
geom_bar(stat="identity", position=position_dodge(),fill="darkolivegreen3")+
ggtitle("Promedio del Balance según loan")+
xlab("marital")+
ylab("Prom. balance")
Teniendo en cuenta el balance promedio y los diferentes grupos de clientes, es posible identificar aquellos con un balance promedio elevado, a los que puede ser más rentable ofrecerles productos financieros. En cuanto al nivel de educación, aquellos que alcanzan un nivel terciario mantienen un balance promedio a diferencia de los demás niveles, por lo se trata de un grupo de clientes potencial para ofrecer un Loan En cuanto a los demás grupos, quienes presentan un balance promedio elevado y por ende mayor capacidad de pago de acuerdo a los gráfcios de barras son: 1. personas casadas, 2. retirados o pensionados, y empresarios, 3. Quienes no paguen alojamiento, 4. Quienes no tengan loan y muy importante 5. aquellos que no hayan fallado en alguna oblicgación financiera.
A partir de la variable education es posible realizar 6 comparaciones diferentes para el balance promedio. Represente estas comparaciones gráficamente y concluya. Qué observa?.
#Education
resum_edu<- datos %>% group_by(education)%>%
summarise(balance=mean(balance))
ggplot(resum_edu, aes( x=education,y=balance))+
geom_bar(stat="identity", position=position_dodge(),fill="cyan3")+
ggtitle("Promedio del Balance según nivel de educación")+
xlab("Nivel de educación")+
ylab("Prom. balance")+
theme_minimal()
#Housing
resum_edu1<- datos %>% group_by(education,housing)%>%
summarise(balance=mean(balance))
ggplot(resum_edu1, aes( x=education,y=balance,fill=housing))+
geom_bar(stat="identity", position=position_dodge())+
ggtitle("Promedio del Balance según nivel de educación")+
xlab("Nivel de educación")+
ylab("Prom. balance")+
theme_minimal()
#Job
resum_edu2<- datos %>% group_by(education,job)%>%
summarise(balance=mean(balance))
ggplot(resum_edu2, aes( x=education,y=balance,fill=job))+
geom_bar(stat="identity", position=position_dodge())+
ggtitle("Promedio del Balance según nivel de educación")+
xlab("Nivel de educación")+
ylab("Prom. balance")+
theme_minimal()
#default
resum_edu3<- datos %>% group_by(education,default)%>%
summarise(balance=mean(balance))
ggplot(resum_edu3, aes( x=education,y=balance,fill=default))+
geom_bar(stat="identity", position=position_dodge())+
ggtitle("Promedio del Balance según nivel de educación")+
xlab("Nivel de educación")+
ylab("Prom. balance")+
theme_minimal()
#Marital
resum_edu4<- datos %>% group_by(education,marital)%>%
summarise(balance=mean(balance))
ggplot(resum_edu4, aes( x=education,y=balance,fill=marital))+
geom_bar(stat="identity", position=position_dodge())+
ggtitle("Promedio del Balance según nivel de educación")+
xlab("Nivel de educación")+
ylab("Prom. balance")+
theme_minimal()
#Loan
resum_edu5<- datos %>% group_by(education,loan)%>%
summarise(balance=mean(balance))
ggplot(resum_edu5, aes( x=education,y=balance,fill=loan))+
geom_bar(stat="identity", position=position_dodge())+
ggtitle("Promedio del Balance según nivel de educación")+
xlab("Nivel de educación")+
ylab("Prom. balance")+
theme_minimal()
A partir del balance promedio y del nivel de educación es posible identificar grupos de clientes aptos para ofrecer productos, debido a mantener un balance promedio elevado. Entre estos, en general las personas con educación terciaria que no paguen por alojamiento, Los pensionados en cualquier nivel educativo, al igual que aquellos que no han fallado en alguna obligación financiera y los casados.
Cuáles son las profesiones donde un producto financiero podría ser más exitoso? Use, por ejemplo, la filosofía 80/20 del diagrama de Pareto para identificarlas.
resum_prof<- datos %>% group_by(job)%>%
summarise(balance=mean(balance)) #Agrupar base por job
require(ggQC)
ggplot(resum_prof, aes(x = reorder(job, -balance), y =
balance)) +
geom_bar(stat="identity") +
theme(axis.text.x=element_text(angle=90,hjust=1)) +
stat_pareto(point.color = "red",
point.size = 2,
line.color = "red",
bars.fill = ("azure3"))+
ggtitle('Frecuencias - balance promedio según profesión')+
xlab(NULL)
A través del diagrama de pareto se graficaron de mayor a menor las profesiones de acuerdo al nivel de balance promedio, junto a la frecuencia acumulada de todas las profesiones. Este diagrama permite separar los objetos más relevantes de aquellos que no tienen importancia, mediante la aplicación del principio 80-20 o principio de Pareto, que a nivel general dice: El 20% de las causas genera el 80% de las consecuencias.
Siguiendo esta lógica, podemos decir que las personas que tengan profesiones que se encuentran dentro del 20% con balance más alto, el producto financiero será exitoso en un 80%. En este caso se trata de los pensionados, la segunda categoría tienen profesión desconocida por lo que la siguiente serían los empresarios.
Teniendo en cuenta las respuestas a los Ejercicios anteriores, plantee por lo menos tres preguntas de interés para la Gerencia del banco y resuélvalas usando EDA.
# Marital
resumen2 <- datos %>% group_by(marital) %>%
summarise(frecuencia=n(),
balance= mean(balance)) %>%
arrange(-balance)
resumen2
# A tibble: 3 x 3
marital frecuencia balance
<fct> <int> <dbl>
1 married 27214 1426.
2 single 12790 1301.
3 divorced 5207 1179.
barplot(resumen2$balance~resumen2$marital)
Podemos apreciar que el promedio del balance de las personas divorciadas es menor.
¿Qué tan disperso se encuentra el balance en la muestra que tenemos de acuerdo a housing?
# coeficiente de variación
HousYes= datos$balance[datos$housing== "yes"] # Balance cuando housing es yes
HousNot= datos$balance[datos$housing== "no"] # Balance cuando housing es no
(sd(HousYes)/mean(HousYes))*100
[1] 211.3249
[1] 226.3328
Cuando housing es no, los datos son más dispersos
Según la muestra, ¿cuál es el nivel de educación de la mayoría de nuestros clientes?
library(dplyr)
library(knitr)
# Education
resumen1 <- datos %>% group_by(education) %>%
summarise(frecuencia=n(),
balance= mean(balance),
Tienen_Casa = sum(housing== "yes"),
No_Tienen_Casa = sum(housing== "no")) %>%
arrange(-balance)
resumen1
# A tibble: 4 x 5
education frecuencia balance Tienen_Casa No_Tienen_Casa
<fct> <int> <dbl> <int> <int>
1 tertiary 13301 1758. 6378 6923
2 unknown 1857 1527. 820 1037
3 primary 6851 1251. 3894 2957
4 secondary 23202 1155. 14038 9164
pie(resumen1$frecuencia, col = c("red", "blue", "pink", "green"),
main = "Nivel de educación - Muestra",
labels = c("tertiary", "unknown", "primary", "secondary"))
Podemos identificar que la mayoría de nuestros clientes tienen educación secundaria seguidos por la terciaria
Describa las características de los pensionados que han, o no, solicitado un préstamo. Cual es la variación de los balances en este grupo social, existe diferencia?.
pensionadosSI = filter(datos, job== "retired" & loan == "yes")
barplot(table(pensionadosSI$marital))
si analizamos las características de estas dos poblaciones en nuestra muestra, nos damos cuenta de que tienen cualidades muy similares, son casados en su mayoría, con educación secundaria y no han fallado en un préstamo. Diferencia en la media de Balance
Sin embargo, en la media del balance en las dos poblaciones, si existe diferencia significativa con un ingreso de 2157.63 para los retirados que no han solicitado préstamo y de 887.03 para los que sí han solicitado préstamo.
Qué otras variables considera relevantes para futuras investigaciones y por qué? Discuta con los miembros de su grupo. Cómo podríamos incluir dichas variables en un próximo EDA? Qué información nueva podría obtenerse si la Gerencia accediera a realizar dicho registro de datos?.
Nuevas variables para registrar Número de productos con el banco Con distribución Poisson, esta variable nos podría indicar, o incluso modelar, la fidelidad de un cliente, en ese sentido, poder segmentar o fortalecer las estrategias de mercadeo en ciertos nichos. Vehículo propio Con categorías Si y No, con esta variable podemos identificar el comportamiento de las personas que cuentan con vehículo propio manteniendo constantes el resto de las variables. Reporte en centrales de riesgo Identificar la población que tiene mayor probabilidad de ser reportados en una central de riesgo. Tipo de contrato laboral Termino fijo / Indefinido / Prestación de servicio, de esta manera investigar acerca de la realidad laboral de los diferentes grupos etarios, así, identificar que tipo de contrato tienen los jóvenes y ancianos.
Con las variables anteriores podemos desarrollar un análisis exploratorio para identificar posibles relaciones con otras características de los individuos como la edad, el estado civil o el nivel de educación. Para esto, podemos usar gráficos de barras, circular, boxplots y tablas de contingencia generales y segmentadas que permitan establecer relaciones entre ellas; por otro lado, graficar la densidad de la población en cada categoría para conocer el tamaño de cada nicho en el mercado y contratar así las estrategias de mercadeo adecuadas.