0% encontró este documento útil (0 votos)
83 vistas8 páginas

Modelos Predictivos en RStudio

Este documento presenta una introducción al uso de RStudio para realizar análisis predictivos de machine learning. Explica los pasos iniciales como descargar e instalar RStudio, cargar y explorar datos, y realizar análisis exploratorios como gráficos y estadísticas descriptivas. También cubre temas como limpieza y preparación de datos, detección de valores atípicos, y balanceo de conjuntos de datos para modelado predictivo.

Cargado por

Leticia Mansilla
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
83 vistas8 páginas

Modelos Predictivos en RStudio

Este documento presenta una introducción al uso de RStudio para realizar análisis predictivos de machine learning. Explica los pasos iniciales como descargar e instalar RStudio, cargar y explorar datos, y realizar análisis exploratorios como gráficos y estadísticas descriptivas. También cubre temas como limpieza y preparación de datos, detección de valores atípicos, y balanceo de conjuntos de datos para modelado predictivo.

Cargado por

Leticia Mansilla
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Machine Learning Predictivo en Rstudio.

, 1er modelo
Isaac Gonzalez
Data Science

R, aplicado al negocio., Mas utilizado


No es necesario ser matematico, programador, saber sobre algoritmo al 100%

Big Data para Ceo- Libro


Descargar R Studio - project o usar online

Procesos de uso de Rstudio


Workspace donde se ubican los proyectos
R Studio se divide en cuatro partes
1) Desarrollo del codigo del proyecto: todo los codigos
2) Consola: Intrucciones de codigos y se ejecuta, se piden cosas temporales,salidas
3) 3 perstañas: history/connection/enviroment donde se puede ver lo que se está
haciendo, cuando se cargan conjuntos datos, obejtos creados,
4) Pestañas de files: diferentes archivos, plots: graficos, packages: para gestionar
todos los paquetes, help: ayuda de parámetros: dudas con codigos se coloca ?y la
variable.
5) Los “Change” son las variables sombreadas listas para ejecutar, tienen comillas, y
un codigo que representa la variable.
6) options(scipen=999) Le dice a Rstudio que no coloque la notación cientifica: cuando
tenemos un numero muy largo, nos impide leer los resultados de manera correcta,
7) Librerías: funciones adicionales, que le falta a r base.

VIDEO 2:
En horizontal vamos a ver todo el desarrollo de un proyecto
<- siempre se coloca esta fecha para anunciar una variable
ejemplo
df <- [Link](file = '[Link]',sep=';')
- Le estamos indicando con la variable “df” que lea el archivo csv, se escribe muy
rapido. y agrega los datos dentro de esa variable
Datafree (siglas) igual se puede llamar de otra manera, es la forma de organizar datos.

glimpse(df)
- me da una vision rapida de todas las variables. Brinda info adicional, por ejemplo el
tipo de la variable, si es categorica/ continua, valores. R tiene funciones con poco
codigos
- Ejemplo cuando se coloca
4
Columns: 20
$ Temperature <int> 67, 68, 64, 63, 65, 67, 67, 67, 65, 63, …
$ Humidity <int> 82, 77, 76, 80, 81, 84, 83, 76, 80, 80, …
$ Operator <fct> Operator1, Operator1, Operator1, Operato…
$ Measure1 <int> 291, 1180, 1406, 550, 1928, 398, 847, 10…
$ Measure2 <int> 1, 1, 1, 1, 1, 1, 0, 2, 2, 0, 2, 3, 0, 1…
$ Measure3 <int> 1, 1, 1, 1, 2, 2, 2, 1, 0, 0, 2, 1, 0, 1…
$ Measure4 <int> 1041, 1915, 511, 1754, 1326, 1901, 1849,…
$ Measure5 <int> 846, 1194, 1577, 1834, 1082, 1801, 1141,…
$ Measure6 <int> 334, 637, 1121, 1413, 233, 1153, 1609, 9…
$ Measure7 <int> 706, 1093, 1948, 1151, 1441, 1085, 982, …
$ Measure8 <int> 1086, 524, 1882, 945, 1736, 1547, 1159, …
$ Measure9 <int> 256, 919, 1301, 1312, 1033, 2005, 672, 4…
$ Measure10 <int> 1295, 245, 273, 1494, 1549, 477, 1128, 1…
$ Measure11 <int> 766, 403, 1927, 1755, 802, 1217, 663, 85…
$ Measure12 <int> 968, 723, 1123, 1434, 1819, 1632, 1114, …
$ Measure13 <int> 1185, 1446, 717, 502, 1616, 1324, 1838, …
$ Measure14 <int> 1355, 719, 1518, 1336, 1507, 1854, 290, …
$ Measure15 <int> 1842, 748, 1689, 711, 507, 1739, 1192, 8…
$ [Link] <int> 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, …
$ Failure <fct> No, No, No, No, No, No, No, No, No, No, …

Acá se puede ver la temperatura de la pc, humedad, si hay fallas con esa serie de medidas,
los tipos de variables como INT u FCT, la primera es entero son discretas o continuas, son
numericas, no hay punto intermedias entre ellas, tienen un orden
factor: variables categoricas, no tienen puntos intermedios entre ellas, no respeta orden
determinado, como el color, no
No siempre se recocen los tipos de variables.

skim(df) (permite tener una gran vision de los datos)


- nos muestra graficos, estadisticos, minimos
Variable type: numeric ────────────────────────────
skim_variable n_missing
1 Temperature 0

Por ejemplo en este caso nos muestra los valores n_missing: los nulos, valores faltante que
tenemos en nuestras variables:
complete_rate mean sd p0 p25 p50
1 1 64.0 2.87 5 62 64
Tambien nos muestra la media, la desviación típica, el mínimo, los cuartiles, el maximo,
- Grafica de cada una de las variables
- se puede volver a poner la variable para ver todo el cuadro completo
- 4 Measure2 0 1 1.49
1.12 0 0 1 2 3 ▇▇▁▇▇
- 5 Measure3 0 1 0.999
0.816 0 0 1 2 2 ▇▁▇▁▇
Conclusiones
- no hay datos nulos
- Muestran valores distintos en measure 2/3 parecen factores que enteros: una tiene
4 valores distintos, y la otra 3 valores distintos y el resto son variables continuas,
p50 p75 p100 hist
1 64 66 78 ▁▁▁▆▇
- Muestra un valor atipico en la temperatura, una baja drastica a comparacion al resto,
lo que indica que habria que revisar eso.
- Se analiza en detalle la temperatura con la variable:
ggplot(df,x=1) + geom_boxplot(aes(y=Temperature

Lo que indica es que la datafree cree un tipo de grafico que se llama boxplot, sirve
para medir atipicos/tipicos, y lo coloque en la distribución aes.

en el grafico lo que se muestra es que hay valores por debajo del maximo que seria
60, los puntos abajo muestran que es menor.
- en base a esto se toman desiciones

Calidad de los datos


df <- df %>%
mutate(Measure2 = [Link](Measure2), #Corregimos Measure2
Measure3 = [Link](Measure3)) %>%
En estas líneas se le pide que data free, aplica cambios, tomar la medida 2 y pasarla a un
factor, volver a colocarla a data free, lo mismo con la medida 3.
- filter(Temperature > 50) para que tome todos los valores superiores a 50, ya que
vimos que en pocos casos hay casos de menos temperatura, por eso se le pide que
tome los datos los que tengan mayor de 50 de temp

Realización de gráficos
con el codigo:
ejemplo:
select_if([Link]) %>%
gather() %>%
ggplot(aes(value)) + geom_bar() + facet_wrap(~key,scales='free') +
theme([Link]=element_text(size=6))

muestra todos los graficos de todas las variables, al mismo tiempo para comparar y conlcuir
en negocios.
-Lo primero que hay que hacer es dividir las variables de tipo continua y las que son de
factor,
- selecciona todas las variables de tipo factor o tipo entero en una sola linea
- Funcion que cambia el orden del conjunto de datos, de vertical a horizontal. “gather”.
Ejecuta graficos, para muchos graficos transformarlos de horizontal a vertical
- le pide que el grafico que se consigio de forma vertical que establezca un grafico de barras
(geom_bar)
- me saque tanto graficos como variables que tenemos: un grafico por variable
(key,scales='free')
- theme([Link]=element_text(size=6)) estetica y formato

Porque aparecen 4 graficos? porque hay cuatro variables que son de la tipologia factor, de
nuestro conjunto de datos.
- frecuecia de valor de cada una de las variables
- a simple vista en el ultimo caso el 2 operador tiene mas porcentaje, en termino de
negocios se evalua
En tipo de entero: seleccioname las de tipo de entero, como no tiene sentido hacer graficos
de barras se le pide un grafico de densidad

eso se cambia aca:

select_if([Link]) %>%
gather() %>%
ggplot(aes(value)) + geom_bar() + facet_wrap(~key,scales='free') +
theme([Link]=element_text(size=6))

Ejemplo de casos de enteros:


df %>%
select_if([Link]) %>%
gather() %>%
ggplot(aes(value)) + geom_density() + facet_wrap(~key,scales='free') +
theme([Link]=element_text(size=6))

- Se analizan una por una y ver cuestiones raras


- entre 500 a 600 horas los equipos funcionan sin fallas. Hay un punto corte el resto
es menos fracuente, antes de las 70 horas las maquinas no fallan a partir de ahi
presentan fallos.

analisis de correlaciones. regresión logística


para ver hasta que punto no se cumple:

df %>%
select_if([Link]) %>%
cor() %>%
round(digits = 2)
significado:
- selecciona las variables continuas,
- sobre esta correlaciona
- redondea a dos digitos
-1 y 1 correlacion fuerte
0 o cercano a 0

table(df$Failure) cuantifica los numeros le pasamos una variable de tipo factor.

- No se perciben patrones raros en las variables


- Las variables de medidas no correlacionan
- La variable target está muy desbalanceada

*variables sinteticas* las que creamos nosotras derivadas de las originales porque son msa
predictivas que las originales.

balanceo de la variable target *importante*


transforrmar la situacion real en terminos reales. desde el balanceo
sobremuestreo: copiar los si y replicar, artificialmente aumento los si sobre los no
inframuestreo: inicial de si 1% elimino todos los no, el conjunto final es proporcional del 20 /
80 %
*dos formas de balancear* para predecir si si o no no, y no solo sea cero.

#Vamos a balancear usando la técnica del inframuestreo:


#Comprobamos la penetración exacta de la target
#Tenemos 81 sis que sobre el total de casos son un 0,9%:
81/nrow(df) * 100
resultado: 0.9225513

#Para tener casi un 10% necesitaríamos incrementar la proporción aprox en x10


#Entonces vamos a reducir los nos para que salga aprox esa proporción
#Nuevo df de nos
[Link](1234) #para que nos salga lo mismo
df_nos <- df %>%
filter(Failure == 'No') %>%
sample_frac(size = 0.08)
#Df de sis
df_sis <- df %>% filter(Failure == 'Yes')
#Y los unimos de nuevo en un nuevo df reducido
df_red <- rbind(df_nos,df_sis)
#Comprobamos de nuevo la penetación de la target
count(df_red,Failure)
81/nrow(df_red) * 100

VIDEO 3: Formato para desarrollar una regresion logistica: variable dicotomica, 0 y 1,


probabilidad de que se rompa la maquina
glm: modelo variable generalizado, pasarme el conjunto entrenamiento y

regresion multiple: x + y= z
Para predecir el salario de una persona, en base a la edad y el nivel formativo de una
persona, z es el resultado.

formula para realizar una regresión logística:

rl <- glm(formula,df_red,family=binomial(link='logit'))
summary(rl) #Vemos el resultado
df_red: es data free reducido-
summary(rl): es una descripcion de regresion logistica que se creo
En este caso podemos observar con asteriscos, las varibles que permiten predecir lo que
queremos predecir, en este caso las fallas de las maquinas. Al menos tienen que tener 1
asteriscos, si no tienen esas variables no me ayudan a predecir nada.

Entonces para poder eliminar las variables que no aportan se usa esta formula:
indep_fin <- c('Temperature','Humidity','Measure9')
formula <- reformulate(indep_fin,target)

Dice independientes finales, (las formulas con asteristicos)


De nuevo volvemos a la formula anterior de “summary” y vemos el modelo modificado con
las variables seleccionadas.

Ahora vamos a determinar la probabilidad de que la maquina vaya a fallar, es lo que se


suele llamar “scoring”:

df$scoring <- predict(rl,df,type='response')

variable nueva (df$scoring) que muestre la predicción, en base a la regresión logística,


sobre todos los datos, y para que lo guarde como probabilidad ·response·

*** Como la penetración inicial era del 1%, vamos a poner un punto de corte muy alto, por
ejemplo por encima del 80%
df$prediccion <- ifelse(df$scoring > 0.8,1,0) ***

se coloca head (df$scoring) para que nos muestre en 0 y 1 las predicciones.


table(df$prediccion)

0 1
8728 52

se suma esa variable que dice: que en total del de las 8000 no se rompe la maquina, con 52
1 puede romperse.

se cambia la matriz de confusion, es decir para aumentar el scoring para ver si la maquina
va a fallar o no, desde un resultado de corte de 60% a diferencia del 80%
- aumenta el numero de veces que la maquina puede fallar
- menos exigente para marcar el criterio de falla
- fallos reales pero mas falsos positivos
- operacion de mantenimiento que tal vez no es necesario
*> #Vamos a ver qué pasa si bajamos la decisión al 60%
> df$prediccion <- ifelse(df$scoring > 0.6,1,0)
> table(df$prediccion,df$Failure)

No Yes
0 8687 24
1 12 57

También podría gustarte