Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Taller en grupo
Integrantes: Miguel Briones, Carlos García, Santiago Piedra y Andrés Villafuerte
Tema: Una compañía proveedora de servicios de telecomunicacio
Tema: Una telecomunicacionesnes desea predecir la
probabilidad de deserción de sus clientes, para así poder identificar las causas raíz de la
deserción y tomar acciones en la dirección de retener al cliente.
install.packages("rpart")
install.packages("caret")
library("rpart")
library("caret")
datos<- read.csv("C
read.csv("C:/Users/FIMCP/Downloads/te
:/Users/FIMCP/Downloads/telecom_churn.c
lecom_churn.csv",sep=",")
sv",sep=",")
head(datos)
summary(datos)
Particionar los datos en 70% para entrenamiento del modelo y 30% para prueba.
particion <- createDataP
createDataPartition(datos$Chur
artition(datos$Churn,
n,
p=0.7,
list=FALSE,
times=1)
datos$gender<-as.factor(datos$gender)
datos$SeniorCitizen<-as.factor(datos$SeniorCitizen)
datos$Partner<-as.factor(datos$Partner)
datos$Dependents<-as.factor(datos
datos$Dependents<- as.factor(datos$Dependents)
$Dependents)
datos$PhoneService<-as.factor(datos$Pho
datos$PhoneService <-as.factor(datos$PhoneService)
neService)
datos$MultipleLines<-as.factor(dato
datos$MultipleLine s<-as.factor(datos$MultipleLines
s$MultipleLines))
datos$InternetService<-as.factor(
datos$InternetSer vice<-as.factor(datos$InternetSe
datos$InternetService)
rvice)
datos$OnlineSecurity<-as.factor(da
datos$OnlineSecuri ty<-as.factor(datos$OnlineSec
tos$OnlineSecurity)
urity)
datos$OnlineBackup<-as.factor(dat
datos$OnlineBac kup<-as.factor(datos$OnlineBack
os$OnlineBackup)
up)
datos$DeviceProtection<-as.factor(
datos$DeviceProtec tion<-as.factor(datos$DeviceProtec
datos$DeviceProtection)
tion)
datos$TechSupport<-as.factor(datos$Te
datos$TechSupport <-as.factor(datos$TechSupport)
chSupport)
datos$StreamingTV<-as.factor(datos$St
datos$StreamingT V<-as.factor(datos$StreamingTV)
reamingTV)
datos$StreamingMovies<-as.factor(datos
datos$StreamingMovie s<-as.factor(datos$StreamingMovies)
$StreamingMovies)
datos$Contract<-as.factor(datos$Contract)
datos$PaperlessBilling<-as.factor(da
datos$PaperlessBi lling<-as.factor(datos$PaperlessB
tos$PaperlessBilling)
illing)
datos$PaymentMethod<-as.factor(da
datos$PaymentMe thod<-as.factor(datos$PaymentMetho
tos$PaymentMethod) d)
datos$Churn<-as.factor(datos$Churn)
summary(datos)
datos<-na.omit(datos)
datos <- datos[,-1]
sum(is.na(datos))
summary(datos)
modelo.seleccion.variables
modelo.seleccion.variables$optsize
modelo.seleccion.variables$optVariables
modelo.seleccion.variables$fit
corrida:
variable.op= datos
summary(variable.op)
variable.op=subset(variable.op,
variable.op=subset(variable.op, select=-gender)
variable.op=subset(variable.op,
variable.op=subset(variable.op, select=-SeniorC
select=-SeniorCitizen)
itizen)
variable.op=subset(variable.op,
variable.op=subset(variable.op, select=-Partne
select=-Partner)
r)
variable.op=subset(variable.op,
variable.op=subset(variable.op, select=-Depende
select=-Dependents)
nts)
variable.op=subset(variable.op,
variable.op=subset(variable.op, select=-PhoneSer
select=-PhoneService)
vice)
variable.op=subset(variable.op,
variable.op=subset(variable.op, select=-Multiple
select=-MultipleLines)
Lines)
variable.op=subset(variable.op,
variable.op=subset(variable.op, select=-Device
select=-DeviceProtection)
Protection)
variable.op=subset(variable.op,
variable.op=subset(variable.op, select=-Stre
select=-StreamingTV)
amingTV)
variable.op=subset(variable.op,
variable.op=subset(variable.op, select=-Stream
select=-StreamingMovies)
ingMovies)
variable.op=subset(variable.op,
variable.op=subset(variable.op, select=-Paperle
select=-PaperlessBilling
ssBilling )
variable.op=subset(variable.op, select=-Payme
variable.op=subset(variable.op, select=-PaymentMethod)
ntMethod)
# Arboles de Clasificación
modelo1$modelType
modelo1$finalModel
confusionMatrix(prediccion,
confusionMatrix(prediccion, TEST2$Churn)
corrida:
#Bayes Ingenuo
library("klaR")
library("e1071")
modelo2
modelo2$modelType
modelo2$finalModel
prediccion <- predict(modelo2, TEST2, type="raw")
confusionMatrix(prediccion,
confusionMatrix(prediccion, TEST2$Churn)
corrida:
#Bosque Aleatorio
confusionMatrix(prediccion,
confusionMatrix(prediccion, TEST2$Churn)
corrida:
#Regresión
confusionMatrix(prediccion,
confusionMatrix(prediccion, TEST2$Churn)
corrida:
#Crear una tabla que compare el accuracy, specificity, y sensitivity para cada uno de
los cuatro modelos de clasificación
MODELOS
Accuracy Specificity Sensitivity
Árbol Clasificacion 0.7861 0.3643 0.9386
Bayes Ingenuo 0.75 0.7750 0.7532
Bosques
0.7894 0.4446 0.9141
Aleatorios
Regresión 0.7917 0.5161 0.8915
deserved Rejection)
Sensitivity = True Positive / True Positive + False Negative
Debido a que la compañía desea predecir la probabilidad de deserción de sus clientes, para así
poder identificar las causas raíz de la deserción y tomar acciones en la dirección de retener al
cliente. A esta le conviene identificar el error Tipo 1, es decir, determinar que clientes realmente
no quieren desertar pero que en el sistema se encuentran como si debieran terminar la relación
comercial con la compañía. En base a este análisis se realizó el siguiente gráfico basado en la
tabla:
Comparación de Modelos
1
0,9
0,8
0,7
0,6
0,5
0,4
0,3
0,2
0,1
0
Árbol Clasificacion Bayes Ingenuo Bosques Aleatorios Regresión
Accuracy
Entre los 4 modelos, el que tiene mayor precisión es el de Regresión con una medida de
0.7917, luego le sigue el Bosques Aleatorios con 0.7894, Árbol de clasificación con
0.7861 y finalmente Bayes Ingenuo con 0.759.
Specificity
El modelo
debido con mayor
a que especificidad
este valor es el Bayes Ingenuo
es el complemento del Errorcon unaI,probabilidad
Tipo de 0.7750,
el cual implica que la
empresa disertara clientes que realmente no romperán la relación comercial existente,
lo cual afecta en una mayor cantidad a los recursos de la compañía.
Sensitivity
Para esta medida, le interesa a la compañía conocer el mayor valor de probabilidad,
porque este indica que personas van a disertar y que en el programa indica que si deben
ser disertados. El modelo con mayor sensibilidad es el de Árbol de Clasificación con una
probabilidad de 0.9386.
Bajo el análisis realizado, se concluyó que el modelo ideal para que la compañía de
servicios de telecomunicaciones pueda predecir la probabilidad de deserción de sus
clientes, es el Bayes Ingenuo. Esto se debe a que a la empresa le interesa reducir el Error
Tipo I, por lo tanto, le conviene utilizar un modelo de clasificación que tenga la
probabilidad de Specificity y Sensitivity mayor y pese a que el Accuracy es el más bajo
de los 4 modelos, Bayes Ingenuo es el que mejor se acomoda a las necesidades de la
compañía de telecomunicac
telecomunicaciones.
iones.
MODELOS
Accuracy Specificity Sensitivity
Árbol Clasificacion 0.7861 0.3643 0.9386
Bayes Ingenuo 0.75 0.7750 0.7532
Bosques 0.7894 0.4446 0.9141
Aleatorios
Regresión 0.7917 0.5161 0.8915
datos<- read.csv("C:/Users/FIMCP/Downloads/telecom_churn.csv",sep=","
read.csv("C:/Users/FIMCP/Downloads/telecom_churn.csv",sep=","))
head(datos)
summary(datos)
datos$gender<-as.factor(datos$gender)
datos$SeniorCitizen<-as.factor(datos$SeniorCitizen)
datos$Partner<-as.factor(datos$Partner)
datos$Dependents<-as.factor(datos$Dependents)
datos$PhoneService<-as.factor(datos$PhoneService)
datos$MultipleLines<-as.factor(datos$MultipleLines)
datos$InternetService<-as.factor(datos$InternetService)
datos$OnlineSecurity<-as.factor(datos$OnlineSecurity)
datos$OnlineBackup<-as.factor(datos$OnlineBackup)
datos$DeviceProtection<-as.factor(datos$DeviceProtection)
datos$TechSupport<-as.factor(datos$TechSupport)
datos$StreamingTV<-as.factor(datos$StreamingTV)
datos$StreamingMovies<-as.factor(datos$StreamingMovies)
datos$Contract<-as.factor(datos$Contract)
datos$PaperlessBilling<-as.factor(datos$PaperlessBilling)
datos$PaymentMethod<-as.factor(datos$PaymentMethod)
datos$Churn<-as.factor(datos$Churn)
summary(datos)
datos<-na.omit(datos)
datos <- datos[,-1]
sum(is.na(datos))
summary(datos)
# PUNTO 1: Particionar los datos en 70% para entrenamiento del modelo y 30% para prueba.
particion <- createDataPartition(datos$Churn,
c reateDataPartition(datos$Churn,
p=0.7,
list=FALSE,
times=1)
control = rfeControl(functions=rfFuncs,
method= "repeatedcv",
repeats = 3,
verbose = TRUE)
modelo.seleccion.variables
modelo.seleccion.variables$optsize
modelo.seleccion.variables$optVariables
modelo.seleccion.variables$fit
variable.op= datos
summary(variable.op)
variable.op=subset(variable.op, select=-gender)
variable.op=subset(variable.op, select=-SeniorCitizen)
variable.op=subset(variable.op, select=-Partner)
variable.op=subset(variable.op, select=-Dependents)
select=-Dependents)
variable.op=subset(variable.op, select=-PhoneService)
variable.op=subset(variable.op, select=-MultipleLines)
variable.op=subset(variable.op, select=-DeviceProtection)
variable.op=subset(variable.op, select=-StreamingTV)
variable.op=subset(variable.op, select=-StreamingMovies)
variable.op=subset(variable.op, select=-PaperlessBilling )
variable.op=subset(variable.op, select=-PaymentMethod)
select=-PaymentMethod)
# Arboles de Clasificacion
modelo1 <- train(x=subset(TRAIN2,select=-Churn),
train(x=subset(TRAIN2,select=-Churn),
y=TRAIN2$Churn,
method="rpart",
trControl=trainControl(method="cv",number=10))
modelo1
modelo1$modelType
modelo1$finalModel
confusionMatrix(prediccion, TEST2$Churn)
# bayes ingenuo
library("klaR")
library("e1071")
modelo2
modelo2$modelType
modelo2$finalModel
confusionMatrix(prediccion, TEST2$Churn)
# Bosque Aleatorios
modelo3 <- train(x=subset(TRAIN2,select=-Churn),
train(x=subset(TRAIN2,select=-Churn),
y=TRAIN2$Churn,
method = "rf",
trControl = trainControl(method="cv",number=10))
trainControl(method="cv",number=10))
modelo3
modelo3$modelType
modelo3$finalModel
confusionMatrix(prediccion, TEST2$Churn)
# REGRESION
modelo4 <- train(x=subset(TRAIN2,select=-Churn),
train(x=subset(TRAIN2,select=-Churn),
y=TRAIN2$Churn,
method = "glm",
family="binomial",
trControl=trainControl(method="cv",
number=10,
classProbs=TRUE,
summaryFunction = twoClassSummary))
modelo4
modelo4$modelType
modelo4$finalModel
confusionMatrix(prediccion, TEST2$Churn)