1. Introducción

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.

2. Objetivo

3. Métodos

Los datos son obtenidos de la librería paqueteMETODOS de R y, analizados a través de la misma herramienta haciendo uso de diferentes paquetes que permiten realizar un análisis estadístico de acuerdo a la siguiente metodología.

3.1. Cargue de datos

library(paqueteMODELOS)
data("rotacion")
head(rotacion)
## # A tibble: 6 × 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
## # ℹ 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>, Antigüedad_Cargo <dbl>,
## #   Años_ultima_promoción <dbl>, Años_acargo_con_mismo_jefe <dbl>
dim(rotacion)
## [1] 1470   24
colnames(rotacion) <- gsub(" ", "_", colnames(rotacion))

3.2. Identificación de datos faltantes por variable

Se consultan los datos faltantes, encontrando que ninguna variable tiene valores nulos.

colSums(is.na(rotacion)) %>% as.data.frame()
##                             .
## Rotación                    0
## Edad                        0
## Viaje_de_Negocios           0
## Departamento                0
## Distancia_Casa              0
## Educación                   0
## Campo_Educación             0
## Satisfacción_Ambiental      0
## Genero                      0
## Cargo                       0
## Satisfación_Laboral         0
## Estado_Civil                0
## Ingreso_Mensual             0
## Trabajos_Anteriores         0
## Horas_Extra                 0
## Porcentaje_aumento_salarial 0
## Rendimiento_Laboral         0
## Años_Experiencia            0
## Capacitaciones              0
## Equilibrio_Trabajo_Vida     0
## Antigüedad                  0
## Antigüedad_Cargo            0
## Años_ultima_promoción       0
## Años_acargo_con_mismo_jefe  0
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

4. Pasos propuestos por la gerencia

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

4.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.

Nota: Debes justificar porque estas variables están relacionadas y que tipo de relación se espera entre ellas (Hipótesis).

Se consultan los tipos de variables.

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 ...
##  $ Viaje_de_Negocios          : chr [1:1470] "Raramente" "Frecuentemente" "Raramente" "Frecuentemente" ...
##  $ Departamento               : chr [1:1470] "Ventas" "IyD" "IyD" "IyD" ...
##  $ Distancia_Casa             : num [1:1470] 1 8 2 3 2 2 3 24 23 27 ...
##  $ 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                 : num [1:1470] 6 10 0 8 2 7 1 1 9 7 ...
##  $ 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 ...

Análisis de variables categóricas.

  • Viaje de negocios

Se espera que las personas que viajan frecuentemente roten con mayor frecuencia. \(H_0\): No existe asociación entre la rotación y el Viaje de negocios.

  • Estado civil

Se espera que las personas solteras roten más que quienes están casados, ya que están más abiertos a los cambios y a asumir retos laborales. \(H_0\): No existe asociación entre la rotación y el estado civil.

  • Horas extras

Se espera que las personas que realizan horas extras tienen mayor posibilidad de rotar. \(H_0\): No existe asociación entre la rotación y el horas extras.

Análisis de variables cuantitativas

  • Edad

Se espera que las personas más jovenes tengan mayor rotación, ya que sus salarios pueden ser inferiores. \(H_0\): No existe asociación entre la rotación y la edad.

  • Ingreso mensual

Se espera que las personas con menor ingreso mensual tengan mayor rotación, ya que siempre está abierto a una mejor remuneración. \(H_0\): No existe asociación entre la rotación y el ingreso mensual.

  • Años de experiencia

Se espera que las personas con mayor experiencia laboral rote menos, ya que pueden buscar estabilidad en un solo lugar. \(H_0\): No existe asociación entre la rotación y los años de experiencia.

4.2. Análisis univariado.

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

Nota: Los indicadores o gráficos se usan dependiendo del tipo de variable (cuantitativas o cualitativas). Incluir interpretaciones de la variable rotacion.

Se crean dos subgrupos segmentados por la variable “Rotación”.

rotacion_Si <- subset(rotacion, Rotación == "Si")
rotacion_No <- subset(rotacion, Rotación == "No")
  • Viaje de negocios

Se evidencia que la mayoría de trabajadores raramente viajan.

table(rotacion$Viaje_de_Negocios, rotacion$Rotación)
##                 
##                   No  Si
##   Frecuentemente 208  69
##   No_Viaja       138  12
##   Raramente      887 156
barplot(table(rotacion$Viaje_de_Negocios),, main = "Frecuencia de viajes de negocios de los trabajadores",
     col = c("cadetblue", "#AB82FF", "yellow3"))

chisq.test(table(rotacion$Rotación, rotacion$Viaje_de_Negocios))
## 
##  Pearson's Chi-squared test
## 
## data:  table(rotacion$Rotación, rotacion$Viaje_de_Negocios)
## X-squared = 24.182, df = 2, p-value = 5.609e-06

A partir de evaluar dicho \(p-value\) con un nivel de significancia (\(α=0.05\)), se rechaza \(H_0\), es decir, que el cargo está relacionado con la rotación.

  • Estado Civil

Se evidencia que las personas solteras tienen mayor rotación que quienes están divorciadas o casadas.

table(rotacion$Estado_Civil, rotacion$Rotación)
##             
##               No  Si
##   Casado     589  84
##   Divorciado 294  33
##   Soltero    350 120
count_estado_civil <- table(rotacion$Estado_Civil)
etiquetas_estado_civil <- paste0(count_estado_civil, "=", round(100*count_estado_civil/sum(count_estado_civil), 1), "%")
colores <- c("pink","lightblue","lightgreen")
pie(count_estado_civil, labels=etiquetas_estado_civil, col=colores, main = "Estado civil de los trabajadores")
legend("right", legend=c("Casado","Divorciado","Soltero"), fill=colores)

chisq.test(table(rotacion$Rotación, rotacion$Estado_Civil))
## 
##  Pearson's Chi-squared test
## 
## data:  table(rotacion$Rotación, rotacion$Estado_Civil)
## X-squared = 46.164, df = 2, p-value = 9.456e-11

A partir de evaluar dicho \(p-value\) con un nivel de significancia (\(α=0.05\)), se rechaza \(H_0\), es decir, que el estado civil está relacionado con la rotación.

  • Horas extras

Se evidencia que no muchos trabajadores realizan horas extras.

table(rotacion$Horas_Extra, rotacion$Rotación)
##     
##       No  Si
##   No 944 110
##   Si 289 127
count_horas_extras <- table(rotacion$Horas_Extra)
etiquetas_horas_extras <- paste0(count_horas_extras, "=", round(100*count_horas_extras/sum(count_horas_extras), 1), "%")
colores <- c("aquamarine1","#FFB90F")
pie(count_horas_extras, labels=etiquetas_horas_extras, col=colores, main = "Horas extras de los trabajadores")
legend("right", legend=c("No","Si"), fill=colores)

chisq.test(table(rotacion$Rotación, rotacion$Estado_Civil))
## 
##  Pearson's Chi-squared test
## 
## data:  table(rotacion$Rotación, rotacion$Estado_Civil)
## X-squared = 46.164, df = 2, p-value = 9.456e-11

A partir de evaluar dicho \(p-value\) con un nivel de significancia (\(α=0.05\)), se rechaza \(H_0\), es decir, que la realización de horas extras están relacionadas con la rotación.

  • Edad

Se evidencia que las personas con edades entre 25 y 35 tienen mayor rotación.

par(mfrow = c(1,3)) 

hist(rotacion$Edad, main="Total", xlab="Edad", ylab="No. de trabajadores", ylim=c(0,400), col = "lightgreen")

hist(rotacion_No$Edad, main="Trabajadores que no rotan", xlab="Edad", ylab="No. de trabajadores", ylim=c(0,400), col = "orange")

hist(rotacion_Si$Edad, main="Trabajadores que rotan", xlab="Edad", ylab="No. de trabajadores", ylim=c(0,400), col = "yellow")

summarytools::descr(rotacion$Edad)
## Descriptive Statistics  
## rotacion$Edad  
## N: 1470  
## 
##                        Edad
## ----------------- ---------
##              Mean     36.92
##           Std.Dev      9.14
##               Min     18.00
##                Q1     30.00
##            Median     36.00
##                Q3     43.00
##               Max     60.00
##               MAD      8.90
##               IQR     13.00
##                CV      0.25
##          Skewness      0.41
##       SE.Skewness      0.06
##          Kurtosis     -0.41
##           N.Valid   1470.00
##         Pct.Valid    100.00
  • Ingresos mensuales

Se evidencia que a medida que aumenta el ingreso mensual, disminuye la rotación.

par(mfrow = c(1,3)) 

hist(rotacion$Ingreso_Mensual, main="Total", xlab="Ingreso mensual", ylab="No. de trabajadores", ylim=c(0,550), col = "lightgreen")

hist(rotacion_No$Ingreso_Mensual, main="Trabajadores que no rotan", xlab="Ingreso mensual", ylab="No. de trabajadores", ylim=c(0,550), col = "orange")


hist(rotacion_Si$Ingreso_Mensual, main="Trabajadores que rotan", xlab="Ingreso mensual", ylab="No. de trabajadores", ylim=c(0,550), col = "yellow")

summarytools::descr(rotacion$Ingreso_Mensual)
## Descriptive Statistics  
## rotacion$Ingreso_Mensual  
## N: 1470  
## 
##                     Ingreso_Mensual
## ----------------- -----------------
##              Mean           6502.93
##           Std.Dev           4707.96
##               Min           1009.00
##                Q1           2911.00
##            Median           4919.00
##                Q3           8380.00
##               Max          19999.00
##               MAD           3260.24
##               IQR           5468.00
##                CV              0.72
##          Skewness              1.37
##       SE.Skewness              0.06
##          Kurtosis              0.99
##           N.Valid           1470.00
##         Pct.Valid            100.00
  • Años de experiencia:

Se evidencia que las personas con menos años de experiencia tienen mayor rotación.

par(mfrow = c(1,3)) 

hist(rotacion$Años_Experiencia, main="Total", xlab="Años de experiencia", ylab="No. de trabajadores", ylim=c(0,650), col = "lightgreen")

hist(rotacion_No$Años_Experiencia, main="Trabajadores que no rotan", xlab="Años de experiencia", ylab="No. de trabajadores", ylim=c(0,650), col = "orange")

hist(rotacion_Si$Años_Experiencia, main="Trabajadores que rotan", xlab="Años de experiencia", ylab="No. de trabajadores", ylim=c(0,650), col = "yellow")

summarytools::descr(rotacion$Años_Experiencia)
## Descriptive Statistics  
## rotacion$Años_Experiencia  
## N: 1470  
## 
##                     Años_Experiencia
## ----------------- ------------------
##              Mean              11.28
##           Std.Dev               7.78
##               Min               0.00
##                Q1               6.00
##            Median              10.00
##                Q3              15.00
##               Max              40.00
##               MAD               5.93
##               IQR               9.00
##                CV               0.69
##          Skewness               1.11
##       SE.Skewness               0.06
##          Kurtosis               0.91
##           N.Valid            1470.00
##         Pct.Valid             100.00

4.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 hipótesis planteada en el punto 4.2.

Se realiza la codificación para la variable “Rotación”, 0=No, 1=Si.

rotacion$Rotación <- factor(ifelse(rotacion$Rotación == "Si", 1, 0))
head(rotacion$Rotación)
## [1] 1 0 1 0 0 0
## Levels: 0 1
  • Análisis bivariado de las variables Rotación y Viaje de negocios
require(CGPfunctions)
## Cargando paquete requerido: CGPfunctions
## Warning: package 'CGPfunctions' was built under R version 4.4.3
PlotXTabs2(rotacion,Viaje_de_Negocios, Rotación,plottype = "percent", palette = "Accent") + theme(axis.text.x = element_text(angle = 0, hjust = 1))

Se confirma la hipotesis de que las personas que viajan frecuentemente (\(25\%\)) rotan frente a aquellos que viajan ocasionalmente (\(15\%\)) y los que no viajan (\(8\%\)).

  • Análisis bivariado de las variables Rotación y Estado Civil
require(CGPfunctions)
PlotXTabs2(rotacion,Estado_Civil, Rotación,plottype = "percent", palette = "Accent") + theme(axis.text.x = element_text(angle = 0, hjust = 1))

Se confirma la hipotesis de que las personas solteras rotan más que las personas casadas y divorciadas.

  • Análisis bivariado de las variables Rotación y Horas Extra
require(CGPfunctions)
PlotXTabs2(rotacion,Horas_Extra, Rotación,plottype = "percent", palette = "Accent") + theme(axis.text.x = element_text(angle = 0, hjust = 1))

Se evidencia que el \(31\%\) de las personas que realizan horas extras, han rotado.

  • Análisis bivariado de las variables Rotación y Edad
require(plotly)
## Cargando paquete requerido: plotly
## Warning: package 'plotly' was built under R version 4.4.3
## 
## Adjuntando el paquete: '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
P_Edad=ggplot(rotacion,aes(x=Rotación,y=Edad,fill=Rotación))+geom_boxplot()+theme_bw()
ggplotly(P_Edad)
  • Análisis bivariado de las variables Rotación y Ingresos mensuales
require(plotly)
P_IMes=ggplot(rotacion,aes(x=Rotación,y=Ingreso_Mensual,fill=Rotación))+geom_boxplot()+theme_bw()
ggplotly(P_IMes)
  • Análisis bivariado de las variables Rotación y Años de experiencia
require(plotly)
P_AExp=ggplot(rotacion,aes(x=Rotación,y=Años_Experiencia,fill=Rotación))+geom_boxplot()+theme_bw()
ggplotly(P_AExp)

4.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 4.1. Interprete los coeficientes del modelo y la significancia de los parámetros.

Se define el dataframe de interés que contiene las variables seleccionadas.

rotacion_2 = rotacion[,c(1,2,3,12,13,15,18)]
head(rotacion_2,3)
## # A tibble: 3 × 7
##   Rotación  Edad Viaje_de_Negocios Estado_Civil Ingreso_Mensual Horas_Extra
##   <fct>    <dbl> <chr>             <chr>                  <dbl> <chr>      
## 1 1           41 Raramente         Soltero                 5993 Si         
## 2 0           49 Frecuentemente    Casado                  5130 No         
## 3 1           37 Raramente         Soltero                 2090 Si         
## # ℹ 1 more variable: Años_Experiencia <dbl>
table(rotacion_2$Rotación)
## 
##    0    1 
## 1233  237

Se define el modelo de regresión logístico cuya respuesta es Rotación.

modelo_logit = glm(rotacion_2$Rotación ~ Edad +
                                           Ingreso_Mensual +
                                           Años_Experiencia+
                                           Viaje_de_Negocios + 
                                           Estado_Civil + 
                                           Horas_Extra,
                    data = rotacion_2,
                    family = "binomial")

summary(modelo_logit)
## 
## Call:
## glm(formula = rotacion_2$Rotación ~ Edad + Ingreso_Mensual + 
##     Años_Experiencia + Viaje_de_Negocios + Estado_Civil + Horas_Extra, 
##     family = "binomial", data = rotacion_2)
## 
## Coefficients:
##                              Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                -5.145e-01  3.937e-01  -1.307 0.191228    
## Edad                       -2.016e-02  1.161e-02  -1.736 0.082620 .  
## Ingreso_Mensual            -6.393e-05  3.139e-05  -2.037 0.041692 *  
## Años_Experiencia           -3.441e-02  2.040e-02  -1.687 0.091680 .  
## Viaje_de_NegociosNo_Viaja  -1.303e+00  3.500e-01  -3.722 0.000198 ***
## Viaje_de_NegociosRaramente -6.245e-01  1.798e-01  -3.473 0.000514 ***
## Estado_CivilDivorciado     -2.727e-01  2.286e-01  -1.193 0.232909    
## Estado_CivilSoltero         8.303e-01  1.703e-01   4.874 1.09e-06 ***
## Horas_ExtraSi               1.457e+00  1.572e-01   9.269  < 2e-16 ***
## ---
## 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: 1095.0  on 1461  degrees of freedom
## AIC: 1113
## 
## Number of Fisher Scoring iterations: 5

Se observa que las variables “Viaje de NegociosNo_Viaja”, “Viaje de NegociosRaramente”, “Estado_CivilSoltero” y “Horas_ExtraSi” son significativas para el modelo y logran brindar una explicación de la variable respuesta rotación. Mientras que la variable “Estado_CivilDivorciado” no brindan valor dentro del modelo.

exp(modelo_logit$coefficients)
##                (Intercept)                       Edad 
##                  0.5977989                  0.9800423 
##            Ingreso_Mensual           Años_Experiencia 
##                  0.9999361                  0.9661752 
##  Viaje_de_NegociosNo_Viaja Viaje_de_NegociosRaramente 
##                  0.2718085                  0.5355300 
##     Estado_CivilDivorciado        Estado_CivilSoltero 
##                  0.7613387                  2.2939841 
##              Horas_ExtraSi 
##                  4.2924062
  • Reducción de rotación (coeficiente < 1):

Edad (0.9800): A mayor edad, menor probabilidad de rotación. Por cada año más de edad se reduce ligeramente la probabilidad de que el trabajador renuncie. Se puede deducir que los trabajadores más jóvenes suelen cambiar más de trabajo.

Años de experiencia (0.9662): Más experiencia, menor probabilidad de rotación. Por cada año de experiencia, la probabilidad de rotación disminuye. Se puede deducir que los trabajadores más experimentados pueden sentirse más estables en la empresa.

No viaja por negocios (0.2718) y Viaja raramente (0.5355): Menos viajes, menor rotación. Los trabajadores que no viajan tienen menor probabilidad de renunciar en comparación con los que viajan frecuentemente. Se puede deducir que quienes viajan raramente también tienen menor rotación, pero no tanto como los que no viajan.

  • Aumento de rotación (coeficiente > 1):

Estado_Civil Soltero (2.2939): Los trabajadores solteros tienen mayor probabilidad de rotar. Esto puede debersse a que tienen menos compromisos familiares y mayor flexibilidad para cambiar de empleo.

Horas_Extra Si (4.2924): Los trabajadores que hacen horas extra tienen una probabilidad 4 veces mayor de rotar. Esto puede indicar que una alta carga de trabajo puede causar rotación.

  • Poco impacto en la rotación (cerca de 1):

Ingreso mensual (0.9999): El salario no es el principal motivo de rotación.

4.5. Evaluación.

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

pred1 = predict.glm(modelo_logit,newdata = rotacion_2, type="response")
boxplot(pred1)

ypred = ifelse(pred1 >0.4,1,0)
yobser = rotacion_2$Rotación
matrizc = table(yobser,ypred)
matrizc
##       ypred
## yobser    0    1
##      0 1188   45
##      1  171   66
sum(diag(matrizc))/sum(matrizc)
## [1] 0.8530612
library(ROCR)
## Warning: package 'ROCR' was built under R version 4.4.3
pred = ROCR::prediction(pred1,rotacion_2$Rotación)
perf = performance(pred,"tpr","fpr")
plot(perf)
abline(a=0,b=1,col="red")
grid()

#AUC: Area bajo la curva

AUClog1=performance(pred, measure = "auc")@y.values[[1]]
cat("AUC:", AUClog1,"n")
## AUC: 0.7658587 n

Un AUC de \(0.77\) significa que, si se toma aleatoriamente un trabajador que rota y otro que no, el modelo predice correctamente quién es quién el 76.6% de las veces. Es decir que el modelo tiene una buena capacidad predictiva.

4.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).

  • Escenario 1: Trabajador joven, soltero y con poca experiencia, con bajo salario, viajes frecuentes y realización de horas extras. Se tiene una probabilidad de rotación de \(73.8\%\).
(predict(modelo_logit,list(
                      Edad=30,
                      Ingreso_Mensual=993,
                      Años_Experiencia=2,
                      Viaje_de_Negocios ="Frecuentemente",
                      Estado_Civil= "Soltero",
                      Horas_Extra="Si")
         ,type = "response"))*100
##        1 
## 73.79895
  • Escenario 2: Si al mismo empleado se le aumenta el salario, se le quitan los viajes frecuentes y las horas extras, se tiene una probabilidad de rotación de \(14.3\%\).
(predict(modelo_logit,list(
                      Edad=30,
                      Ingreso_Mensual=1993,
                      Años_Experiencia=2,
                      Viaje_de_Negocios ="No_Viaja",
                      Estado_Civil= "Soltero",
                      Horas_Extra="No")
         ,type = "response"))*100
##        1 
## 14.33313

4.7. Conclusiones.

En las conclusiones adicione una discusió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 4.3).

Para disminuir la rotación de sus trabajadores, la empresa puede considerar disminuir la carga laboral, dar incentivos por viajes de negocios frecuentes, evitar viajes innecesarios, brindar beneficios como plan carrera al personal joven y soltero, realizar encuestas de satisfacción, dar reconocimientos.