Telco_Cusomer_Churn = read.table("Telco_Cusomer_Churn.csv",
header = TRUE, sep=",", dec = ".", row.names = 1,
stringsAsFactors = TRUE)
summary(Telco_Cusomer_Churn)
## gender SeniorCitizen Partner Dependents tenure
## Female:3488 Min. :0.0000 No :3641 No :4933 Min. : 0.00
## Male :3555 1st Qu.:0.0000 Yes:3402 Yes:2110 1st Qu.: 9.00
## Median :0.0000 Median :29.00
## Mean :0.1621 Mean :32.37
## 3rd Qu.:0.0000 3rd Qu.:55.00
## Max. :1.0000 Max. :72.00
##
## PhoneService MultipleLines InternetService
## No : 682 No :3390 DSL :2421
## Yes:6361 No phone service: 682 Fiber optic:3096
## Yes :2971 No :1526
##
##
##
##
## OnlineSecurity OnlineBackup
## No :3498 No :3088
## No internet service:1526 No internet service:1526
## Yes :2019 Yes :2429
##
##
##
##
## DeviceProtection TechSupport
## No :3095 No :3473
## No internet service:1526 No internet service:1526
## Yes :2422 Yes :2044
##
##
##
##
## StreamingTV StreamingMovies Contract
## No :2810 No :2785 Month-to-month:3875
## No internet service:1526 No internet service:1526 One year :1473
## Yes :2707 Yes :2732 Two year :1695
##
##
##
##
## PaperlessBilling PaymentMethod MonthlyCharges
## No :2872 Bank transfer (automatic):1544 Min. : 18.25
## Yes:4171 Credit card (automatic) :1522 1st Qu.: 35.50
## Electronic check :2365 Median : 70.35
## Mailed check :1612 Mean : 64.76
## 3rd Qu.: 89.85
## Max. :118.75
##
## TotalCharges Churn
## Min. : 18.8 No :5174
## 1st Qu.: 401.4 Yes:1869
## Median :1397.5
## Mean :2283.3
## 3rd Qu.:3794.7
## Max. :8684.8
## NA's :11
En cuanto a los servicios adquiridos por los clientes se puede concluir lo siguiente:
Los datos de la suscripción y el pago son importantes, sobre esto, se puede concluir lo siguiente:
library(corrplot)
## corrplot 0.95 loaded
attach(Telco_Cusomer_Churn)
nuevosDatos = data.frame(tenure, MonthlyCharges, TotalCharges)
r = cor(na.omit(nuevosDatos))
corrplot(r, method="number")
library(ggplot2)
ggplot(Telco_Cusomer_Churn, aes(x = Churn, y = MonthlyCharges)) +
geom_boxplot(fill = "lightblue") +
labs(title = "Diagrama de cajas: Fuga vs Cargos Mensuales",
x = "Fuga",
y = "Cargos Mensuales") +
theme(plot.title = element_text(hjust = 0.5))
En el diagrama de cajas presente se puede observar que aquellos que abandonan la empresa, tienden a pagar montos mas altos en comparación a quienen permanecen en esta. La mediana de cargos mensuales de los que abandonaron la empresa es mayor y su distribución se concentra entre valores mas elevados y con una diferencia no tan variada, mientras que los que permanecen en la empresa, presentan una mediana menor y una mayor variabilidad entre los montos mensuales, incluyendo montos considerablemente bajos. Esta diferencia sugiere que los montos mensuales altos probablemente estan muy relacionados con la fuga de la empresa.
ggplot(Telco_Cusomer_Churn, aes(x = Churn, y = TotalCharges)) +
geom_boxplot(fill = "purple") +
labs(title = "Diagrama de cajas: Fuga vs Cargos Totales",
x = "Fuga",
y = "Cargos Totales") +
theme(plot.title = element_text(hjust = 0.5))
## Warning: Removed 11 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
En el diagrama se puede observar que los clientes que permanecen en la empresa tienden a acumular cargas totales significativamente mayores que aquellos que la han abandonado. La mediana para los clientes que no han abandonado la empresa es mas alta, y la dispersión también es mayor dado a que han estado activos por un mayor tiempo. En contraste, los clientes que se han fugado presentan en su mayoría cargos totales bajos, con algunas excepciones donde se presentan datos atipicos muy altos. Este comportamiento sugiere que la mayor parte de los clientes que abandonan la empresa, lo hacen en las primeras etapas de relación con esta ya que no llegan a acumular grandes montos totales.
library(ggplot2)
ggplot(Telco_Cusomer_Churn, aes(x = Churn, fill = gender)) +
geom_bar(position = "stack") +
labs(title = "Distribución de género según rotación",
x = "Rotación (Churn)",
y = "Cantidad de clientes",
fill = "Género") +
theme_minimal()
La mayoría de los clientes no han rotado, lo cual indica una retención relativamente alta. En este grupo, la distribución entre hombres y mujeres es bastante equilibrada, aunque con una leve mayoría de hombres.
En el grupo de clientes que sí han rotado, la diferencia entre géneros también es pequeña, con una ligera predominancia de mujeres. Sin embargo, estas diferencias no son significativas visualmente, lo cual sugiere que el género no es un factor determinante en la decisión de abandonar el servicio.
Aunque se pueden observar pequeñas variaciones entre géneros dentro de cada categoría de rotación, la rotación de clientes parece ser un fenómeno que afecta de manera similar tanto a hombres como a mujeres en este conjunto de datos.
library(ggplot2)
ggplot(Telco_Cusomer_Churn, aes(x = tenure , y = MonthlyCharges)) +
geom_jitter() +
geom_smooth(method = "lm", color = "red") +
labs(title = "Diagrama de dispersión Antigüedad vs Cargos Mensuales",
x = "Meses como cliente",
y = "Cargo mensual (USD)")
## `geom_smooth()` using formula = 'y ~ x'
cor(Telco_Cusomer_Churn$tenure, Telco_Cusomer_Churn$MonthlyCharges)
## [1] 0.2478999
Como se puede observar, el coeficiente de correlación indica que estas variables no se encuentran completamente relacionadas. Se cuenta con un coeficiente bastante bajo.
modelo = lm(MonthlyCharges ~ tenure, data = Telco_Cusomer_Churn)
summary(modelo)
##
## Call:
## lm(formula = MonthlyCharges ~ tenure, data = Telco_Cusomer_Churn)
##
## Residuals:
## Min 1Q Median 3Q Max
## -57.498 -27.251 6.245 24.943 54.376
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 54.92978 0.57476 95.57 <2e-16 ***
## tenure 0.30372 0.01415 21.47 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 29.15 on 7041 degrees of freedom
## Multiple R-squared: 0.06145, Adjusted R-squared: 0.06132
## F-statistic: 461 on 1 and 7041 DF, p-value: < 2.2e-16
# Cargos mensuales = 0.30372 * antigüedad + 54.92978
# R cuadrado = 0.06145
El intercepto nos dice que un cliente con 0 meses de antigüedad en la compañía tendría un cargo mensual de aproximadamente 55 dólares y a medida que avanza su tiempo en la empresa, este cargo aumenta en 0.30372 dólares al mes.
Lo anterior sería una explicación del modelo pero el R cuadrado expresado demuestra que este carece de fidelidad con el comportamiento de estas dos variables debido a su baja correlación.
Así mismo puede observarse esta característica en el diagrama de dispersión, donde se observan datos bastante “dispersos” y que no siguen un patrón facilmente descriptible.
library(ggplot2)
library(gridExtra)
# ---- 1
p1 = ggplot(Telco_Cusomer_Churn, aes(x = Churn, y = MonthlyCharges)) +
geom_boxplot(fill = "lightblue") +
labs(title = "Diagrama de cajas: Fuga vs Cargos Mensuales",
x = "Fuga",
y = "Cargos Mensuales") +
theme(plot.title = element_text(hjust = 0.5))
# ---- 2
p2 = ggplot(Telco_Cusomer_Churn, aes(x = Churn, y = TotalCharges)) +
geom_boxplot(fill = "purple") +
labs(title = "Diagrama de cajas: Fuga vs Cargos Totales",
x = "Fuga",
y = "Cargos Totales") +
theme(plot.title = element_text(hjust = 0.5))
# ---- 3
p3 = ggplot(Telco_Cusomer_Churn, aes(x = Churn, fill = gender)) +
geom_bar(position = "stack") +
labs(title = "Distribución de género según rotación",
x = "Rotación (Churn)",
y = "Cantidad de clientes",
fill = "Género") +
theme_minimal()
# ---- 4
p4 = ggplot(Telco_Cusomer_Churn, aes(x = tenure , y = MonthlyCharges)) +
geom_jitter() +
geom_smooth(method = "lm", color = "red") +
labs(title = "Diagrama de dispersión Antigüedad vs Cargos Mensuales",
x = "Meses como cliente",
y = "Cargo mensual (USD)")
library(gridExtra)
grid.arrange(p1, p2, p3, p4, ncol = 2, widths = c(3, 3))
## Warning: Removed 11 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## `geom_smooth()` using formula = 'y ~ x'