FORM es una empresa con más de 10 años B2B, que surge a partir de la necesidad de las empresas de adquirir empaques que agreguen valor a la cadena de suministro, considerando tanto la protección de los productos como las necesidades productivas, operativas y de almacenamiento. Cabe mencionar que la empresa tiene un alto enfoque hacia el segmento automotriz como cartera de cliente principal.

Importar librerías

library(tidyverse)
library(ggplot2)
library(foreign)
library(dplyr)         
library(forcats)     
library(janitor)      
library(Hmisc)      
library(psych) 
library(naniar)       
library(dlookr)       
library(kableExtra)
library(readr)
library(corrplot)
library(jtools) 
library(lmtest) 
library(car) 
library(olsrr) 
library(gmodels)
library(factoextra)
library(plotrix)
library(tidyr) 
library(knitr)
library(pollster)
library(epiDisplay)
library(modeest)
library(RColorBrewer)
library(forecast)
library(ggfortify)  
library(ggalluvial)

FORM Recursos Humanos

El área de Recursos Humanos y Cultura Form, se encarga de la gestión de movimientos salariales, evaluaciones para cambios de área, reclutamiento y selección, organización de eventos y/o actividades de comunicación y desarrollo organizacional y sobre todo, la atención directa al colaborador al 100%.

La primer base de datos analizada en este caso, es la de recursos humanos de FORM, la cual esta compuesta por dos secciones, una de colaboradores, y otra de empleados que ya estan dados de baja de la compañía. Se analizarán los datos estadísticos de las personas que colaboran en FORM.

Sección 1

Limpieza, Transformación, y Organización de Bases de Datos

bdcol <- read.csv("/Users/Karen/Downloads/Evidencia 2 FORM/BaseDatosL RH_Colaboradores.csv")
bdbaj <- read.csv("/Users/Karen/Downloads/Evidencia 2 FORM/BaseD_Limpia RH_ Bajas .csv")

Entender base de datos

summary(bdcol)
##  numero_de_empleado nombre_completo         edad          genero         
##  Min.   :  1.00     Length:113         Min.   :18.00   Length:113        
##  1st Qu.: 31.00     Class :character   1st Qu.:26.00   Class :character  
##  Median : 63.00     Mode  :character   Median :34.00   Mode  :character  
##  Mean   : 75.86                        Mean   :36.07                     
##  3rd Qu.:127.00                        3rd Qu.:45.00                     
##  Max.   :169.00                        Max.   :73.00                     
##  fecha_de_alta        antiguedad          BAJA           puesto         
##  Length:113         Min.   : 0.000   Min.   :0.0000   Length:113        
##  Class :character   1st Qu.: 0.000   1st Qu.:0.0000   Class :character  
##  Mode  :character   Median : 0.000   Median :0.0000   Mode  :character  
##                     Mean   : 1.425   Mean   :0.3451                     
##                     3rd Qu.: 2.000   3rd Qu.:0.0000                     
##                     Max.   :12.000   Max.   :3.0000                     
##  departamento       mano_de_obra       salario_diario    colonia         
##  Length:113         Length:113         Min.   :144.4   Length:113        
##  Class :character   Class :character   1st Qu.:176.7   Class :character  
##  Mode  :character   Mode  :character   Median :180.7   Mode  :character  
##                                        Mean   :181.4                     
##                                        3rd Qu.:180.7                     
##                                        Max.   :441.4                     
##   municipio        
##  Length:113        
##  Class :character  
##  Mode  :character  
##                    
##                    
## 
str(bdcol)
## 'data.frame':    113 obs. of  13 variables:
##  $ numero_de_empleado: int  1 2 3 4 5 6 7 8 9 10 ...
##  $ nombre_completo   : chr  "NICOLAS MARTINEZ DE LOERA" "MARIANA DE LEON MORENO" "JOSE LUIS HERNANDEZ CERVANTES" "MARIA CAZARES MORALES" ...
##  $ edad              : int  67 43 73 32 57 38 55 26 27 37 ...
##  $ genero            : chr  "MASCULINO" "FEMENINO" "MASCULINO" "FEMENINO" ...
##  $ fecha_de_alta     : chr  "01/07/10" "01/07/11" "22/11/11" "30/01/13" ...
##  $ antiguedad        : int  12 11 11 9 8 8 7 6 5 5 ...
##  $ BAJA              : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ puesto            : chr  "Supervisor de Máquin" "Supervisor de pegado" "Externo" "SUPERVISORA" ...
##  $ departamento      : chr  "Produccion Cartón MDL" "Produccion Cartón MDL" "Externo" "Produccion Cartón MC" ...
##  $ mano_de_obra      : chr  "Indirecto" "Indirecto" "Indirecto" "Indirecto" ...
##  $ salario_diario    : num  177 177 177 337 441 ...
##  $ colonia           : chr  "UNIDAD LABORAL" "SANTA TERESITA" "VILLAS DE HUINALA" "PUEBLO NUEVO" ...
##  $ municipio         : chr  "SAN NICOLAS DE LOS G" "APODACA" "APODACA" "APODACA" ...
summary(bdbaj)
##     nombre               edad          genero          fecha_de_alta     
##  Length:237         Min.   : 0.00   Length:237         Length:237        
##  Class :character   1st Qu.:23.00   Class :character   Class :character  
##  Mode  :character   Median :29.00   Mode  :character   Mode  :character  
##                     Mean   :30.52                                        
##                     3rd Qu.:37.00                                        
##                     Max.   :61.00                                        
##  motivo_de_baja     dias_de_trabajo       baja           puesto_que_desempeña
##  Length:237         Min.   :   0.00   Length:237         Length:237          
##  Class :character   1st Qu.:   9.00   Class :character   Class :character    
##  Mode  :character   Median :  21.00   Mode  :character   Mode  :character    
##                     Mean   :  83.42                                          
##                     3rd Qu.:  49.00                                          
##                     Max.   :1966.00                                          
##   salario_imss     colonia           municipio            estado         
##  Min.   :144.4   Length:237         Length:237         Length:237        
##  1st Qu.:180.7   Class :character   Class :character   Class :character  
##  Median :180.7   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :178.6                                                           
##  3rd Qu.:180.7                                                           
##  Max.   :500.0                                                           
##  estado_civil      
##  Length:237        
##  Class :character  
##  Mode  :character  
##                    
##                    
## 
str(bdbaj)
## 'data.frame':    237 obs. of  13 variables:
##  $ nombre              : chr  "MARIO VALDEZ ORTIZ" "ISABEL BARRIOS MENDEZ" "MARIA ELIZABETH GOMEZ HERNANDEZ" "ALONDRA ABIGAIL ESCARCIA GOMEZ" ...
##  $ edad                : int  32 36 23 21 29 46 29 31 50 19 ...
##  $ genero              : chr  "MASCULINO" "FEMENINO" "FEMENINO" "FEMENINO" ...
##  $ fecha_de_alta       : chr  "09/03/20" "09/11/21" "10/11/21" "10/11/21" ...
##  $ motivo_de_baja      : chr  "RENUNCIA VOLUNTARIA" "RENUNCIA VOLUNTARIA" "RENUNCIA VOLUNTARIA" "RENUNCIA VOLUNTARIA" ...
##  $ dias_de_trabajo     : int  628 60 59 59 51 37 37 31 18 224 ...
##  $ baja                : chr  "27/11/21" "08/01/22" "08/01/22" "08/01/22" ...
##  $ puesto_que_desempeña: chr  "DISEÑO" "AYUDANTE GENERAL" "AYUDANTE GENERAL" "AYUDANTE GENERAL" ...
##  $ salario_imss        : num  500 152 152 152 152 ...
##  $ colonia             : chr  "SAN NICOLAS DE LOS G" "COLINAS DEL AEROPÑUERTO" "PUEBLO NUEVO" "PUEBLO NUEVO" ...
##  $ municipio           : chr  "SAN NICOLAS DE LOS G" "PESQUERIA" "APODACA" "APODACA" ...
##  $ estado              : chr  "NUEVO LEÓN" "NUEVO LEÓN" "NUEVO LEÓN" "NUEVO LEÓN" ...
##  $ estado_civil        : chr  "SOLTERO" "UNIÓN LIBRE" "CASADO" "SOLTERO" ...

Técnicas de limpieza

Técnica 1. Cambiar de caracter a formato fecha para facilitar código de tiempo

bdcol$fecha_de_alta<-as.Date(bdcol$fecha_de_alta,format="%y/%m/%d") 
bdbaj$fecha_de_alta<-as.Date(bdbaj$fecha_de_alta,format="%y/%m/%d")
bdbaj$baja<-as.Date(bdbaj$baja,format="%y/%m/%d") 

Técnica 2. Eliminar NA’s y sustituir con 0’s

sum(is.na(bdcol))
## [1] 0
bdcol[is.na(bdcol)]<-0

bdcol <- na.omit(bdcol)

sum(is.na(bdbaj))
## [1] 0
bdbaj[is.na(bdbaj)]<-0

bdbaj <- na.omit(bdbaj)

Técnica 3. Convertir variables

bdcol$genero<-as.factor(bdcol$genero)
bdcol$puesto<-as.factor(bdcol$puesto)
bdcol$departamento<-as.factor(bdcol$departamento)
bdcol$municipio<-as.factor(bdcol$municipio)

str(bdcol)
## 'data.frame':    113 obs. of  13 variables:
##  $ numero_de_empleado: int  1 2 3 4 5 6 7 8 9 10 ...
##  $ nombre_completo   : chr  "NICOLAS MARTINEZ DE LOERA" "MARIANA DE LEON MORENO" "JOSE LUIS HERNANDEZ CERVANTES" "MARIA CAZARES MORALES" ...
##  $ edad              : int  67 43 73 32 57 38 55 26 27 37 ...
##  $ genero            : Factor w/ 2 levels "FEMENINO","MASCULINO": 2 1 2 1 1 2 1 2 2 1 ...
##  $ fecha_de_alta     : Date, format: "2001-07-10" "2001-07-11" ...
##  $ antiguedad        : int  12 11 11 9 8 8 7 6 5 5 ...
##  $ BAJA              : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ puesto            : Factor w/ 29 levels "AY. GENERAL",..: 27 28 10 29 29 8 7 4 3 7 ...
##  $ departamento      : Factor w/ 22 levels "","Ay.flexo",..: 18 18 13 17 8 4 8 19 4 10 ...
##  $ mano_de_obra      : chr  "Indirecto" "Indirecto" "Indirecto" "Indirecto" ...
##  $ salario_diario    : num  177 177 177 337 441 ...
##  $ colonia           : chr  "UNIDAD LABORAL" "SANTA TERESITA" "VILLAS DE HUINALA" "PUEBLO NUEVO" ...
##  $ municipio         : Factor w/ 9 levels "APODACA","CAÑADA BLANCA",..: 9 1 1 1 1 8 1 1 8 9 ...
bdbaj$genero<-as.factor(bdbaj$genero)
bdbaj$puesto_que_desempeña<-as.factor(bdbaj$puesto_que_desempeña)
bdbaj$municipio<-as.factor(bdbaj$municipio)
bdbaj$estado<-as.factor(bdbaj$estado)
bdbaj$estado_civil<-as.factor(bdbaj$estado_civil)

str(bdbaj)
## 'data.frame':    237 obs. of  13 variables:
##  $ nombre              : chr  "MARIO VALDEZ ORTIZ" "ISABEL BARRIOS MENDEZ" "MARIA ELIZABETH GOMEZ HERNANDEZ" "ALONDRA ABIGAIL ESCARCIA GOMEZ" ...
##  $ edad                : int  32 36 23 21 29 46 29 31 50 19 ...
##  $ genero              : Factor w/ 2 levels "FEMENINO","MASCULINO": 2 1 1 1 1 1 1 2 2 2 ...
##  $ fecha_de_alta       : Date, format: "2009-03-20" "2009-11-21" ...
##  $ motivo_de_baja      : chr  "RENUNCIA VOLUNTARIA" "RENUNCIA VOLUNTARIA" "RENUNCIA VOLUNTARIA" "RENUNCIA VOLUNTARIA" ...
##  $ dias_de_trabajo     : int  628 60 59 59 51 37 37 31 18 224 ...
##  $ baja                : Date, format: "2027-11-21" "2008-01-22" ...
##  $ puesto_que_desempeña: Factor w/ 31 levels "ANALISTA DE NOMINAS /AUX DE R.H.",..: 15 9 9 9 9 9 9 9 9 4 ...
##  $ salario_imss        : num  500 152 152 152 152 ...
##  $ colonia             : chr  "SAN NICOLAS DE LOS G" "COLINAS DEL AEROPÑUERTO" "PUEBLO NUEVO" "PUEBLO NUEVO" ...
##  $ municipio           : Factor w/ 13 levels "APODACA","CADEREYTA",..: 10 7 1 1 1 1 1 5 4 1 ...
##  $ estado              : Factor w/ 3 levels "COAHUILA","NUEVO LEÓN",..: 2 2 2 2 2 2 2 2 2 2 ...
##  $ estado_civil        : Factor w/ 4 levels "CASADO","DIVORCIADO",..: 3 4 1 3 3 3 4 4 3 3 ...

Variables

¿Cuántos registros y variables tiene la base de datos?

dim(bdcol)
## [1] 113  13
dim(bdbaj)
## [1] 237  13

Clasificación de variables

Colaboradores

Variablerhc<-c("`numero_de_empleado`","`nombre_completo`","`edad`","`genero`", "`fecha_de_alta`","`antiguedad`","`BAJA`","`puesto`","`departamento`","`mano_de_obra`","`salario_diario`","`colonia`","`municipio`")

Typerhc<-c("cuantitativo (discreta)", "cualitativo","cuantitativo (discreto)", "cualitativo","cuantitativo (continuo)","cuantitativo (discreto)","cuantitativo (discreto)","cualitativo","cualitativo", "cualitativo", "cuantitativo (continuo)","cualitativo", "cualitativo")

Escalarhc <- c("razon", "nominal", "razon", "nominal","ordinal", "razon", "razon", "nominal", "nominal", "nominal", "intervalo", "nominal", "nominal" )

tablerhc<-data.frame(Variablerhc,Typerhc,Escalarhc)
knitr::kable(tablerhc)
Variablerhc Typerhc Escalarhc
numero_de_empleado cuantitativo (discreta) razon
nombre_completo cualitativo nominal
edad cuantitativo (discreto) razon
genero cualitativo nominal
fecha_de_alta cuantitativo (continuo) ordinal
antiguedad cuantitativo (discreto) razon
BAJA cuantitativo (discreto) razon
puesto cualitativo nominal
departamento cualitativo nominal
mano_de_obra cualitativo nominal
salario_diario cuantitativo (continuo) intervalo
colonia cualitativo nominal
municipio cualitativo nominal

Bajas

Variablerhb<-c("`nombre`","`edad`","`genero`","`fecha_de_alta`", "`motivo_de_baja`","`dias_De_trabajo`","`baja`","`puesto_que_desempeña`","`salario_imss`","`colonia`","`municipio`","`estado`","`estado_civil`")

Typerhb<-c("cualitativo", "cuantitativo (discreto)","cualitativo", "cuantitativo (discreto)","cualitativo","cuantitativo (discreto)","cuantitativo (discreto)","cualitativo","cuantitativo (continuo)", "cualitativo", "cuanlitativo","cualitativo", "cualitativo")

Escalarhb <- c("nominal", "razon", "nominal", "razon","nominal", "razon", "razon", "nominal", "intervalo", "nominal", "nominal", "nominal", "nominal" )

tablerhb<-data.frame(Variablerhb,Typerhb,Escalarhb)
knitr::kable(tablerhb)
Variablerhb Typerhb Escalarhb
nombre cualitativo nominal
edad cuantitativo (discreto) razon
genero cualitativo nominal
fecha_de_alta cuantitativo (discreto) razon
motivo_de_baja cualitativo nominal
dias_De_trabajo cuantitativo (discreto) razon
baja cuantitativo (discreto) razon
puesto_que_desempeña cualitativo nominal
salario_imss cuantitativo (continuo) intervalo
colonia cualitativo nominal
municipio cuanlitativo nominal
estado cualitativo nominal
estado_civil cualitativo nominal

Análisis estadístico descriptivo

Tabla de frecuencia

Se realizó una tabla de frecuencia de la variable género con el objetivo de validar las frecuencias de salario diario por cada colaborador.

proportion1 <- prop.table(table(bdcol$salario_diario,bdcol$genero))
proportion1 %>%
  kbl() %>%
  kable_styling()
FEMENINO MASCULINO
144.45 0.0265487 0.0000000
151.61 0.0619469 0.0353982
151.67 0.0088496 0.0265487
152.86 0.0088496 0.0000000
175.79 0.0000000 0.0088496
176.72 0.0619469 0.1504425
180.68 0.3008850 0.2212389
181.68 0.0088496 0.0000000
184.68 0.0088496 0.0000000
185.68 0.0088496 0.0000000
208.65 0.0088496 0.0000000
240.71 0.0088496 0.0000000
240.75 0.0000000 0.0088496
260.01 0.0088496 0.0000000
279.61 0.0000000 0.0088496
337.05 0.0088496 0.0000000
441.37 0.0088496 0.0000000

Tabla cruzada

Posterior a la tabla de frecuencia, se realizó una tabla cruzada donde se visualizó como es la relación respecto a la variable de salario diario por género en la empresa

proportion1 %>%
  kbl() %>%
  kable_material (c("striped","hover"))
FEMENINO MASCULINO
144.45 0.0265487 0.0000000
151.61 0.0619469 0.0353982
151.67 0.0088496 0.0265487
152.86 0.0088496 0.0000000
175.79 0.0000000 0.0088496
176.72 0.0619469 0.1504425
180.68 0.3008850 0.2212389
181.68 0.0088496 0.0000000
184.68 0.0088496 0.0000000
185.68 0.0088496 0.0000000
208.65 0.0088496 0.0000000
240.71 0.0088496 0.0000000
240.75 0.0000000 0.0088496
260.01 0.0088496 0.0000000
279.61 0.0000000 0.0088496
337.05 0.0088496 0.0000000
441.37 0.0088496 0.0000000
location <- CrossTable(bdcol$salario_diario, bdcol$genero, prop.t=TRUE, prop.r=TRUE, prop.c=TRUE)
## 
##  
##    Cell Contents
## |-------------------------|
## |                       N |
## | Chi-square contribution |
## |           N / Row Total |
## |           N / Col Total |
## |         N / Table Total |
## |-------------------------|
## 
##  
## Total Observations in Table:  113 
## 
##  
##                      | bdcol$genero 
## bdcol$salario_diario |  FEMENINO | MASCULINO | Row Total | 
## ---------------------|-----------|-----------|-----------|
##               144.45 |         3 |         0 |         3 | 
##                      |     1.177 |     1.381 |           | 
##                      |     1.000 |     0.000 |     0.027 | 
##                      |     0.049 |     0.000 |           | 
##                      |     0.027 |     0.000 |           | 
## ---------------------|-----------|-----------|-----------|
##               151.61 |         7 |         4 |        11 | 
##                      |     0.190 |     0.223 |           | 
##                      |     0.636 |     0.364 |     0.097 | 
##                      |     0.115 |     0.077 |           | 
##                      |     0.062 |     0.035 |           | 
## ---------------------|-----------|-----------|-----------|
##               151.67 |         1 |         3 |         4 | 
##                      |     0.622 |     0.730 |           | 
##                      |     0.250 |     0.750 |     0.035 | 
##                      |     0.016 |     0.058 |           | 
##                      |     0.009 |     0.027 |           | 
## ---------------------|-----------|-----------|-----------|
##               152.86 |         1 |         0 |         1 | 
##                      |     0.392 |     0.460 |           | 
##                      |     1.000 |     0.000 |     0.009 | 
##                      |     0.016 |     0.000 |           | 
##                      |     0.009 |     0.000 |           | 
## ---------------------|-----------|-----------|-----------|
##               175.79 |         0 |         1 |         1 | 
##                      |     0.540 |     0.633 |           | 
##                      |     0.000 |     1.000 |     0.009 | 
##                      |     0.000 |     0.019 |           | 
##                      |     0.000 |     0.009 |           | 
## ---------------------|-----------|-----------|-----------|
##               176.72 |         7 |        17 |        24 | 
##                      |     2.738 |     3.212 |           | 
##                      |     0.292 |     0.708 |     0.212 | 
##                      |     0.115 |     0.327 |           | 
##                      |     0.062 |     0.150 |           | 
## ---------------------|-----------|-----------|-----------|
##               180.68 |        34 |        25 |        59 | 
##                      |     0.145 |     0.170 |           | 
##                      |     0.576 |     0.424 |     0.522 | 
##                      |     0.557 |     0.481 |           | 
##                      |     0.301 |     0.221 |           | 
## ---------------------|-----------|-----------|-----------|
##               181.68 |         1 |         0 |         1 | 
##                      |     0.392 |     0.460 |           | 
##                      |     1.000 |     0.000 |     0.009 | 
##                      |     0.016 |     0.000 |           | 
##                      |     0.009 |     0.000 |           | 
## ---------------------|-----------|-----------|-----------|
##               184.68 |         1 |         0 |         1 | 
##                      |     0.392 |     0.460 |           | 
##                      |     1.000 |     0.000 |     0.009 | 
##                      |     0.016 |     0.000 |           | 
##                      |     0.009 |     0.000 |           | 
## ---------------------|-----------|-----------|-----------|
##               185.68 |         1 |         0 |         1 | 
##                      |     0.392 |     0.460 |           | 
##                      |     1.000 |     0.000 |     0.009 | 
##                      |     0.016 |     0.000 |           | 
##                      |     0.009 |     0.000 |           | 
## ---------------------|-----------|-----------|-----------|
##               208.65 |         1 |         0 |         1 | 
##                      |     0.392 |     0.460 |           | 
##                      |     1.000 |     0.000 |     0.009 | 
##                      |     0.016 |     0.000 |           | 
##                      |     0.009 |     0.000 |           | 
## ---------------------|-----------|-----------|-----------|
##               240.71 |         1 |         0 |         1 | 
##                      |     0.392 |     0.460 |           | 
##                      |     1.000 |     0.000 |     0.009 | 
##                      |     0.016 |     0.000 |           | 
##                      |     0.009 |     0.000 |           | 
## ---------------------|-----------|-----------|-----------|
##               240.75 |         0 |         1 |         1 | 
##                      |     0.540 |     0.633 |           | 
##                      |     0.000 |     1.000 |     0.009 | 
##                      |     0.000 |     0.019 |           | 
##                      |     0.000 |     0.009 |           | 
## ---------------------|-----------|-----------|-----------|
##               260.01 |         1 |         0 |         1 | 
##                      |     0.392 |     0.460 |           | 
##                      |     1.000 |     0.000 |     0.009 | 
##                      |     0.016 |     0.000 |           | 
##                      |     0.009 |     0.000 |           | 
## ---------------------|-----------|-----------|-----------|
##               279.61 |         0 |         1 |         1 | 
##                      |     0.540 |     0.633 |           | 
##                      |     0.000 |     1.000 |     0.009 | 
##                      |     0.000 |     0.019 |           | 
##                      |     0.000 |     0.009 |           | 
## ---------------------|-----------|-----------|-----------|
##               337.05 |         1 |         0 |         1 | 
##                      |     0.392 |     0.460 |           | 
##                      |     1.000 |     0.000 |     0.009 | 
##                      |     0.016 |     0.000 |           | 
##                      |     0.009 |     0.000 |           | 
## ---------------------|-----------|-----------|-----------|
##               441.37 |         1 |         0 |         1 | 
##                      |     0.392 |     0.460 |           | 
##                      |     1.000 |     0.000 |     0.009 | 
##                      |     0.016 |     0.000 |           | 
##                      |     0.009 |     0.000 |           | 
## ---------------------|-----------|-----------|-----------|
##         Column Total |        61 |        52 |       113 | 
##                      |     0.540 |     0.460 |           | 
## ---------------------|-----------|-----------|-----------|
## 
## 
kbl(location) %>%
  kable_classic()
FEMENINO MASCULINO
144.45 3 0
151.61 7 4
151.67 1 3
152.86 1 0
175.79 0 1
176.72 7 17
180.68 34 25
181.68 1 0
184.68 1 0
185.68 1 0
208.65 1 0
240.71 1 0
240.75 0 1
260.01 1 0
279.61 0 1
337.05 1 0
441.37 1 0
FEMENINO MASCULINO
144.45 1.0000000 0.0000000
151.61 0.6363636 0.3636364
151.67 0.2500000 0.7500000
152.86 1.0000000 0.0000000
175.79 0.0000000 1.0000000
176.72 0.2916667 0.7083333
180.68 0.5762712 0.4237288
181.68 1.0000000 0.0000000
184.68 1.0000000 0.0000000
185.68 1.0000000 0.0000000
208.65 1.0000000 0.0000000
240.71 1.0000000 0.0000000
240.75 0.0000000 1.0000000
260.01 1.0000000 0.0000000
279.61 0.0000000 1.0000000
337.05 1.0000000 0.0000000
441.37 1.0000000 0.0000000
FEMENINO MASCULINO
144.45 0.0491803 0.0000000
151.61 0.1147541 0.0769231
151.67 0.0163934 0.0576923
152.86 0.0163934 0.0000000
175.79 0.0000000 0.0192308
176.72 0.1147541 0.3269231
180.68 0.5573770 0.4807692
181.68 0.0163934 0.0000000
184.68 0.0163934 0.0000000
185.68 0.0163934 0.0000000
208.65 0.0163934 0.0000000
240.71 0.0163934 0.0000000
240.75 0.0000000 0.0192308
260.01 0.0163934 0.0000000
279.61 0.0000000 0.0192308
337.05 0.0163934 0.0000000
441.37 0.0163934 0.0000000
FEMENINO MASCULINO
144.45 0.0265487 0.0000000
151.61 0.0619469 0.0353982
151.67 0.0088496 0.0265487
152.86 0.0088496 0.0000000
175.79 0.0000000 0.0088496
176.72 0.0619469 0.1504425
180.68 0.3008850 0.2212389
181.68 0.0088496 0.0000000
184.68 0.0088496 0.0000000
185.68 0.0088496 0.0000000
208.65 0.0088496 0.0000000
240.71 0.0088496 0.0000000
240.75 0.0000000 0.0088496
260.01 0.0088496 0.0000000
279.61 0.0000000 0.0088496
337.05 0.0088496 0.0000000
441.37 0.0088496 0.0000000

De esta forma, es posible observar que el salario con mayor frecuencia tanto en hombres como mujeres es de $180.68.

Sección 2

Análisis Exploratorio de las Bases de Datos

En la tabla se presentan los datos estadísticos descriptivos de las diversas variables de la base, donde se puede observar que el promedio del salario diario de colaboradores es de $181. Mientras que el resto de las variables tienen una tendencia a ser datos cualitativos, los cuales se podrán conocer más a detalle en las siguientes gráficas.

describe (bdcol)
## # A tibble: 5 × 26
##   descri…¹     n    na    mean     sd se_mean   IQR skewn…² kurto…³   p00    p01
##   <chr>    <int> <int>   <dbl>  <dbl>   <dbl> <dbl>   <dbl>   <dbl> <dbl>  <dbl>
## 1 numero_…   113     0  75.9   53.9    5.07   96      0.400  -1.24     1    2.12
## 2 edad       113     0  36.1   12.8    1.21   19      0.558  -0.538   18   19   
## 3 antigue…   113     0   1.42   2.52   0.237   2      2.43    5.98     0    0   
## 4 BAJA       113     0   0.345  0.961  0.0904  0      2.45    4.05     0    0   
## 5 salario…   113     0 181.    34.6    3.26    3.96   4.96   31.9    144. 144.  
## # … with 15 more variables: p05 <dbl>, p10 <dbl>, p20 <dbl>, p25 <dbl>,
## #   p30 <dbl>, p40 <dbl>, p50 <dbl>, p60 <dbl>, p70 <dbl>, p75 <dbl>,
## #   p80 <dbl>, p90 <dbl>, p95 <dbl>, p99 <dbl>, p100 <dbl>, and abbreviated
## #   variable names ¹​described_variables, ²​skewness, ³​kurtosis

En el caso de las bajas, se observa que el promedio de días trabajados son 84, por lo que eso estima su trabajo antes de salirse, y su salario promedio por parte de IMSS es de $179, ligeramente menor que el salario promedio diario de colaboradores.

describe (bdbaj)
## # A tibble: 3 × 26
##   described_…¹     n    na  mean    sd se_mean   IQR skewn…² kurto…³   p00   p01
##   <chr>        <int> <int> <dbl> <dbl>   <dbl> <dbl>   <dbl>   <dbl> <dbl> <dbl>
## 1 edad           237     0  30.5  10.0   0.651    14   0.541   0.216    0    18 
## 2 dias_de_tra…   237     0  83.4 227.   14.7      40   5.40   33.2      0     0 
## 3 salario_imss   237     0 179.   25.4   1.65      0   9.51  115.     144.  152.
## # … with 15 more variables: p05 <dbl>, p10 <dbl>, p20 <dbl>, p25 <dbl>,
## #   p30 <dbl>, p40 <dbl>, p50 <dbl>, p60 <dbl>, p70 <dbl>, p75 <dbl>,
## #   p80 <dbl>, p90 <dbl>, p95 <dbl>, p99 <dbl>, p100 <dbl>, and abbreviated
## #   variable names ¹​described_variables, ²​skewness, ³​kurtosis

Gráficos

Histograma

Continuando con los gráficos, para el siguiente histograma, se analizó la edad y la frecuencia que tiene. En este caso, se puede observar que la edad de los empleados con mayor presencia dentro de la empresa, es de 20-40 años.

hist(bdcol$edad, freq=TRUE, col='Orange', main="Histograma Edad",xlab="Edad en Años")

Gráfica de Pie

En la siguiente gráfica se puede observar la cantidad de personas que pertenecen al género femenino vs masculino, siendo las mujeres las que mayor porcentaje tienen de formar parte de la empresa FORM.

pie(prop.table(table(bdcol$genero)),col=c("orange","lightsteelblue"),main="Genero", ylab ="Frecuencias",las=1)

Bar Plots

En la siguiente gráfica de barras, se puede observar la cantidad de género por antigüedad, visualizando que existen mas hombres con mayor antigüedad en la empresa FORM.

ggplot(bdcol, aes(genero,antiguedad,fill=genero)) +                                    
  geom_bar(stat = "identity") +
  scale_fill_brewer () + ggtitle(" Antiguedad por Genero")

En esta otra gráfica de barras, se muestra la cantidad de salario (IMSS) que ganan tanto los hombres como mujeres dependiendo de su estado civil, visualizando que los solteros son quienes representan el mayor porcentaje, mayoritariamente mujeres.

ggplot(bdbaj, aes(x=genero, y=salario_imss, fill=genero)) + 
  geom_bar(stat="identity") + 
  facet_grid(~estado_civil) + scale_fill_brewer()

FORM Delivery Plan

El área comercial y de servicio al cliente es la encargada de establecer la metodología mediante la cual se lleva a cabo el proceso comercial de Form en sus diferentes etapas:

  1. Conocimiento Integral del Proyecto
  2. Revisión y valoración de Proyectos Prioritarios
  3. Desarrollo de alternativas y cotizaciones
  4. Prototipo y pruebas
  5. PO y Golden Sample

Delivery Plan muestra las entregas que ya estan fijas con cliente en cantidad y fecha, adicional plasmando la proyección a futuro. En este caso, la segunda base de datos analizada es esta, la cual contiene los clientes, fechas y unidades. Se analizarán los datos estadísticos de las entregas.

Sección 1

Limpieza, Transformación, y Organización de Bases de Datos

bdplan <- read.csv("/Users/Karen/Downloads/Evidencia 2 FORM/Delivery Plan BD FINAL.csv")

Entender base de datos

summary(bdplan)
##  CLIENTE.PLANTA       PROYECTO           ID.ODOO              ITEM          
##  Length:231         Length:231         Length:231         Length:231        
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##      JUNIO             JULIO             AGOSTO          SEPTIEMBRE  
##  Min.   :   0.00   Min.   :    0.0   Min.   :   0.00   Min.   :   0  
##  1st Qu.:   0.00   1st Qu.:    0.0   1st Qu.:   0.00   1st Qu.:   0  
##  Median :   0.00   Median :    0.0   Median :   0.00   Median :   0  
##  Mean   :  29.06   Mean   :  135.9   Mean   :  77.45   Mean   :  81  
##  3rd Qu.:   0.00   3rd Qu.:    0.0   3rd Qu.:   0.00   3rd Qu.:   0  
##  Max.   :1280.00   Max.   :13120.0   Max.   :3200.00   Max.   :3200  
##     OCTUBRE         NOVIEMBRE         DICIEMBRE          ene.22       
##  Min.   :   0.0   Min.   :   0.00   Min.   :   0.0   Min.   :   0.00  
##  1st Qu.:   0.0   1st Qu.:   0.00   1st Qu.:   0.0   1st Qu.:   0.00  
##  Median :   0.0   Median :   0.00   Median :   0.0   Median :   0.00  
##  Mean   :  62.0   Mean   :  89.69   Mean   : 100.4   Mean   :  82.37  
##  3rd Qu.:  11.5   3rd Qu.:   4.00   3rd Qu.:   1.5   3rd Qu.:  26.50  
##  Max.   :3200.0   Max.   :6400.00   Max.   :6400.0   Max.   :3200.00  
##      Feb.22           Mar.22           abr.22            May.22       
##  Min.   :   0.0   Min.   :   0.0   Min.   :    0.0   Min.   :    0.0  
##  1st Qu.:   0.0   1st Qu.:   0.0   1st Qu.:    0.0   1st Qu.:    0.0  
##  Median :   0.0   Median :   0.0   Median :    0.0   Median :    0.0  
##  Mean   : 103.5   Mean   : 153.9   Mean   :  186.5   Mean   :  187.6  
##  3rd Qu.:   0.0   3rd Qu.:  20.0   3rd Qu.:   24.0   3rd Qu.:   22.0  
##  Max.   :9600.0   Max.   :9600.0   Max.   :16354.0   Max.   :17665.0  
##      Jun.22            Jul.22            ago.22            Sep.22       
##  Min.   :    0.0   Min.   :    0.0   Min.   :    0.0   Min.   :    0.0  
##  1st Qu.:    0.0   1st Qu.:    0.0   1st Qu.:    0.0   1st Qu.:    0.0  
##  Median :    0.0   Median :    0.0   Median :    0.0   Median :    0.0  
##  Mean   :  171.2   Mean   :  316.9   Mean   :  131.5   Mean   :  272.3  
##  3rd Qu.:    1.0   3rd Qu.:   15.5   3rd Qu.:    0.0   3rd Qu.:    0.0  
##  Max.   :11050.0   Max.   :25900.0   Max.   :13200.0   Max.   :29379.0  
##    OCTUBRE.22          Nov.22            dic.22            ene.23        
##  Min.   :    0.0   Min.   :  0.000   Min.   :  0.000   Min.   :  0.0000  
##  1st Qu.:    0.0   1st Qu.:  0.000   1st Qu.:  0.000   1st Qu.:  0.0000  
##  Median :    0.0   Median :  0.000   Median :  0.000   Median :  0.0000  
##  Mean   :  120.9   Mean   :  2.113   Mean   :  1.225   Mean   :  0.5974  
##  3rd Qu.:    0.0   3rd Qu.:  0.000   3rd Qu.:  0.000   3rd Qu.:  0.0000  
##  Max.   :16421.0   Max.   :324.000   Max.   :276.000   Max.   :138.0000  
##      Feb.23      Mar.23   TOTAL.MESES    
##  Min.   :0   Min.   :0   Min.   :     0  
##  1st Qu.:0   1st Qu.:0   1st Qu.:    16  
##  Median :0   Median :0   Median :   115  
##  Mean   :0   Mean   :0   Mean   :  2306  
##  3rd Qu.:0   3rd Qu.:0   3rd Qu.:   724  
##  Max.   :0   Max.   :0   Max.   :136754
str(bdplan)
## 'data.frame':    231 obs. of  27 variables:
##  $ CLIENTE.PLANTA: chr  "STB3" "STB4" "STB5" "STB6" ...
##  $ PROYECTO      : chr  "CANASTILLA GRIS" "Caja inter chica" "CHAROLA G09" "" ...
##  $ ID.ODOO       : chr  "15.785" "" "19.12" "19.211" ...
##  $ ITEM          : chr  "CABLE SET CAJA BACK UP CANASTILLA" "Caja intercompañía chica" "CHAROLA G09 915898  " "MOTOR GEAR BOX" ...
##  $ JUNIO         : int  0 0 0 0 0 0 0 0 0 192 ...
##  $ JULIO         : int  140 0 0 0 0 300 0 0 0 463 ...
##  $ AGOSTO        : int  530 0 0 0 0 0 0 50 0 226 ...
##  $ SEPTIEMBRE    : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ OCTUBRE       : int  200 0 0 0 0 0 0 0 0 0 ...
##  $ NOVIEMBRE     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ DICIEMBRE     : int  150 184 75 1 0 0 9 0 0 0 ...
##  $ ene.22        : int  230 125 126 0 0 0 0 0 0 0 ...
##  $ Feb.22        : int  500 55 10 1 0 0 0 0 0 0 ...
##  $ Mar.22        : int  0 55 5 0 0 0 0 0 0 0 ...
##  $ abr.22        : int  0 0 0 1 0 400 0 0 0 0 ...
##  $ May.22        : int  0 0 15 3 0 0 0 0 0 0 ...
##  $ Jun.22        : int  200 0 5 2 100 0 0 0 0 0 ...
##  $ Jul.22        : int  900 0 10 5 100 0 0 0 0 0 ...
##  $ ago.22        : int  1000 0 0 3 0 0 0 0 0 0 ...
##  $ Sep.22        : int  0 0 5 4 0 0 0 0 0 0 ...
##  $ OCTUBRE.22    : int  0 0 50 6 0 0 0 0 0 0 ...
##  $ Nov.22        : int  0 0 125 7 0 0 0 0 0 0 ...
##  $ dic.22        : int  0 0 0 7 0 0 0 0 0 0 ...
##  $ ene.23        : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Feb.23        : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Mar.23        : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ TOTAL.MESES   : int  3850 419 426 40 200 700 9 50 0 881 ...

Técnicas de limpieza

Técnica 1. Acondicionar nombres a formato óptimo para R

bdplan <- clean_names(bdplan)

Técnica 2 Utilizar Pivote para unir los pedidos programados en una sola columna

bdplan <- bdplan %>% dplyr::rename(cliente=cliente_planta,
                             A_jun_21=junio,
                             B_jul_21=julio,
                             C_ago_21=agosto,
                             D_sep_21=septiembre,
                             E_oct_21=octubre,
                             F_nov_21=noviembre,
                             G_dic_21=diciembre,
                             H_ene_22=ene_22,
                             I_feb_22=feb_22,
                            J_mar_22=mar_22,
                            K_abr_22=abr_22,
                            L_may_22=may_22,
                            M_jun_22=jun_22,
                            N_jul_22=jul_22,
                            O_ago_22=ago_22,
                            P_sep_22=sep_22,
                            Q_oct_22=octubre_22,
                            R_nov_22=nov_22,
                            S_dic_22=dic_22,
                            T_ene_23=ene_23,
                            U_feb_23=feb_23,
                            V_mar_23=feb_23
                          
                           )

colnames(bdplan)
##  [1] "cliente"     "proyecto"    "id_odoo"     "item"        "A_jun_21"   
##  [6] "B_jul_21"    "C_ago_21"    "D_sep_21"    "E_oct_21"    "F_nov_21"   
## [11] "G_dic_21"    "H_ene_22"    "I_feb_22"    "J_mar_22"    "K_abr_22"   
## [16] "L_may_22"    "M_jun_22"    "N_jul_22"    "O_ago_22"    "P_sep_22"   
## [21] "Q_oct_22"    "R_nov_22"    "S_dic_22"    "T_ene_23"    "V_mar_23"   
## [26] "mar_23"      "total_meses"
bdplan <- pivot_longer(bdplan, cols=5:14, names_to = "Mes", values_to = "Unidades")

str(bdplan)
## tibble [2,310 × 19] (S3: tbl_df/tbl/data.frame)
##  $ cliente    : chr [1:2310] "STB3" "STB3" "STB3" "STB3" ...
##  $ proyecto   : chr [1:2310] "CANASTILLA GRIS" "CANASTILLA GRIS" "CANASTILLA GRIS" "CANASTILLA GRIS" ...
##  $ id_odoo    : chr [1:2310] "15.785" "15.785" "15.785" "15.785" ...
##  $ item       : chr [1:2310] "CABLE SET CAJA BACK UP CANASTILLA" "CABLE SET CAJA BACK UP CANASTILLA" "CABLE SET CAJA BACK UP CANASTILLA" "CABLE SET CAJA BACK UP CANASTILLA" ...
##  $ K_abr_22   : int [1:2310] 0 0 0 0 0 0 0 0 0 0 ...
##  $ L_may_22   : int [1:2310] 0 0 0 0 0 0 0 0 0 0 ...
##  $ M_jun_22   : int [1:2310] 200 200 200 200 200 200 200 200 200 200 ...
##  $ N_jul_22   : int [1:2310] 900 900 900 900 900 900 900 900 900 900 ...
##  $ O_ago_22   : int [1:2310] 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 ...
##  $ P_sep_22   : int [1:2310] 0 0 0 0 0 0 0 0 0 0 ...
##  $ Q_oct_22   : int [1:2310] 0 0 0 0 0 0 0 0 0 0 ...
##  $ R_nov_22   : int [1:2310] 0 0 0 0 0 0 0 0 0 0 ...
##  $ S_dic_22   : int [1:2310] 0 0 0 0 0 0 0 0 0 0 ...
##  $ T_ene_23   : int [1:2310] 0 0 0 0 0 0 0 0 0 0 ...
##  $ V_mar_23   : int [1:2310] 0 0 0 0 0 0 0 0 0 0 ...
##  $ mar_23     : int [1:2310] 0 0 0 0 0 0 0 0 0 0 ...
##  $ total_meses: int [1:2310] 3850 3850 3850 3850 3850 3850 3850 3850 3850 3850 ...
##  $ Mes        : chr [1:2310] "A_jun_21" "B_jul_21" "C_ago_21" "D_sep_21" ...
##  $ Unidades   : int [1:2310] 0 140 530 0 200 0 150 230 500 0 ...

Técnica 3 Eliminación de ceros en la base de datos para eliminar rengoles/clientes sin registros

bd1 <- filter(bdplan, Unidades>0)

Eliminación de variables irrelevantes. En este caso, dado que previamente se unieron (merge) las variables de mes, solo se considera necesaria la variables de cliente, fecha y unidades.

bd2 <- bd1         
bd2 <- subset (bd1, select = -c (proyecto, id_odoo, item, K_abr_22, L_may_22, M_jun_22,N_jul_22,O_ago_22, P_sep_22, Q_oct_22, R_nov_22,  S_dic_22, T_ene_23, V_mar_23, mar_23, total_meses))
summary(bd2)
##    cliente              Mes               Unidades      
##  Length:590         Length:590         Min.   :    1.0  
##  Class :character   Class :character   1st Qu.:   30.0  
##  Mode  :character   Mode  :character   Median :   80.0  
##                                        Mean   :  358.4  
##                                        3rd Qu.:  300.0  
##                                        Max.   :13120.0

Variables

¿Cuántos registros y variables tiene la base de datos?

dim(bd2)
## [1] 590   3

Clasificación de variables

Variableplan<-c("`cliente`","`mes`","`unidades`")

Typeplan<-c("cualitativo", "cualitativo","cuantitativo (discreto)")

Escalaplan <- c("nominal", "ordinal", "razon")

tableplan<-data.frame(Variableplan,Typeplan,Escalaplan)
knitr::kable(tableplan)
Variableplan Typeplan Escalaplan
cliente cualitativo nominal
mes cualitativo ordinal
unidades cuantitativo (discreto) razon

Sección 2

Análisis Exploratorio de las Bases de Datos

En la tabla se presentan los datos estadísticos descriptivos en específico para la variable de Unidades, donde se puede observar que el promedio para los clientes es de 358, con una desviación estándar de 1003, por lo que existe un amplio rango de datos entre las unidades.

describe (bd2)
## # A tibble: 1 × 26
##   described_…¹     n    na  mean    sd se_mean   IQR skewn…² kurto…³   p00   p01
##   <chr>        <int> <int> <dbl> <dbl>   <dbl> <dbl>   <dbl>   <dbl> <dbl> <dbl>
## 1 Unidades       590     0  358. 1003.    41.3   270    7.51    73.0     1     1
## # … with 15 more variables: p05 <dbl>, p10 <dbl>, p20 <dbl>, p25 <dbl>,
## #   p30 <dbl>, p40 <dbl>, p50 <dbl>, p60 <dbl>, p70 <dbl>, p75 <dbl>,
## #   p80 <dbl>, p90 <dbl>, p95 <dbl>, p99 <dbl>, p100 <dbl>, and abbreviated
## #   variable names ¹​described_variables, ²​skewness, ³​kurtosis

Gráficos

Bar Plots

En la siguiente gráfica, se puede inferir que el mes con mayor número de piezas programadas fué julio del 2021, sin embargo, se puede detectar un comportamiento a la alza a partir de los ultimos meses hasta el primer Q del siguiente año; por lo que se puede concluir que durante el último cuarto y primero del siguiente año, es cuando existe mayor demanda para FORM en contexto de piezas programadas.

ggplot(bd2, aes(Mes,Unidades)) +                                    
  geom_bar(stat = "identity") +
  scale_fill_brewer() + ggtitle("Unidades por mes") 

Time Series Plot

Con la siguiente gráfica, podemos corroborar la hipótesis de que existen picos de pedidos durante la segunda mitad del año, así como a finales de año y principios del siguiente, donde se trata de un comportamiento a la alza en ese sentido.

ggplot(bd2, aes(x = Mes, y = Unidades, group = cliente)) +
  geom_line()+
  ggtitle("Pedidos por Cliente")

FORM Delivery Performance

El área comercial y de servicio al cliente es la encargada de establecer la metodología mediante la cual se lleva a cabo el proceso comercial de Form en sus diferentes etapas:

  1. Conocimiento Integral del Proyecto
  2. Revisión y valoración de Proyectos Prioritarios
  3. Desarrollo de alternativas y cotizaciones
  4. Prototipo y pruebas
  5. PO y Golden Sample

Delivery Performance es el resultado del Delivery Plan sobre las entregas, por lo que, en este caso la tercera base de datos analizada es está, la cual contiene información sobre los clientes y las diferencias entre pedidos.

Sección 1

Limpieza, Transformación, y Organización de Bases de Datos

performance <- read.csv("/Users/Karen/Downloads/Evidencia 2 FORM/FORM - Delivery Performance.csv")

Entender base de datos

summary(performance)
##      Target    Cliente             Vueltas      Plan.arrival   
##  Min.   :1   Length:1440        Min.   :1.00   Min.   : 0.000  
##  1st Qu.:1   Class :character   1st Qu.:1.00   1st Qu.: 0.000  
##  Median :1   Mode  :character   Median :1.50   Median : 4.000  
##  Mean   :1                      Mean   :1.75   Mean   : 6.625  
##  3rd Qu.:1                      3rd Qu.:2.25   3rd Qu.:10.750  
##  Max.   :1                      Max.   :3.00   Max.   :20.000  
##   Real.arrival    Real.departure     Diference            Date          
##  Min.   : 0.000   Min.   : 0.000   Min.   :-14.3500   Length:1440       
##  1st Qu.: 0.000   1st Qu.: 0.000   1st Qu.:  0.0000   Class :character  
##  Median : 0.000   Median : 0.000   Median :  0.0000   Mode  :character  
##  Mean   : 3.823   Mean   : 4.142   Mean   :  0.3155                     
##  3rd Qu.: 8.000   3rd Qu.: 9.000   3rd Qu.:  0.8000                     
##  Max.   :23.500   Max.   :24.500   Max.   : 20.0000
str (performance)
## 'data.frame':    1440 obs. of  8 variables:
##  $ Target        : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ Cliente       : chr  "PRINTEL " "MAHLE" "MAHLE" "MAHLE" ...
##  $ Vueltas       : int  1 1 2 3 1 1 2 3 1 1 ...
##  $ Plan.arrival  : num  16 8 9 20 0 0 0 0 16 8 ...
##  $ Real.arrival  : num  16 8 9 20 0 0 0 0 16 8 ...
##  $ Real.departure: num  19.3 8.55 10 21 0 0 0 0 18.1 9 ...
##  $ Diference     : num  3.3 0.55 1 1 0 0 0 0 2.1 1 ...
##  $ Date          : chr  "02/01/22" "02/01/22" "02/01/22" "02/01/22" ...

Técnicas de limpieza

Técnica 1. Remover valores irrelevantes

Eliminar columnas

performance <-subset (performance, select =-c(Target)) 

Técnica 2. Convertir tipos de datos

Se realizó esta tecnica debido a que la base de datos provee los estimados de entrega para los diferentes clientes, por lo que es sumamente importante mantener las fechas con su respectivo tipo de variable.

Cambiar de caracter a fecha

performance$Date <-as.Date(performance$Date,format ="%d/%m/%Y")
tibble(performance)
## # A tibble: 1,440 × 7
##    Cliente    Vueltas Plan.arrival Real.arrival Real.depart…¹ Difer…² Date      
##    <chr>        <int>        <dbl>        <dbl>         <dbl>   <dbl> <date>    
##  1 "PRINTEL "       1           16           16         19.3     3.3  0022-01-02
##  2 "MAHLE"          1            8            8          8.55    0.55 0022-01-02
##  3 "MAHLE"          2            9            9         10       1    0022-01-02
##  4 "MAHLE"          3           20           20         21       1    0022-01-02
##  5 "MAGNA"          1            0            0          0       0    0022-01-02
##  6 "VARROC"         1            0            0          0       0    0022-01-02
##  7 "VARROC"         2            0            0          0       0    0022-01-02
##  8 "VARROC"         3            0            0          0       0    0022-01-02
##  9 "PRINTEL "       1           16           16         18.1     2.1  0022-01-03
## 10 "MAHLE"          1            8            8          9       1    0022-01-03
## # … with 1,430 more rows, and abbreviated variable names ¹​Real.departure,
## #   ²​Diference

Técnica 3. Valores faltantes

Se realizó esta técnica con la finalidad de conocer si en la base de datos existen NA o similares que no sean validos para la información de los registros.

#¿Tenemos NA en la base de datos?
sum(is.na(performance))
## [1] 0
#¿Tenemos NA por variable?
sapply(performance,function(x)sum(is.na(x)))
##        Cliente        Vueltas   Plan.arrival   Real.arrival Real.departure 
##              0              0              0              0              0 
##      Diference           Date 
##              0              0
#En caso de tener, borrar los registros NA 
performance <- na.omit(performance)
summary(performance)
##    Cliente             Vueltas      Plan.arrival     Real.arrival   
##  Length:1440        Min.   :1.00   Min.   : 0.000   Min.   : 0.000  
##  Class :character   1st Qu.:1.00   1st Qu.: 0.000   1st Qu.: 0.000  
##  Mode  :character   Median :1.50   Median : 4.000   Median : 0.000  
##                     Mean   :1.75   Mean   : 6.625   Mean   : 3.823  
##                     3rd Qu.:2.25   3rd Qu.:10.750   3rd Qu.: 8.000  
##                     Max.   :3.00   Max.   :20.000   Max.   :23.500  
##  Real.departure     Diference             Date           
##  Min.   : 0.000   Min.   :-14.3500   Min.   :0022-01-02  
##  1st Qu.: 0.000   1st Qu.:  0.0000   1st Qu.:0022-02-23  
##  Median : 0.000   Median :  0.0000   Median :0022-04-17  
##  Mean   : 4.142   Mean   :  0.3155   Mean   :0022-04-16  
##  3rd Qu.: 9.000   3rd Qu.:  0.8000   3rd Qu.:0022-06-08  
##  Max.   :24.500   Max.   : 20.0000   Max.   :0022-07-23

Variables

¿Cuántos registros y variables tiene la base de datos?

dim(performance)
## [1] 1440    7

Clasificación de variables

variablesper <- c("`Cliente`","`Vueltas`","`Plan.arrival`","`Real.arrival`","`Plan.departure`","`Diference`","`Date`")
tiposper <- c("cualitativo  ", "cuantitativo (discreto)  ", "cuantitativo (continuo)  ", "cuantitativo (continuo)  ", "cuantitativo (continuo)  ", "cuantitativo (continuo)  ", "cualitativo  ")
escalasper <- c("nominal", "razon", "razon", "razon", "razon", "razon", "ordinal")
tableper <- data.frame (variablesper, tiposper, escalasper)
knitr::kable(tableper)
variablesper tiposper escalasper
Cliente cualitativo nominal
Vueltas cuantitativo (discreto) razon
Plan.arrival cuantitativo (continuo) razon
Real.arrival cuantitativo (continuo) razon
Plan.departure cuantitativo (continuo) razon
Diference cuantitativo (continuo) razon
Date cualitativo ordinal

Análisis estadístico descriptivo

Tabla de frecuencia

Se realizó una tabla de frecuencia de la variable plan arrival con el objetivo de validar las frecuencias en el estimado de llegada para cada uno de los clientes.

proportion3 <- prop.table(table(performance$Cliente,performance$Plan.arrival))
proportion3 %>%
  kbl() %>%
  kable_styling()
0 8 9 16 20
MAGNA 0.125 0.000 0.000 0.000 0.000
MAHLE 0.000 0.125 0.125 0.000 0.125
PRINTEL 0.000 0.000 0.000 0.125 0.000
VARROC 0.375 0.000 0.000 0.000 0.000

Tabla cruzada

Posterior a la tabla de frecuencia, se realizó una tabla cruzada donde se visualizó como es la proporcion respecto a la variable de las estimaciones de llegada de pedidos por cada cliente.

proportion3 %>%
  kbl() %>%
  kable_material (c("striped","hover"))
0 8 9 16 20
MAGNA 0.125 0.000 0.000 0.000 0.000
MAHLE 0.000 0.125 0.125 0.000 0.125
PRINTEL 0.000 0.000 0.000 0.125 0.000
VARROC 0.375 0.000 0.000 0.000 0.000
location3 <- CrossTable(performance$Cliente, performance$Plan.arrival, prop.t=TRUE, prop.r=TRUE, prop.c=TRUE)
## 
##  
##    Cell Contents
## |-------------------------|
## |                       N |
## | Chi-square contribution |
## |           N / Row Total |
## |           N / Col Total |
## |         N / Table Total |
## |-------------------------|
## 
##  
## Total Observations in Table:  1440 
## 
##  
##                     | performance$Plan.arrival 
## performance$Cliente |         0 |         8 |         9 |        16 |        20 | Row Total | 
## --------------------|-----------|-----------|-----------|-----------|-----------|-----------|
##               MAGNA |       180 |         0 |         0 |         0 |         0 |       180 | 
##                     |    90.000 |    22.500 |    22.500 |    22.500 |    22.500 |           | 
##                     |     1.000 |     0.000 |     0.000 |     0.000 |     0.000 |     0.125 | 
##                     |     0.250 |     0.000 |     0.000 |     0.000 |     0.000 |           | 
##                     |     0.125 |     0.000 |     0.000 |     0.000 |     0.000 |           | 
## --------------------|-----------|-----------|-----------|-----------|-----------|-----------|
##               MAHLE |         0 |       180 |       180 |         0 |       180 |       540 | 
##                     |   270.000 |   187.500 |   187.500 |    67.500 |   187.500 |           | 
##                     |     0.000 |     0.333 |     0.333 |     0.000 |     0.333 |     0.375 | 
##                     |     0.000 |     1.000 |     1.000 |     0.000 |     1.000 |           | 
##                     |     0.000 |     0.125 |     0.125 |     0.000 |     0.125 |           | 
## --------------------|-----------|-----------|-----------|-----------|-----------|-----------|
##            PRINTEL  |         0 |         0 |         0 |       180 |         0 |       180 | 
##                     |    90.000 |    22.500 |    22.500 |  1102.500 |    22.500 |           | 
##                     |     0.000 |     0.000 |     0.000 |     1.000 |     0.000 |     0.125 | 
##                     |     0.000 |     0.000 |     0.000 |     1.000 |     0.000 |           | 
##                     |     0.000 |     0.000 |     0.000 |     0.125 |     0.000 |           | 
## --------------------|-----------|-----------|-----------|-----------|-----------|-----------|
##              VARROC |       540 |         0 |         0 |         0 |         0 |       540 | 
##                     |   270.000 |    67.500 |    67.500 |    67.500 |    67.500 |           | 
##                     |     1.000 |     0.000 |     0.000 |     0.000 |     0.000 |     0.375 | 
##                     |     0.750 |     0.000 |     0.000 |     0.000 |     0.000 |           | 
##                     |     0.375 |     0.000 |     0.000 |     0.000 |     0.000 |           | 
## --------------------|-----------|-----------|-----------|-----------|-----------|-----------|
##        Column Total |       720 |       180 |       180 |       180 |       180 |      1440 | 
##                     |     0.500 |     0.125 |     0.125 |     0.125 |     0.125 |           | 
## --------------------|-----------|-----------|-----------|-----------|-----------|-----------|
## 
## 
kbl(location3) %>%
  kable_classic()
0 8 9 16 20
MAGNA 180 0 0 0 0
MAHLE 0 180 180 0 180
PRINTEL 0 0 0 180 0
VARROC 540 0 0 0 0
0 8 9 16 20
MAGNA 1 0.0000000 0.0000000 0 0.0000000
MAHLE 0 0.3333333 0.3333333 0 0.3333333
PRINTEL 0 0.0000000 0.0000000 1 0.0000000
VARROC 1 0.0000000 0.0000000 0 0.0000000
0 8 9 16 20
MAGNA 0.25 0 0 0 0
MAHLE 0.00 1 1 0 1
PRINTEL 0.00 0 0 1 0
VARROC 0.75 0 0 0 0
0 8 9 16 20
MAGNA 0.125 0.000 0.000 0.000 0.000
MAHLE 0.000 0.125 0.125 0.000 0.125
PRINTEL 0.000 0.000 0.000 0.125 0.000
VARROC 0.375 0.000 0.000 0.000 0.000

De esta forma, se puede visualizar que el cliente VARROC tiene la mayor frecuencia de llegada planeada de pedidos en 0, por lo que será importante evaluar su desempeño de pedidos.

Sección 2

Análisis Exploratorio de las Bases de Datos

En la tabla se presentan los datos estadísticos descriptivos de las diversas variables de la base, donde se puede observar que el promedio de las vueltas es de 1.75, mostrando un indicador adecuado respecto a las entregas de los pedidos.

Respecto al performance directo de los pedidos, la llegada planeada tiene un promedio de 6.6, la llegada real de 3.8 y la salida real de 4.4; mostrando que el estimado de la llegada es mayor que lo que realmente esta sucediendo en la empresa.

La diferencia es una variable que relaciona la variación entre la entrada y salida real de los pedidos, mostrando un promedio de 0.32, por lo que no indica alguna preocupación evidente.

describe.by (performance)
##                vars    n mean   sd median trimmed  mad    min  max range  skew
## Cliente*          1 1440 2.75 1.09    2.5    2.81 1.48   1.00  4.0  3.00 -0.07
## Vueltas           2 1440 1.75 0.83    1.5    1.69 0.74   1.00  3.0  2.00  0.49
## Plan.arrival      3 1440 6.62 7.50    4.0    5.78 5.93   0.00 20.0 20.00  0.61
## Real.arrival      4 1440 3.82 6.51    0.0    2.33 0.00   0.00 23.5 23.50  1.51
## Real.departure    5 1440 4.14 6.95    0.0    2.60 0.00   0.00 24.5 24.50  1.43
## Diference         6 1440 0.32 0.92    0.0    0.21 0.00 -14.35 20.0 34.35  2.73
## Date              7 1440  NaN   NA     NA     NaN   NA    Inf -Inf  -Inf    NA
##                kurtosis   se
## Cliente*          -1.44 0.03
## Vueltas           -1.37 0.02
## Plan.arrival      -1.13 0.20
## Real.arrival       0.95 0.17
## Real.departure     0.69 0.18
## Diference        210.27 0.02
## Date                 NA   NA

Gráficos

Dispersión plot

En dicha gráfica de boxplot se presenta como se encuentran posicionados los datos de la base, tanto el estimado (Plan arrival), como la llegada real (real arrival) y la salida real (real departure) de los pedidos realizados por todos los clientes, visualizando que las llegadas reales son menores a las planeadas, por lo que FORM deberá evaluar su desempeño.

Delivery <- data.frame(performance$Cliente, performance$Plan.arrival, performance$Real.arrival, performance$Real.departure, performance$Date)
colnames(Delivery)<-c('Cliente', 'Plan.arrival', 'Real.arrival', 'Real.departure', 'Date')
Realarrival_boxplot = subset(Delivery, select =-c (Cliente, Date))
boxplot(Realarrival_boxplot,data=data,main="Deliverys", 
        col=heat.colors (ncol(trees)))

Bar Plot

En la siguiente gráfica se puede observar el desempeño de las llegadas reales de los pedidos por cliente, validando que MAHLE es el que tiene mayor promedio, siendo este mayor a 8; manteniendo un filtro de color que indican las vueltas en la logística, siendo de 2. Por lo que es importante validar para FORM, una mayor distribución de los pedidos entre otros clientes, para evitar depender de solo 1 o 2.

Realarrival<-performance %>% 
dplyr::select(Cliente,Real.arrival,Vueltas) %>% group_by(Cliente) %>% 
dplyr::summarise(across(everything(),mean,na.rm=TRUE)) %>% arrange(desc(Real.arrival))
ggplot(Realarrival, aes(x=reorder(Cliente, Real.arrival), y=Real.arrival, fill=(Vueltas))) +
  geom_bar(stat="identity")+
  coord_flip()+
  guides(fill=guide_legend(reverse=FALSE))

Gráficos de normalidad

Observando las diversas variables en la base de datos, se decidió utilizar la variable de diferencia (entre la llegada real y la salida real) para conocer su comportamiento, validando que la mayoria de estas diferencias tienen una distribucion normal, en un rango de entre 2 y -2, a excepción de 3 datos atipicos, por lo que, la diferencia entre las llegadas y salidas de los pedidos suelen mantener un control estándar.

plot_normality(performance,Diference, col='#FF7F24')

FORM Producción

El área de Producción se encarga de establecer la metodología para verificar el cumplimiento de los requisitos del producto durante todas y cada una de las etapas del proceso productivo, de acuerdo con criterios de aceptación establecidos. Y con esto, la liberación de los productos una vez validados por el/los responsables del proceso.

Su alcance aplica tanto para productos terminados, como para productos en cada etapa del proceso productivo (desde el recibo de materia prima para inicio de proceso, fabricación hasta la entrega del producto a PT).

En este caso, la cuarta base de datos analizada es la de Producción donde se muestra informacioón sobre el producto, sus tiempos de proceso y lugares de origen en la misma empresa, a lo cual se analizarán sus datos estadísticos.

Sección 1

Limpieza, Transformación, y Organización de Bases de Datos

produccion <- read.csv("/Users/Karen/Downloads/Evidencia 2 FORM/produccion.csv")

Entender base de datos

summary(produccion)
##     fecha                 no           cliente            id_form         
##  Length:5411        Min.   :  1.00   Length:5411        Length:5411       
##  Class :character   1st Qu.: 23.00   Class :character   Class :character  
##  Mode  :character   Median : 46.00   Mode  :character   Mode  :character  
##                     Mean   : 48.55                                        
##                     3rd Qu.: 72.00                                        
##                     Max.   :121.00                                        
##                                                                           
##    producto         piezas_prog        tiempo_minutos       hora_fin        
##  Length:5411        Length:5411        Length:5411        Length:5411       
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##  estacion_arranque  laminas_procesadas inicio_setup       fin_inicio_su     
##  Length:5411        Length:5411        Length:5411        Length:5411       
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##  inicio_proceso     fin_proceso        tiempo_calidad     tiempo_materiales
##  Length:5411        Length:5411        Length:5411        Min.   : 0.000   
##  Class :character   Class :character   Class :character   1st Qu.: 0.000   
##  Mode  :character   Mode  :character   Mode  :character   Median : 0.000   
##                                                           Mean   : 4.568   
##                                                           3rd Qu.: 6.000   
##                                                           Max.   :60.000   
##                                                           NA's   :5152     
##     merma          
##  Length:5411       
##  Class :character  
##  Mode  :character  
##                    
##                    
##                    
## 
str(produccion)
## 'data.frame':    5411 obs. of  17 variables:
##  $ fecha             : chr  "15/07/22" "15/07/22" "15/07/22" "15/07/22" ...
##  $ no                : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ cliente           : chr  "STABILUS 1" "STABILUS 1" "STABILUS 1" "STABILUS 1" ...
##  $ id_form           : chr  "" "N.A." "CORTE." "ST-026-13892" ...
##  $ producto          : chr  "STABOMAT 643920. CAJA IMP. CORTE. AZUL.PC0011. ( 2 Pza/Caja)." "KR55006. CAJA IMP. AZUL. CORTE. ( 1 pieza)." "241B KIT. EXPORT. INSERTO CON INSERTO. CORTE para Troquel." "MOPAR GDE. 754549. CAJA IMP. NEGRA. PC0022. ( PC0043: solo si autoriza Calidad). ( 1 Pieza). CORTE." ...
##  $ piezas_prog       : chr  "200" "100" "216" "100" ...
##  $ tiempo_minutos    : chr  "20" "15" "20" "10" ...
##  $ hora_fin          : chr  "9:20" "9:35" "9:55" "10:05" ...
##  $ estacion_arranque : chr  "C1" "C1" "C1" "C1" ...
##  $ laminas_procesadas: chr  "402" "134" "110" "100" ...
##  $ inicio_setup      : chr  "9:05" "10:05" "9:40" "11.2" ...
##  $ fin_inicio_su     : chr  "9.1" "10:16" "9:43" "11:26" ...
##  $ inicio_proceso    : chr  "9:12" "10.17" "9:45" "11:30" ...
##  $ fin_proceso       : chr  "10:04" "11:05" "9.57" "11:49" ...
##  $ tiempo_calidad    : chr  "1" "1" "1" "1" ...
##  $ tiempo_materiales : int  NA NA NA 7 NA NA NA NA NA NA ...
##  $ merma             : chr  "" "" "" "" ...

Técnicas de limpieza

Técnica 1 Eliminar columnas que no se utilizarán

prod2 <- subset(produccion,select = -c (no, id_form, producto, hora_fin, inicio_setup, fin_inicio_su, inicio_proceso, fin_proceso, tiempo_materiales, merma))

str(prod2)
## 'data.frame':    5411 obs. of  7 variables:
##  $ fecha             : chr  "15/07/22" "15/07/22" "15/07/22" "15/07/22" ...
##  $ cliente           : chr  "STABILUS 1" "STABILUS 1" "STABILUS 1" "STABILUS 1" ...
##  $ piezas_prog       : chr  "200" "100" "216" "100" ...
##  $ tiempo_minutos    : chr  "20" "15" "20" "10" ...
##  $ estacion_arranque : chr  "C1" "C1" "C1" "C1" ...
##  $ laminas_procesadas: chr  "402" "134" "110" "100" ...
##  $ tiempo_calidad    : chr  "1" "1" "1" "1" ...

Técnica 2. Convertir valor de variables

prod2$piezas_prog<-as.numeric(prod2$piezas_prog)
prod2$tiempo_minutos<-as.numeric(prod2$tiempo_minutos)
prod2$laminas_procesadas<-as.numeric(prod2$laminas_procesadas)
prod2$tiempo_calidad<-as.numeric(prod2$tiempo_calidad)
prod2$cliente<-as.factor(prod2$cliente)  
prod2$estacion_arranque<-as.factor(prod2$estacion_arranque) 

colSums(is.na(prod2))
##              fecha            cliente        piezas_prog     tiempo_minutos 
##                  0                  0                830               3332 
##  estacion_arranque laminas_procesadas     tiempo_calidad 
##                  0               2208               2919

Técnica 3 Cambiamos los na´s por la mediana

prod2<-prod2 %>% mutate(piezas_prog=ifelse(is.na(piezas_prog),median(piezas_prog,na.rm=T),piezas_prog))
prod2<-prod2 %>% mutate(tiempo_minutos=ifelse(is.na(tiempo_minutos),median(tiempo_minutos,na.rm=T),tiempo_minutos))
prod2<-prod2 %>% mutate(laminas_procesadas=ifelse(is.na(laminas_procesadas),median(laminas_procesadas,na.rm=T),laminas_procesadas))
prod2<-prod2 %>% mutate(tiempo_calidad=ifelse(is.na(tiempo_calidad),median(tiempo_calidad,na.rm=T),tiempo_calidad))

Técnica 4 Convertimos la fecha a formato de fecha

prod2$fecha<-as.Date(prod2$fecha,format="%m/%d/%Y")
summary(prod2)
##      fecha                  cliente      piezas_prog     tiempo_minutos    
##  Min.   :0022-01-09   STABILUS 1:1635   Min.   :   0.0   Min.   :  0.3854  
##  1st Qu.:0022-07-09   TRMX      : 981   1st Qu.:  25.0   1st Qu.: 20.0000  
##  Median :0022-08-04   STABILUS 3: 923   Median :  60.0   Median : 20.0000  
##  Mean   :0022-07-11   YANFENG   : 646   Mean   : 111.9   Mean   : 21.1835  
##  3rd Qu.:0022-08-10   DENSO     : 524   3rd Qu.: 150.0   3rd Qu.: 20.0000  
##  Max.   :0022-12-09   VARROC    : 395   Max.   :2000.0   Max.   :150.0000  
##  NA's   :3412         (Other)   : 307                                      
##  estacion_arranque laminas_procesadas tiempo_calidad  
##          : 546     Min.   :   0.00    Min.   : 0.000  
##  0       : 478     1st Qu.:   0.00    1st Qu.: 1.000  
##  TROQUEL : 422     Median :  11.00    Median : 1.000  
##  CAJAS   : 331     Mean   :  47.98    Mean   : 1.046  
##  ROTATIVA: 270     3rd Qu.:  28.50    3rd Qu.: 1.000  
##  C3      : 263     Max.   :1263.00    Max.   :48.000  
##  (Other) :3101

Variables

¿Cuántos registros y variables tiene la base de datos?

dim(prod2)
## [1] 5411    7

Clasificación de variables

variablespro <- c("`fecha`","`cliente`","`piezas_prog`","`tiempo_minutos`","`estacion_arranque`","`laminas_procesadas`","`tiempo_calidad`")
tipospro <- c("cuantitativo (discreto)  ", "cualitativo  ", "cuantitativo (discreto)  ", "cuantitativo (continuo)  ", "cualitativo", "cuantitativo (discreto)  ", "cuantitativo (continuo)")
escalaspro <- c("razon", "nominal", "razon", "intervalo", "nominal", "razon", "razon")
tablepro <- data.frame (variablespro, tipospro, escalaspro)
knitr::kable(tablepro)
variablespro tipospro escalaspro
fecha cuantitativo (discreto) razon
cliente cualitativo nominal
piezas_prog cuantitativo (discreto) razon
tiempo_minutos cuantitativo (continuo) intervalo
estacion_arranque cualitativo nominal
laminas_procesadas cuantitativo (discreto) razon
tiempo_calidad cuantitativo (continuo) razon

Sección 2

Análisis Exploratorio de las Bases de Datos

En la tabla se presentan los datos estadísticos descriptivos para las diversas variables de la base de datos, en donde se puede observar que el promedio de piezas programadas es de 112, mientras que el de laminas procesadas es de 48. Por otro lado, se visualiza que el tiempo promedio de calidad es 1.05 con una desviación estándar de 1.71, por lo que la mayoría del tiempo de calidad para los clientes se encuentra dentro del mismo rango.

describe.by (prod2)
##                    vars    n   mean     sd median trimmed   mad  min  max
## fecha                 1 1999    NaN     NA     NA     NaN    NA  Inf -Inf
## cliente*              2 5411   6.97   2.61      7    6.98  1.48 1.00   12
## piezas_prog           3 5411 111.95 143.38     60   82.02 59.30 0.00 2000
## tiempo_minutos        4 5411  21.18   9.45     20   20.10  0.00 0.39  150
## estacion_arranque*    5 5411 226.05 144.05    326  238.00 43.00 1.00  356
## laminas_procesadas    6 5411  47.98 100.83     11   23.57 16.31 0.00 1263
## tiempo_calidad        7 5411   1.05   1.71      1    0.94  0.00 0.00   48
##                      range  skew kurtosis   se
## fecha                 -Inf    NA       NA   NA
## cliente*             11.00  0.07     0.23 0.04
## piezas_prog        2000.00  3.31    18.74 1.95
## tiempo_minutos      149.61  4.85    36.43 0.13
## estacion_arranque*  355.00 -0.64    -1.37 1.96
## laminas_procesadas 1263.00  4.40    31.85 1.37
## tiempo_calidad       48.00 14.05   269.32 0.02

Gráficos

Gráfica de pie

En la siguiente gráfica es posible observar la variedad de clientes que actualmente FORM tiene y con los que tiene una programación de piezas importantes, siendo STABILUS 1 el de mayor proporción.

pie(prop.table(table(prod2$cliente)),col=c("#7FFFD4","#FF7F50","#CAFF70","#FFD700","#B2DFEE","#FFAEB9", "#FFA07A","#B3EE3A","#FF3E96", "#DDA0DD", "red"),main="Clientes de FORM",las=1)

Scatter Plot

En la siguiente gráfica se puede observar la dispersión de las piezas programadas vs las laminas procesadas, en donde se puede observar que en cuanto menos piezas programadas, más laminas procesadas, y viceversa. Por lo que, será importante considerar que tipo de material/ producto es más importante para FORM.

plot(prod2$piezas_prog,prod2$laminas_procesadas, col="orange", xlab="Piezas Programadas",ylab="Laminas Procesadas")

En la gráfica a continuación, es posible observar la relación de las laminas procesadas vs el tiempo en minutos, en donde se visualiza que la empresa mantiene una estabilidad en hacer un intervalo pequeño de laminas procesadas para mantener un tiempo en minutos bajo.

  plot(prod2$laminas_procesadas,prod2$tiempo_minutos, col="lightsteelblue", xlab="Laminas Programadas",ylab="Tiempo en minutos")

Bar Plots

En la siguiente gráfica se muestra la cantidad de laminas procesadas por cliente, en donde es posible observar que el cliente STABILUS 1 es al que mayor surtido en producción de laminas le suministran.

Cliente <- data.frame(prod2$cliente,prod2$laminas_procesadas)
colnames(Cliente)<-c('Cliente','Laminas')

ggplot(data = Cliente, aes (x=Cliente, y=Laminas)) +
  geom_bar(stat = "identity", fill="orange") + scale_fill_grey() + 
  labs(title = "Laminas por cliente", 
       x = "Cliente")

FORM Merma

La merma es la pérdida de material que experimentan las existencias (stock). En esta quinta base de datos analizada se muestra información sobre la cantidad de kilos de merma que se producen en FORM, a lo cual se analizarán sus datos estadísticos.

Sección 1

Limpieza, Transformación, y Organización de Bases de Datos

merma <- read.csv("/Users/Karen/Downloads/FORM - Merma.csv")

Entender base de datos

summary(merma)
##     Fecha               Mes                Kilos     
##  Length:50          Length:50          Min.   : 790  
##  Class :character   Class :character   1st Qu.:3178  
##  Mode  :character   Mode  :character   Median :3925  
##                                        Mean   :3709  
##                                        3rd Qu.:4232  
##                                        Max.   :6140
str(merma)
## 'data.frame':    50 obs. of  3 variables:
##  $ Fecha: chr  "11/01/22" "11/01/22" "22/01/22" "22/01/22" ...
##  $ Mes  : chr  "ENERO" "ENERO" "ENERO" "ENERO" ...
##  $ Kilos: int  5080 3810 2990 2680 3650 4380 3870 3590 3410 3930 ...

Técnicas de limpieza

Técnica 1 Cambiar de caracter a fecha

Se utilizó esta técnica debido a que la base contiene el dato de fecha y es necesario convertirlo para evaluar el periodo de tiempo de la información

merma$Fecha <-as.Date(merma$Fecha,format ="%d/%m/%Y")
tibble(merma)
## # A tibble: 50 × 3
##    Fecha      Mes     Kilos
##    <date>     <chr>   <int>
##  1 0022-01-11 ENERO    5080
##  2 0022-01-11 ENERO    3810
##  3 0022-01-22 ENERO    2990
##  4 0022-01-22 ENERO    2680
##  5 0022-02-18 FEBRERO  3650
##  6 0022-02-18 FEBRERO  4380
##  7 0022-02-18 FEBRERO  3870
##  8 0022-02-18 FEBRERO  3590
##  9 0022-02-18 FEBRERO  3410
## 10 0022-02-24 FEBRERO  3930
## # … with 40 more rows

Técnica 2 Borrar registros faltantes

Se utilizó esta técnica debido a que es importante considerar si la base no tiene alguna registro NA o cero que pueda afectar la visualización de los datos

#¿Tenemos NA en la base de datos?
sum(is.na(merma))
## [1] 0
#¿Tenemos NA por variable?
sapply(merma,function(x)sum(is.na(x)))
## Fecha   Mes Kilos 
##     0     0     0
#En caso de tener, borrar los registros NA 
merma <- na.omit(merma)
summary(merma)
##      Fecha                Mes                Kilos     
##  Min.   :0022-01-11   Length:50          Min.   : 790  
##  1st Qu.:0022-03-12   Class :character   1st Qu.:3178  
##  Median :0022-05-24   Mode  :character   Median :3925  
##  Mean   :0022-05-25                      Mean   :3709  
##  3rd Qu.:0022-08-10                      3rd Qu.:4232  
##  Max.   :0022-09-21                      Max.   :6140

Variables

¿Cuántos registros y variables tiene la base de datos?

dim(merma)
## [1] 50  3

Clasificación de variables

variablesmer <- c("`Fecha`","`Mes`","`Kilos`")
tiposmer <- c("cualitativo", "cualitativo","cuantitativo (continuo)")
escalasmer <- c("ordinal", "ordinal", "razon")
tablemer <- data.frame (variablesmer, tiposmer, escalasmer)
knitr::kable(tablemer)
variablesmer tiposmer escalasmer
Fecha cualitativo ordinal
Mes cualitativo ordinal
Kilos cuantitativo (continuo) razon

Sección 2

Análisis Exploratorio de las Bases de Datos

En la tabla se presentan los datos estadísticos descriptivos en específico para la variable Kilos, en donde es posible observar que el promedio de 3709 con una desviación estándar de 1024, por lo que existe una amplia dispersión en la cantidad de kilos de merma producidos.

describe (merma)
## # A tibble: 1 × 26
##   described_…¹     n    na  mean    sd se_mean   IQR skewn…² kurto…³   p00   p01
##   <chr>        <int> <int> <dbl> <dbl>   <dbl> <dbl>   <dbl>   <dbl> <dbl> <dbl>
## 1 Kilos           50     0 3709. 1024.    145.  1055  -0.997    2.17   790  800.
## # … with 15 more variables: p05 <dbl>, p10 <dbl>, p20 <dbl>, p25 <dbl>,
## #   p30 <dbl>, p40 <dbl>, p50 <dbl>, p60 <dbl>, p70 <dbl>, p75 <dbl>,
## #   p80 <dbl>, p90 <dbl>, p95 <dbl>, p99 <dbl>, p100 <dbl>, and abbreviated
## #   variable names ¹​described_variables, ²​skewness, ³​kurtosis

Gráficos

Gráfica de pie

En dicha gráfica de pie, se puede observar la cantidad de kilos de merma por mes, donde se observa que en Agosto 2022 fue el mes con mayor merma, no obstante, en Mayo tambien hubo una carga grande, aunque con menores cantidades a nivel total.

Kilos1 <- data.frame(merma$Mes,merma$Kilos)
colnames(Kilos1)<-c('Mes','Kilos')

ggplot(Kilos1,aes(x=Kilos, y=Mes, fill=Kilos))+
  geom_bar(stat = "identity",color="blue")+
  coord_polar(theta="y")

Time Series Plot

Como se puede observar en la siguiente gráfica, una vez más se comprueba que el mes con más merma fue el mes de Agosto del 2022 y el mes con menos merma fue Septiembre ´22, pero como todavía no había concluido el mes de Septiembre al momento de descargar la base de datos, podemos decir que Enero fue el mes con menos merma.

Kilos <- data.frame(merma$Fecha,merma$Kilos)
colnames(Kilos)<-c('Fecha','Kilos')

ggplot(data = Kilos, aes (x=Fecha, y=Kilos)) +
  geom_point(stat = "identity", col="orange") + scale_fill_grey() + 
  labs(title = "Kilos de merma", 
       x = "2022")

Gráficos de normalidad

En las siguientes gráficas de normalidad, se utilizo la variable de kilos de merma con la finaliad de observar su dispersión, visualizando que la mayoría de merma producida sigue una distribución normal, y se encuentra dentro del mismo rango, a excepción de algunos datos atípicos.

plot_normality(merma,Kilos, col="orange")

FORM Scrap

El scrap es el sobrante de la fabricación y consumo de materiales. En esta sexta base de datos analizada, se muestra información sobre la cantidad de scrap producido en FORM, asi como las diversas areas de donde proviene; con lo cual se analizarán sus datos estadísticos.

Sección 1

Limpieza, Transformación, y Organización de Bases de Datos

scrap <- read.csv("/Users/Karen/Downloads/FORM - Scrap.csv")

Entender base de datos

summary (scrap)
##   Referencia           Fecha               Hora             Producto        
##  Length:250         Length:250         Length:250         Length:250        
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##     Cantidad    Unidad.de.medida   Ubicación.de.origen Ubicación.de.desecho
##  Min.   : 0.0   Length:250         Length:250          Length:250          
##  1st Qu.: 1.0   Class :character   Class :character    Class :character    
##  Median : 2.0   Mode  :character   Mode  :character    Mode  :character    
##  Mean   : 6.7                                                              
##  3rd Qu.: 7.0                                                              
##  Max.   :96.0                                                              
##     Estado         
##  Length:250        
##  Class :character  
##  Mode  :character  
##                    
##                    
## 
str (scrap)
## 'data.frame':    250 obs. of  9 variables:
##  $ Referencia          : chr  "SP/08731" "SP/08730" "SP/08729" "SP/08728" ...
##  $ Fecha               : chr  "31/08/2022" "31/08/2022" "31/08/2022" "31/08/2022" ...
##  $ Hora                : chr  "14:55:40" "14:49:25" "13:49:29" "9:30:07" ...
##  $ Producto            : chr  "[BACKFRAME 60% CUELLO ARMADO] 18805. 60% Backframe. Cuello Armado." "[N61506747 CAJA] N61506747. Kit. Caja." "[N61506729 SEPARADOR] N61506729. Kit. Separador." "[341332 DIVISOR - U611 & U625] 341332. U611. U625. Divisor Troquelado." ...
##  $ Cantidad            : int  2 1 1 31 1 1 1 9 2 1 ...
##  $ Unidad.de.medida    : chr  "Unidad(es)" "Unidad(es)" "Unidad(es)" "Unidad(es)" ...
##  $ Ubicación.de.origen : chr  "SAB/Calidad/Entrega de PT" "SAB/Calidad/Entrega de PT" "SAB/Calidad/Entrega de PT" "SAB/Pre-Production" ...
##  $ Ubicación.de.desecho: chr  "Virtual Locations/Scrapped" "Virtual Locations/Scrapped" "Virtual Locations/Scrapped" "Virtual Locations/Scrapped" ...
##  $ Estado              : chr  "Hecho" "Hecho" "Hecho" "Hecho" ...

Técnicas de limpieza

Técnica 1 Convertir tipos de datos

Cambiar de caracter a fecha

scrap$Fecha <-as.Date(scrap$Fecha,format ="%d/%m/%Y")
tibble(scrap)
## # A tibble: 250 × 9
##    Referencia Fecha      Hora     Produ…¹ Canti…² Unida…³ Ubica…⁴ Ubica…⁵ Estado
##    <chr>      <date>     <chr>    <chr>     <int> <chr>   <chr>   <chr>   <chr> 
##  1 SP/08731   2022-08-31 14:55:40 [BACKF…       2 Unidad… SAB/Ca… Virtua… Hecho 
##  2 SP/08730   2022-08-31 14:49:25 [N6150…       1 Unidad… SAB/Ca… Virtua… Hecho 
##  3 SP/08729   2022-08-31 13:49:29 [N6150…       1 Unidad… SAB/Ca… Virtua… Hecho 
##  4 SP/08728   2022-08-31 9:30:07  [34133…      31 Unidad… SAB/Pr… Virtua… Hecho 
##  5 SP/08727   2022-08-31 9:28:44  [DIVIS…       1 Unidad… SAB/Pr… Virtua… Hecho 
##  6 SP/08726   2022-08-31 9:28:23  [DIVIS…       1 Unidad… SAB/Pr… Virtua… Hecho 
##  7 SP/08725   2022-08-31 9:27:12  [CHARO…       1 Unidad… SAB/Pr… Virtua… Hecho 
##  8 SP/08724   2022-08-31 9:26:45  [CELDA…       9 Unidad… SAB/Pr… Virtua… Hecho 
##  9 SP/08723   2022-08-31 9:26:24  [TAPA …       2 Unidad… SAB/Pr… Virtua… Hecho 
## 10 SP/08722   2022-08-31 9:25:55  [CAJA …       1 Unidad… SAB/Pr… Virtua… Hecho 
## # … with 240 more rows, and abbreviated variable names ¹​Producto, ²​Cantidad,
## #   ³​Unidad.de.medida, ⁴​Ubicación.de.origen, ⁵​Ubicación.de.desecho

Técnica 2 Valores faltantes

#¿Tenemos NA en la base de datos?
sum(is.na(scrap))
## [1] 0
#¿Tenemos NA por variable?
sapply(scrap,function(x)sum(is.na(x)))
##           Referencia                Fecha                 Hora 
##                    0                    0                    0 
##             Producto             Cantidad     Unidad.de.medida 
##                    0                    0                    0 
##  Ubicación.de.origen Ubicación.de.desecho               Estado 
##                    0                    0                    0
#En caso de tener, borrar los registros NA 
scrap <- na.omit(scrap)
summary(scrap)
##   Referencia            Fecha                Hora             Producto        
##  Length:250         Min.   :2022-08-01   Length:250         Length:250        
##  Class :character   1st Qu.:2022-08-11   Class :character   Class :character  
##  Mode  :character   Median :2022-08-19   Mode  :character   Mode  :character  
##                     Mean   :2022-08-17                                        
##                     3rd Qu.:2022-08-25                                        
##                     Max.   :2022-08-31                                        
##     Cantidad    Unidad.de.medida   Ubicación.de.origen Ubicación.de.desecho
##  Min.   : 0.0   Length:250         Length:250          Length:250          
##  1st Qu.: 1.0   Class :character   Class :character    Class :character    
##  Median : 2.0   Mode  :character   Mode  :character    Mode  :character    
##  Mean   : 6.7                                                              
##  3rd Qu.: 7.0                                                              
##  Max.   :96.0                                                              
##     Estado         
##  Length:250        
##  Class :character  
##  Mode  :character  
##                    
##                    
## 

Variables

¿Cuántos registros y variables tiene la base de datos?

dim(scrap)
## [1] 250   9

Clasificación de variables

variablesscra <- c("`Referencia`","`Fecha`","`Hora`", "`Producto`", "`Cantidad`", "`Unidad de medida`","`Ubicacion de origen`", "`Ubicacion de desecho`", "`Estado`")
tiposscra <- c("cualitativo", "cualitativo","cuantitativo", "cualitativo", "cuantitativo (discreto)", "cualitativo", "cualitativo", "cualitativo", "cualitativo")
escalasscra <- c("nominal", "ordinal", "ordinal", "nominal", "razon", "nominal", "nominal", "nominal", "nominal")
tablescra <- data.frame (variablesscra, tiposscra, escalasscra)
knitr::kable(tablescra)
variablesscra tiposscra escalasscra
Referencia cualitativo nominal
Fecha cualitativo ordinal
Hora cuantitativo ordinal
Producto cualitativo nominal
Cantidad cuantitativo (discreto) razon
Unidad de medida cualitativo nominal
Ubicacion de origen cualitativo nominal
Ubicacion de desecho cualitativo nominal
Estado cualitativo nominal

Sección 2

Análisis Exploratorio de las Bases de Datos

En la tabla se presentan los datos estadisticos descriptivos en específico para la variable Cantidad, donde se puede observar que el promedio de scrap es de 6.7 con una desviación estándar de 11.8, por lo que no existe tanta dispersión en el rango de datos, y la mayoría de scrap se encuentra en estas cantidades.

describe (scrap)
## # A tibble: 1 × 26
##   described_…¹     n    na  mean    sd se_mean   IQR skewn…² kurto…³   p00   p01
##   <chr>        <int> <int> <dbl> <dbl>   <dbl> <dbl>   <dbl>   <dbl> <dbl> <dbl>
## 1 Cantidad       250     0   6.7  11.8   0.749     6    4.17    21.8     0     1
## # … with 15 more variables: p05 <dbl>, p10 <dbl>, p20 <dbl>, p25 <dbl>,
## #   p30 <dbl>, p40 <dbl>, p50 <dbl>, p60 <dbl>, p70 <dbl>, p75 <dbl>,
## #   p80 <dbl>, p90 <dbl>, p95 <dbl>, p99 <dbl>, p100 <dbl>, and abbreviated
## #   variable names ¹​described_variables, ²​skewness, ³​kurtosis

Gráficos

Gráfica de pie

En la siguiente gráfica se puede observar la proporción de las ubicaciones de origen del scrap, siendo SAB Pre producción el area donde mayor scrap se produce.

pie(prop.table(table(scrap$Ubicación.de.origen)),col=c("#BFEFFF","#FFEC8B","#FFA07A"),main="Ubicacion de origen",las=1)

Dispersion Plot

En la siguiente gráfica se observa que muchos de los pedidos están en pre-producción, debido a que hay una mayor cantidad de puntos azules en toda la gráfica. Pedidos con más de 25 unidades siempre están en pre-producción, mientras que los pedidos de Post producción y entrega de PT están en órdenes menores de 25 unidades.

ggplot(scrap, aes(x=Fecha, y=Cantidad, colour=Ubicación.de.origen)) + geom_point()

Bar plots

En el caso de la siguiente gráfica, se puede observar la cantidad de scrap durante el mes de Agosto 2022, en donde se visualiza que hubo una mayor cantidad en la semana del 22 al 29 de Agosto.

Cantidad1 <- data.frame(scrap$Fecha,scrap$Cantidad)
colnames(Cantidad1)<-c('Fecha','Cantidad')

ggplot(data = Cantidad1, aes (x=Fecha, y=Cantidad)) +
  geom_bar(stat = "identity", fill="#FFA07A") + scale_fill_grey() + 
  labs(title = "Cantidad de scrap", 
       x = "2022")

Externa USA Predicción

La base de datos externa utilizada en este caso fue proporcionada por Bureau Transports, en donde se visualiza la producción de autos en Estados Unidos durante 2000 a 2020. De igual forma, se utilizaron otras bases obtenidas del Banco Mundial para recabar datos como la inflación, el índice de Pobreza, el PIB per Capita en USA, y la tasa de desempleo. Asi mismo, fue utilizada la base de datos de Passport para obtener la cantidad de autopartes fabricadas en Estados Unidos durante el mismo periodo de tiempo.

Sección 1

Limpieza, Transformación, y Organización de Bases de Datos

#file.choose()
externa1 <- read.csv("/Users/Karen/Downloads/Evidencia 2 FORM/Base EUA nueva.csv")

Entender base de datos

summary (externa1)
##      Year             Production      Inflacion         Pobreza      
##  Length:21          Min.   : 5710   Min.   :-0.360   Min.   :0.7000  
##  Class :character   1st Qu.:10336   1st Qu.: 1.590   1st Qu.:1.0000  
##  Mode  :character   Median :11260   Median : 2.130   Median :1.0000  
##                     Mean   :10705   Mean   : 2.126   Mean   :0.9857  
##                     3rd Qu.:11960   3rd Qu.: 2.850   3rd Qu.:1.0000  
##                     Max.   :12774   Max.   : 3.840   Max.   :1.2000  
##       PIB          Poblacion           Desempleo       Autopartes    
##  Min.   :36330   Min.   :282162411   Min.   :3.670   Min.   :300543  
##  1st Qu.:44123   1st Qu.:295516599   1st Qu.:4.620   1st Qu.:466904  
##  Median :48651   Median :309327143   Median :5.530   Median :501311  
##  Mean   :50062   Mean   :308023794   Mean   :5.985   Mean   :518449  
##  3rd Qu.:56763   3rd Qu.:320738994   3rd Qu.:7.370   3rd Qu.:601972  
##  Max.   :65095   Max.   :331501080   Max.   :9.630   Max.   :668450
str (externa1)
## 'data.frame':    21 obs. of  8 variables:
##  $ Year      : chr  "01/01/2000" "01/01/2001" "01/01/2002" "01/01/2003" ...
##  $ Production: num  12774 11425 12280 12087 11960 ...
##  $ Inflacion : num  3.38 2.83 1.59 2.27 2.68 3.39 3.23 2.85 3.84 -0.36 ...
##  $ Pobreza   : num  0.7 0.7 0.7 1 1 1 1 1 1 1 ...
##  $ PIB       : num  36330 37134 37998 39490 41725 ...
##  $ Poblacion : num  2.82e+08 2.85e+08 2.88e+08 2.90e+08 2.93e+08 ...
##  $ Desempleo : num  3.99 4.73 5.78 5.99 5.53 5.08 4.62 4.62 5.78 9.25 ...
##  $ Autopartes: num  466904 425152 470493 493732 491839 ...

Técnicas de limpieza

Técnica 1 Convertir tipos de datos

Cambiar de caracter a fecha

externa1$Year <-as.Date(externa1$Year,format ="%d/%m/%Y")
tibble(externa1)
## # A tibble: 21 × 8
##    Year       Production Inflacion Pobreza    PIB Poblacion Desempleo Autopartes
##    <date>          <dbl>     <dbl>   <dbl>  <dbl>     <dbl>     <dbl>      <dbl>
##  1 2000-01-01     12774.      3.38     0.7 36330. 282162411      3.99     466904
##  2 2001-01-01     11425.      2.83     0.7 37134. 284968955      4.73     425152
##  3 2002-01-01     12280.      1.59     0.7 37998. 287625193      5.78     470493
##  4 2003-01-01     12087.      2.27     1   39490. 290107933      5.99     493732
##  5 2004-01-01     11960.      2.68     1   41725. 292805298      5.53     491839
##  6 2005-01-01     11947.      3.39     1   44123. 295516599      5.08     502939
##  7 2006-01-01     11260.      3.23     1   46302  298379912      4.62     501311
##  8 2007-01-01     10752.      2.85     1   48050. 301231207      4.62     498481
##  9 2008-01-01      8672.      3.84     1   48570. 304093966      5.78     409349
## 10 2009-01-01      5710.     -0.36     1   47195. 306771529      9.25     300543
## # … with 11 more rows

Técnica 2 Valores faltantes

Se realizó esta técnica con la finalidad de conocer si en la base de datos existen NA o similares que no sean validos para la información

#¿Tenemos NA en la base de datos?
sum(is.na(externa1))
## [1] 0
#¿Tenemos NA por variable?
sapply(externa1,function(x)sum(is.na(x)))
##       Year Production  Inflacion    Pobreza        PIB  Poblacion  Desempleo 
##          0          0          0          0          0          0          0 
## Autopartes 
##          0
#En caso de tener, borrar los registros NA 
externa1 <- na.omit(externa1)
summary(externa1)
##       Year              Production      Inflacion         Pobreza      
##  Min.   :2000-01-01   Min.   : 5710   Min.   :-0.360   Min.   :0.7000  
##  1st Qu.:2005-01-01   1st Qu.:10336   1st Qu.: 1.590   1st Qu.:1.0000  
##  Median :2010-01-01   Median :11260   Median : 2.130   Median :1.0000  
##  Mean   :2009-12-31   Mean   :10705   Mean   : 2.126   Mean   :0.9857  
##  3rd Qu.:2015-01-01   3rd Qu.:11960   3rd Qu.: 2.850   3rd Qu.:1.0000  
##  Max.   :2020-01-01   Max.   :12774   Max.   : 3.840   Max.   :1.2000  
##       PIB          Poblacion           Desempleo       Autopartes    
##  Min.   :36330   Min.   :282162411   Min.   :3.670   Min.   :300543  
##  1st Qu.:44123   1st Qu.:295516599   1st Qu.:4.620   1st Qu.:466904  
##  Median :48651   Median :309327143   Median :5.530   Median :501311  
##  Mean   :50062   Mean   :308023794   Mean   :5.985   Mean   :518449  
##  3rd Qu.:56763   3rd Qu.:320738994   3rd Qu.:7.370   3rd Qu.:601972  
##  Max.   :65095   Max.   :331501080   Max.   :9.630   Max.   :668450

Variables

¿Cuántos registros y variables tiene la base de datos?

dim(externa1)
## [1] 21  8

Clasificación de variables

Las variables en esta base de datos corresponden a la producción de autos en Estados Unidos, asi como indicadores generales como la inflación, índice de Pobreza, el PIB per Capita, la población, el desempleo, y la fabricación de autopartes en USA durante el periodo de tiempo de los años 2000 a 2020.

Variableex <- c("`Year`", "`Production`", "`Inflacion`", "`Pobreza`", "`PIB`", "`Poblacion`", "`Desempleo`", "`Autopartes`")
Tipoex <- c("Cuantitativa (discreta)", "Cuantitativa (continua)", "Cuantitativa (continua)", "Cuantitativa (continua)", "Cuantitativa (continua)", "Cuantitativa (discreta)","Cuantitativa (continua)","Cuantitativa (discreta)")
Escalaex <- c("Razon", "Intervalo", "Intervalo", "Intervalo", "Intervalo", "Razon", "Intervalo", "Razon")
Tableex <- data.frame (Variableex, Tipoex, Escalaex)
knitr::kable(Tableex)
Variableex Tipoex Escalaex
Year Cuantitativa (discreta) Razon
Production Cuantitativa (continua) Intervalo
Inflacion Cuantitativa (continua) Intervalo
Pobreza Cuantitativa (continua) Intervalo
PIB Cuantitativa (continua) Intervalo
Poblacion Cuantitativa (discreta) Razon
Desempleo Cuantitativa (continua) Intervalo
Autopartes Cuantitativa (discreta) Razon

Sección 2

Análisis Exploratorio de las Bases de Datos

En la tabla se presentan los datos estadisticos descriptivos para todas las variables de la base de datos externa USA, en donde es posible observar, que el promedio de producción es de 10705 a lo largo de los años, mientras que la inflación es de 2.13, el índice de Pobreza de 0.99, y el PIB per Capita de 50062 el cual ha tenido una desviación estandar de 8794 arrojando que tiene gran dispersión durante el periodo de tiempo de 2000 a 2020 en Estados Unidos.

Aunado a eso, la poblacion de USA mantiene un promedio de 308023794, la tasa de desempleo de 5.99, y el promedio de la fabricación de autopartes en Estados Unidos es de 518448.

describe.by (externa1)
##            vars  n         mean          sd       median      trimmed
## Year          1 21          NaN          NA           NA          NaN
## Production    2 21     10705.32     1790.45     11260.28     10959.09
## Inflacion     3 21         2.13        1.07         2.13         2.21
## Pobreza       4 21         0.99        0.14         1.00         0.99
## PIB           5 21     50062.14     8794.35     48650.64     49983.46
## Poblacion     6 21 308023794.00 15330004.55 309327143.00 308325722.06
## Desempleo     7 21         5.99        1.84         5.53         5.84
## Autopartes    8 21    518448.57    97397.31    501311.00    521264.41
##                    mad          min          max       range  skew kurtosis
## Year                NA          Inf         -Inf        -Inf    NA       NA
## Production     1225.74      5710.29     12773.71     7063.42 -1.22     0.66
## Inflacion         1.04        -0.36         3.84        4.20 -0.51    -0.36
## Pobreza           0.00         0.70         1.20        0.50 -0.72     0.37
## PIB           10268.50     36329.96     65094.80    28764.84  0.07    -1.21
## Poblacion  20377761.75 282162411.00 331501080.00 49338669.00 -0.14    -1.38
## Desempleo         1.35         3.67         9.63        5.96  0.66    -0.97
## Autopartes   109651.61    300543.00    668450.00   367907.00 -0.14    -0.75
##                    se
## Year               NA
## Production     390.71
## Inflacion        0.23
## Pobreza          0.03
## PIB           1919.08
## Poblacion  3345281.25
## Desempleo        0.40
## Autopartes   21253.84

Gráficos

Bar plot

En la siguiente gráfica es posible observar la cantidad de autos producidos en Estados Unidos a lo largo del periodo de tiempo de los años 2000 al 2020. Como observación, en el año 2009, se ve la notaria baja en producción debido a la crisis económica de ese mismo año en USA.

Produccion <- data.frame(externa1$Production, externa1$Year)
colnames(Produccion)<-c('Produccion','Año')

ggplot(data = Produccion, aes (x=Año, y=Produccion)) +
  geom_bar(stat = "identity", fill="orange") + scale_fill_grey() + 
  labs(title = "Produccion de autos en USA ", 
        y="Autos")

Sección 2

Modelos predictivos

En la siguiente gráfica se muestra la correlación entre todas las variables de la base de datos, visualizando que existe cierta relación entre la variable dependiente Producción y la fabricación de autopartes; asi como algunas correlaciones entre las mismas variables independientes como Población y Pobreza.

USA<-subset(externa1,select=-c(Year))
corrplot(cor(USA),type='upper',order='hclust',addCoef.col='black') 

Modelo 1: Producción de autos

El primer modelo predictivo, en este caso, analiza la variable dependiente siendo la Producción de autos en Estados Unidos, mientras que para las variables exploratorias se toman en cuenta la inflación, el índice de pobreza, el PIB per Capita, la población, la tasa de desempleo, y la fabricación de autopartes en Estados Unidos.

regresion <- lm(Production~ Inflacion + Pobreza + PIB + Poblacion + Desempleo + Autopartes, data=externa1)
summary (regresion)
## 
## Call:
## lm(formula = Production ~ Inflacion + Pobreza + PIB + Poblacion + 
##     Desempleo + Autopartes, data = externa1)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -353.2 -195.4    2.9  151.9  513.4 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  4.535e+03  1.192e+04   0.380   0.7095    
## Inflacion    5.299e+01  7.411e+01   0.715   0.4864    
## Pobreza     -3.493e+02  5.939e+02  -0.588   0.5658    
## PIB         -2.616e-01  8.870e-02  -2.949   0.0106 *  
## Poblacion    2.454e-05  5.586e-05   0.439   0.6672    
## Desempleo   -9.185e+01  9.657e+01  -0.951   0.3577    
## Autopartes   2.409e-02  1.538e-03  15.661 2.87e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 267.2 on 14 degrees of freedom
## Multiple R-squared:  0.9844, Adjusted R-squared:  0.9777 
## F-statistic: 147.3 on 6 and 14 DF,  p-value: 7.853e-12

Aquí podemos observar que las variables con mayor significancia son fabricación de autopartes y el PIB, por lo que se realizará un segundo modelo, utilizando dichas variables y la de Desempleo, con la finalidad de observar si mejora la confiabilidad del modelo, la cual actualmente tiene una R2 de 0.97.

regresion5 <- lm(Production~ PIB + Desempleo + Autopartes, data=externa1)
summary (regresion5)
## 
## Call:
## lm(formula = Production ~ PIB + Desempleo + Autopartes, data = externa1)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -410.80 -136.13  -21.07  121.91  530.30 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  9.940e+03  5.138e+02  19.347 5.15e-13 ***
## PIB         -2.261e-01  1.143e-02 -19.781 3.58e-13 ***
## Desempleo   -7.518e+01  4.499e+01  -1.671    0.113    
## Autopartes   2.418e-02  1.217e-03  19.868 3.33e-13 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 249.3 on 17 degrees of freedom
## Multiple R-squared:  0.9835, Adjusted R-squared:  0.9806 
## F-statistic: 338.1 on 3 and 17 DF,  p-value: 2.385e-15
datos_nuevos <- data.frame(PIB=47195, Desempleo =5, Autopartes=636320)
predict(regresion5,datos_nuevos)
##        1 
## 14277.62

De esta forma, podemos visualizar que el modelo de regresión mejoró su confiabilidad con una R2 de 0.98, y que sin duda, la fabricación de autopartes es la variable que mayor signficancia tiene con una tendencia positiva, por lo que, es posible decir que mientras mayor fabricación de autopartes haya, mayor producción de autos.

No obstante, otra de las variables que resultó con gran significancia fue el PIB, pero con una tendencia negativa, por lo que tambien sería posible decir que mientras menor PIB per Capita, mayor producción de autos. Sin embargo, a esta variable, es importante evaluar el contexto histórico en el país, debido a que usualmente el PIB siempre va en crecimiento y no demuestra una variación.

effect_plot(regresion5,pred=Autopartes,interval=TRUE)

De esta forma, es importante para FORM conocer el desempeño de la industria a lo largo del tiempo y estar al tanto de su comportamiento.

Externa México Predicción

La base de datos externa utilizada en este caso fue proporcionada por INEGI, en donde se visualiza la producción y exportaciones de autos en México durante 2005 a 2021. De igual forma, se utilizaron otras bases obtenidas del Banco Mundial para recabar datos como la inflación y el PIB en México.

Sección 1

Limpieza, Transformación, y Organización de Bases de Datos

#file.choose()
externaMex <- read.csv("/Users/Karen/Downloads/Evidencia 2 FORM/Base externa Mexico.csv")

Entender base de datos

summary (externaMex)
##      Año              Produccion    Exportaciones     Inflacion    
##  Length:17          Min.   :577.0   Min.   : 1586   Min.   :2.720  
##  Class :character   1st Qu.:646.0   1st Qu.: 3885   1st Qu.:3.630  
##  Mode  :character   Median :686.0   Median : 5384   Median :3.990  
##                     Mean   :729.4   Mean   : 6610   Mean   :4.161  
##                     3rd Qu.:735.0   3rd Qu.: 7173   3rd Qu.:4.900  
##                     Max.   :995.0   Max.   :15941   Max.   :6.040  
##       PIB           
##  Min.   :8.775e+11  
##  1st Qu.:1.058e+12  
##  Median :1.159e+12  
##  Mean   :1.131e+12  
##  3rd Qu.:1.222e+12  
##  Max.   :1.315e+12
str (externaMex)
## 'data.frame':    17 obs. of  5 variables:
##  $ Año          : chr  "01/01/2005" "01/01/2006" "01/01/2007" "01/01/2008" ...
##  $ Produccion   : int  577 631 685 735 680 693 702 640 620 646 ...
##  $ Exportaciones: int  1586 1704 2291 3106 3885 4254 4439 5340 5384 5787 ...
##  $ Inflacion    : num  3.99 3.63 3.97 5.12 5.3 4.16 3.41 4.11 3.81 4.02 ...
##  $ PIB          : num  8.77e+11 9.75e+11 1.05e+12 1.11e+12 9.00e+11 ...

Técnicas de limpieza

Técnica 1 Convertir tipos de datos

Cambiar de caracter a fecha

externaMex$Año <-as.Date(externaMex$Año,format ="%d/%m/%Y")
tibble(externaMex)
## # A tibble: 17 × 5
##    Año        Produccion Exportaciones Inflacion     PIB
##    <date>          <int>         <int>     <dbl>   <dbl>
##  1 2005-01-01        577          1586      3.99 8.77e11
##  2 2006-01-01        631          1704      3.63 9.75e11
##  3 2007-01-01        685          2291      3.97 1.05e12
##  4 2008-01-01        735          3106      5.12 1.11e12
##  5 2009-01-01        680          3885      5.3  9.00e11
##  6 2010-01-01        693          4254      4.16 1.06e12
##  7 2011-01-01        702          4439      3.41 1.18e12
##  8 2012-01-01        640          5340      4.11 1.20e12
##  9 2013-01-01        620          5384      3.81 1.27e12
## 10 2014-01-01        646          5787      4.02 1.32e12
## 11 2015-01-01        669          6636      2.72 1.17e12
## 12 2016-01-01        686          6016      2.82 1.08e12
## 13 2017-01-01        705          7173      6.04 1.16e12
## 14 2018-01-01        841          9358      4.9  1.22e12
## 15 2019-01-01        995         14449      3.64 1.27e12
## 16 2020-01-01        956         15017      3.4  1.09e12
## 17 2021-01-01        938         15941      5.69 1.29e12

Técnica 2 Valores faltantes

Se realizó esta técnica con la finalidad de conocer si en la base de datos existen NA o similares que no sean validos para la información

#¿Tenemos NA en la base de datos?
sum(is.na(externaMex))
## [1] 0
#¿Tenemos NA por variable?
sapply(externaMex,function(x)sum(is.na(x)))
##           Año    Produccion Exportaciones     Inflacion           PIB 
##             0             0             0             0             0
#En caso de tener, borrar los registros NA 
externaMex <- na.omit(externaMex)
summary(externaMex)
##       Año               Produccion    Exportaciones     Inflacion    
##  Min.   :2005-01-01   Min.   :577.0   Min.   : 1586   Min.   :2.720  
##  1st Qu.:2009-01-01   1st Qu.:646.0   1st Qu.: 3885   1st Qu.:3.630  
##  Median :2013-01-01   Median :686.0   Median : 5384   Median :3.990  
##  Mean   :2012-12-31   Mean   :729.4   Mean   : 6610   Mean   :4.161  
##  3rd Qu.:2017-01-01   3rd Qu.:735.0   3rd Qu.: 7173   3rd Qu.:4.900  
##  Max.   :2021-01-01   Max.   :995.0   Max.   :15941   Max.   :6.040  
##       PIB           
##  Min.   :8.775e+11  
##  1st Qu.:1.058e+12  
##  Median :1.159e+12  
##  Mean   :1.131e+12  
##  3rd Qu.:1.222e+12  
##  Max.   :1.315e+12

Variables

¿Cuántos registros y variables tiene la base de datos?

dim(externaMex)
## [1] 17  5

Clasificación de variables

Las variables en esta base de datos corresponden a la producción y exportaciones de autos en México, asi como indicadores generales como la inflación, y el PIB durante el periodo de tiempo de los años 2005 a 2021.

VariableMe <- c("`Año`", "`Produccion`", "`Exportaciones`", "`Inflacion`", "`PIB`")
TipoMe <- c("Cuantitativa (discreta)", "Cuantitativa (continua)", "Cuantitativa (continua)", "Cuantitativa (continua)", "Cuantitativa (continua)")
EscalaMe <- c("Razon", "Razon", "Razon", "Intervalo", "Intervalo")
TableMe <- data.frame (VariableMe, TipoMe, EscalaMe)
knitr::kable(TableMe)
VariableMe TipoMe EscalaMe
Año Cuantitativa (discreta) Razon
Produccion Cuantitativa (continua) Razon
Exportaciones Cuantitativa (continua) Razon
Inflacion Cuantitativa (continua) Intervalo
PIB Cuantitativa (continua) Intervalo

Sección 2

Análisis Exploratorio de las Bases de Datos

En la tabla se presentan los datos estadísticos descriptivos para todas las variables de la base de datos externa en México, en donde es posible observar, que el promedio de producción es de 729 a lo largo de los años, mientras que las exportaciones e 6610, la inflación de 4.16 y el PIB de 1180489601957 en México de 2005 a 2021.

describe.by (externaMex)
##               vars  n         mean          sd       median      trimmed
## Año              1 17          NaN          NA           NA          NaN
## Produccion       2 17 7.293500e+02 1.25080e+02 6.860000e+02 7.218000e+02
## Exportaciones    3 17 6.609760e+03 4.53556e+03 5.384000e+03 6.322600e+03
## Inflacion        4 17 4.160000e+00 9.50000e-01 3.990000e+00 4.130000e+00
## PIB              5 17 1.130942e+12 1.31478e+11 1.158913e+12 1.135545e+12
##                        mad          min          max       range  skew kurtosis
## Año                     NA          Inf         -Inf        -Inf    NA       NA
## Produccion    6.820000e+01 5.770000e+02 9.950000e+02 4.18000e+02  1.00    -0.46
## Exportaciones 2.652370e+03 1.586000e+03 1.594100e+04 1.43550e+04  0.94    -0.46
## Inflacion     8.600000e-01 2.720000e+00 6.040000e+00 3.32000e+00  0.44    -0.89
## PIB           1.499083e+11 8.774762e+11 1.315351e+12 4.37875e+11 -0.41    -0.96
##                        se
## Año                    NA
## Produccion    3.03400e+01
## Exportaciones 1.10004e+03
## Inflacion     2.30000e-01
## PIB           3.18881e+10

Gráficos

Bar plot

En la siguiente gráfica es posible observar la cantidad de autos producidos en México a lo largo del periodo de tiempo de los años 2005 al 2021, en donde se observa que la producción ha ido en constante crecimiento.

Produccion <- data.frame(externaMex$Produccion, externaMex$Año)
colnames(Produccion)<-c('Produccion','Año')

ggplot(data = Produccion, aes (x=Año, y=Produccion)) +
  geom_bar(stat = "identity", fill="lightsteelblue") + scale_fill_grey() + 
  labs(title = "Producción de autos en Mexico ", 
        y="Autos")

Sección 3

Modelos predictivos

En la siguiente gráfica se muestra la correlación entre todas las variables de la base de datos, visualizando que existe cierta relación entre la variable dependiente Producción y las exportaciones; asi como algunas correlaciones entre las mismas variables independientes como Exportaciones y PIB.

Mexico<-subset(externaMex,select=-c(Año))
corrplot(cor(Mexico),type='upper',order='hclust',addCoef.col='black') 

Modelo 1: Producción de autos

El primer modelo predictivo, en este caso, analiza la variable dependiente siendo la producción de autos en México, mientras que para las variables exploratorias se toman en cuenta las exportaciones de autos, la inflación, y el PIB en México.

regresion3 <- lm(Produccion~ Exportaciones + Inflacion + PIB, data=externaMex)
summary (regresion3)
## 
## Call:
## lm(formula = Produccion ~ Exportaciones + Inflacion + PIB, data = externaMex)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -51.89 -43.69 -17.72  44.84  91.50 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    6.892e+02  1.411e+02   4.885 0.000298 ***
## Exportaciones  2.736e-02  3.566e-03   7.671 3.53e-06 ***
## Inflacion      7.130e+00  1.424e+01   0.501 0.624896    
## PIB           -1.506e-10  1.224e-10  -1.231 0.240094    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 53.7 on 13 degrees of freedom
## Multiple R-squared:  0.8503, Adjusted R-squared:  0.8157 
## F-statistic: 24.61 on 3 and 13 DF,  p-value: 1.237e-05
datos_nuevos3 <- data.frame(Exportaciones= 6272, Inflacion=4, PIB=1180489601957)
predict(regresion3,datos_nuevos3)
##        1 
## 711.5047

De esta forma, se puede observar que la unica variable con signficancia para la variable dependiente son las exportaciones, explicado en un modelo con R2 de 0.81.

El modelo mantiene una tendencia positiva, por lo que, es posible decir que mientras mayores exportaciones hayan, mayor producción de autos; no obstante, es importante evaluar que la confiabilidad del modelo no es tan alta.

effect_plot(regresion3,pred=Exportaciones,interval=TRUE)

Externa Pronósticos

EUA

La base de datos externa muestra una visualización de las ventas de autos en Estados Unidos durante los últimos años, la cual fue proporcionada por Bureau Transports y se utilizará para realizar pronósticos a futuro sobre la misma.

Importar base de datos

externa2 <- read.csv("/Users/Karen/Downloads/Evidencia 2 FORM/Pron EUA.csv")

Gráficos

Scar plot

En la siguiente gráfica es posible observar la cantidad de autos vendidos en USA a lo largo del periodo de tiempo de 2000 a 2020, en donde es evidente la caída durante la crisis económica del 2009 y el impacto del Covid en 2020.

Ventas <- data.frame(externa2$Sales, externa2$Year)
colnames(Ventas)<-c('Ventas','Año')

ggplot(data = Ventas, aes (x=Año, y=Ventas)) +
  geom_point(stat = "identity", col="orange") + scale_fill_grey() + 
  labs(title = "Ventas de autos en USA", 
        y="Autos")

Pronósticos

Con el pronóstico realizado, podemos ver que las ventas de autos en USA tendrán una caída en el 2021 y otra más en el 2022; no obstante, se recuperarán para el 2023. Esto es un gran insight para FORM, quienes necesitarán prepararse contra dicha posible caída.

aa<-externa2$Sales

a1 <- ts(data = aa, start = c(2000,1), frequency = 1)

modelo <- auto.arima(a1)
modelo
## Series: a1 
## ARIMA(2,0,0) with non-zero mean 
## 
## Coefficients:
##          ar1      ar2        mean
##       1.3765  -0.6472  12508.0697
## s.e.  0.1735   0.1726    659.0895
## 
## sigma^2 = 788664:  log likelihood = -171.89
## AIC=351.78   AICc=354.28   BIC=355.96
mer2 <- forecast(modelo, level=c(95), h=3)
mer2
##      Point Forecast    Lo 95    Hi 95
## 2021       10462.10 8721.521 12202.68
## 2022       10298.15 7336.768 13259.53
## 2023       10790.23 7118.057 14462.40
plot(mer2)

México

La base de datos externa muestra una visualización de las ventas de autos en México durante los últimos años , la cual fue proporcionada por INEGI y se utilizará para realizar pronósticos a futuro sobre la misma.

Importar base de datos

externaMex2 <- read.csv("/Users/Karen/Downloads/Evidencia 2 FORM/Pron Mexico.csv")

Gráficos

Scar plot

En la siguiente gráfica es posible observar la cantidad de autos vendidos en Mexico a lo largo del periodo de tiempo de 2005 a 2021, observando que hubo una gran caída durante el 2012, no obstante, una recuperación evidente para los siguientes años.

Ventas <- data.frame(externaMex2$Ventas, externaMex2$Año)
colnames(Ventas)<-c('Ventas','Año')

ggplot(data = Ventas, aes (x=Año, y=Ventas)) +
  geom_point(stat = "identity", col="orange") + scale_fill_grey() + 
  labs(title = "Ventas de autos en Mexico", 
        y="Autos")

Pronósticos

Con el pronóstico realizado, podemos ver que las ventas de autos en México mantendrán una tendencia estable a lo largo de los próximos 3 periodos, siendo en este caso 2022, 2023 y 2024; por lo que FORM deberá preparse ante dicho posibilidad e incursionar en la industria.

mm<-externaMex2$Ventas

m1 <- ts(data = mm, start = c(2005,1), frequency = 1)

modelo3 <- auto.arima(m1)
modelo3
## Series: m1 
## ARIMA(0,1,0) 
## 
## sigma^2 = 110147:  log likelihood = -115.58
## AIC=233.16   AICc=233.44   BIC=233.93
m2 <- forecast(modelo3, level=c(95), h=3)
m2
##      Point Forecast    Lo 95    Hi 95
## 2022           5387 4736.518 6037.482
## 2023           5387 4467.080 6306.920
## 2024           5387 4260.333 6513.667
plot(m2)

Interna Pronósticos

Merma

La base de datos interna fue la de merma (Pérdida de material que experimentan las existencias “stock”), en donde se utilizó para visualizar pronósticos sobre la producción de la misma.

Importar base de datos

merma1 <- read.csv ("/Users/Karen/Downloads/Evidencia 2 FORM/FORM - Merma_pronostico.csv")

Pronósticos

Con un 95% de confiabilidad, para los siguientes 3 meses se pronóstica una merma de 20602 kilos y gracias a esto, podemos anticipar la carga que se va a tener en el futuro e ir implementando nuevas maneras de desechar o reutilizar la merma. La merma mínima que se tiene pronósticada es de 9770.71 kg. y la máxima de 31435 kg.

merma2 <- merma1$Kilos

mer1 <- ts(data = merma2, start = c(1), frequency = 1) 

modelo1 <- auto.arima(mer1) 
modelo1
## Series: mer1 
## ARIMA(0,0,0) with non-zero mean 
## 
## Coefficients:
##            mean
##       20602.889
## s.e.   1736.893
## 
## sigma^2 = 30544665:  log likelihood = -89.8
## AIC=183.59   AICc=185.59   BIC=183.99
mer2 <- forecast(modelo1, level=c(95), h=3) 
mer2 
##    Point Forecast    Lo 95    Hi 95
## 10       20602.89 9770.711 31435.07
## 11       20602.89 9770.711 31435.07
## 12       20602.89 9770.711 31435.07
plot(mer2)

Scrap

La base de datos interna fue la de scrap (Sobrantes de la fabricación y consumo de materiales), en donde se utilizó para visualizar pronósticos sobre la producción del mismo.

Importar base de datos

scrap <- read.csv ("/Users/Karen/Downloads/Evidencia 2 FORM/Scrap_limpia.csv")

Pronósticos

Con un 95% de confiabilidad, para los siguientes 3 meses se pronóstica un scrap de 64.42 y gracias a esto, se puede anticipar la carga que se va a tener en el futuro e implementar maneras de desechar o reutilizar el scrap. El scrap máxima pronósticado es de 173.82

scrap2 <- scrap$Cantidad

scra1 <- ts(data = scrap2, start = c(1), frequency = 1) 

modelo2 <- auto.arima(scra1) 
modelo2
## Series: scra1 
## ARIMA(0,0,0) with non-zero mean 
## 
## Coefficients:
##          mean
##       64.4231
## s.e.  10.7347
## 
## sigma^2 = 3116:  log likelihood = -140.96
## AIC=285.92   AICc=286.44   BIC=288.43
scra2 <- forecast(modelo2, level=c(95), h=3) 
scra2 
##    Point Forecast     Lo 95    Hi 95
## 27       64.42308 -44.98319 173.8293
## 28       64.42308 -44.98319 173.8293
## 29       64.42308 -44.98319 173.8293
plot(scra2)

RH K Means Clusters

Con la finalidad de crear agrupaciones entre las diversas variables y características del personal de FORM, se volvió a utilizar la base de datos de Recursos Humanos para analizar más a profundidad.

Importar base de datos

rhk <- read.csv("/Users/Karen/Downloads/Evidencia 2 FORM/rh_limpia.csv")

K Means Clustering

Cluster 1: Edad y Número de días laborados

Con la finalidad de conocer agrupaciones en la base de datos, se realizó un diagrama de clusters con las variables de edad y número de dias laborados, que indicara si existe alguna relación entre los diversos grupos de edades y el tiempo que pasan en la empresa laborando.

Normalizar Variables

rh_edad_dias <-rhk %>% dplyr::select(salario_diario_imss, edad, dias_laborados)
rh_edad_dias_norm<-scale(rh_edad_dias[2:3]) 
plot(rh_edad_dias_norm)

Número óptimo de clústers con “Elbow Plot”

Se determinó que el número óptimo es de 4 clusters.

fviz_nbclust(rh_edad_dias_norm, kmeans, method="wss")+ 
  geom_vline(xintercept=4, linetype=2)+           
  labs(subtitle = "Elbow method") 

Visualizar Clusters

cluster1 <-kmeans(rh_edad_dias_norm,4)
cluster1
## K-means clustering with 4 clusters of sizes 45, 4, 71, 113
## 
## Cluster means:
##         edad dias_laborados
## 1  1.5885436    -0.07684236
## 2  1.0544820     6.64464404
## 3  0.2310791    -0.15505073
## 4 -0.8151239    -0.10718644
## 
## Clustering vector:
##   [1] 3 3 4 4 3 1 3 3 1 4 4 3 4 3 3 4 4 4 4 4 3 2 4 3 1 4 3 4 4 4 3 4 4 4 3 4 4
##  [38] 4 3 4 4 3 4 4 4 4 4 4 1 1 1 2 4 1 4 4 1 4 4 4 4 4 3 4 4 1 4 1 4 4 4 4 3 4
##  [75] 3 4 1 4 4 1 2 4 1 4 4 4 1 4 4 4 3 1 1 4 4 4 1 3 4 3 4 4 1 3 4 4 3 2 3 4 3
## [112] 3 4 3 3 3 1 1 1 4 4 4 4 4 3 4 3 1 4 3 4 1 4 4 4 3 1 3 1 3 3 1 1 1 4 3 3 3
## [149] 4 4 4 3 1 1 4 3 4 3 1 1 1 1 3 1 4 4 3 4 4 1 3 1 4 1 3 3 1 3 3 4 4 4 3 1 3
## [186] 3 4 4 3 3 3 3 3 3 4 3 3 3 3 4 3 1 3 4 4 4 1 4 4 4 3 3 4 4 3 3 3 1 4 4 3 4
## [223] 4 4 4 1 3 1 4 4 4 4 4
## 
## Within cluster sum of squares by cluster:
## [1] 21.32481 15.79917 26.09657 24.02802
##  (between_SS / total_SS =  81.2 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"

Interpretación:

En el siguiente diagrama de clusters, se puede visualizar que los clusters 1, 3 y 4 tienen una clasificación de edad distinta pero con un promedio similar de dias laborados. Mientras que el cluster 2 agrupa una gran variedad de edades pero con un mayor numero de dias laborados. Por lo que se concluye que los días laborados no tienen tanta relación con la edad.

fviz_cluster(cluster1,data=rh_edad_dias_norm)

Cluster 2: Edad y Salario Diario

Con la finalidad de conocer otras agrupaciones en la base de datos, se realizó otro diagrama de clusters pero ahora con las variables de edad y salario diario, que indicara si existe alguna relación entre los diversos grupos de edades y el salario que ganan cada uno de ellos al laborar en FORM.

Normalizar Variables

rh_edad_sal <-rhk %>% dplyr::select(salario_diario_imss, edad, dias_laborados)
rh_edad_sal_norm<-scale(rh_edad_dias[1:2]) 
plot(rh_edad_sal_norm)

Número óptimo de clústers con “Elbow Plot”

Se determinó que el número óptimo es de 4 clusters.

fviz_nbclust(rh_edad_sal_norm, kmeans, method="wss")+ 
  geom_vline(xintercept=4, linetype=2)+           
  labs(subtitle = "Elbow method")  

Visualizar Clusters

cluster2 <-kmeans(rh_edad_sal_norm,4)
cluster2
## K-means clustering with 4 clusters of sizes 1, 45, 72, 115
## 
## Cluster means:
##   salario_diario_imss        edad
## 1         13.75965225  0.09524497
## 2         -0.05824059  1.65998230
## 3         -0.04467034  0.25223721
## 4         -0.06889184 -0.80830894
## 
## Clustering vector:
##   [1] 1 3 4 4 3 2 3 3 2 4 4 3 4 3 3 4 4 4 4 4 3 2 4 3 2 4 3 4 4 4 3 4 4 4 3 4 4
##  [38] 4 3 4 4 3 4 4 4 4 4 4 2 2 2 2 4 2 4 4 2 4 4 4 4 4 3 4 4 2 4 2 4 4 4 4 3 4
##  [75] 3 4 3 4 4 2 4 4 2 4 4 4 2 4 4 4 3 2 2 4 4 4 2 3 4 3 4 4 2 3 4 4 3 4 3 4 3
## [112] 3 4 3 3 3 2 2 2 4 4 4 4 4 3 4 3 2 4 3 4 2 4 4 4 3 2 3 2 3 3 3 2 2 4 3 3 3
## [149] 4 4 4 3 2 2 4 3 4 3 2 2 2 2 3 2 4 4 3 4 4 2 3 2 4 2 3 3 2 3 3 4 4 4 3 2 3
## [186] 3 4 4 3 3 3 3 3 3 4 3 3 3 3 4 3 2 3 4 4 4 2 4 4 4 3 3 4 4 3 3 3 2 4 4 3 4
## [223] 4 4 4 2 3 2 4 4 4 4 4
## 
## Within cluster sum of squares by cluster:
## [1]  0.00000 18.37962 20.23847 31.48566
##  (between_SS / total_SS =  84.9 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"

Interpretación:

En el siguiente diagrama de clusters, se puede visualizar que la mayoría tiene un salario similar con edades diferentes, esto a excepción del cluster 1 (solo es un dato), lo cual indica que hay alguien que gana más que los demás colaboradores y con una edad relativamente joven, pudiendose inferir del dueño de la empresa.

fviz_cluster(cluster2,data=rh_edad_sal_norm)

Creación de segmentos

Usando el cluster 1: Edad y Dias laborados

# Incluir columna que indique el cluster de cada registro
rh3 <- rhk
rh3$Clusters<-cluster1$cluster

# visualizar la máxima edad de cada cluster
rh4 <- rh3 %>% group_by(Clusters) %>% summarise(edad=max(edad)) %>% arrange(desc(edad))

# Nombrar cada cluster 
rh3$nombres_clusters <- factor(rh3$Clusters,levels = c(1,2,3,4), 
                              labels=c("Jubilados", "Mayores", "Adultos", "Jovenes"))

# Agrupar los datos por nombre de clusters 
rh5 <- rh3 %>% group_by(nombres_clusters) %>% summarise(edad_años=max(edad), 
                                                             dias_lab=mean(dias_laborados),
                                                             Count=n())

clusters<-as.data.frame(rh5)
clusters
##   nombres_clusters edad_años   dias_lab Count
## 1        Jubilados        57   56.11111    45
## 2          Mayores        61 1509.75000     4
## 3          Adultos        39   39.19718    71
## 4          Jovenes        28   49.54867   113

Gráficos complementarios

Gráfico por nombre de cluster

Los jóvenes son los que representan más número de bajas, y se visualiza que el orden de número de bajas esta en el mismo orden de edad, esto significa que después de los jóvenes, los adultos son el grupo que más representa bajas. En conclusión, la edad puede ser un factor importante en el número de bajas.

ggplot(rh5,aes(x=reorder(nombres_clusters,Count),y=Count,fill=nombres_clusters)) +
  geom_bar(stat="identity")

Género de ex-colaboradores

En la gráfica se aprecia un número alto de género masculino en todos los grupos de edades que solían ser colaboradores de FORM. En Jubilados, se observan mas mujeres que hombres.

ggplot(rh3, aes(fill=genero, y=genero, x=nombres_clusters)) + 
  geom_bar(position="stack", stat="identity") 

Motivo de baja de ex-colaboradores

Se puede observar que el mayor motivo de baja en todos los grupos de edades es la baja por faltas, seguido de renuncia voluntaria. En jóvenes se puede observar que hay baja por abandono, mientras que en los otros clusters no hubo ninguna baja por abandono.

ggplot(rh3, aes(factor(nombres_clusters), fill = factor(motivo_de_baja))) +
  geom_bar(position = position_dodge2(preserve = "single"))

Asociaciones entre variables

Con la finalidad de visualizar una mayor asociación entre variables cuantitivas y cualitativas, se realizaron diagramas que permitieran visualizar estas relaciones, y observar el comportamiento de las características de los empleados de FORM.

Días laborados por Género y Estado Civil

En la siguiente gráfica se puede interpretar que las personas que han laborado más días se encuentran casados, mientras que los que han laborado menos días, se encuentran solteros y son jóvenes en su mayoría. Cabe destacar también, que quiénes más han trabajado son el grupo de jubilados y mujeres.

rh4<-rh3 %>% filter(Clusters==1 |Clusters==2 | Clusters==3 |Clusters==4) %>% arrange(Clusters)
ggplot(as.data.frame(rh4),
       aes(y=dias_laborados, axis1=genero, axis2=estado_civil)) +
  geom_alluvium(aes(fill=nombres_clusters), width = 1/12) +
  geom_stratum(width = 1/12, fill = "black", color = "grey") +
  geom_label(stat = "stratum", aes(label = after_stat(stratum))) +
  scale_x_discrete(limits = c("Genero", "Estado civil"), expand = c(.05, .05)) +
  scale_fill_brewer(type = "qual", palette = "Set2")

Días laborados por Género y Puesto

En la siguiente gráfica, es posible visualizar que los puestos con mas días laborados son los de analistas y ayudantes, mientras que los puestos de servicio al cliente son los de menos días laborados.

rh4<-rh3 %>% filter(Clusters==2 | Clusters==4) %>% arrange(Clusters)
ggplot(as.data.frame(rh4),
       aes(y=dias_laborados, axis1=genero, axis2=puesto)) +
  geom_alluvium(aes(fill=nombres_clusters), width = 1/12) +
  geom_stratum(width = 1/12, fill = "black", color = "grey") +
  geom_label(stat = "stratum", aes(label = after_stat(stratum))) +
  scale_x_discrete(limits = c("Genero", "Puesto"), expand = c(.05, .05)) +
  scale_fill_brewer(type = "qual", palette = "Set2") 

Resultados y Sugerencias

Meaningful insights

  • Las mujeres jóvenes adultas solteras son la fuerza de FORM. La edad de los empleados oscila entre los 20-40 años, siendo mujeres solteras las que tienen mayor participación; no obstante, los hombres tienen mayor antiguedad. La mayoría tiene un salario similar aunque tengan edades diferentes, el salario con mayor frecuencia es de $180.68. Los días laborados no tienen tanta relación con la edad; sin embargo, la edad puede ser un factor importante en el número de bajas; el mayor motivo de baja en todas las edades es la baja por faltas, seguido de renuncia voluntaria.

  • La mitad del año es un periodo crucial para la programación de piezas. El mes con mayor numero de piezas programadas fué Julio del 2021. Durante el primer Q del siguiente año (2022) es cuando existe mayor demanda para FORM en contexto de piezas programadas, pudiéndose inferir el periodo de tiempo necesario para la salida/ entrega de piezas.

  • La planeación de pedidos es mayor a la real. Las llegadas reales son menores a las planeadas, por lo que FORM deberá evaluar su desempeño; no obstante, la diferencia entre las llegadas y salidas de los pedidos suelen mantener un control estándar. MAHLE es el cliente para el que FORM realiza mas pedidos, con un promedio de llegadas de 8, y vueltas de logística de 2. Para evitar depender de solo 1 o 2 clientes, FORM debería realizar una mayor distribución de los pedidos con otros clientes.

  • El proceso de laminas afecta la programación de piezas. En cuanto menos piezas programadas, más laminas procesadas, y viceversa, por lo que, es importante considerar que tipo de material/ producto es más importante para FORM. La empresa mantiene una estabilidad en hacer un intervalo pequeño de laminas procesadas para mantener un tiempo en minutos bajo. El cliente STABILUS 1 es al que mayor surtido en producción de laminas le suministran.

  • Durante el 2022 se ha producido grandes perdidas de material (merma) En Agosto del 2022 fue el mes con mayor merma; no obstante, en Mayo’22 también hubo una carga grande, aunque con menores cantidades a nivel total. El mes con menos merma fue Septiembre ´22, pero como todavía no había concluido el mes, podemos decir que Enero’22 fue el mes con menos merma. Con un 95% de confiabilidad, para el 4Q del 2022, se pronóstica una merma de 20602 kilos y con esto, se puede anticipar la carga e ir implementando nuevas maneras de desechar o reutilizar la merma. La merma mínima que se tiene pronósticada es de 9770.71 kg. y la máxima de 31435 kg.

  • “SAB Pre produccion” es el area donde mayor scrap se produce. La mayoría de los pedidos están en pre-producción; los pedidos con más de 25 unidades siempre están en pre-producción, mientras que los pedidos de Post producción y entrega de PT están en órdenes menores de 25 unidades. La mayor cantidad de scrap en la semana del 22 al 29 de Agosto de 2022. Con un 95% de confiabilidad, para el 4Q de 2022, se pronóstica un scrap de 64.42 y gracias a esto, se puede anticipar la carga que se va a tener en el futuro e implementar maneras de desechar o reutilizar el scrap. El scrap máximo pronósticado es de 173.82.

  • La fabricación de autopartes infiere en la producción de autos en USA. Durante el año 2009, se observa una notaria baja en producción debido a la crisis económica de ese mismo año en USA. Con un modelo R2 de 0.98, la fabricación de autopartes es la variable que mayor signficancia tiene con una tendencia positiva en la producción de autos en USA, por lo que, mientras mayor fabricación de autopartes haya, mayor producción de autos. Con un 95% de confiabilidad, las ventas de autos en USA tendrán una caída en el 2021 y otra más en el 2022; no obstante, se recuperarán para el 2023.

  • Las exportaciones tienen cierta inferencia en la producción de autos en México. La producción de autos en México ha ido en constante crecimiento desde el 2005. La variable con mayor signficancia para la producción de autos son las exportaciones, explicado en un modelo con R2 de 0.81. Por lo que, mientras mayores exportaciones hayan, mayor producción de autos; no obstante, es importante recordar que la confiabilidad del modelo no es tan alta. Con un 95% de confiabilidad, las ventas de autos en México mantendrán una tendencia estable a lo largo de los proximos 3 periodos, siendo en este caso 2022, 2023 y 2024; por lo que FORM deberá preparse ante dicho posibilidad e incursionar en la industria.

Sugerencias a FORM

  1. Diseñar un programa de mejora de ambiente laboral y crecimiento contuvo que les permita a los colaboradores conocer sus habilidades y mantenerse con motivación todos los días para perfeccionar su rendimiento y evitar las bajas en la empresa.

  2. Perfeccionar los planes de Delivery con la finalidad de construir bases mucho mas limpias que permitan un correcto funcionamiento del área y una mayor distribución para los clientes, estimando mejores tiempo de llegada de pedidos, y evitando retrocesos o perdidas en el proceso.

  3. Designar un área de reutilización/ reciclaje, con la finalidad de acumular toda la merma y el scrap producido durante los mese del año y lograr un aprovechamiento al 100% de la materia prima, pudiendo elaborar nuevos materiales o simplemente suministrando una mejora de contribución ecológica al planeta.

Preguntas

Business Analytics y Business Intelligence

Business Analytics es un enfoque de análisis de datos que se concentra en datos históricos para comprender el desempeño de una empresa; mientras que Business Intelligence son las estrategias y herramientas que sirven para transformacionales datos en conocimiento, y facilitan la toma de decisiones en una empresa.

Las principales diferencias entre ambas son:

  • Analytics analiza datos estructurados del futuro, mientras que Intelligence se enfoca en el pasado.
  • Analytics estudia indicadores macroeconómicos, mientras que Intelligence estudia estadísticas internas.
  • Analytics trabaja para no cometer errores pasados, mientras que Intelligence alcance datos en un servidor central.

Key Performance Indicators (KPI)

Un KPI es un indicador que permite medir si una acción o conjunto de iniciativas están logrando sus objetivos, por lo que es sumamente importante mantenerlos en la empresa para visualizar el desempeño y la mejora continua.

3 posibles KPIs

  • Rendimiento operativo = Cantidad de unidades producidas / Tiempo (horas o días)

  • Demanda prevista de los clientes = Materias primas * Ritmo de producción

  • Rotación de empleados = [(Número de bajas en N + número de contrataciones en N) / 2] / empleados el 1 de enero NX 100

Referencias

Bureau of Transportation Statistics. (2021). Recuperado el 22 de Octubre de 2022, de: https://www.bts.gov/

Banco Mundial. (2022). Recuperado el 22 de Octubre de 2022, de: https://datos.bancomundial.org/

Euromonitor Internacional. (2022). Recuperado el 22 de Octubre de 2022, de: https://www.euromonitor.com/our-expertise/passport

Frost, J. (2022). What is K means clustering? with an example. Statistics By Jim. Recuperado el 22 de Octubre de: https://statisticsbyjim.com/basics/k-means-clustering/#

INEGI. (2022). Registro administrativo de la industria automotriz de vehículos ligeros. Recuperado el 22 de Octubre de 2022, de: https://www.inegi.org.mx/datosprimarios/iavl/#Tabulados

IBM. (2022). Business Analytics. Recuperado el 22 de Octubre de 2022, de: https://www.ibm.com/mx-es/analytics/business-analytics