4.1 Taller de Analítica Predictiva V3
4.1 Taller de Analítica Predictiva V3
4.1 Taller de Analítica Predictiva V3
Para esto es importante que el estudiante haya revisado el material de autoformación, lecturas y recursos recomendados, de tal manera
que tenga claras las diferencias y características del aprendizaje supervisado y no supervisado, al igual que los conceptos y principales
usos de los algoritmos de analítica predictiva y de machine learning, también es muy importante que el estudiante tenga nociones
básicas de R para que se le facilite realizar su trabajo. Si no tiene conocimiento de esta herramienta, procure que en su equipo haya
algún compañero que conozca la herramienta, si no es posible, revise el recurso que está disponible en el módulo 4 ""videotutorial M4"
ahí le explicamos cómo instalar R y R Studio, la configuración inicial y una introducción básica a la herramienta, en la documentación
oficial de R (https://www.rdocumentation.org/), encontrará información que le ayudará a familiarizarse con la herramienta.
A continuación, encontrará la lista de los ejercicios que deben realizar en el taller en grupos según la configuración de los equipos que se
haya definido y el peso de cada ejercicio:
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 1/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
El objetivo es que el estudiante pueda replicar el código del algoritmo que se le entrega, analice la salida del modelo e identifique las
variables más significativas y si el modelo es adecuado para predecir y de ser así, predecir nuevos casos.
Peso: 10 puntos
a. Realizar un análisis gráfico que permita ver la distribución de las variables y ver la correlaciones.
b. Implementar el modelo de regresión lineal múltiple.
c. Analizar las salidas del modelo y concluir cuáles son las variables más significativas y si el modelo es adecuado para predecir.
Nota: recuerde que puede ajustar el modelo con las variables que quiere usar, además, tenga presente que está trabajando con
regresión lineal y que este tipo de modelos sólo trabaja con variables numéricas.
Peso: 20 puntos
3. Ejercicio de clasificación
El objetivo es que el estudiante implemente varios modelos de aprendizaje supervisado, en este caso debe utilizar algoritmos de
clasificación para identificar los clientes propensos a cancelar los productos, es decir, un modelo churn, para ello:
a. Realizar la predicción y la matriz de confusión.
b. Identificar cuál es la métrica más adecuada para el problema particular de churn.
c. Comparar los resultados de los modelos y concluir cuál es el mejor para este tipo de problemas.
Peso: 20 puntos
Regresión
La regresión lineal se usa para predecir el valor de una variable de resultado [Y] sobre la base de una o más variables predictoras de
entrada [X] . El objetivo es establecer una relación lineal a través de una fórmula matemática entre la (s) variable (s) del predictor y la
variable de respuesta, de modo que podamos usar esta fórmula para estimar el valor de la respuesta [Y], sólo cuando los valores de los
predictores [X] son conocidos.
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 2/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
El objetivo de la regresión lineal es modelar una variable continua [Y] como una función matemática de una o más variables [X] , de
modo que se pueda usar este modelo de regresión para predecir la [Y] cuando solo se conoce la [X]. Esta ecuación matemática se
puede generalizar de la siguiente manera:
𝑌 = 𝛽0 + 𝛽1 + 𝛽2 𝜀
donde, βo es la intersección y β1 es la pendiente. En conjunto, se denominan coeficientes de regresión. ϵ es el término de error, la parte
de Y que el modelo de regresión no puede explicar.
--------------------------------------------------------------------------------------------------
-------------
En este ejerccio se utilizará el set de datos trees, el cual está disponible en la librería dplyr y que contiene datos sobre la circunferencia
(en pulgadas), la altura (en pies) y el volumen (en pies cúbicos) del tronco de árboles de la especia de cerezos. El objetivo de este
ejercicio es construir un modelo de regresión lineal para predecir el volumen en función de las variables dadas.
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 3/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
filter, lag
8.3 70 10.3
8.6 65 10.3
8.8 63 10.2
10.5 72 16.4
10.7 81 18.8
10.8 83 19.7
Vemos que el conjunto de datos está compuesto por 31 observaciones y 3 variables, todas númericas
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 4/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 5/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 6/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 7/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 8/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 9/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 10/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 11/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 12/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
Del análisis gráfico anterior, se puede ver que las variables tienen una distribución normal, la varible volumen tiene datos atípicos.
1.3. Corrrelación
In [15]: #matriz de correlación
round(cor(x = trees[c(1,2,3)], method = "pearson"),2)
Análisis:
Con base en los resultados que hemos obtenido hasta el momento, se puede concluir que:
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 13/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
I. En los gráficos de dispersión se puede observar que la variable Girth (diámetro) está más linealmente asociada con la variable
respuesta Volumen.
Hay una correlación alta entre la variable diámetro y volumen (0.97) y entre la variable volumen y altura la correlación es del 0.60
Call:
lm(formula = Volume ~ Girth + Height, data = trees)
Coefficients:
(Intercept) Girth Height
-57.9877 4.7082 0.3393
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 14/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
Call:
lm(formula = Volume ~ Girth + Height, data = trees)
Residuals:
Min 1Q Median 3Q Max
-6.4065 -2.6493 -0.2876 2.2003 8.4847
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -57.9877 8.6382 -6.713 2.75e-07 ***
Girth 4.7082 0.2643 17.816 < 2e-16 ***
Height 0.3393 0.1302 2.607 0.0145 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
**Análisis:
--------------------------------------------------------------------------------------------------
-------------
Peso: 20 puntos
a. Realizar un análisis gráfico que permita ver la distribución de las variables y ver la correlaciones (4 puntos).
b. Implementar el modelo de regresión lineal múltiple (4 puntos).
c. Implemente otros modelos y valide cuál es el mejor para predecir; debe explicar el criterio de selección y realizar el
correspondiente análisis. (5 puntos).
d. Analizar las salidas del modelo y concluir cuáles son las variables más significativas y si el modelo es adecuado para predecir
(4 puntos).
e. Con base en el modelo que mejor prediga, realice la predicción de 2 nuevos casos, usted define los valores de las variables (3
puntos).
Nota: recuerde que puede ajustar el modelo con las variables que quiere usar, además, tenga presente que está trabajando con
regresión lineal y que este tipo de modelos sólo trabaja con variables numéricas.
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 16/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
En este caso práctico trabajaremos con el set de datos de "Prestige" disponible en la librería car del paquete carData.
Descripción
El dataset Prestige está compuesto por 102 observaciones y 6 columnas. Las observaciones son ocupaciones. Este dataset
contiene las siguientes columnas:
education: educación media de los titulares ocupacionales.
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 17/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
Warning message:
"package 'car' was built under R version 3.5.3"Loading required package: carData
Warning message:
"package 'carData' was built under R version 3.5.2"
Attaching package: 'car'
logit
recode
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 18/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
--------------------------------------------------------------------------------------------------
-------------
Clasificación
Antes de iniciar se sugiere que repase la teoría de la Matriz de confusión y de las principales
métricas para evaluar modelos de clasificación.
La Matriz de Confusión es una tabla de N×N que resume el nivel de éxito de las predicciones de un modelo de clasificación; es
decir, la correlación entre la etiqueta y la clasificación del modelo.
Un eje de una matriz de confusión es la etiqueta que el modelo predijo; el otro es la etiqueta real.
N representa el número de clases.
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 19/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
En un problema de clasificación binaria, N=2. Por ejemplo, aquí se muestra un ejemplo de una matriz de confusión para un
problema de clasificación binaria:
La matriz de confusión anterior muestra que, de los 19 correos que realmente eran Spam, el modelo clasificó correctamente:
18 como spam (18 verdaderos positivos) y clasificó 1 de manera incorrecta como no spam (1 falso negativo). De manera similar,
de los 458 correos que en realidad no eran spam, 452 se clasificaron correctamente (452 verdaderos negativos) y 6 se clasificaron
de manera incorrecta (6 falsos positivos).
En resumen:
La diagonal principal contiene la suma de todos los casos que son adecuadamente predichos.
Mientras que la otra diagonal tiene la suma de los casos que el modelo no predijo adecuadamente.
Un verdadero positivo es un resultado en el que el modelo predice correctamente la clase positiva.
De manera similar, un verdadero negativo es un resultado en el que el modelo predice correctamente la clase negativa.
Un falso positivo es un resultado en el que el modelo predice incorrectamente la clase positiva.
Y un falso negativo es un resultado en el que el modelo predice incorrectamente la clase negativa.
Con base en los resultados de la matriz de confusión se puede evaluar el modelo a través de algunas métricas como:
- Accuracy
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 20/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
18 + 452
𝐴𝑐𝑐𝑢𝑟𝑎𝑐𝑦 = 18 + 1 + 452 + 6 = 98.53%
- Tasa de error
Error Rate o Misclassification Rate: muestra el porcentaje general de casos que son mal
1 + 6
clasificados:
18
correctamente:
𝑆𝑒𝑛𝑠𝑖𝑡𝑖𝑣𝑖𝑡𝑦 = 18 + 1 = 94.74%
- Especificidad
También se conoce como True Negative Rate, muestra el porcentaje de casos negativos que son clasificados correctamente:
452
𝑆𝑝𝑒𝑐𝑖𝑓𝑖𝑐𝑖𝑡𝑦 = 452 + 6 = 99.13%
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 21/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
3. Ejercicio de clasificación
Ahora vamos a cambiar de técnica; debemos trabajar en la implementación de algoritmos de aprendizaje supervisado, en este caso
particular vamos a trabajar con la Clasificación.
El objetivo es que el estudiante implemente varios modelos de clasificación para identificar los clientes propensos a cancelar los
productos, es decir, un modelo churn, para ello:
a. Realizar la predicción y la matriz de confusión.
b. Identificar cuál es la métrica más adecuada para el problema particular de churn.
c. Comparar los resultados de los modelos y concluir cuál es el mejor para este tipo de problemas.
Nota: se recomienda exportar a Excel los resultados del modelo que mejor prediga y analice las características de los clientes que
abandonan para que plantee algunas recomendaciones para evitar que los clientes hagan churn.
Este conjunto de datos de Machine Learning es muy utilizado para modelar la rotación de clientes, está compuesto por 19 predictores,
en su mayoría numéricos:
1. state(categóricos),
2. account_length
3. area_code
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 22/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
4. international_plan(sí / no),
5. voice_mail_plan(sí / no)
6. number_vmail_messages
7. total_day_minutes
8. total_day_calls
9. total_day_charge
10. total_eve_minutes
11. total_eve_calls
12. total_eve_charge
13. total_night_minutes
14. total_night_calls
15. total_night_charge
16. total_intl_minutes
17. total_intl_calls
18. total_intl_charge
19. number_customer_service_calls.
El resultado o variable a predecir está contenido en una columna llamada churn(también sí / no).
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 23/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 24/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 25/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 26/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
In [7]: #Elegimos las columnas que vamos a utilizar para entrenar los modelos
churn_2 = Churn[,c(4,7,8,16,19,17,20)]
#Cambiamos los nombres de las columnas
names(churn_2) = c("Tiene plan internacional","Minutos/dia","Llamadas/dia","Minutos internacionales","Reclamacio
"Llamadas internacionales","Cancelacion")
knitr::kable(head(churn_2), caption = "Datos Cargados")
|Tiene plan internacional | Minutos/dia| Llamadas/dia| Minutos internacionales| Reclamaciones| Llamadas intern
acionales|Cancelacion |
|:------------------------|-----------:|------------:|-----------------------:|-------------:|----------------
--------:|:-----------|
|no | 709| 123| 106| 3|
3|no |
|no | 2236| 86| 95| 0|
7|no |
|no | 2947| 95| 137| 1|
6|no |
|no | 2168| 123| 157| 1|
2|no |
|no | 1974| 78| 77| 2|
4|no |
|no | 2265| 85| 69| 1|
5|no |
'Tiene plan internacional' 'Minutos/dia' 'Llamadas/dia' 'Minutos internacionales' 'Reclamaciones' 'Llamadas internacionales'
'Cancelacion'
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 27/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
distribución aleatoria entre el 70% y 80% del total de los datos, también es muy recomendable que se use set.seed() para establecer
una semilla, de tal manera que el ejemplo sea reproducible.
In [9]: # Partición
set.seed(1234)
part = sample(2,nrow(churn_2), replace = TRUE, prob = c(0.7,0.3) ) #70% entrenamiento y 30% test
train_ = churn_2[part==1,]
test_ = churn_2[part==2,]
3525 7
1475 7
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 28/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 29/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 30/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 31/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
no yes
85.65 14.35
no yes
86.37 13.63
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 32/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
3.4. Predicción
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 33/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
Warning message:
"predict.naive_bayes(): More features in the newdata are provided as there are probability tables in the objec
t. Calculation is performed based on features to be found in the tables."
Predicción
Actual no yes
no 1251 23
yes 163 38
In [1]: # Esta línea de código muestra la forma de calcular manualmente uno de los índices,
## Sensibilidad = TP / (TP+FP), de la misma manera se pueden calcular los demás indicadores
cat("Sensibilidad",round((38)/(38+23),4)*100,"%")
Sensibilidad 62.3 %
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 34/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
In [17]: # Ahora usemos la función confusionMatrix de la libraría CARET para encontrar la matriz de confusión y las métri
confusionMatrix(tabla_)
Predicción
Actual no yes
no 1251 23
yes 163 38
Accuracy : 0.8739
95% CI : (0.8559, 0.8904)
No Information Rate : 0.9586
P-Value [Acc > NIR] : 1
Kappa : 0.242
Sensitivity : 0.8847
Specificity : 0.6230
Pos Pred Value : 0.9819
Neg Pred Value : 0.1891
Prevalence : 0.9586
Detection Rate : 0.8481
Detection Prevalence : 0.8637
Balanced Accuracy : 0.7538
'Positive' Class : no
Análisis:
Lo primero que hay que tener en cuenta es la línea final de la salida anterior, vemos que dice: "Positive Class : no", esto es muy
importante, porque según se haya parametrado el modelo y en ocasiones, los mismos algoritmos están construidos para que la
clase positiva sea la clase negativa, en dichos casos la interpretación de las métricas se debe hacer a la inversa, es decir, en este
caso particular lo que dice sensitivity es la especificidad y lo que dice specificity es la sensibilidad.
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 35/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
La sensibilidad es del 0.6230, es decir, que el modelo clasifica correctamente el 62.30% de los clientes que abandonan.
La especificidad es del 0.8847, es decir, que el modelo clasifica correctamente el 88.47% de los clientes que permanecen.
En términos generales el modelo clasifica de manera aceptable a los clientes, especialmente a los que permanecen.
--------------------------------------------------------------------------------------------------
----------
4. Implementación de otros modelos
El ejercicio anterior tubo que ayudarle a entender la lógica del proceso de implementación y análisis de un algoritmo para resolver o
analizar un problema de clasificación en la rama del aprendizaje supervisado.
"El challenge" ahora consiste en que en el trabajo que está desarrollando en los grupos se pueden implementar otros algoritmos de
clasificación; por ejemplo: logit, decision trees, random forest, SVM, etc. La recomendación principal es que en grupo revisen el proceso
que realizaron en el punto anterior y sigan el mismo procedimiento, recuerden que también es importante la parte del análisis y la
evaluación de los modelos para seleccionar el que mejor resultado arroje para este problema en particular.
In [ ]:
localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 36/36