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.

devtools::install_github("centromagis/paqueteMODELOS", force =TRUE)
## stringi     (1.8.4  -> 1.8.7 ) [CRAN]
## rlang       (1.1.4  -> 1.1.5 ) [CRAN]
## purrr       (1.0.2  -> 1.0.4 ) [CRAN]
## glue        (1.7.0  -> 1.8.0 ) [CRAN]
## cli         (3.6.3  -> 3.6.4 ) [CRAN]
## Rcpp        (1.0.13 -> 1.0.14) [CRAN]
## digest      (0.6.36 -> 0.6.37) [CRAN]
## pander      (0.6.5  -> 0.6.6 ) [CRAN]
## curl        (5.2.3  -> 6.2.2 ) [CRAN]
## matrixStats (1.4.1  -> 1.5.0 ) [CRAN]
## magick      (2.8.5  -> 2.8.6 ) [CRAN]
## lubridate   (1.9.3  -> 1.9.4 ) [CRAN]
## package 'stringi' successfully unpacked and MD5 sums checked
## package 'rlang' successfully unpacked and MD5 sums checked
## package 'purrr' successfully unpacked and MD5 sums checked
## package 'glue' successfully unpacked and MD5 sums checked
## package 'cli' successfully unpacked and MD5 sums checked
## package 'Rcpp' successfully unpacked and MD5 sums checked
## package 'digest' successfully unpacked and MD5 sums checked
## package 'pander' successfully unpacked and MD5 sums checked
## package 'curl' successfully unpacked and MD5 sums checked
## package 'matrixStats' successfully unpacked and MD5 sums checked
## package 'magick' successfully unpacked and MD5 sums checked
## package 'lubridate' successfully unpacked and MD5 sums checked
## 
## The downloaded binary packages are in
##  C:\Users\julie\AppData\Local\Temp\RtmpKMHUPn\downloaded_packages
## ── R CMD build ─────────────────────────────────────────────────────────────────
##          checking for file 'C:\Users\julie\AppData\Local\Temp\RtmpKMHUPn\remotes4f5c3b8e62f5\Centromagis-paqueteMODELOS-3b06257/DESCRIPTION' ...  ✔  checking for file 'C:\Users\julie\AppData\Local\Temp\RtmpKMHUPn\remotes4f5c3b8e62f5\Centromagis-paqueteMODELOS-3b06257/DESCRIPTION' (551ms)
##       ─  preparing 'paqueteMODELOS':
##    checking DESCRIPTION meta-information ...  ✔  checking DESCRIPTION meta-information
##       ─  checking for LF line-endings in source and make files and shell scripts (506ms)
##       ─  checking for empty or unneeded directories
##       ─  building 'paqueteMODELOS_0.1.0.tar.gz'
##      
## 
library(paqueteMODELOS)
data("rotacion")
library(dplyr)
glimpse(rotacion)
## Rows: 1,470
## Columns: 24
## $ Rotación                    <chr> "Si", "No", "Si", "No", "No", "No", "No", …
## $ Edad                        <dbl> 41, 49, 37, 33, 27, 32, 59, 30, 38, 36, 35…
## $ `Viaje de Negocios`         <chr> "Raramente", "Frecuentemente", "Raramente"…
## $ Departamento                <chr> "Ventas", "IyD", "IyD", "IyD", "IyD", "IyD…
## $ Distancia_Casa              <dbl> 1, 8, 2, 3, 2, 2, 3, 24, 23, 27, 16, 15, 2…
## $ Educación                   <dbl> 2, 1, 2, 4, 1, 2, 3, 1, 3, 3, 3, 2, 1, 2, …
## $ Campo_Educación             <chr> "Ciencias", "Ciencias", "Otra", "Ciencias"…
## $ Satisfacción_Ambiental      <dbl> 2, 3, 4, 4, 1, 4, 3, 4, 4, 3, 1, 4, 1, 2, …
## $ Genero                      <chr> "F", "M", "M", "F", "M", "M", "F", "M", "M…
## $ Cargo                       <chr> "Ejecutivo_Ventas", "Investigador_Cientifi…
## $ Satisfación_Laboral         <dbl> 4, 2, 3, 3, 2, 4, 1, 3, 3, 3, 2, 3, 3, 4, …
## $ Estado_Civil                <chr> "Soltero", "Casado", "Soltero", "Casado", …
## $ Ingreso_Mensual             <dbl> 5993, 5130, 2090, 2909, 3468, 3068, 2670, …
## $ Trabajos_Anteriores         <dbl> 8, 1, 6, 1, 9, 0, 4, 1, 0, 6, 0, 0, 1, 0, …
## $ Horas_Extra                 <chr> "Si", "No", "Si", "Si", "No", "No", "Si", …
## $ Porcentaje_aumento_salarial <dbl> 11, 23, 15, 11, 12, 13, 20, 22, 21, 13, 13…
## $ Rendimiento_Laboral         <dbl> 3, 4, 3, 3, 3, 3, 4, 4, 4, 3, 3, 3, 3, 3, …
## $ Años_Experiencia            <dbl> 8, 10, 7, 8, 6, 8, 12, 1, 10, 17, 6, 10, 5…
## $ Capacitaciones              <dbl> 0, 3, 3, 3, 3, 2, 3, 2, 2, 3, 5, 3, 1, 2, …
## $ Equilibrio_Trabajo_Vida     <dbl> 1, 3, 3, 3, 3, 2, 2, 3, 3, 2, 3, 3, 2, 3, …
## $ Antigüedad                  <dbl> 6, 10, 0, 8, 2, 7, 1, 1, 9, 7, 5, 9, 5, 2,…
## $ Antigüedad_Cargo            <dbl> 4, 7, 0, 7, 2, 7, 0, 0, 7, 7, 4, 5, 2, 2, …
## $ Años_ultima_promoción       <dbl> 0, 1, 0, 3, 2, 3, 0, 0, 1, 7, 0, 0, 4, 1, …
## $ Años_acargo_con_mismo_jefe  <dbl> 5, 7, 0, 0, 2, 6, 0, 0, 8, 7, 3, 8, 3, 2, …

Selección de variables:

#Frecuencia viajes de negocio #Justificación: Se espera que la frecuencia de viajes de negocio tenga una relación con la rotación de empleados, ya que un alto número de viajes podría generar cansancio físico y emocional, afectando el equilibrio entre la vida laboral y personal. Esto podría motivar a los empleados a buscar roles que requieran menos desplazamientos. #Hipótesis: Los empleados con mayor frecuencia de viajes de negocio tienen una mayor probabilidad de cambiar de cargo en comparación con aquellos que viajan menos.

#Cargo #Justificación: Se considera que el tipo de cargo de un empleado influye en la rotación, ya que ciertos roles pueden ser más demandantes o menos satisfactorios, empujando a los empleados a buscar alternativas más alineadas con sus intereses o expectativas laborales. #Hipótesis: Los empleados en cargos más bajos o roles operativos tienen una mayor probabilidad de rotar que aquellos en posiciones más altas o estratégicas.

#Departamento #Justificación: Se espera que el departamento al que pertenece un empleado influya en su probabilidad de rotación, ya que algunos departamentos pueden tener mayores niveles de presión, menor satisfacción laboral, o menos oportunidades de crecimiento profesional comparados con otros. #Hipótesis: Los empleados que trabajan en departamentos con altas demandas operativas o bajas posibilidades de promoción tienen una mayor probabilidad de cambiar de cargo en comparación con aquellos en departamentos estratégicos o con mejores condiciones laborales.

#Edad #Justificación: La edad podría estar relacionada con la probabilidad de rotación, ya que empleados más jóvenes pueden estar más abiertos al cambio para crecer profesionalmente, mientras que empleados mayores pueden buscar mayor estabilidad. #Hipótesis: Los empleados más jóvenes tienen una mayor probabilidad de rotar en comparación con los empleados de mayor edad.

#Distancia a casa #Justificación: Se espera que una mayor distancia entre el lugar de trabajo y la casa del empleado aumente el desgaste físico y emocional, influyendo en la rotación #Hipótesis: Los empleados que viven más lejos de la empresa tienen una mayor probabilidad de rotar que aquellos que viven cerca.

#Satisfacción laboral #Justificación: Un bajo nivel de satisfacción laboral podría ser un factor determinante en la decisión de cambiar de puesto o empresa. #Hipótesis: Los empleados con niveles más bajos de satisfacción laboral tienen una mayor probabilidad de rotación en comparación con aquellos que están satisfechos o muy satisfechos.

#Análisis univariado

#Variables numéricas

summary(rotacion)
##    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
hist(rotacion$Edad, main = "Distribución de Edad", xlab = "Edad", col = "blue")

hist(rotacion$Distancia_Casa, main = "Distribución de Distancia a casa", xlab = "Distancia_Casa", col = "blue")

hist(rotacion$Educación, main = "Distribución de Educación", xlab = "Educación", col = "blue")

hist(rotacion$Satisfacción_Ambiental, main = "Distribución de Satisfacción Ambiental", xlab = "Satisfacción_Ambiental", col = "blue")

hist(rotacion$Satisfación_Laboral, main = "Distribución de Satisfacción Laboral", xlab = "Satisfación_Laboral", col = "blue")

hist(rotacion$Ingreso_Mensual, main = "Distribución de Ingreso Mensual", xlab = "Ingreso_Mensual", col = "blue")

hist(rotacion$Trabajos_Anteriores, main = "Distribución de Trabajos Anteriores", xlab = "Trabajos_Anteriores", col = "blue")

hist(rotacion$Porcentaje_aumento_salarial, main = "Distribución de Porcentaje aumento salarial", xlab = "POrcentaje_aumento_salarial", col = "blue")

hist(rotacion$Rendimiento_Laboral, main = "Distribución de Rendimiento Laboral", xlab = "Rendimiento_Laboral", col = "blue")

hist(rotacion$Años_Experiencia, main = "Distribución de Años de experiencia", xlab = "Años_Experiencia", col = "blue")

hist(rotacion$Capacitaciones, main = "Distribución de Capacitaciones", xlab = "Capacitaciones", col = "blue")

hist(rotacion$Equilibrio_Trabajo_Vida, main = "Distribución de Equilibrio Trabajo Vida", xlab = "Equilibrio_Trabajo_Vida", col = "blue")

hist(rotacion$Antigüedad, main = "Distribución de Antigüedad", xlab = "Antigüedad", col = "blue")

hist(rotacion$Antigüedad_Cargo, main = "Distribución de Antigüedad Cargo", xlab = "Antigüedad_Cargo", col = "blue")

hist(rotacion$Años_ultima_promoción, main = "Distribución de Años última promoción", xlab = "Años_ultima_promoción", col = "blue")

hist(rotacion$Años_acargo_con_mismo_jefe, main = "Distribución de Años acargo con mismo jefe", xlab = "Años_acargo_con_mismo_jefe", col = "blue")

boxplot(rotacion$Edad, main = "Distribución de Edad", ylab = "Edad")

boxplot(rotacion$Distancia_Casa, main = "Distribución de Distancia a casa", ylab = "Distancia_Casa")

boxplot(rotacion$Educación, main = "Distribución de Educación", ylab = "Educación")

boxplot(rotacion$Satisfacción_Ambiental, main = "Distribución de Satisfacción Ambiental", ylab = "Satisfacción_Ambiental")

boxplot(rotacion$Satisfación_Laboral, main = "Distribución de Satisfacción Laboral", ylab = "Satisfación_Laboral")

boxplot(rotacion$Ingreso_Mensual, main = "Distribución de Ingreso Mensual", ylab = "Ingreso_Mensual")

boxplot(rotacion$Trabajos_Anteriores, main = "Distribución de Trabajos Anteriores", ylab = "Trabajos_Anteriores")

boxplot(rotacion$Porcentaje_aumento_salarial, main = "Distribución de Porcentaje aumento salarial", ylab = "Porcentaje_aumento_salarial")

boxplot(rotacion$Rendimiento_Laboral, main = "Distribución de Rendimiento Laboral", ylab = "Rendimiento_Laboral")

boxplot(rotacion$Años_Experiencia, main = "Distribución de Años de experiencia", ylab = "Años_Experiencia")

boxplot(rotacion$Capacitaciones, main = "Distribución de Capacitaciones", ylab = "Capacitaciones")

boxplot(rotacion$Equilibrio_Trabajo_Vida, main = "Distribución de Equilibrio Trabajo Vida", ylab = "Equilibrio_Trabajo_Vida")

boxplot(rotacion$Antigüedad, main = "Distribución de Antigüedad", ylab = "Antigüedad")

boxplot(rotacion$Antigüedad_Cargo, main = "Distribución de Antigüedad Cargo", ylab = "Antigüedad_Cargo")

boxplot(rotacion$Años_ultima_promoción, main = "Distribución de Años última promoción", ylab = "Años_ultima_promoción")

boxplot(rotacion$Años_acargo_con_mismo_jefe, main = "Distribución de Años acargo con mismo jefe", ylab = "Años_acargo_con_mismo_jefe")

#Variables categóricas

table(rotacion$Rotación)
## 
##   No   Si 
## 1233  237
table(rotacion$`Viaje de Negocios`)
## 
## Frecuentemente       No_Viaja      Raramente 
##            277            150           1043
table(rotacion$Departamento)
## 
##    IyD     RH Ventas 
##    961     63    446
table(rotacion$Campo_Educación)
## 
##    Ciencias Humanidades    Mercadeo        Otra       Salud    Tecnicos 
##         606          27         159          82         464         132
table(rotacion$Genero)
## 
##   F   M 
## 588 882
table(rotacion$Cargo)
## 
##  Director_Investigación    Director_Manofactura        Ejecutivo_Ventas 
##                      80                     145                     326 
##                 Gerente Investigador_Cientifico        Recursos_Humanos 
##                     102                     292                      52 
##     Representante_Salud    Representante_Ventas     Tecnico_Laboratorio 
##                     131                      83                     259
table(rotacion$Horas_Extra)
## 
##   No   Si 
## 1054  416
barplot(table(rotacion$Rotación), main = "Frecuencia por Rotación", col = "green")

barplot(table(rotacion$`Viaje de Negocios`), main = "Frecuencia por Viajes de Negocio", col = "green")

barplot(table(rotacion$Departamento), main = "Frecuencia por Departamento", col = "green")

barplot(table(rotacion$Campo_Educación), main = "Frecuencia por Campo de educación", col = "green")

barplot(table(rotacion$Genero), main = "Frecuencia por Genero", col = "green")

barplot(table(rotacion$Cargo), main = "Frecuencia por Cargo", col = "green")

barplot(table(rotacion$Horas_Extra), main = "Frecuencia por Horas extras", col = "green")

#2. Análisis bivariado

rotacion$Rotación <- ifelse(rotacion$Rotación == "Si", 1, 0)
modelo_edad <- glm(Rotación ~ Edad, data = rotacion, family = binomial)
summary(modelo_edad)  # Resumen con coeficientes y significancia
## 
## Call:
## glm(formula = Rotación ~ Edad, family = binomial, data = rotacion)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  0.20637    0.30597   0.674      0.5    
## Edad        -0.05225    0.00870  -6.006  1.9e-09 ***
## ---
## 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: 1259.1  on 1468  degrees of freedom
## AIC: 1263.1
## 
## Number of Fisher Scoring iterations: 4
#El coeficiente negativo significa que, a medida que la edad del empleado aumenta, la probabilidad de rotación disminuye. Esto confirma que hay una relación inversa entre la edad y la rotación.
#El valor p para la variable es muy bajo (Pr(>z) = 1.9e-09*), indicando que la relación entre la edad y la rotación es altamente significativa. Esto respalda que la edad es una variable predictora clave para la rotación.
modelo_Dist_Casa <- glm(Rotación ~ Distancia_Casa, data = rotacion, family = binomial)
summary(modelo_Dist_Casa)  # Resumen con coeficientes y significancia
## 
## Call:
## glm(formula = Rotación ~ Distancia_Casa, family = binomial, 
##     data = rotacion)
## 
## Coefficients:
##                 Estimate Std. Error z value Pr(>|z|)    
## (Intercept)    -1.890051   0.111382 -16.969  < 2e-16 ***
## Distancia_Casa  0.024710   0.008312   2.973  0.00295 ** 
## ---
## 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: 1290.0  on 1468  degrees of freedom
## AIC: 1294
## 
## Number of Fisher Scoring iterations: 4
#El coeficiente positivo indica que, a medida que la distancia de casa al trabajo aumenta, la probabilidad de rotación también aumenta.
#El valor p para  es Pr(>z) = 0.00295, lo que indica que esta variable es estadísticamente significativa (p < 0.05).
modelo_Educacion <- glm(Rotación ~ Educación, data = rotacion, family = binomial)
summary(modelo_Educacion)  # Resumen con coeficientes y significancia
## 
## Call:
## glm(formula = Rotación ~ Educación, family = binomial, data = rotacion)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -1.41058    0.20885  -6.754 1.44e-11 ***
## Educación   -0.08273    0.06882  -1.202    0.229    
## ---
## 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: 1297.1  on 1468  degrees of freedom
## AIC: 1301.1
## 
## Number of Fisher Scoring iterations: 4
#El valor p de la variable  es Pr(>z) = 0.229, lo que indica que esta variable no es significativa para explicar la rotación (p > 0.05). Esto implica que el nivel de educación no muestra una relación consistente o importante con la probabilidad de que un empleado rote, según este modelo.
modelo_Satis_amb <- glm(Rotación ~ Satisfacción_Ambiental, data = rotacion, family = binomial)
summary(modelo_Satis_amb)  # Resumen con coeficientes y significancia
## 
## Call:
## glm(formula = Rotación ~ Satisfacción_Ambiental, family = binomial, 
##     data = rotacion)
## 
## Coefficients:
##                        Estimate Std. Error z value Pr(>|z|)    
## (Intercept)            -0.98621    0.17687  -5.576 2.46e-08 ***
## Satisfacción_Ambiental -0.25312    0.06431  -3.936 8.30e-05 ***
## ---
## 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: 1283.1  on 1468  degrees of freedom
## AIC: 1287.1
## 
## Number of Fisher Scoring iterations: 4
#El coeficiente negativo indica que, a medida que aumenta la satisfacción ambiental, la probabilidad de rotación disminuye.
#El valor p para la variable  es Pr(>z) = 8.30e-05, lo que demuestra que es estadísticamente significativa (p < 0.001)
modelo_Satis_lab <- glm(Rotación ~ Satisfación_Laboral, data = rotacion, family = binomial)
summary(modelo_Satis_lab)  # Resumen con coeficientes y significancia
## 
## Call:
## glm(formula = Rotación ~ Satisfación_Laboral, family = binomial, 
##     data = rotacion)
## 
## Coefficients:
##                     Estimate Std. Error z value Pr(>|z|)    
## (Intercept)          -0.9903     0.1757  -5.635 1.75e-08 ***
## Satisfación_Laboral  -0.2510     0.0637  -3.940 8.16e-05 ***
## ---
## 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: 1283.1  on 1468  degrees of freedom
## AIC: 1287.1
## 
## Number of Fisher Scoring iterations: 4
#El coeficiente negativo indica que, a medida que aumenta la satisfacción laboral (por ejemplo, de "insatisfecho" a "satisfecho"), la probabilidad de rotación disminuye.
#El valor p de la variable  es Pr(>z) = 8.16e-05, lo cual indica que esta variable es altamente significativa (p < 0.001)
modelo_Ingreso_mensual <- glm(Rotación ~ Ingreso_Mensual, data = rotacion, family = binomial)
summary(modelo_Ingreso_mensual)  # Resumen con coeficientes y significancia
## 
## Call:
## glm(formula = Rotación ~ Ingreso_Mensual, family = binomial, 
##     data = rotacion)
## 
## Coefficients:
##                   Estimate Std. Error z value Pr(>|z|)    
## (Intercept)     -9.291e-01  1.292e-01  -7.191 6.43e-13 ***
## Ingreso_Mensual -1.271e-04  2.162e-05  -5.879 4.12e-09 ***
## ---
## 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: 1253.1  on 1468  degrees of freedom
## AIC: 1257.1
## 
## Number of Fisher Scoring iterations: 5
#El coeficiente negativo indica que, a medida que aumenta el ingreso mensual, la probabilidad de rotación disminuye. Esto sugiere que los empleados con mayores ingresos tienen menos probabilidades de cambiar de cargo.
#El valor p para  es Pr(>z) = 4.12e-09, lo que demuestra que esta variable es estadísticamente significativa (p < 0.001).
modelo_Trabajos_anteriores <- glm(Rotación ~ Trabajos_Anteriores, data = rotacion, family = binomial)
summary(modelo_Trabajos_anteriores)  # Resumen con coeficientes y significancia
## 
## Call:
## glm(formula = Rotación ~ Trabajos_Anteriores, family = binomial, 
##     data = rotacion)
## 
## Coefficients:
##                     Estimate Std. Error z value Pr(>|z|)    
## (Intercept)         -1.77652    0.10636 -16.703   <2e-16 ***
## Trabajos_Anteriores  0.04565    0.02742   1.665    0.096 .  
## ---
## 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: 1295.9  on 1468  degrees of freedom
## AIC: 1299.9
## 
## Number of Fisher Scoring iterations: 4
#El coeficiente positivo sugiere que, a medida que aumenta el número de trabajos anteriores, la probabilidad de rotación también aumenta ligeramente.
#El valor p para  es Pr(>z) = 0.096, lo que indica que esta variable no es estadísticamente significativa (p > 0.05).
modelo_Porcentaje_aumento <- glm(Rotación ~ Porcentaje_aumento_salarial, data = rotacion, family = binomial)
summary(modelo_Porcentaje_aumento)  # Resumen con coeficientes y significancia
## 
## Call:
## glm(formula = Rotación ~ Porcentaje_aumento_salarial, family = binomial, 
##     data = rotacion)
## 
## Coefficients:
##                             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                 -1.49563    0.30459  -4.910 9.09e-07 ***
## Porcentaje_aumento_salarial -0.01012    0.01959  -0.517    0.605    
## ---
## 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: 1298.3  on 1468  degrees of freedom
## AIC: 1302.3
## 
## Number of Fisher Scoring iterations: 3
#El coeficiente es negativo, lo que sugiere que un mayor porcentaje de aumento salarial podría disminuir la probabilidad de rotación. Sin embargo, el tamaño del coeficiente es muy pequeño, indicando un efecto marginal por cada unidad de aumento salarial.
# El valor p para  es Pr(>z) = 0.605, lo que indica que esta variable no es estadísticamente significativa (p > 0.05)
modelo_Rendimiento_Laboral <- glm(Rotación ~ Rendimiento_Laboral, data = rotacion, family = binomial)
summary(modelo_Rendimiento_Laboral)  # Resumen con coeficientes y significancia
## 
## Call:
## glm(formula = Rotación ~ Rendimiento_Laboral, family = binomial, 
##     data = rotacion)
## 
## Coefficients:
##                     Estimate Std. Error z value Pr(>|z|)   
## (Intercept)         -1.71750    0.62144  -2.764  0.00571 **
## Rendimiento_Laboral  0.02167    0.19564   0.111  0.91181   
## ---
## 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: 1298.6  on 1468  degrees of freedom
## AIC: 1302.6
## 
## Number of Fisher Scoring iterations: 3
# El valor p para  es Pr(>z) = 0.911, lo que indica que esta variable no es estadísticamente significativa (p > 0.05)
modelo_Años_Experiencia <- glm(Rotación ~ Años_Experiencia, data = rotacion, family = binomial)
summary(modelo_Años_Experiencia)  # Resumen con coeficientes y significancia
## 
## Call:
## glm(formula = Rotación ~ Años_Experiencia, family = binomial, 
##     data = rotacion)
## 
## Coefficients:
##                  Estimate Std. Error z value Pr(>|z|)    
## (Intercept)      -0.88306    0.12744  -6.929 4.23e-12 ***
## Años_Experiencia -0.07773    0.01217  -6.387 1.69e-10 ***
## ---
## 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: 1248.1  on 1468  degrees of freedom
## AIC: 1252.1
## 
## Number of Fisher Scoring iterations: 5
#El coeficiente negativo indica que, a medida que aumentan los años de experiencia, la probabilidad de rotación disminuye. Esto sugiere que los empleados con más experiencia tienden a ser más estables en sus cargos.
#El valor p para  es Pr(>z) = 1.69e-10, demostrando que esta variable es altamente significativa (p < 0.001).
modelo_Capacitaciones <- glm(Rotación ~ Capacitaciones, data = rotacion, family = binomial)
summary(modelo_Capacitaciones)  # Resumen con coeficientes y significancia
## 
## Call:
## glm(formula = Rotación ~ Capacitaciones, family = binomial, 
##     data = rotacion)
## 
## Coefficients:
##                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)     -1.2948     0.1675  -7.731 1.07e-14 ***
## Capacitaciones  -0.1300     0.0571  -2.276   0.0229 *  
## ---
## 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: 1293.3  on 1468  degrees of freedom
## AIC: 1297.3
## 
## Number of Fisher Scoring iterations: 4
#Este coeficiente indica que a medida que aumenta la cantidad de capacitaciones, la probabilidad de rotación ((y = 1)) disminuye. Es un efecto negativo.
#El valor p para  es Pr(>z) = 0.0229, demostrando que esta variable es altamente significativa (p < 0.05).
modelo_Equilibrio_TV <- glm(Rotación ~ Equilibrio_Trabajo_Vida, data = rotacion, family = binomial)
summary(modelo_Equilibrio_TV)  # Resumen con coeficientes y significancia
## 
## Call:
## glm(formula = Rotación ~ Equilibrio_Trabajo_Vida, family = binomial, 
##     data = rotacion)
## 
## Coefficients:
##                         Estimate Std. Error z value Pr(>|z|)    
## (Intercept)             -0.99739    0.27199  -3.667 0.000245 ***
## Equilibrio_Trabajo_Vida -0.23956    0.09796  -2.445 0.014467 *  
## ---
## 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: 1292.7  on 1468  degrees of freedom
## AIC: 1296.7
## 
## Number of Fisher Scoring iterations: 4
#El signo negativo del coeficiente muestra que hay una relación inversa entre esta variable y la rotación. En términos concretos, a medida que mejora el equilibrio trabajo-vida, la probabilidad de que alguien deje su empleo disminuye.#El valor p para  es Pr(>z) = 0.0229, demostrando que esta variable es altamente significativa (p < 0.05).
#(p = 0.014467), lo cual es menor al umbral típico del 5%. Esto confirma que la variable tiene un impacto estadísticamente significativo en la rotación.
modelo_Antiguedad <- glm(Rotación ~ Antigüedad, data = rotacion, family = binomial)
summary(modelo_Antiguedad)  
## 
## Call:
## glm(formula = Rotación ~ Antigüedad, family = binomial, data = rotacion)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -1.15577    0.11137 -10.378  < 2e-16 ***
## Antigüedad  -0.08076    0.01594  -5.068 4.03e-07 ***
## ---
## 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: 1266.5  on 1468  degrees of freedom
## AIC: 1270.5
## 
## Number of Fisher Scoring iterations: 5
#Este coeficiente indica que la antigüedad tiene una relación negativa con la probabilidad de rotación. A medida que aumenta la antigüedad de los empleados, las probabilidades de rotación disminuyen.
# Altamente significativa ((p = 4.03e-07)), lo que confirma que la antigüedad es un factor importante en la reducción de la rotación.
modelo_Antiguedad_cargo <- glm(Rotación ~ Antigüedad_Cargo, data = rotacion, family = binomial)
summary(modelo_Antiguedad_cargo)
## 
## Call:
## glm(formula = Rotación ~ Antigüedad_Cargo, family = binomial, 
##     data = rotacion)
## 
## Coefficients:
##                  Estimate Std. Error z value Pr(>|z|)    
## (Intercept)      -1.11841    0.10380 -10.775  < 2e-16 ***
## Antigüedad_Cargo -0.14628    0.02424  -6.033 1.61e-09 ***
## ---
## 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: 1255.9  on 1468  degrees of freedom
## AIC: 1259.9
## 
## Number of Fisher Scoring iterations: 5
#Este coeficiente muestra que un mayor tiempo en el cargo está asociado con una menor probabilidad de rotación.
#Altamente significativa ((p = 1.61e-09)), confirmando que "Antigüedad_Cargo" es una variable relevante y asociada a la rotación.
modelo_Años_Promocion <- glm(Rotación ~ Años_ultima_promoción, data = rotacion, family = binomial)
summary(modelo_Años_Promocion)
## 
## Call:
## glm(formula = Rotación ~ Años_ultima_promoción, family = binomial, 
##     data = rotacion)
## 
## Coefficients:
##                       Estimate Std. Error z value Pr(>|z|)    
## (Intercept)           -1.58703    0.08501 -18.670   <2e-16 ***
## Años_ultima_promoción -0.02979    0.02358  -1.263    0.206    
## ---
## 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: 1296.9  on 1468  degrees of freedom
## AIC: 1300.9
## 
## Number of Fisher Scoring iterations: 4
#Este coeficiente muestra que, aunque existe una tendencia negativa (mayor tiempo desde la última promoción se asocia con menor probabilidad de rotación), su impacto es pequeño.
#Al ser mayor al umbral típico ((p > 0.05)), indica que esta variable no tiene una asociación estadísticamente significativa con la rotación en este modelo. Por lo tanto, no podemos afirmar con certeza que el tiempo desde la última promoción influya en la rotación
modelo_Años_jefe<- glm(Rotación ~ Años_acargo_con_mismo_jefe, data = rotacion, family = binomial)
summary(modelo_Años_jefe)
## 
## Call:
## glm(formula = Rotación ~ Años_acargo_con_mismo_jefe, family = binomial, 
##     data = rotacion)
## 
## Coefficients:
##                            Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                -1.14677    0.10244 -11.195  < 2e-16 ***
## Años_acargo_con_mismo_jefe -0.14138    0.02407  -5.874 4.26e-09 ***
## ---
## 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: 1258.7  on 1468  degrees of freedom
## AIC: 1262.7
## 
## Number of Fisher Scoring iterations: 5
#Este coeficiente indica que a medida que aumenta el tiempo trabajando bajo el mismo jefe, las probabilidades de rotación disminuyen.
#Altamente significativa ((p = 4.26e-09)), confirmando que esta variable tiene un impacto estadísticamente relevante en la probabilidad de rotación.

#Análisis vibariado variables categóricas #VC: Variable Categórica #TC: Tabla de contingencia #chi2: Prueba de Chi cuadrado

VC1 <- "Viaje de Negocios"
TC1 <- table(rotacion$Rotación, rotacion[[VC1]]) 
print(TC1)
##    
##     Frecuentemente No_Viaja Raramente
##   0            208      138       887
##   1             69       12       156
chi2_TC1 <- chisq.test(TC1)
print(chi2_TC1)
## 
##  Pearson's Chi-squared test
## 
## data:  TC1
## X-squared = 24.182, df = 2, p-value = 5.609e-06
#El ( p )-valor ((5.609 \times 10^{-6})) demuestra que existe una asociación estadísticamente significativa entre los viajes de trabajo y la rotación. Esto indica que los empleados que realizan diferentes frecuencias de viajes de trabajo tienen probabilidades distintas de rotación.
VC2 <- "Departamento"
TC2 <- table(rotacion$Rotación, rotacion[[VC2]]) 
print(TC2)
##    
##     IyD  RH Ventas
##   0 828  51    354
##   1 133  12     92
chi2_TC2 <- chisq.test(TC2)
print(chi2_TC2)
## 
##  Pearson's Chi-squared test
## 
## data:  TC2
## X-squared = 10.796, df = 2, p-value = 0.004526
#Este valor es menor al umbral de significancia típico ((p < 0.05)), lo que indica que hay una asociación estadísticamente significativa entre el departamento y la probabilidad de rotación.
VC3 <- "Campo_Educación"
TC3 <- table(rotacion$Rotación, rotacion[[VC3]]) 
print(TC3)
##    
##     Ciencias Humanidades Mercadeo Otra Salud Tecnicos
##   0      517          20      124   71   401      100
##   1       89           7       35   11    63       32
chi2_TC3 <- chisq.test(TC3)
## Warning in chisq.test(TC3): Chi-squared approximation may be incorrect
print(chi2_TC3)
## 
##  Pearson's Chi-squared test
## 
## data:  TC3
## X-squared = 16.025, df = 5, p-value = 0.006774
#El ( p )-valor es menor al umbral típico ((p < 0.05)), lo que confirma que existe una asociación estadísticamente significativa entre el campo de educación y la rotación.
VC4 <- "Genero"
TC4 <- table(rotacion$Rotación, rotacion[[VC4]]) 
print(TC4)
##    
##       F   M
##   0 501 732
##   1  87 150
chi2_TC4 <- chisq.test(TC4)
print(chi2_TC4)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  TC4
## X-squared = 1.117, df = 1, p-value = 0.2906
#Al ser mayor que el umbral de significancia típico ((p > 0.05)), no se encuentra evidencia estadísticamente significativa de asociación entre el género y la rotación.
VC5 <- "Cargo"
TC5 <- table(rotacion$Rotación, rotacion[[VC5]]) 
print(TC5)
##    
##     Director_Investigación Director_Manofactura Ejecutivo_Ventas Gerente
##   0                     78                  135              269      97
##   1                      2                   10               57       5
##    
##     Investigador_Cientifico Recursos_Humanos Representante_Salud
##   0                     245               40                 122
##   1                      47               12                   9
##    
##     Representante_Ventas Tecnico_Laboratorio
##   0                   50                 197
##   1                   33                  62
chi2_TC5 <- chisq.test(TC5)
print(chi2_TC5)
## 
##  Pearson's Chi-squared test
## 
## data:  TC5
## X-squared = 86.19, df = 8, p-value = 2.752e-15
#Este p-valor es extremadamente bajo y mucho menor al umbral típico ((p < 0.05)), lo que confirma que la asociación entre el cargo del empleado y la rotación es estadísticamente significativa
VC6 <- "Estado_Civil"
TC6 <- table(rotacion$Rotación, rotacion[[VC6]]) 
print(TC6)
##    
##     Casado Divorciado Soltero
##   0    589        294     350
##   1     84         33     120
chi2_TC6 <- chisq.test(TC6)
print(chi2_TC6)
## 
##  Pearson's Chi-squared test
## 
## data:  TC6
## X-squared = 46.164, df = 2, p-value = 9.456e-11
#Este p-valor es extremadamente bajo ((p < 0.05)), lo que indica una asociación estadísticamente significativa entre el estado civil y la rotación
VC7 <- "Horas_Extra"
TC7 <- table(rotacion$Rotación, rotacion[[VC7]]) 
print(TC7)
##    
##      No  Si
##   0 944 289
##   1 110 127
chi2_TC7 <- chisq.test(TC7)
print(chi2_TC7)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  TC7
## X-squared = 87.564, df = 1, p-value < 2.2e-16
#Este p-valor es extremadamente bajo ((p < 0.05)), lo que indica una asociación estadísticamente significativa entre la realización de horas extra y la rotación

Ajuste de modelo de regresión logística

# Ajustar el modelo de regresión logística
modelo_logistico <- glm(Rotación ~ `Viaje de Negocios` + Departamento + Cargo + Edad + Distancia_Casa + Satisfación_Laboral, 
                        family = binomial, data = rotacion)
# Resumen del modelo
summary(modelo_logistico)
## 
## Call:
## glm(formula = Rotación ~ `Viaje de Negocios` + Departamento + 
##     Cargo + Edad + Distancia_Casa + Satisfación_Laboral, family = binomial, 
##     data = rotacion)
## 
## Coefficients:
##                                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                   -1.334625   0.861592  -1.549 0.121376    
## `Viaje de Negocios`No_Viaja   -1.395554   0.342366  -4.076 4.58e-05 ***
## `Viaje de Negocios`Raramente  -0.655569   0.174147  -3.764 0.000167 ***
## DepartamentoRH               -12.547957 426.102560  -0.029 0.976507    
## DepartamentoVentas             0.150287   0.947455   0.159 0.873967    
## CargoDirector_Manofactura      0.832644   0.795057   1.047 0.294972    
## CargoEjecutivo_Ventas          1.789703   1.202480   1.488 0.136660    
## CargoGerente                   0.914551   0.938524   0.974 0.329830    
## CargoInvestigador_Cientifico   1.769298   0.744129   2.378 0.017422 *  
## CargoRecursos_Humanos         14.751913 426.103320   0.035 0.972382    
## CargoRepresentante_Salud       0.915299   0.802026   1.141 0.253772    
## CargoRepresentante_Ventas      2.713396   1.221847   2.221 0.026369 *  
## CargoTecnico_Laboratorio       2.240984   0.741315   3.023 0.002503 ** 
## Edad                          -0.030912   0.009547  -3.238 0.001204 ** 
## Distancia_Casa                 0.029397   0.008918   3.296 0.000979 ***
## Satisfación_Laboral           -0.284281   0.067256  -4.227 2.37e-05 ***
## ---
## 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: 1149.3  on 1454  degrees of freedom
## AIC: 1181.3
## 
## Number of Fisher Scoring iterations: 14

#Viajes de negocio, edad, distancia a casa, satisfacción laboral y algunos cargos específicos tienen un impacto importante en las probabilidades de rotación. #Reducir viajes frecuentes y mejorar la satisfacción laboral puede ser clave para retener a los empleados. #Considerar estrategias específicas para roles como representante de ventas, técnico de laboratorio e investigador científico, que muestran mayores probabilidades de rotación.

#AUC y ROC

library(pROC)
## Type 'citation("pROC")' for a citation.
## 
## Adjuntando el paquete: 'pROC'
## The following objects are masked from 'package:stats':
## 
##     cov, smooth, var
# Obtener las probabilidades predichas por el modelo
predicciones <- predict(modelo_logistico, type = "response")


# Calcular el AUC
roc_curve <- roc(rotacion$Rotación, predicciones)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
auc_value <- auc(roc_curve)

# Mostrar el valor del AUC
print(auc_value)
## Area under the curve: 0.7323
#En este caso, el AUC de 0.7323 indica que el modelo tiene una probabilidad del 73.23% de clasificar correctamente a un empleado que rota frente a uno que no rotará al azar.

# Graficar la curva ROC
plot(roc_curve)

#Como se calculó previamente, el AUC es (0.7323). Esto indica que tu modelo tiene un desempeño aceptable para diferenciar entre empleados que rotan ((y=1)) y los que no rotan ((y=0)).
#

PREDICCIONES

unique(rotacion$Rotación)
## [1] 1 0
rotacion$Rotación <- ifelse(trimws(tolower(rotacion$Rotación)) == "si", 1, 0)
rotacion <- rotacion %>% filter(!is.na(Rotación))
rotacion$Rotación <- as.numeric(rotacion$Rotación)
modelo_edad <- glm(Rotación ~ Edad, data = rotacion, family = binomial)
## Warning: glm.fit: algorithm did not converge
summary(modelo_edad)
## 
## Call:
## glm(formula = Rotación ~ Edad, family = binomial, data = rotacion)
## 
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.657e+01  3.869e+04  -0.001    0.999
## Edad         1.709e-15  1.017e+03   0.000    1.000
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 0.0000e+00  on 1469  degrees of freedom
## Residual deviance: 8.5283e-09  on 1468  degrees of freedom
## AIC: 4
## 
## Number of Fisher Scoring iterations: 25
modelo_final <- glm(Rotación ~ Edad + Distancia_Casa + Satisfación_Laboral + 
                    Ingreso_Mensual + Años_Experiencia + Equilibrio_Trabajo_Vida +
                    Antigüedad + Antigüedad_Cargo + Años_acargo_con_mismo_jefe, 
                    data = rotacion, family = binomial)
## Warning: glm.fit: algorithm did not converge
summary(modelo_final)
## 
## Call:
## glm(formula = Rotación ~ Edad + Distancia_Casa + Satisfación_Laboral + 
##     Ingreso_Mensual + Años_Experiencia + Equilibrio_Trabajo_Vida + 
##     Antigüedad + Antigüedad_Cargo + Años_acargo_con_mismo_jefe, 
##     family = binomial, data = rotacion)
## 
## Coefficients:
##                              Estimate Std. Error z value Pr(>|z|)
## (Intercept)                -2.657e+01  6.360e+04       0        1
## Edad                        3.720e-15  1.421e+03       0        1
## Distancia_Casa             -3.151e-15  1.147e+03       0        1
## Satisfación_Laboral         2.195e-14  8.438e+03       0        1
## Ingreso_Mensual             4.091e-18  3.136e+00       0        1
## Años_Experiencia           -6.891e-15  2.512e+03       0        1
## Equilibrio_Trabajo_Vida    -8.918e-14  1.321e+04       0        1
## Antigüedad                 -1.845e-15  3.030e+03       0        1
## Antigüedad_Cargo            9.536e-16  4.159e+03       0        1
## Años_acargo_con_mismo_jefe  6.328e-15  4.317e+03       0        1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 0.0000e+00  on 1469  degrees of freedom
## Residual deviance: 8.5283e-09  on 1460  degrees of freedom
## AIC: 20
## 
## Number of Fisher Scoring iterations: 25
empleado_nuevo <- data.frame(
  Edad = 30,
  Distancia_Casa = 10,
  Satisfación_Laboral = 2,
  Ingreso_Mensual = 5000,
  Años_Experiencia = 5,
  Equilibrio_Trabajo_Vida = 2,
  Antigüedad = 3,
  Antigüedad_Cargo = 2,
  Años_acargo_con_mismo_jefe = 1
)

probabilidad_rotacion <- predict(modelo_final, newdata = empleado_nuevo, type = "response")
print(probabilidad_rotacion)  
##            1 
## 2.900701e-12
umbral <- 0.4  # Si la probabilidad de rotación es mayor al 40%, se recomienda intervención
intervencion <- ifelse(probabilidad_rotacion > umbral, "Intervenir", "No Intervenir")
print(intervencion)
##               1 
## "No Intervenir"

CONCLUSIONES

Con el fin de disminuir la rotación de la empresa, utilizamos los resultados obtenidos en los puntos anteriores. Las variables utilizadas tienen un gran efecto sobre la probabilidad de renuncia de un colaborador.

A partir de los factores indispensables para minimizar la rotación, concluimos lo siguiente:

  1. Para incrementar la satisfacción laboral (-0.288), se propone mejorar el clima organizacional a través de estrategias como flexibilidad en los horarios, lo que no implica dejar de cumplir con las horas determinadas en los contratos, hacer reconocimientos públicos por los logros alcanzados y ofrecer beneficios especiales, como algunas horas de la semana para la practica deportiva o cultural, hacer seguimiento de las cargas de trabajo y aplicar encuestas de clima laboral que realmente sean anónimas. Lo anterior, dado que a mayor satisfacción laboral, menor probabilidad de rotación.

  2. Se debe hacer un análisis sobre el ingreso mensual (-0.0000719), si bien, el coeficiente no es grande, si permite concluir que los sueldos más altos, disminuyen la rotación. Proponemos incentivos salariales a partir de un indicador de desempeño o bonos que no constituyan salarios para evitar aumentos en los costos parafiscales, adicional, sería importante hacer un comparativo con los salarios de mercado para verificar que lo ofrecido por la compañia es competitivo.

  3. Dado que al mejorar el equilibrio entre el trabajo y la vida personal (-0.239), disminuye la rotación, creemos que a los colaboradores se les puede ofrecer la modalidad híbrida entre trabajo presencial y virtual o para los cargos que lo permitan, trabajo remoto, también, se pueden implementar jornadas de bienestar con actividades fuera de la oficina y sesiones de soporte psicológico a bajo costo haciendo convenio con algunos profesionales de la salud.

  4. Teniendo en cuenta que el riesgo de rotación aumenta con la antiguedad (0.0783), proponemos la creación de planes de carrera acompañados de primas por antiguedad (ejemplo: quinquenios, es decir, un salario adicional cada 5 años) y también consideramos que se debe hacer un seguimiento a los colaboradores que lleven más años en la compañia para conocer su persepción sobre los cargos que ostentan para determinar si se sienten estancados o no o si por el contrario están a gustos con las funciones que desempeñan.

  5. Se debe considerar que cuando los colaboradores tienen que hacer trayectos más largos para llegar a la oficina, hay una mayor probabilidad de rotación (0.028), por lo que la compañia puede ofrecer rutas hacia estaciones centrales de transporte público y opciones de trabajo híbrido y en los casos en los que se pueda, trabajo remoto.

  6. Dado que los colaboradores con más tiempo con el mismo jefe (-0.114) o en el mismo cargo (-0.111) tienen una menor rotación, proponemos capacitar a los directivos o jefes de unidad para promover la confianza y bienestar de su equipo de trabajo, por supuesto, esto no implica reducir el nivel de exigencia. Es fundamental crear una relación estable entre los jefes y los colaboradores.