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.
## 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"
## 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
## 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:
Seleccione 3 variables categóricas (distintas de rotación) y 3 variables cuantitativas, que se consideren estén relacionadas con la rotación.
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
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.
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
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.
Hipótesis: Se espera que a menor edad exista mayor rotación y a más edad y menos rotación.
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.
Realiza un análisis univariado (caracterización) de la información contenida en la base de datos rotacion.
## Warning: package 'ggplot2' was built under R version 4.2.3
## Warning: package 'ggpubr' was built under R version 4.2.3
## 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`.
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.
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.
## 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()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
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
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.
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
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
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
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
## (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
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
Evaluar el poder predictivo del modelo con base en la curva ROC y el AUC.
## 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)))## [1] 0.770068
## 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()## AUC: 0.7765099 n
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.
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
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.
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).
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.
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
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.
Revisar la distancia antes de la contratación y tratar de priorizar entre varios candidatos a aquellos que vivan más cerca.
Al aumentar la edad de los contratados se disminuye la propensión a rotar.
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