# 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
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"),
quejasdeservicio=c("No", "No", "Si"),
duraciondelasuscrpcion=c(30, 450, 20))
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
#etiquetas
predict(arbol_decision, newdata=nuevo_df, type='class')
## 1 2 3
## No Si Si
## Levels: No Si