Retención de Clientes en Telecomunicaciones: Una empresa de telecomunicaciones utiliza árboles de decisiones para predecir la probabilidad de que un cliente se vaya. Los criterios pueden incluir duración de la suscripción, quejas previas y uso de servicios. El objetivo es anticipar si un cliente cancelará su suscripción.

# Instalar y cargar la biblioteca rpart
# install.packages("rpart")
library(rpart)
## Warning: package 'rpart' was built under R version 4.2.3
# Crear un conjunto de datos de ejemplo
set.seed(123)

datos <- data.frame(
  duraciondelasuscrpcion= sample(1:100, 100, replace = TRUE),
  quejasdeservicio = factor(sample(c("Si", "No"), 100, replace = TRUE)),
  usodeservicios = factor(sample(c("Si", "No"), 100, replace = TRUE))
)
  datos
##     duraciondelasuscrpcion quejasdeservicio usodeservicios
## 1                       31               No             No
## 2                       79               No             Si
## 3                       51               Si             Si
## 4                       14               Si             No
## 5                       67               Si             Si
## 6                       42               No             Si
## 7                       50               Si             No
## 8                       43               No             No
## 9                       14               No             Si
## 10                      25               No             No
## 11                      90               No             No
## 12                      91               No             No
## 13                      69               No             No
## 14                      91               No             No
## 15                      57               Si             Si
## 16                      92               No             Si
## 17                       9               No             No
## 18                      93               No             Si
## 19                      99               Si             No
## 20                      72               No             Si
## 21                      26               No             Si
## 22                       7               No             Si
## 23                      42               Si             No
## 24                       9               No             No
## 25                      83               No             No
## 26                      36               Si             Si
## 27                      78               No             No
## 28                      81               Si             No
## 29                      43               No             Si
## 30                      76               Si             Si
## 31                      15               Si             Si
## 32                      32               Si             Si
## 33                       7               Si             Si
## 34                       9               Si             No
## 35                      41               Si             Si
## 36                      74               Si             No
## 37                      23               No             No
## 38                      27               No             No
## 39                      60               No             Si
## 40                      53               Si             No
## 41                       7               No             Si
## 42                      53               Si             No
## 43                      27               Si             Si
## 44                      96               No             Si
## 45                      38               Si             Si
## 46                      89               No             Si
## 47                      34               No             Si
## 48                      93               No             Si
## 49                      69               No             No
## 50                      72               Si             Si
## 51                      76               Si             No
## 52                      63               Si             Si
## 53                      13               No             Si
## 54                      82               No             Si
## 55                      97               No             Si
## 56                      91               No             No
## 57                      25               Si             No
## 58                      38               Si             Si
## 59                      21               Si             Si
## 60                      79               Si             Si
## 61                      41               No             No
## 62                      47               No             No
## 63                      90               Si             No
## 64                      60               Si             Si
## 65                      95               No             No
## 66                      16               No             Si
## 67                      94               Si             Si
## 68                       6               Si             Si
## 69                      72               No             Si
## 70                      86               No             Si
## 71                      86               Si             No
## 72                      39               Si             No
## 73                      31               No             No
## 74                      81               Si             Si
## 75                      50               No             Si
## 76                      34               No             No
## 77                       4               No             No
## 78                      13               No             Si
## 79                      69               Si             No
## 80                      25               No             Si
## 81                      52               No             Si
## 82                      22               No             No
## 83                      89               Si             Si
## 84                      32               No             Si
## 85                      25               No             Si
## 86                      87               No             No
## 87                      35               Si             Si
## 88                      40               Si             No
## 89                      30               No             Si
## 90                      12               No             No
## 91                      31               No             No
## 92                      30               No             No
## 93                      64               Si             No
## 94                      99               No             Si
## 95                      14               Si             Si
## 96                      93               No             Si
## 97                      96               Si             No
## 98                      71               Si             Si
## 99                      67               Si             Si
## 100                     23               No             No
# Construir el árbol de decisiones
arbol_decision <- rpart(usodeservicios ~ duraciondelasuscrpcion + quejasdeservicio, data = datos, method = "class")
# Visualizar el árbol
plot(arbol_decision)
text(arbol_decision, pretty = 0)

# creamos el arbol de decisiom con la paquteria Rpart

library(rpart)
mod1 <- rpart(usodeservicios ~ duraciondelasuscrpcion + quejasdeservicio, data = datos, method='class')


library(rpart.plot)
## Warning: package 'rpart.plot' was built under R version 4.2.3
rpart.plot(mod1, type=0, extra=0,  
           box.palette = c("lightgreen", "pink"))

rpart.rules(mod1)
##  usodeservicios                                                                 
##            0.27 when duraciondelasuscrpcion is 83 to 92                         
##            0.31 when duraciondelasuscrpcion is 19 to 32 & quejasdeservicio is No
##            0.47 when duraciondelasuscrpcion is 39 to 70 & quejasdeservicio is Si
##            0.54 when duraciondelasuscrpcion is 32 to 70 & quejasdeservicio is No
##            0.60 when duraciondelasuscrpcion <  19       & quejasdeservicio is No
##            0.69 when duraciondelasuscrpcion is 70 to 83                         
##            0.73 when duraciondelasuscrpcion >=       92                         
##            0.79 when duraciondelasuscrpcion <  39       & quejasdeservicio is Si
library(rpart.plot)
rpart.plot(arbol_decision, type=0, extra=0,  
           box.palette = c("lightgreen", "pink"))

rpart.rules(arbol_decision)
##  usodeservicios                                                                 
##            0.27 when duraciondelasuscrpcion is 83 to 92                         
##            0.31 when duraciondelasuscrpcion is 19 to 32 & quejasdeservicio is No
##            0.47 when duraciondelasuscrpcion is 39 to 70 & quejasdeservicio is Si
##            0.54 when duraciondelasuscrpcion is 32 to 70 & quejasdeservicio is No
##            0.60 when duraciondelasuscrpcion <  19       & quejasdeservicio is No
##            0.69 when duraciondelasuscrpcion is 70 to 83                         
##            0.73 when duraciondelasuscrpcion >=       92                         
##            0.79 when duraciondelasuscrpcion <  39       & quejasdeservicio is Si
y_hat <- predict(arbol_decision, type='class')
tabla <- table(Verdadero=datos$usodeservicios, Clasificacion=y_hat)
tabla
##          Clasificacion
## Verdadero No Si
##        No 25 20
##        Si 14 41
sum(diag(tabla)) / sum(tabla)
## [1] 0.66
# predicionm
nuevo_df <- data.frame(usodeservicios=c("Si", "No", "No","Si"),
                       quejasdeservicio=c("No", "No", "Si","No"),
                       duraciondelasuscrpcion=c(30, 450, 20,34))

predict(arbol_decision, newdata=nuevo_df, type='prob')
##          No        Si
## 1 0.6923077 0.3076923
## 2 0.2727273 0.7272727
## 3 0.2142857 0.7857143
## 4 0.4615385 0.5384615
#etiquetas
predict(arbol_decision, newdata=nuevo_df, type='class')
##  1  2  3  4 
## No Si Si Si 
## Levels: No Si