Para encontrar si existe una función paramétrica que se parezca a la distribución de supervivencia de nuestros datos vamos a graficarlos y evaluar la similitud gráficamente.
Usamos los datos que ya teníamos desde antes, los datos de “churn”:
datos <- read.csv("C:/Users/danil/OneDrive/Documents/churn.csv")
knitr::kable(summary(datos))
| churn | accountlength | internationalplan | voicemailplan | numbervmailmessages | totaldayminutes | totaldaycalls | totaldaycharge | totaleveminutes | totalevecalls | totalevecharge | totalnightminutes | totalnightcalls | totalnightcharge | totalintlminutes | totalintlcalls | totalintlcharge | numbercustomerservicecalls | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| No :4293 | Min. : 1.0 | no :4527 | no :3677 | Min. : 0.000 | Min. : 0.0 | Min. : 0 | Min. : 0.00 | Min. : 0.0 | Min. : 0.0 | Min. : 0.00 | Min. : 0.0 | Min. : 0.00 | Min. : 0.000 | Min. : 0.00 | Min. : 0.000 | Min. :0.000 | Min. :0.00 | |
| Yes: 707 | 1st Qu.: 73.0 | yes: 473 | yes:1323 | 1st Qu.: 0.000 | 1st Qu.:143.7 | 1st Qu.: 87 | 1st Qu.:24.43 | 1st Qu.:166.4 | 1st Qu.: 87.0 | 1st Qu.:14.14 | 1st Qu.:166.9 | 1st Qu.: 87.00 | 1st Qu.: 7.510 | 1st Qu.: 8.50 | 1st Qu.: 3.000 | 1st Qu.:2.300 | 1st Qu.:1.00 | |
| NA | Median :100.0 | NA | NA | Median : 0.000 | Median :180.1 | Median :100 | Median :30.62 | Median :201.0 | Median :100.0 | Median :17.09 | Median :200.4 | Median :100.00 | Median : 9.020 | Median :10.30 | Median : 4.000 | Median :2.780 | Median :1.00 | |
| NA | Mean :100.3 | NA | NA | Mean : 7.755 | Mean :180.3 | Mean :100 | Mean :30.65 | Mean :200.6 | Mean :100.2 | Mean :17.05 | Mean :200.4 | Mean : 99.92 | Mean : 9.018 | Mean :10.26 | Mean : 4.435 | Mean :2.771 | Mean :1.57 | |
| NA | 3rd Qu.:127.0 | NA | NA | 3rd Qu.:17.000 | 3rd Qu.:216.2 | 3rd Qu.:113 | 3rd Qu.:36.75 | 3rd Qu.:234.1 | 3rd Qu.:114.0 | 3rd Qu.:19.90 | 3rd Qu.:234.7 | 3rd Qu.:113.00 | 3rd Qu.:10.560 | 3rd Qu.:12.00 | 3rd Qu.: 6.000 | 3rd Qu.:3.240 | 3rd Qu.:2.00 | |
| NA | Max. :243.0 | NA | NA | Max. :52.000 | Max. :351.5 | Max. :165 | Max. :59.76 | Max. :363.7 | Max. :170.0 | Max. :30.91 | Max. :395.0 | Max. :175.00 | Max. :17.770 | Max. :20.00 | Max. :20.000 | Max. :5.400 | Max. :9.00 |
datos$churn <- ifelse(datos$churn == "Yes", 1, 0)
Y los paquetes que habiamos usando previamente.
require(ggplot2)
## Loading required package: ggplot2
require(survival)
## Loading required package: survival
require(survminer)
## Loading required package: survminer
## Loading required package: ggpubr
## Loading required package: magrittr
require(plotly)
## Loading required package: plotly
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
Vamos a definir una función de supervivencia de los clientes como:
ajuste6 <- surv_fit(Surv(accountlength, churn) ~ 1, data = datos)
Y vamos a definir ciertos criterios que son los que vamos a graficar:
B <- ajuste6$surv
Tiempo <- ajuste6$time
Estos son los datos que vamos a necesitar para hacer nuestra evaluación.
Primero queremos ver si los datos se parecen a una exponencial. Si aplicamos el logaritmo a la función de supervivencia y lo graficamos con respecto al tiempo y nos sale una recta con pendiente negativa sabemos que la función de supervivencia se distribuye como una exponencial.
plot(Tiempo,B,xlab = "Tiempo",ylab = "Log de la supervivencia",main = "Modelo experimental exponencial")
Podemos ver que en realidad no parece ser una recta con pendiente negativa. No podemos concluir que nuestra distribución de la supervivencia se parece a una exponencial.
Tratemos ahora con una Weibull. Para probar si nuestros datos se distribuyen como una Weibull le sacamos el logaritmo al menos logaritmo de B y lo graficamos con respecto al logaritmo del tiempo. Si nos sale una recta con pendiente positiva podemos decir que la distribución se parece a una Weibull.
plot(log(Tiempo),log(-log(B)), xlab = "Logaritmo del Tiempo", ylab = "Logaritmo de -Log de la supervivencia", main = "Modelo experimental Weibull")
Este modelo si se parece más a los datos aunque no es muy convincente el primer cuarto de la gráfica. Verifiquemos la última prueba antes de llegar a conclusiones. La prueba Log Normal consiste en graficar la normal de 1 - la función de supervivencia con respecto al logaritmo del tiempo. Si nos da una recta con pendiente positiva entonces decimos que la distribución se parece a una Log Normal
plot(log(Tiempo),qnorm(1-B), xlab = "Logaritmo del Tiempo", ylab = "Normal de 1 - Supervivencia", main = "Modelo experimental Log Normal")
Después de analizar estos 3 casos podemos decir que ningúno es ideal pero que el modelo paramétrico de Weibll es el que más se acerca a la distribución de nuestros datos.