Problema: Rotación de cargo

En una organización, se busca comprender y prever los factores que influyen en la rotación de empleados entre distintos cargos. La empresa ha recopilado datos históricos sobre el empleo de sus trabajadores, incluyendo variables como la antigüedad en el cargo actual, el nivel de satisfacción laboral, el salario actual, edad y otros factores relevantes. La gerencia planea desarrollar un modelo de regresión logística que permita estimar la probabilidad de que un empleado cambie de cargo en el próximo período y determinar cuales factores indicen en mayor proporción a estos cambios.

Con esta información, la empresa podrá tomar medidas proactivas para retener a su talento clave, identificar áreas de mejora en la gestión de recursos humanos y fomentar un ambiente laboral más estable y tranquilo. La predicción de la probabilidad de rotación de empleados ayudará a la empresa a tomar decisiones estratégicas informadas y a mantener un equipo de trabajo comprometido y satisfecho en sus roles actuales.

Base de datos y variables

library(readxl)
## Warning: package 'readxl' was built under R version 4.2.3
Rotacion <- read_excel("C:/Users/ediss/OneDrive/Documentos/Maestría/Semestre 2/Métodos Estadísticos/base_RLog.xlsx")
names(Rotacion)
##  [1] "Rotación"                    "Edad"                       
##  [3] "Distancia_Casa"              "Antigüedad"                 
##  [5] "Viaje_Negocios"              "Departamento"               
##  [7] "Educación"                   "Campo_Educación"            
##  [9] "Satisfacción_Ambiental"      "Genero"                     
## [11] "Cargo"                       "Satisfación_Laboral"        
## [13] "Estado_Civil"                "Ingreso_Mensual"            
## [15] "Trabajos_Anteriores"         "Horas_Extra"                
## [17] "Porcentaje_aumento_salarial" "Rendimiento_Laboral"        
## [19] "Años_Experiencia"            "Capacitaciones"             
## [21] "Equilibrio_Trabajo_Vida"     "Antigüedad_Cargo"           
## [23] "Años_ultima_promoción"       "Años_acargo_con_mismo_jefe"

Reconocimiento de las variables

summary(Rotacion)
##    Rotación              Edad       Distancia_Casa     Antigüedad    
##  Length:1470        Min.   :18.00   Min.   : 1.000   Min.   : 0.000  
##  Class :character   1st Qu.:30.00   1st Qu.: 2.000   1st Qu.: 3.000  
##  Mode  :character   Median :36.00   Median : 7.000   Median : 5.000  
##                     Mean   :36.92   Mean   : 9.193   Mean   : 7.008  
##                     3rd Qu.:43.00   3rd Qu.:14.000   3rd Qu.: 9.000  
##                     Max.   :60.00   Max.   :29.000   Max.   :40.000  
##  Viaje_Negocios     Departamento         Educación     Campo_Educación   
##  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.913                     
##                                        3rd Qu.:4.000                     
##                                        Max.   :5.000                     
##  Satisfacción_Ambiental    Genero             Cargo          
##  Min.   :1.000          Length:1470        Length:1470       
##  1st Qu.:2.000          Class :character   Class :character  
##  Median :3.000          Mode  :character   Mode  :character  
##  Mean   :2.722                                               
##  3rd Qu.:4.000                                               
##  Max.   :4.000                                               
##  Satisfación_Laboral Estado_Civil       Ingreso_Mensual Trabajos_Anteriores
##  Min.   :1.000       Length:1470        Min.   : 1009   Min.   :0.000      
##  1st Qu.:2.000       Class :character   1st Qu.: 2911   1st Qu.:1.000      
##  Median :3.000       Mode  :character   Median : 4919   Median :2.000      
##  Mean   :2.729                          Mean   : 6503   Mean   :2.693      
##  3rd Qu.:4.000                          3rd Qu.: 8379   3rd Qu.:4.000      
##  Max.   :4.000                          Max.   :19999   Max.   :9.000      
##  Horas_Extra        Porcentaje_aumento_salarial Rendimiento_Laboral
##  Length:1470        Min.   :11.00               Min.   :3.000      
##  Class :character   1st Qu.:12.00               1st Qu.:3.000      
##  Mode  :character   Median :14.00               Median :3.000      
##                     Mean   :15.21               Mean   :3.154      
##                     3rd Qu.:18.00               3rd Qu.:3.000      
##                     Max.   :25.00               Max.   :4.000      
##  Años_Experiencia Capacitaciones  Equilibrio_Trabajo_Vida Antigüedad_Cargo
##  Min.   : 0.00    Min.   :0.000   Min.   :1.000           Min.   : 0.000  
##  1st Qu.: 6.00    1st Qu.:2.000   1st Qu.:2.000           1st Qu.: 2.000  
##  Median :10.00    Median :3.000   Median :3.000           Median : 3.000  
##  Mean   :11.28    Mean   :2.799   Mean   :2.761           Mean   : 4.229  
##  3rd Qu.:15.00    3rd Qu.:3.000   3rd Qu.:3.000           3rd Qu.: 7.000  
##  Max.   :40.00    Max.   :6.000   Max.   :4.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
str(Rotacion)
## tibble [1,470 × 24] (S3: tbl_df/tbl/data.frame)
##  $ Rotación                   : chr [1:1470] "Si" "No" "Si" "No" ...
##  $ Edad                       : num [1:1470] 41 49 37 33 27 32 59 30 38 36 ...
##  $ Distancia_Casa             : num [1:1470] 1 8 2 3 2 2 3 24 23 27 ...
##  $ Antigüedad                 : num [1:1470] 6 10 0 8 2 7 1 1 9 7 ...
##  $ Viaje_Negocios             : chr [1:1470] "Raramente" "Frecuentemente" "Raramente" "Frecuentemente" ...
##  $ Departamento               : chr [1:1470] "Ventas" "IyD" "IyD" "IyD" ...
##  $ Educación                  : num [1:1470] 2 1 2 4 1 2 3 1 3 3 ...
##  $ Campo_Educación            : chr [1:1470] "Ciencias" "Ciencias" "Otra" "Ciencias" ...
##  $ Satisfacción_Ambiental     : num [1:1470] 2 3 4 4 1 4 3 4 4 3 ...
##  $ Genero                     : chr [1:1470] "F" "M" "M" "F" ...
##  $ Cargo                      : chr [1:1470] "Ejecutivo_Ventas" "Investigador_Cientifico" "Tecnico_Laboratorio" "Investigador_Cientifico" ...
##  $ Satisfación_Laboral        : num [1:1470] 4 2 3 3 2 4 1 3 3 3 ...
##  $ Estado_Civil               : chr [1:1470] "Soltero" "Casado" "Soltero" "Casado" ...
##  $ Ingreso_Mensual            : num [1:1470] 5993 5130 2090 2909 3468 ...
##  $ Trabajos_Anteriores        : num [1:1470] 8 1 6 1 9 0 4 1 0 6 ...
##  $ Horas_Extra                : chr [1:1470] "Si" "No" "Si" "Si" ...
##  $ Porcentaje_aumento_salarial: num [1:1470] 11 23 15 11 12 13 20 22 21 13 ...
##  $ Rendimiento_Laboral        : num [1:1470] 3 4 3 3 3 3 4 4 4 3 ...
##  $ Años_Experiencia           : num [1:1470] 8 10 7 8 6 8 12 1 10 17 ...
##  $ Capacitaciones             : num [1:1470] 0 3 3 3 3 2 3 2 2 3 ...
##  $ Equilibrio_Trabajo_Vida    : num [1:1470] 1 3 3 3 3 2 2 3 3 2 ...
##  $ Antigüedad_Cargo           : num [1:1470] 4 7 0 7 2 7 0 0 7 7 ...
##  $ Años_ultima_promoción      : num [1:1470] 0 1 0 3 2 3 0 0 1 7 ...
##  $ Años_acargo_con_mismo_jefe : num [1:1470] 5 7 0 0 2 6 0 0 8 7 ...

A continuación se describen los pasos que la gerencia ha propuesto para el análisis:

1. Selección de variables

Seleccione 3 variables categóricas (distintas de rotación) y 3 variables cuantitativas, que se consideren estén relacionadas con la rotación.

Respuesta

Variables Categóricas

1. Horas_Extra

Hipótesis: Se espera que los empleados que trabajan horas extras tengan una mayor probabilidad de rotación que las que no lo hacen debido a la necesidad de tener más tiempo para actividades fuera del trabajo

2. Estado_Civil

Hipótesis: Se espera que los empleados solteros o divorciados tengan una mayor probabilidad de rotación que los demás empleados con estado civil casados debido a la necesidad de estabilidad económica.

3. Viaje de Negocios

Hipótesis: Se espera que los empleados que tienen viajes de negocios tengan una mayor probabilidad de rotación que las que no lo hacen, debido a la necesidad de tener más tiempo para actividades fuera del trabajo

Variables Cuantitativas

1. Distancia del trabajo a la casa

Hipótesis: Se espera que el personal que esté más lejos del lugar de trabajo tenga mayor posibilidad de rotación puesto que, esto implicaría un esfuerzo mayor en tiempo que podría invertir en descanso u otras actividades personales.

2. Edad

Hipótesis: Se espera que a menor edad exista mayor rotación y a más edad y menos rotación.

3. Antigüedad_Cargo

Hipótesis: Se espera que en los empleados con mayor antigüedad exista mayor rotación a diferencia de los empleados con menor antigüedad exista menos rotación.

2. Análisis univariado

Realiza un análisis univariado (caracterización) de la información contenida en la base de datos rotacion.

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.2.3
library(ggpubr)
## Warning: package 'ggpubr' was built under R version 4.2.3
require(ggplot2)
require(ggpubr)
require(plotly)
## Loading required package: plotly
## Warning: package 'plotly' was built under R version 4.2.3
## 
## 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
g1 = ggplot(Rotacion, aes(x = Distancia_Casa)) + geom_histogram(fill="royalblue") + theme_gray()
g2 = ggplot(Rotacion, aes(x = Edad)) + geom_histogram(fill="royalblue") + theme_gray()
g3 = ggplot(Rotacion, aes(x = Antigüedad_Cargo)) + geom_histogram(fill="royalblue") + theme_gray()
g4 = ggplot(Rotacion, aes(x = Horas_Extra)) + geom_bar(fill="#0F8FA5") + theme_gray()
g5 = ggplot(Rotacion, aes(x = Estado_Civil)) + geom_bar(fill="#0F8FA5") + theme_gray()
g6 = ggplot(Rotacion, aes(x = Viaje_Negocios)) + geom_bar(fill="#0F8FA5") + theme_gray()

ggarrange(g1, g2, g3, g4, g5, g6, labels = c("A", "B", "C", "D", "E", "F"), ncol = 3, nrow = 2)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Respuesta

Como se observa en los graficos predominan empleados en edades entre los 25 y 45 años, con antigüedades menores a 10 años y que la distancia hasta casa es menor a 15. Estas distribuciones, de zonas claramente definidas en los graficos sugieren revisar su efecto en la rotación que pudiesen tener empleados de la empresa.Por otro lado se observan diferencias siendo más representativo el grupo de los casados, y quienes viajan raramente por temas de negocios y un gran porcentaje de quienes no generan horas extras.

3. Análisis bivariado

Realiza un análisis de bivariado en donde la variable respuesta sea rotacion codificada de la siguiente manera (y=1 es si rotación, y=0 es no rotación). Con base en estos resultados identifique cuales son las variables determinantes de la rotación e interpretar el signo del coeficiente estimado. Compare estos resultados con la hipotesis planteada en el punto 2.

library(ggplot2)

ggplot(Rotacion, aes(x = Horas_Extra, fill = Rotación)) + 
  geom_bar()

ggplot(Rotacion, aes(x = Estado_Civil, fill = Rotación)) + 
  geom_bar()

ggplot(Rotacion, aes(x = Viaje_Negocios, fill = Rotación)) + 
  geom_bar()

require(CGPfunctions)
## Loading required package: CGPfunctions
## Warning: package 'CGPfunctions' was built under R version 4.2.3
require(ggplot2)
require(ggpubr)
require(plotly)

ggplot(Rotacion,aes(x=Rotación,y=Distancia_Casa,fill=Rotación))+geom_boxplot()+theme_bw()

ggplot(Rotacion,aes(x=Rotación,y=Edad,fill=Rotación))+geom_boxplot()+theme_bw()

ggplot(Rotacion,aes(x=Rotación,y=Antigüedad_Cargo,fill=Rotación))+geom_boxplot()+theme_bw()

Respuesta

Horas Extra

En la gráfica se puede observar que el Aunque la cantidad de personas que realizan horas extras es menor, la relación de quienes rotan es superior frente a los que no realizan horas extra afirmando la hipótesis inicial

Estado Civil

Esta misma proporción es fácil de determinar al observar el análisis de estado civil en donde el mayor porcentaje de rotación se observa en los solteros y en menor medida en casados y divorciados

Viaje de Negocios

En la gráfica se puede observar que un gran porcentaje de los empleados que viajan frecuentemente rotaron de cargo y el 15% de los que lo hacen raramente rotaron, esto quiere decir que entre estos 1.320 empleados representa el 40% de la rotación de los empleados, frente al 8% de rotación de los empleados que no realiza viaje de negocios. Esto se comporta de acuerdo a la hipótesis inicial donde se postula que los empleados que viajan tienden mayor probabilidad de rotar de cargo.

Distancia a Casa

Se observa de igual manera que en la medida que aumenta la distancia entre el trabajo y la casa, aumenta también la probabilidad de rotación

Edad

En este grupo de datos se puede observar que en cuanto menos años tenga el trabajador es más propenso a la rotación

Antiguedad en el cargo

En este grupo de datos se puede observar que en cuanto menos años tenga el trabajador en la compañía más propenso a la rotación

4. Estimación del modelo

Realiza la estimación de un modelo de regresión logístico en el cual la variable respuesta es rotacion (y=1 es si rotación, y=0 es no rotación) y las covariables las 6 seleccionadas en el punto 1. Interprete los coeficientes del modelo y la significancia de los parámetros.

Rotacion$Rotación=as.numeric(Rotacion$Rotación=="Si")

modelo1 <- glm(Rotación~Horas_Extra+Estado_Civil+Viaje_Negocios+Distancia_Casa+Edad+Antigüedad_Cargo,data = Rotacion, family = "binomial")

summary(modelo1)
## 
## Call:
## glm(formula = Rotación ~ Horas_Extra + Estado_Civil + Viaje_Negocios + 
##     Distancia_Casa + Edad + Antigüedad_Cargo, family = "binomial", 
##     data = Rotacion)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -1.7890  -0.5788  -0.3994  -0.2461   3.1042  
## 
## Coefficients:
##                          Estimate Std. Error z value Pr(>|z|)    
## (Intercept)             -0.227670   0.387137  -0.588 0.556474    
## Horas_ExtraSi            1.444943   0.158676   9.106  < 2e-16 ***
## Estado_CivilDivorciado  -0.277569   0.229414  -1.210 0.226316    
## Estado_CivilSoltero      0.829596   0.172573   4.807 1.53e-06 ***
## Viaje_NegociosNo_Viaja  -1.419157   0.356616  -3.980 6.91e-05 ***
## Viaje_NegociosRaramente -0.662041   0.181067  -3.656 0.000256 ***
## Distancia_Casa           0.032271   0.009309   3.467 0.000527 ***
## Edad                    -0.042991   0.009219  -4.663 3.11e-06 ***
## Antigüedad_Cargo        -0.124934   0.026448  -4.724 2.32e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1298.6  on 1469  degrees of freedom
## Residual deviance: 1078.5  on 1461  degrees of freedom
## AIC: 1096.5
## 
## Number of Fisher Scoring iterations: 5
exp(modelo1$coefficients)
##             (Intercept)           Horas_ExtraSi  Estado_CivilDivorciado 
##               0.7963867               4.2416119               0.7576233 
##     Estado_CivilSoltero  Viaje_NegociosNo_Viaja Viaje_NegociosRaramente 
##               2.2923915               0.2419178               0.5157976 
##          Distancia_Casa                    Edad        Antigüedad_Cargo 
##               1.0327975               0.9579205               0.8825552

Respuesta

Esta razón de probabilidad lo que nos indica es lo siguiente:

Por cada unidad que aumenta la variable Horas extras SI, el odds de que se presente el evento de rotación aumenta 4.24 veces, es decir, que una persona que hace horas extras es 4.24 veces mas probable que genere rotación.

Por cada unidad que aumenta la variable Distancia a casa, el odds de que se presente el evento de rotación aumenta 1.03 veces, es decir, que una persona que vive más lejos de su trabajo es 1.03 veces mas probable que genere rotación.

Por cada unidad que aumenta la variable Estado_CivilSoltero, el odds de que se presente el evento de rotación aumenta 2.3 veces, es decir, que una persona soltera es 2,3 veces mas probable que rote

5. Evaluación

Evaluar el poder predictivo del modelo con base en la curva ROC y el AUC.

library(vcd)
## Warning: package 'vcd' was built under R version 4.2.3
## Loading required package: grid
pp1= predict.glm(modelo1, newdata = Rotacion, type = "response")
resp = table(Rotacion$Rotación, ifelse(pp1 >0.2, 1, 0), dnn = c("observaciones", "predicciones"))
resp
##              predicciones
## observaciones   0   1
##             0 979 254
##             1  84 153
mosaic(resp, shade = T, colorize = T,
gp = gpar(fill = matrix(c("#0F8FA5", "purple", "purple", "#0F8FA5"), 2, 2)))

sum(diag(resp)/sum(resp))
## [1] 0.770068
library(ROCR)
## Warning: package 'ROCR' was built under R version 4.2.3
prediccion= ROCR::prediction(pp1,Rotacion$Rotación)
perf= performance(prediction.obj = prediccion, "tpr", "fpr")
plot(perf,xlab = "Specificity", ylab = "Sensitivity", col="#0F8FA5")
abline(a=0, b=1, col="red")
grid()

AUClog= performance(prediccion, measure = "auc")@y.values[[1]]
cat("AUC: ", AUClog, "n")
## AUC:  0.7765099 n

Respuesta

El área bajo la curva de 0.77 indica que el modelo es aceptable y puede servir para predecir la probabilidad de rotación del empleado.

6. Predicciones

Realiza una predicción la probabilidad de que un individuo (hipotético) rote y defina un corte para decidir si se debe intervenir a este empleado o no (posible estrategia para motivar al empleado).

predict(modelo1,list(Horas_Extra="Si",Estado_Civil="Soltero",Viaje_Negocios="Raramente",Distancia_Casa=25,Edad=32,Antigüedad_Cargo=2))
##        1 
## 0.566042
predict(modelo1,list(Horas_Extra="No",Estado_Civil="Casado",Viaje_Negocios="Frecuentemente",Distancia_Casa=5,Edad=25,Antigüedad_Cargo=7))
##         1 
## -2.015615

Respuesta

Para una persona de 32 años de edad, con 2 años de antiguedad en el cargo que realiza horas extra y raramente tiene viajes de negocios, que además es soltero y vive a 25 kilómetros de la compañia, se estima un valor de 56,6 lo que indica una alta propensión a la rotación mientras que para otra persona de 25 años de edad, con 7 años de antiguedad en el cargo que no realiza horas extra y frecuentemente tiene viajes de negocios, que además es casado y vive a 5 kilómetros de la compañia, se estima un valor de - 2,01 que indica una baja probabilidad de rotación.

7. Conclusiones

En las conclusiones adicione una discución sobre cuál sería la estrategia para disminuir la rotación en la empresa (con base en las variables que resultaron significativas en el punto 3).

Respuesta

La estrategia para disminuir la rotación es la siguiente.

Horas Extra

Disminuir el grupo que realiza horas extras teniendo en cuenta que en este segmento la probabilidad de rotación es mayor. Esto se debe quizá a que aunque hay una motivación monetaria, el cansancio laboral y otros aspectos como el tiempo libre impactan en mayor medida a la desmotivación y posible rotación.

Estado Civil

Dependiendo del cargo, en el procesos de reclutamiento contratar personas casadas ya que si se espera que el recurso se mantenga en la empresa más tiempo esto ayudaría a disminuir el impacto devido a que las personas casadas tienen más responsabilidades y su necesidad de cambiar de empresa disminuyen

Viaje de Negocios

Teniendo en cuenta que la rotación entre los que no viajan es mucho mejor, se puede plantear una estrategia en la que el número de personas que viaje sea más reducido, esto ayudaría a generar menos impacto en aquellos que lo hacen raramente y frecuentemente. Por otro lado se puede aumentar incentivos a estas personas ya que al tener más rotación quizá se pueda reducir este impacto con otros elementos como permisos, premios y ayudas económicas.

Distancia a Casa

Revisar la distancia antes de la contratación y tratar de priorizar entre varios candidatos a aquellos que vivan más cerca.

Edad

Al aumentar la edad de los contratados se disminuye la propensión a rotar.

Antiguedad en el cargo

Realizar programas que permitan que la antiguedad en la compañía signifique algún tipo de compensación teniendo en cuenta que cuanto más están en la empresa, más cercanía generan y menos rotación se observa