{r setup, include=FALSE} eval = FALSE knitr::opts_chunk$set(echo = TRUE)
En todas las industrias la rotación de personal se evidencia más en unas áreas que en otras, dicho eso con este análisis vamos a realizar diferentes hipótesis y validar cuales son las características que afectan más dicha rotación.
Seleccionar 3 variables categóricas (distintas de rotación) y 3 variables cuantitativas, que consideren estén relacionadas con la rotación. Nota: Justificar por qué estas variables están relacionadas y que tipo de relación se espera (Hipótesis). Ejemplo: Se espera que las horas extra se relacionen con la rotación ya que las personas podrían desgastarse más al trabajar horas extra y descuidan aspectos personales. La hipótesis es que las personas que trabajan horas extra tienen mayor posibilidad de rotar que las que no trabajan extra. (serian 6, una por variable)
Una vez sabiendo el contexto y el alcance que se piensa alcanzar se escogieron las siguientes variables:
Variables Categóricas:
Hipótesis 1: Departamento, posiblemente el departamento IyD tiene una mayor deserción en el trabajo por la alta tasa de demanda en el mercado por falta de personal capacitado en el área.
Hipótesis 2: Campo_Educación, actualmente no todas las áreas se ven afectadas con la rotación de personal, por ende, se espera poder responder o evidenciar que las personas que están relacionadas con temas de tecnología tienen a tener una mayor rotación.
Hipótesis 3: Cargo, se pretende demostrar que las personas que se encuentran en determinado cargo tengan mayor probabilidad de rotar por una sobre carga laboral
Variables numéricas:
Hipótesis 1: Satisfación_Laboral, se cree que tenga una relación con la deserción, ya que cuando las personas les gusta su trabajo probablemente duren más en la organización y no busque otras ofertas por fuera de la organización.
Hipótesis 2: Ingreso_mensual, Se espera que el ingreso mensual esté relacionado con la rotación de personal, ya que si el colaborador cuenta con una baja remuneración buscara una mejor oferta salarial por fuera de la empresa
Hipótesis 3: Equilibrio_Trabajo_Vida, creo que es una variable importante ya que como dicen no todo es trabajo y esto nos podría ayudar a identificar la posible rotación.
Iniciamos realizando el cargue de los datos y la validacion
library(readxl)
datos=read_excel("C:/Users/icm2363a/Documents/R/Datos_Rotacion.xlsx")
head(datos)
## # A tibble: 6 x 24
## Rotación Edad `Viaje de Negocios` Departamento Distancia_Casa Educación
## <chr> <dbl> <chr> <chr> <dbl> <dbl>
## 1 Si 41 Raramente Ventas 1 2
## 2 No 49 Frecuentemente IyD 8 1
## 3 Si 37 Raramente IyD 2 2
## 4 No 33 Frecuentemente IyD 3 4
## 5 No 27 Raramente IyD 2 1
## 6 No 32 Frecuentemente IyD 2 2
## # ... with 18 more variables: Campo_Educación <chr>,
## # Satisfacción_Ambiental <dbl>, Genero <chr>, Cargo <chr>,
## # Satisfación_Laboral <dbl>, Estado_Civil <chr>, Ingreso_Mensual <dbl>,
## # Trabajos_Anteriores <dbl>, Horas_Extra <chr>,
## # Porcentaje_aumento_salarial <dbl>, Rendimiento_Laboral <dbl>,
## # Años_Experiencia <dbl>, Capacitaciones <dbl>,
## # Equilibrio_Trabajo_Vida <dbl>, Antigüedad <dbl>, ...
length(datos)
## [1] 24
typeof(datos)
## [1] "list"
nrow(datos)
## [1] 1470
ncol(datos)
## [1] 24
dim(datos)
## [1] 1470 24
colnames(datos)
## [1] "Rotación" "Edad"
## [3] "Viaje de Negocios" "Departamento"
## [5] "Distancia_Casa" "Educación"
## [7] "Campo_Educación" "Satisfacción_Ambiental"
## [9] "Genero" "Cargo"
## [11] "Satisfación_Laboral" "Estado_Civil"
## [13] "Ingreso_Mensual" "Trabajos_Anteriores"
## [15] "Horas_Extra" "Porcentaje_aumento_salarial"
## [17] "Rendimiento_Laboral" "Años_Experiencia"
## [19] "Capacitaciones" "Equilibrio_Trabajo_Vida"
## [21] "Antigüedad" "Antigüedad_Cargo"
## [23] "Años_ultima_promoción" "Años_acargo_con_mismo_jefe"
summary(datos)
## Rotación Edad Viaje de Negocios Departamento
## Length:1470 Min. :18.00 Length:1470 Length:1470
## Class :character 1st Qu.:30.00 Class :character Class :character
## Mode :character Median :36.00 Mode :character Mode :character
## Mean :36.92
## 3rd Qu.:43.00
## Max. :60.00
## Distancia_Casa Educación Campo_Educación Satisfacción_Ambiental
## Min. : 1.000 Min. :1.000 Length:1470 Min. :1.000
## 1st Qu.: 2.000 1st Qu.:2.000 Class :character 1st Qu.:2.000
## Median : 7.000 Median :3.000 Mode :character Median :3.000
## Mean : 9.193 Mean :2.913 Mean :2.722
## 3rd Qu.:14.000 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :29.000 Max. :5.000 Max. :4.000
## Genero Cargo Satisfación_Laboral Estado_Civil
## Length:1470 Length:1470 Min. :1.000 Length:1470
## Class :character Class :character 1st Qu.:2.000 Class :character
## Mode :character Mode :character Median :3.000 Mode :character
## Mean :2.729
## 3rd Qu.:4.000
## Max. :4.000
## Ingreso_Mensual Trabajos_Anteriores Horas_Extra
## Min. : 1009 Min. :0.000 Length:1470
## 1st Qu.: 2911 1st Qu.:1.000 Class :character
## Median : 4919 Median :2.000 Mode :character
## Mean : 6503 Mean :2.693
## 3rd Qu.: 8379 3rd Qu.:4.000
## Max. :19999 Max. :9.000
## Porcentaje_aumento_salarial Rendimiento_Laboral Años_Experiencia
## Min. :11.00 Min. :3.000 Min. : 0.00
## 1st Qu.:12.00 1st Qu.:3.000 1st Qu.: 6.00
## Median :14.00 Median :3.000 Median :10.00
## Mean :15.21 Mean :3.154 Mean :11.28
## 3rd Qu.:18.00 3rd Qu.:3.000 3rd Qu.:15.00
## Max. :25.00 Max. :4.000 Max. :40.00
## Capacitaciones Equilibrio_Trabajo_Vida Antigüedad Antigüedad_Cargo
## Min. :0.000 Min. :1.000 Min. : 0.000 Min. : 0.000
## 1st Qu.:2.000 1st Qu.:2.000 1st Qu.: 3.000 1st Qu.: 2.000
## Median :3.000 Median :3.000 Median : 5.000 Median : 3.000
## Mean :2.799 Mean :2.761 Mean : 7.008 Mean : 4.229
## 3rd Qu.:3.000 3rd Qu.:3.000 3rd Qu.: 9.000 3rd Qu.: 7.000
## Max. :6.000 Max. :4.000 Max. :40.000 Max. :18.000
## Años_ultima_promoción Años_acargo_con_mismo_jefe
## Min. : 0.000 Min. : 0.000
## 1st Qu.: 0.000 1st Qu.: 2.000
## Median : 1.000 Median : 3.000
## Mean : 2.188 Mean : 4.123
## 3rd Qu.: 3.000 3rd Qu.: 7.000
## Max. :15.000 Max. :17.000
library(forecast)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(reshape2)
library(stats)
library(ggplot2)
library(ggthemes)
library(ggrepel)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(reticulate)
library(plotly)
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
library(ggpubr)
##
## Attaching package: 'ggpubr'
## The following object is masked from 'package:forecast':
##
## gghistogram
library(readxl)
dataset_final=datos[, c("Rotación", "Departamento","Campo_Educación","Cargo","Satisfación_Laboral","Ingreso_Mensual","Equilibrio_Trabajo_Vida")]
dataset_final
## # A tibble: 1,470 x 7
## Rotación Departamento Campo_Educación Cargo Satisfación_Lab~ Ingreso_Mensual
## <chr> <chr> <chr> <chr> <dbl> <dbl>
## 1 Si Ventas Ciencias Ejecu~ 4 5993
## 2 No IyD Ciencias Inves~ 2 5130
## 3 Si IyD Otra Tecni~ 3 2090
## 4 No IyD Ciencias Inves~ 3 2909
## 5 No IyD Salud Tecni~ 2 3468
## 6 No IyD Ciencias Tecni~ 4 3068
## 7 No IyD Salud Tecni~ 1 2670
## 8 No IyD Ciencias Tecni~ 3 2693
## 9 No IyD Ciencias Direc~ 3 9526
## 10 No IyD Salud Repre~ 3 5237
## # ... with 1,460 more rows, and 1 more variable: Equilibrio_Trabajo_Vida <dbl>
g1= ggplot (dataset_final, aes (x=Departamento)) +geom_bar () +theme_bw ()
g2= ggplot (dataset_final, aes (x=Campo_Educación)) +geom_bar () +theme_bw ()
g3= ggplot (dataset_final, aes (y=Cargo)) +geom_bar () +theme_bw ()
theme(axis.text.x = element_text(angle = 90))
## List of 1
## $ axis.text.x:List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : NULL
## ..$ vjust : NULL
## ..$ angle : num 90
## ..$ lineheight : NULL
## ..$ margin : NULL
## ..$ debug : NULL
## ..$ inherit.blank: logi FALSE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## - attr(*, "class")= chr [1:2] "theme" "gg"
## - attr(*, "complete")= logi FALSE
## - attr(*, "validate")= logi TRUE
ggarrange(g1, g2, g3,labels = c ("A", "B", "C"),ncol = 1, nrow = 3)
Se observa que el 65% del departamento pertenece a IyD y en los campos de educacion donde se observa la mayor cantidad es en Ciencia y Salud y a nivel de Cargo estan el director de manofactura, investigador cientifico y tecnico laboratorio
g4=ggplot(dataset_final,aes(x=Satisfación_Laboral))+geom_bar()+theme_bw()
ggplotly(g4)
g5= ggplot (dataset_final, aes(y=Ingreso_Mensual)) +geom_histogram () +theme_bw ()
g6= ggplot (dataset_final, aes(x=Equilibrio_Trabajo_Vida)) +geom_bar () +theme_bw ()
ggarrange(g4, g5, g6,labels = c ("A", "B", "C"),ncol = 2, nrow = 1)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## $`1`
##
## $`2`
##
## attr(,"class")
## [1] "list" "ggarrange"
Se evidencia que la gran mayoria tiene valores entre 3 y 4 en la satisfaccion laboral y cuentan con un buen equilibrio en el tema trabajo vida
g4=ggplot(dataset_final,aes(x=Rotación,y=Satisfación_Laboral,fill=Rotación))+geom_boxplot()+theme_bw()
g5=ggplot(dataset_final,aes(x=Rotación,y=Ingreso_Mensual,fill=Rotación))+geom_boxplot()+theme_bw()
g6=ggplot(dataset_final,aes(x=Rotación,y=Equilibrio_Trabajo_Vida,fill=Rotación))+geom_boxplot()+theme_bw()
ggarrange(g4, g5, g6,labels = c ("A", "B", "C"),ncol = 2, nrow = 1)
## $`1`
##
## $`2`
##
## attr(,"class")
## [1] "list" "ggarrange"
## Loading required package: CGPfunctions
## Warning in geom2trace.default(dots[[1L]][[1L]], dots[[2L]][[1L]], dots[[3L]][[1L]]): geom_GeomLabel() has yet to be implemented in plotly.
## If you'd like to see this geom implemented,
## Please open an issue with your example code at
## https://github.com/ropensci/plotly/issues
## Warning in geom2trace.default(dots[[1L]][[1L]], dots[[2L]][[1L]], dots[[3L]][[1L]]): geom_GeomLabel() has yet to be implemented in plotly.
## If you'd like to see this geom implemented,
## Please open an issue with your example code at
## https://github.com/ropensci/plotly/issues
## Warning in geom2trace.default(dots[[1L]][[1L]], dots[[2L]][[1L]], dots[[3L]][[1L]]): geom_GeomLabel() has yet to be implemented in plotly.
## If you'd like to see this geom implemented,
## Please open an issue with your example code at
## https://github.com/ropensci/plotly/issues
## Warning in geom2trace.default(dots[[1L]][[1L]], dots[[2L]][[1L]], dots[[3L]][[1L]]): geom_GeomLabel() has yet to be implemented in plotly.
## If you'd like to see this geom implemented,
## Please open an issue with your example code at
## https://github.com/ropensci/plotly/issues
## Warning in geom2trace.default(dots[[1L]][[1L]], dots[[2L]][[1L]], dots[[3L]][[1L]]): geom_GeomLabel() has yet to be implemented in plotly.
## If you'd like to see this geom implemented,
## Please open an issue with your example code at
## https://github.com/ropensci/plotly/issues
Validando las gráficas se evidencia que las personas que más rotan son aquellas que no marcaron la satisfacción laboral en 4, lo cual nos advierte en este caso como un difractar para tomar decisiones a futuro sobre las personas que están colocando por debajo de 4, aunque es la gran mayoría se podrían empezar a perfilar mejor a las personas.
Por otro lado, se pudo identificar que las personas que más rotan son aquellas que tienen menos ingresos que está relacionado con la insatisfacción laboral y con respecto al trabajo vida no se evidencia alguna diferencia que me pueda ayudar a identificar a estas personas
Algo bien interesante que se puede evidenciar es que inicialmente se pensaba q los colaboradores que más rotaban eran los de IyD, pero realmente es el departamento de ventas.
se podría realizar un análisis más profundo donde se puede solo seleccionar a los usuarios del departamento de ventas y ver cuáles son las variables que más los impactan
A continuacion un analisis mas profundo sobre el departamento de ventas
Dataset_Ventas = filter(dataset_final, Departamento == "Ventas")
## Warning in geom2trace.default(dots[[1L]][[1L]], dots[[2L]][[1L]], dots[[3L]][[1L]]): geom_GeomLabel() has yet to be implemented in plotly.
## If you'd like to see this geom implemented,
## Please open an issue with your example code at
## https://github.com/ropensci/plotly/issues
## Warning in geom2trace.default(dots[[1L]][[1L]], dots[[2L]][[1L]], dots[[3L]][[1L]]): geom_GeomLabel() has yet to be implemented in plotly.
## If you'd like to see this geom implemented,
## Please open an issue with your example code at
## https://github.com/ropensci/plotly/issues
## Warning in geom2trace.default(dots[[1L]][[1L]], dots[[2L]][[1L]], dots[[3L]][[1L]]): geom_GeomLabel() has yet to be implemented in plotly.
## If you'd like to see this geom implemented,
## Please open an issue with your example code at
## https://github.com/ropensci/plotly/issues
## Warning in geom2trace.default(dots[[1L]][[1L]], dots[[2L]][[1L]], dots[[3L]][[1L]]): geom_GeomLabel() has yet to be implemented in plotly.
## If you'd like to see this geom implemented,
## Please open an issue with your example code at
## https://github.com/ropensci/plotly/issues
Se evidencia que, dentro del departamento de ventas, tienen a no tener una buena satisfacción laboral, adicional, pasa lo mismo con el equilibrio trabajo vida que nos puede indicar que estas personas estas en sobre esfuerzo.
En la parte de Campo de educación se observa que Técnicos y Otros repuntan en la deserción, sería bueno empezar a mirar que está pasando en este tipo de campo para poder tomar decisiones que ayuden a los colaboradores.
Por último, se conserva que, de todas estas conclusiones, la más fuerte es que 40% del cargo de representante de ventas tienden a la deserción lo cual es muy preocupante porque 4 de cada 10 personas se va a terminar yendo y esto impacta la operación en la parte de contrataciones y curva de aprendizaje que retrasa la operación.