Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

4.1 Taller de Analítica Predictiva V3

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 36

9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook

Presentación general del taller de analítica predictiva y machine


learning
Este taller busca afianzar algunos conceptos que son muy importantes en analítica predictiva y con esto poder identificar técnicas de
analítica de datos y reconocer su utilidad o aplicación para analizar datos que nos ayuden a tomar decisiones informadas, es por esto
que el reto del taller es que los estudiantes puedan implementar algunos algoritmos básicos de apredizaje supervisado, interpretar los
resultados de los modelos y concluir cuál sería la recomendación o curso de acción en una situación particular.

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:

1. Ejercicio básico de regresión lineal múltiple:

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

2. Ejercicio de regresión lineal múltiple:


El objetivo es que el estudiante utilice el set de datos que se le entrega para:

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.

--------------------------------------------------------------------------------------------------
-------------

1. Ejercicio básico de regresión lineal múltiple:


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. Uva vez realizada la validación, si el modelo es adecuado para
predecir, se pide realizar la predicción de 3 nuevos casos.
Peso: 10 puntos

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.

1.1. Cargamos y exploramos la data

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

In [1]: # Cargamos la librería y los datos


library(dplyr)
head(trees)

Attaching package: 'dplyr'

The following objects are masked from 'package:stats':

filter, lag

The following objects are masked from 'package:base':

intersect, setdiff, setequal, union

Girth Height Volume

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

In [2]: # vemos la información general del dataset


str(trees)

'data.frame': 31 obs. of 3 variables:


$ Girth : num 8.3 8.6 8.8 10.5 10.7 10.8 11 11 11.1 11.2 ...
$ Height: num 70 65 63 72 81 83 66 75 80 75 ...
$ Volume: num 10.3 10.3 10.2 16.4 18.8 19.7 15.6 18.2 22.6 19.9 ...

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

In [3]: # Vemos los estadísticos principales


summary(trees)

Girth Height Volume


Min. : 8.30 Min. :63 Min. :10.20
1st Qu.:11.05 1st Qu.:72 1st Qu.:19.40
Median :12.90 Median :76 Median :24.20
Mean :13.25 Mean :76 Mean :30.17
3rd Qu.:15.25 3rd Qu.:80 3rd Qu.:37.30
Max. :20.60 Max. :87 Max. :77.00

1.2. Análisis gráfico

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

In [12]: # Diagrama de dispersión y valores de correlación


library(psych)
pairs.panels(trees,gap=0)

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

In [13]: #revisión con histogramas de la distribución de los datos


par(mfrow=c(1,2))
hist(trees$Girth, col="green", breaks=15)
hist(trees$Height, col="blue", breaks=15)
hist(trees$Volume, col="blue", breaks=15)

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

In [14]: #revisión con histogramas de la distribución de los datos


par(mfrow=c(1,2))
boxplot(trees$Girth, col="green", main = "Circunferencia")
boxplot(trees$Height, col="blue", main = "Altura")
boxplot(trees$Volume, col="orange", main = "Volumen")

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)

Girth Height Volume

Girth 1.00 0.52 0.97

Height 0.52 1.00 0.60

Volume 0.97 0.60 1.00

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

1.4. Construcción del modelo de regresión


In [8]: # Modelo de regresión lineal
Mod_3 = lm (Volume ~ Girth+Height, data = trees)
print(Mod_3)

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

In [9]: # Veamos los estadísticos del modelo


summary(Mod_3)

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

Residual standard error: 3.882 on 28 degrees of freedom


Multiple R-squared: 0.948, Adjusted R-squared: 0.9442
F-statistic: 255 on 2 and 28 DF, p-value: < 2.2e-16

**Análisis:

Podemos ver que las dos variables son estadísticamente significativas.


Una vez construido el modelo de regresión lineal múltiple, también hemos establecido la relación entre el predictor [X] y la respuesta
[Y] en forma de una fórmula matemática para el volumen en función de la altura y del diámetro. En la salida anterior, se puede
observar que la parte de 'Coeficientes' tiene componentes: Intercept : -57.9877, altura: 0.3393 y diámetro 4.7082:

𝑉𝑜𝑙𝑢𝑚𝑒  = β𝑜 +(β1 ∗ 𝐻𝑒𝑖𝑔𝑡ℎ) + (β2 ∗  𝐺𝑖𝑟𝑡ℎ)


1.5. Predicir un nuevo caso
De acuerdo con los resultados obtenidos del modelo, se pide que realice la predicción para los siguientes casos:

Caso 1: altura 73.4 pies y diámetro 20 pulgadas


localhost:8888/notebooks/OneDrive - Universidad de la Sabana/Analytics/Big Data %26 Analytics/Virtual/2. Octubre 2019/Taller de Analítica Predictiva.ipynb 15/36
9/1/2020 Taller de Analítica Predictiva - Jupyter Notebook
Caso a tu a 3 p es y d á et o 0 pu gadas
Caso 2: altura 65.9 pies y diámetro 18.1 pulgadas
Caso 3: altura 53.7 pies y diámetro 15.4 pulgadas

--------------------------------------------------------------------------------------------------
-------------

2. Ejercicio de regresión lineal múltiple:


El objetivo es que el estudiante utilice el set de datos de "Prestige", el cual presenta los resultados de un estudio realizado en Canadá
sobre el prestigio de las profesiones.

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.

Prestigio de las ocupaciones canadienses

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

income: ingreso promedio en dólares.


women: porcentaje de mujeres por ocupación.
Prestige: prestigio de la ocupación, resultado de una encuesta social realizada a mediados de la década de 1960.
census: código ocupacional del censo canadiense.
type: tipo de ocupación. Un factor con niveles: bc, Blue Collar; prof, Professional, Managerial, and Technical; wc, White Collar.

2.1. Cargamos los datos

In [10]: # Usaremos los datos de Prestige


library(car)
data(Prestige)
head(Prestige)

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'

The following object is masked from 'package:psych':

logit

The following object is masked from 'package:dplyr':

recode

education income women prestige census type

gov.administrators 13.11 12351 11.16 68.8 1113 prof

general.managers 12.26 25879 4.02 69.1 1130 prof

accountants 12.77 9271 15.70 63.4 1171 prof

purchasing.officers 11.42 8865 9.11 56.8 1175 prof

chemists 14.62 8403 11.68 73.5 2111 prof

physicists 15.64 11030 5.13 77.6 2113 prof

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

In [11]: # con este comando se puede ver el detalle del dataset


?Prestige

2.2. Exploramos las principales características de los datos

2.3. Análisis gráfico


Como siempre antes de iniciar con la construcción de los modelos de regresión, es importarte apoyarse en el análsis gráfico para
entender y conocer mucho mejor los datos disponibles, con esto ver si es necesario realizar algún tipo de preprocesamiento de la
información.

2.4. Análisis de relación de variables

2.5. Construcción de los modelos de regresión múltiple

--------------------------------------------------------------------------------------------------
-------------

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:

Otra forma de ver la matriz de confusión:

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

Muestra el porcentaje general de casos que son clasificados correctamente:

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 + 1 + 452 + 6 = 1.47%


- Sensibilidad
También se conoce como Recall, True Posittive Rate, muestra el porcentaje de casos positivos que son 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 ejercicio tiene un valor generar de 20 puntos.

En este caso vamos a utilizar el set de datos de Churn (https://www.rdocumentation.org/packages/C50/versions/0.1.2/topics/churn)


entendido como la rotación de clientes (más comúnmente llamada "rotación") como clientes que dejan de hacer negocios con una
empresa o un servicio.

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).

In [2]: # Cargamos las librarias


library(caret)
library(naivebayes)

Loading required package: lattice


Loading required package: ggplot2
naivebayes 0.9.6 loaded

3.1. Cargamos y exploramos los datos

In [3]: # Cargamos los datos


Churn = read.csv("churn.csv", sep = "|", header = T)

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

In [4]: # vemos los primeros registros


head(Churn)

state account_length area_code international_plan voice_mail_plan number_vmail_messages total_day_minutes total_day_calls tota

HI 101 area_code_510 no no 0 709 123

MT 137 area_code_510 no no 0 2236 86

OH 103 area_code_408 no yes 29 2947 95

NM 99 area_code_415 no no 0 2168 123

SC 108 area_code_415 no no 0 1974 78

IA 117 area_code_415 no no 0 2265 85

3.2. Preprocesamiento de la data


Teniendo en cuenta que originalmente los datos ya vienen separados y que no conocemos el procedimiento que usaron para hacer la
partición, lo mejor es unirlo en un único dataset que nos permita analizar la información en conjunto y luego hacer la partición en la
proporción que deseemos y lo más importante de manera aleatoria.

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

In [5]: # Revisión de los datos


plot(Churn$churn, col=c("red","green"), main ="Distribución de los clientes")

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

In [6]: # Datos generales del data set churn


str(Churn)

'data.frame': 5000 obs. of 20 variables:


$ state : Factor w/ 51 levels "AK","AL","AR",..: 12 27 36 33 41 13 29 19 25 44 ...
$ account_length : int 101 137 103 99 108 117 63 94 138 128 ...
$ area_code : Factor w/ 3 levels "area_code_408",..: 3 3 1 2 2 2 2 1 3 2 ...
$ international_plan : Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 1 1 1 ...
$ voice_mail_plan : Factor w/ 2 levels "no","yes": 1 1 2 1 1 1 2 1 1 2 ...
$ number_vmail_messages : int 0 0 29 0 0 0 32 0 0 43 ...
$ total_day_minutes : int 709 2236 2947 2168 1974 2265 2189 1575 891 1778 ...
$ total_day_calls : int 123 86 95 123 78 85 124 97 117 100 ...
$ total_day_charge : int 1205 3801 501 3686 3356 3851 3721 2678 1515 3023 ...
$ total_eve_minutes : int 2119 2448 2373 1264 124 1416 2143 2245 1268 1473 ...
$ total_eve_calls : int 73 139 105 88 101 68 125 112 46 89 ...
$ total_eve_charge : int 1801 2081 2017 1074 1054 1204 1822 1908 1078 1252 ...
$ total_night_minutes : int 236 942 3003 2206 2045 223 2603 3108 1905 1942 ...
$ total_night_calls : int 73 81 127 82 107 90 120 106 71 92 ...
$ total_night_charge : int 1062 424 1351 993 92 1004 1171 1399 857 874 ...
$ total_intl_minutes : int 106 95 137 157 77 69 129 111 99 119 ...
$ total_intl_calls : int 3 7 6 2 4 5 3 6 4 1 ...
$ total_intl_charge : int 286 257 37 424 208 186 348 3 267 321 ...
$ number_customer_service_calls: int 3 0 1 1 2 1 1 0 2 0 ...
$ churn : Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 1 1 1 ...

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 |

In [8]: # Nombres de las columnas


colnames (churn_2)

'Tiene plan internacional' 'Minutos/dia' 'Llamadas/dia' 'Minutos internacionales' 'Reclamaciones' 'Llamadas internacionales'
'Cancelacion'

3.2. Partición de la data


Para realizar la predicción vamos a utilizar todas las variables que tenemos en el data set, pero antes debemos realizar la partición. En
Machine Learning es necesario un set de entrenamiento (Train) para generar y entrenar un modelo predictivo, y un set de prueba (Test),
para comprobar la eficacia del modelo para hacer predicciones correctas. Los expertos recomiendan que la partición tenga una

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,]

In [10]: # Vemos las dimensiones de los dos dataset


dim(train_)
dim(test_)

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

In [11]: # Revisión de los datos con train


par(mfrow=c(1,2))
plot(train_$Cancelacion ,col=c("red","green"), main ="Distribución clientes - Train")
# Revisión de los datos con test
plot(test_$Cancelacion ,col=c("red","green"), main ="Distribución clientes - Test")

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

In [12]: # Revisión de los datos con train


par(mfrow=c(1,2))
pie(table(train_$Cancelacion),col=c("red","green"), main ="Distribución clientes - Train")
# Revisión de los datos con test
pie(table(test_$Cancelacion),col=c("red","green"), main ="Distribución clientes - Test")

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

In [13]: # Distribución porcentual


round(prop.table(table(train_$Cancelacion)),4)*100
round(prop.table(table(test_$Cancelacion)),4)*100

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

In [14]: # Vemos la información general de los dos dataset


str(train_)
str(test_)

'data.frame': 3525 obs. of 7 variables:


$ Tiene plan internacional: Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 1 1 1 ...
$ Minutos/dia : int 709 2236 2947 2168 2265 2189 1575 891 1778 2098 ...
$ Llamadas/dia : int 123 86 95 123 85 124 97 117 100 77 ...
$ Minutos internacionales : int 106 95 137 157 69 129 111 99 119 9 ...
$ Reclamaciones : int 3 0 1 1 1 1 0 2 0 1 ...
$ Llamadas internacionales: int 3 7 6 2 5 3 6 4 1 4 ...
$ Cancelacion : Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 1 1 1 ...
'data.frame': 1475 obs. of 7 variables:
$ Tiene plan internacional: Factor w/ 2 levels "no","yes": 1 1 1 1 2 2 1 1 2 1 ...
$ Minutos/dia : int 1974 1126 2081 2593 101 1401 1683 1662 1587 2084 ...
$ Llamadas/dia : int 78 86 93 94 110 125 76 125 112 102 ...
$ Minutos internacionales : int 77 72 74 92 111 101 12 134 83 101 ...
$ Reclamaciones : int 2 3 1 3 0 1 2 1 2 1 ...
$ Llamadas internacionales: int 4 6 2 1 6 3 3 6 1 8 ...
$ Cancelacion : Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 1 2 2 ...

3.3. Construcción del modelo


Ahora que ya contamos con la partición adecuada de los datos, vamos a construir el modelo de clasificación, inicialmente se realiza el
entrenamiento, luego la predicción y finalmente la evaluación del modelo.

In [15]: # Entrnamiento del Modelo


Mod_NB = naive_bayes(Cancelacion ~ ., data = train_)

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

In [16]: # Predicción y matriz de confisión


predic = predict(Mod_NB , test_)
tabla_ = table(test_$Cancelacion, predic, dnn = c("Actual", "Predicción"))
tabla_

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_)

Confusion Matrix and Statistics

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

Mcnemar's Test P-Value : <2e-16

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.

El accuracy o exactitud del modelo es del 87.39%


La tasa de error es del 12.61%

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

También podría gustarte