Contexto. 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 cuáles 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.

Carga de Datos

Realizamos la carga de la base de datos

dim(df)
## [1] 1470   24

La base de datos cuenta con 1470 registros y 24 variables, las cuales se describen a continuación:

Tabla I. Variable de los datos
Característica Tipo_Variable Descripción
Rotación Categórica binaria Si o No
Edad Cuantitativa continua Edad del empleado
Viaje de Negocios Categórica ordinal Indica la frecuencia de viajes por trabajo
Departamento Categórica nominal Área al que pertenece
Distancia a Casa Cuantitativa continua Kilómetros de distancia desde la casa
Educación Categórica ordinal 1=primaria, 2=secundaria, 3=técnico/tecnólogo 4=pregrado y 5=posgrado.
Campo_Educación Categórica nominal Indica area de trabajo
Satisfacción_Ambiental Categórica ordinal 1=Muy insatisfecho, 2=insatisfecho, 3=satisfecho y 4=Muy insatisfecho.
Genero Categórica nominal Indica el sexo del empleado
Cargo Categórica ordinal Indica el cargo del empleado
Satisfación_Laboral Categórica ordinal 1=Muy insatisfecho, 2=insatisfecho, 3=satisfecho y 4=Muy insatisfecho
Estado_Civil Categórica nominal Indica el estado civil del empleado
Ingreso_Mensual Cuantitativa continua Salario del Empleado
Trabajos_Anteriores Cuantitativa discreta Nro de empleos anteriores
Horas_Extra Categórica nominal Indica si hace o no horas extras
Porcentaje_aumento_salarial Cuantitativa continua Indica el % de aumento salarial
Rendimiento_Laboral Categórica ordinal 1= bajo, 2=medio, 3=alto, 4=Muy alto.
Años_Experiencia Cuantitativa continua Años de experiencia
Capacitaciones Cuantitativa discreta Nro de Capacitaciones
Equilibrio_Trabajo_Vida Categórica ordinal 1=Muy bajo, 2=bajo, 3=Medio, 4=alto.
Antigüedad Cuantitativa continua Antiguedad en la empresa
Antigüedad_Cargo Cuantitativa continua Antiguedad en el cargo
Años_ultima_promoción Cuantitativa continua Cantidad de años desde la última promoción
Años_acargo_con_mismo_jefe Cuantitativa continua Cuanto años con el mismo jefe

Seleccion de las variables

A continuación, se seleccionan tres variables categóricas (distintas de la variable respuesta Rotación) y tres variables cuantitativas que se consideran potencialmente relacionadas con dicho fenómeno, tal como se explica a continuación:

Justificacion variables categóricas

  1. Horas_extras: Se espera que la variable “horas extras” se relacione positivamente con la rotación de empleados, ya que trabajar horas adicionales puede generar fatiga, estrés laboral y afectar el equilibrio entre la vida personal y laboral. Esto puede provocar insatisfacción en el empleado y aumentar la probabilidad de que decida abandonar la empresa.

Hipótesis: Los empleados que trabajan horas extra tienen mayor probabilidad de rotación que aquellos que no trabajan horas extra.

  1. Estado_Civil: Se espera que la variable estado civil influya en la rotación, ya que la estabilidad personal puede afectar la estabilidad laboral. Por ejemplo, empleados solteros pueden tener mayor movilidad laboral y mayor disposición a cambiar de empleo, mientras que empleados casados podrían buscar mayor estabilidad económica y laboral.

Hipótesis: Los empleados solteros presentan mayor probabilidad de rotación que los empleados casados.

  1. Satisfación_Laboral: Se espera que la satisfacción laboral se relacione negativamente con la rotación, ya que los empleados con mayor satisfacción laboral tienden a permanecer en la empresa, mientras que aquellos con bajos niveles de satisfacción tienen mayor probabilidad de renunciar. La satisfacción laboral es uno de los factores más estudiados en la literatura de rotación de personal.

Hipótesis: A menor satisfacción laboral, mayor probabilidad de rotación.

Justificacion variables cuantitativas

  1. Ingreso_Mensual: Se espera que el ingreso mensual se relacione negativamente con la rotación, ya que empleados con mayores salarios tienen mayores incentivos para permanecer en la empresa, mientras que empleados con salarios más bajos pueden buscar mejores oportunidades laborales.

Hipótesis: A mayor ingreso mensual, menor probabilidad de rotación.

  1. Antigüedad: Se espera que la antigüedad en la empresa se relacione negativamente con la rotación, ya que los empleados con mayor tiempo en la empresa suelen tener mayor estabilidad laboral, mayor conocimiento del puesto y mayores beneficios acumulados, lo que reduce la probabilidad de abandonar la organización.

Hipótesis: A mayor antigüedad, menor probabilidad de rotación.

  1. Edad: Se espera que la edad se relacione negativamente con la rotación, ya que los empleados más jóvenes suelen tener mayor movilidad laboral y buscan oportunidades de crecimiento profesional, mientras que los empleados de mayor edad tienden a buscar estabilidad laboral.

Hipótesis: Los empleados más jóvenes tienen mayor probabilidad de rotación que los empleados de mayor edad.

En general, se espera que las variables relacionadas con condiciones laborales desfavorables, como el exceso de horas de trabajo y la baja satisfacción laboral, incrementen la probabilidad de rotación. Por otro lado, variables asociadas con estabilidad laboral y económica, como el ingreso mensual, la antigüedad y la edad, se espera que reduzcan la probabilidad de rotación. Estas hipótesis serán contrastadas mediante la estimación del modelo Logit.

Análisis Univariado

df2 <- df[, c("Rotación",
              "Horas_Extra",
              "Estado_Civil",
              "Satisfación_Laboral",
              "Ingreso_Mensual",
              "Antigüedad",
              "Edad")]

Se realiza un análisis univariado con el fin de caracterizar la información contenida en la base de datos de rotación.

Análisis univariado – Variables categóricas

Previo al análisis univariado de las variables categóricas (Rotación, Horas Extras, Estado Civil y Satisfacción Laboral), se realiza una verificación de la consistencia en la codificación de sus categorías. Como resultado, no se evidenciaron desviaciones que requirieran tratamiento adicional, tales como diferencias en el uso de mayúsculas y minúsculas o la presencia de categorías duplicadas. En consecuencia, se procede con el análisis univariado de dichas variables:

Rotación

table(df$Rotación)
## 
##   No   Si 
## 1233  237
prop.table(table(df$Rotación))
## 
##        No        Si 
## 0.8387755 0.1612245
ggplot(df, aes(x = factor(Rotación), fill = factor(Rotación))) +
  geom_bar() +
  labs(title = "Rotación de empleados",
       x = "Rotación",
       y = "Frecuencia",
       fill = "Rotación") +
  scale_fill_manual(values = c("#727D84", "#AE123A"))
**Figura 1.1**: Distribucion Rotación

Figura 1.1: Distribucion Rotación

La variable Rotación es la variable respuesta del estudio y corresponde a una variable dicotómica que indica si el empleado abandona la empresa o permanece en ella. A partir de la tabla de frecuencias y la Figura 1.1 se observa que el 16,1% de los empleados presentan rotación, mientras que el 83,8% permanecen en la empresa. Esto indica que la base de datos presenta una distribución desbalanceada, lo cual es importante para la estimación del modelo Logit.

Horas Extras

# Crear tabla de frecuencias
tabla_horas <- as.data.frame(table(df$Horas_Extra))
colnames(tabla_horas) <- c("Horas_Extra", "Frecuencia")

tabla_horas <- tabla_horas %>%
  mutate(Porcentaje = Frecuencia / sum(Frecuencia),
         etiqueta = paste0(Horas_Extra, " (", round(Porcentaje*100, 1), "%)"))

ggplot(tabla_horas, aes(x = "", y = Frecuencia, fill = Horas_Extra)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y", start = 0) +
  geom_text(aes(label = etiqueta),
            position = position_stack(vjust = 0.5)) +
  labs(title = "Distribución de Horas Extras",
       fill = "Horas Extras") +
  scale_fill_manual(values = c("No" = "#C3C3C3",
                               "Si" = "#B0779E")) +
  theme_void()
**Figura 1.2**: Distribución de empleados según Horas Extra

Figura 1.2: Distribución de empleados según Horas Extra

En la Figura 1.2 se muestra la distribución de los empleados según la variable Horas Extra. Se observa que la mayor proporción de empleados no trabaja horas extra (71.7%), mientras que una menor proporción sí realiza horas adicionales (28.3%). Esta variable es relevante en el estudio, ya que el exceso de trabajo puede generar fatiga y disminuir la satisfacción laboral, lo que podría aumentar la probabilidad de rotación.

Estado Civil

table(df$Estado_Civil)
## 
##     Casado Divorciado    Soltero 
##        673        327        470
prop.table(table(df$Estado_Civil))
## 
##     Casado Divorciado    Soltero 
##  0.4578231  0.2224490  0.3197279
ggplot(df, aes(x = Estado_Civil)) +
  geom_bar(fill = "#76669B") +
  labs(title = "Estado Civil", x = "Estado Civil", y = "Frecuencia")
**Figura 1.3**: Distribución de empleados según Estado civil

Figura 1.3: Distribución de empleados según Estado civil

Se observa, segun la Figura 1.3 que la mayor proporción de empleados pertenece a la categoría Casados (45,7%), seguida de solteros (31,9%) y la menor proporción para divorciados (22,2%). Esta variable permitirá evaluar si la estabilidad personal influye en la permanencia en la empresa.

Satisfacción Laboral

table(df$Satisfación_Laboral)
## 
##   1   2   3   4 
## 289 280 442 459
prop.table(table(df$Satisfación_Laboral))
## 
##         1         2         3         4 
## 0.1965986 0.1904762 0.3006803 0.3122449
ggplot(df, aes(x = Satisfación_Laboral)) +
  geom_bar(fill = "#CD6E94") +
  labs(title = "Satisfacción Laboral", x = "Nivel", y = "Frecuencia")
**Figura 1.4**: Distribución de empleados según Satisfacción Laboral

Figura 1.4: Distribución de empleados según Satisfacción Laboral

La variable satisfacción laboral (Figura 1.4) presenta una distribución donde la mayoría de los empleados (+60%) se ubican en niveles 3 y 4, lo que corresponde a empleados satisfechos y muy satisfechos con su trabajo. Por otra parte, aproximadamente el 40% de los empleados se encuentran en niveles bajos de satisfacción laboral. Esta variable es relevante para el estudio, ya que niveles bajos de satisfacción podrían estar asociados con una mayor probabilidad de rotación, mientras que niveles altos de satisfacción podrían favorecer la permanencia del empleado en la empresa.

Análisis univariado – Variables cuantitativas

Ingreso mensual

summary(df$Ingreso_Mensual)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1009    2911    4919    6503    8379   19999

Desviacion estandar:

sd(df$Ingreso_Mensual, na.rm = TRUE)
## [1] 4707.957
ggplot(df, aes(x = Ingreso_Mensual)) +
  geom_histogram(fill = "#AF7AC5", bins = 30)
**Figura 1.6**: Distribución de empleados según Ingreso Mensual

Figura 1.6: Distribución de empleados según Ingreso Mensual

ggplot(df, aes(y = Ingreso_Mensual)) +
  geom_boxplot(fill = "#AF7AC5")
**Figura 1.7**: Boxplot. Empleados según Ingreso Mensual

Figura 1.7: Boxplot. Empleados según Ingreso Mensual

La variable Ingreso Mensual presenta un promedio de 6.503 y una mediana de 4.919, lo que indica que el ingreso típico de los empleados se encuentra alrededor de este valor. Se observa que la media es mayor que la mediana, lo que sugiere que la distribución del ingreso presenta asimetría positiva, es decir, existen empleados con ingresos altos que elevan el promedio.

La desviación estándar es de 4.707, lo que indica que existe una dispersión considerable en los ingresos de los empleados, evidenciando diferencias salariales importantes dentro de la empresa. El ingreso mensual oscila entre 1.009 y 19.999, lo que confirma la presencia de empleados con salarios significativamente más altos que el resto.

La Figura 1.6 muestra que la mayor concentración de empleados se encuentra en niveles salariales bajos y medios, mientras que el diagrama de caja (Figura 1.7) evidencia la presencia de valores atípicos en los niveles salariales más altos. Esta variable es relevante en el estudio, ya que el nivel salarial puede influir en la decisión del empleado de permanecer o abandonar la empresa, dado que empleados con menores ingresos podrían tener mayor probabilidad de rotación.

La variabilidad observada en el ingreso mensual puede estar influenciada por el cargo que desempeña el empleado dentro de la organización, dado que cargos con mayor nivel de responsabilidad, experiencia o jerarquía suelen estar asociados a mayores niveles salariales. En este sentido, el ingreso mensual no depende únicamente de características individuales del empleado, sino también de factores organizacionales relacionados con la estructura salarial de la empresa.

Antigüedad

summary(df$Antigüedad)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   3.000   5.000   7.008   9.000  40.000

Desviacion estandar:

sd(df$Antigüedad, na.rm = TRUE)
## [1] 6.126525
ggplot(df, aes(x = Antigüedad)) +
  geom_histogram(fill = "#8867A1", bins = 30)
**Figura 1.8**: Distribución de empleados según antiguedad

Figura 1.8: Distribución de empleados según antiguedad

ggplot(df, aes(y = Antigüedad)) +
  geom_boxplot(fill = "#8867A1")
**Figura 1.9**: Boxplot. Empleados según Antiguedad en la empresa

Figura 1.9: Boxplot. Empleados según Antiguedad en la empresa

La variable Antigüedad presenta un promedio de 7 años y una mediana de 5 años, lo que indica que la mayoría de los empleados tiene relativamente pocos años de permanencia en la empresa. La desviación estándar es de 6,13 años, lo que evidencia una dispersión moderada en la antigüedad de los empleados. Los valores de antigüedad oscilan entre 0 y 40 años.

El histograma (Figura 1.8) muestra que la mayor concentración de empleados se encuentra en niveles bajos de antigüedad, principalmente entre 0 y 10 años, lo que indica que la empresa cuenta con una alta proporción de empleados relativamente nuevos. Por otra parte, el diagrama de caja (Figura 1.9) evidencia la presencia de valores atípicos correspondientes a empleados con muchos años de permanencia en la empresa.

La distribución de la antigüedad presenta asimetría positiva, ya que existe un grupo reducido de empleados con muchos años en la empresa, mientras que la mayoría presenta pocos años de permanencia. Esta variable es relevante en el estudio, ya que la antigüedad puede influir en la rotación laboral, dado que empleados con menor antigüedad podrían tener mayor probabilidad de abandonar la empresa, mientras que empleados con mayor antigüedad podrían presentar mayor estabilidad laboral.

Edad

summary(df$Edad)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   18.00   30.00   36.00   36.92   43.00   60.00

Desviacion estandar:

sd(df$Edad, na.rm = TRUE)
## [1] 9.135938
ggplot(df, aes(x = Edad)) +
  geom_histogram(fill = "#CD9ABC", bins = 30)
**Figura 1.10**: Distribución de empleados según Edad

Figura 1.10: Distribución de empleados según Edad

ggplot(df, aes(y = Edad)) +
  geom_boxplot(fill = "#CD9ABC")
**Figura 1.11**: Boxplot. Empleados según Edad

Figura 1.11: Boxplot. Empleados según Edad

La variable Edad presenta un promedio de 36,92 años y una mediana de 36 años, lo que indica que la edad típica de los empleados se encuentra alrededor de los 36 años. La desviación estándar es de 9,13 años, lo que evidencia una dispersión moderada en la edad de los empleados. Las edades oscilan entre 18 y 60 años.

La Figura 1.10 muestra que la mayor concentración de empleados se encuentra aproximadamente entre los 30 y 45 años, lo que indica que la empresa cuenta principalmente con empleados en edades adultas y en etapa productiva laboral. La Figura 1.11 no evidencia valores atípicos significativos, lo que indica que la variable edad no presenta valores extremos.

La distribución de la edad es relativamente simétrica, ya que la media y la mediana son muy similares. Esta variable es importante en el estudio, ya que la edad puede influir en la rotación laboral, dado que empleados más jóvenes podrían tener mayor probabilidad de cambiar de empleo en busca de mejores oportunidades, mientras que empleados de mayor edad podrían presentar mayor estabilidad laboral.

Análisis Bivariado

A continuación se realiza un análisis bivariado tomando como variable respuesta la Rotación, la cual se encuentra codificada como una variable dicotómica, donde y=1 indica que el empleado presenta rotación y y=0 que el empleado no rota.

df2$Rotación <- ifelse(df2$Rotación == "Si", 1, 0)
df2$Rotación <- as.numeric(df2$Rotación)
table(df2$Rotación)
## 
##    0    1 
## 1233  237

Análisis bivariado – Variables categóricas

Rotación y Horas Extras

prop.table(table(df2$Horas_Extra, df2$Rotación), 1)
##     
##              0         1
##   No 0.8956357 0.1043643
##   Si 0.6947115 0.3052885
df2$Rotación <- factor(df2$Rotación,
                       levels = c(0,1),
                       labels = c("No rota", "Sí rota"))


ggplot(df2, aes(x = Horas_Extra, fill = Rotación)) +
  geom_bar(position = "fill") +
  geom_text(stat = "count",
            aes(label = percent(..count../tapply(..count.., ..x.., sum)[..x..])),
            position = position_fill(vjust = 0.5),
            size = 4) +
  labs(title = "Rotación vs Horas Extra",
       y = "Proporción",
       fill = "Rotación") +
  scale_y_continuous(labels = percent) +
  scale_fill_manual(values = c("No rota" = "#727D84",
                               "Sí rota" = "#AE123A"))
**Figura 1.12**: Distribución rotación versus horas Extras

Figura 1.12: Distribución rotación versus horas Extras

# Horas Extra vs Rotación
tabla_horas <- table(df2$Horas_Extra, df2$Rotación)
chisq.test(tabla_horas)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  tabla_horas
## X-squared = 87.564, df = 1, p-value < 2.2e-16

Con el fin de analizar la relación entre la rotación de empleados y la realización de horas extra, se construyó una tabla de proporciones y un gráfico de barras apiladas que muestran la proporción de empleados que rotan y no rotan dentro de cada categoría de horas extra.

Los resultados de la Figura 1.12, entre los empleados que no trabajan horas extra, aproximadamente el 10% presenta rotación, mientras que el 90% permanece en la empresa. Por otro lado, entre los empleados que sí trabajan horas extra, la proporción de rotación aumenta a aproximadamente 31%, mientras que el 69% permanece en la empresa.

Esto evidencia que la proporción de rotación es considerablemente mayor en los empleados que trabajan horas extra en comparación con aquellos que no realizan horas adicionales, lo que sugiere que la sobrecarga laboral podría estar asociada con una mayor probabilidad de rotación.

Para confirmar esta relación, se realizó la prueba de independencia Chi-cuadrado, obteniendo un p-valor menor a 0,05, lo que permite rechazar la hipótesis nula de independencia y concluir que existe una relación estadísticamente significativa entre la realización de horas extra y la rotación de empleados.

Este resultado es consistente con la hipótesis planteada en el análisis univariado, donde se propuso que los empleados que trabajan horas extra podrían presentar mayor probabilidad de rotación debido al desgaste laboral y al desequilibrio entre la vida personal y laboral.

Rotación y Estado Civil

prop.table(table(df2$Estado_Civil, df2$Rotación), 1)
##             
##                No rota   Sí rota
##   Casado     0.8751857 0.1248143
##   Divorciado 0.8990826 0.1009174
##   Soltero    0.7446809 0.2553191
ggplot(df2, aes(x = Estado_Civil, fill = Rotación)) +
  geom_bar(position = "fill") +
  geom_text(stat = "count",
            aes(label = percent(..count../tapply(..count.., ..x.., sum)[..x..])),
            position = position_fill(vjust = 0.5),
            size = 4) +
  labs(title = "Rotación vs Estado Civil",
       y = "Proporción",
       fill = "Rotación") +
  scale_y_continuous(labels = percent) +
  scale_fill_manual(values = c("No rota" = "#727D84",
                               "Sí rota" = "#AE123A"))
**Figura 1.13**: Distribución Rotación vs Estado Civil

Figura 1.13: Distribución Rotación vs Estado Civil

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

El comportamiento de la rotación según el estado civil muestra diferencias relevantes entre los grupos analizados. Como se observa en la Figura 1.13, los empleados solteros presentan una mayor proporción de rotación (25,5%), mientras que los empleados casados y divorciados registran niveles considerablemente menores, cercanos al 12,5% y 10,1%, respectivamente.

Estas diferencias sugieren que el estado civil podría estar asociado con distintos niveles de estabilidad laboral, siendo los empleados solteros más propensos a abandonar la empresa en comparación con aquellos que cuentan con una situación personal más estable.

Para evaluar formalmente esta posible asociación, se aplicó la prueba Chi-cuadrado de independencia, obteniendo un p-valor inferior a 0,05. Este resultado permite concluir que existe evidencia estadísticamente significativa de dependencia entre el estado civil y la rotación de los empleados.

En consecuencia, el estado civil se considera una variable explicativa relevante dentro del análisis, resultado que es consistente con la hipótesis planteada en el análisis univariado. Por ello, será incorporado en el modelo Logit para evaluar su efecto en conjunto con las demás variables

Rotación y Satisfacción Laboral:

prop.table(table(df2$Satisfación_Laboral, df2$Rotación), 1)
##    
##       No rota   Sí rota
##   1 0.7716263 0.2283737
##   2 0.8357143 0.1642857
##   3 0.8348416 0.1651584
##   4 0.8867102 0.1132898
ggplot(df2, aes(x = Satisfación_Laboral, fill = Rotación)) +
  geom_bar(position = "fill") +
  geom_text(stat = "count",
            aes(label = percent(..count../tapply(..count.., ..x.., sum)[..x..])),
            position = position_fill(vjust = 0.5),
            size = 4) +
  labs(title = "Rotación vs Satisfación Laboral",
       y = "Proporción",
       fill = "Rotación") +
  scale_y_continuous(labels = percent) +
  scale_fill_manual(values = c("No rota" = "#727D84",
                               "Sí rota" = "#AE123A"))
**Figura 1.14**: Distribución Rotación vs Satisfacción Laboral

Figura 1.14: Distribución Rotación vs Satisfacción Laboral

# Satisfacción Laboral vs Rotación
tabla_satisf <- table(df2$Satisfación_Laboral, df2$Rotación)
chisq.test(tabla_satisf)
## 
##  Pearson's Chi-squared test
## 
## data:  tabla_satisf
## X-squared = 17.505, df = 3, p-value = 0.0005563

El análisis de rotación según los niveles de satisfacción laboral evidencia un patrón claro en el comportamiento de los empleados. Tal como se observa en la distribución de proporciones (Figura 1.14), existe una relación inversa entre ambas variables: a medida que aumenta la satisfacción laboral, disminuye la proporción de empleados que abandonan la empresa.

En particular, los empleados con niveles bajos de satisfacción (nivel 1) presentan una proporción de rotación cercana al 22,8%, mientras que aquellos con niveles altos (nivel 4) registran una proporción considerablemente menor, alrededor del 11,3%. Esto indica que los empleados menos satisfechos presentan una probabilidad de rotación significativamente mayor en comparación con aquellos que reportan mayores niveles de satisfacción.

Este comportamiento sugiere que la satisfacción laboral desempeña un papel clave en la permanencia de los empleados, ya que niveles reducidos pueden estar asociados con menor compromiso organizacional, desmotivación y una mayor intención de abandonar la empresa.

Con el fin de evaluar formalmente esta relación, se aplicó la prueba Chi-cuadrado de independencia, obteniendo un p-valor de 0.0005563, inferior al nivel de significancia de 0,05. En consecuencia, se rechaza la hipótesis nula de independencia, concluyendo que existe una relación estadísticamente significativa entre la satisfacción laboral y la rotación.

Este resultado se encuentra en concordancia con lo planteado en el análisis univariado, donde se anticipaba que niveles bajos de satisfacción laboral estarían asociados con una mayor probabilidad de rotación.

Análisis bivariado – Variables cuantitativas

En esta sección se comparan las medidas de tendencia central de las variables cuantitativas entre los empleados que presentan rotación y aquellos que no.

Rotacion e Ingresos Mensuales

Con el fin de determinar la prueba estadística adecuada para el análisis bivariado, se evaluará si la variable Ingreso_Mensual sigue una distribución normal. Para ello, se empleará la prueba de Shapiro-Wilk, la cual permite contrastar la hipótesis nula de normalidad en los datos. Cabe mencionar que, a partir del análisis univariado previamente realizado, no se evidenciaba un comportamiento compatible con una distribución normal; sin embargo, se procede a realizar esta prueba con el fin de confirmar formalmente dicho supuesto:

shapiro.test(df2$Ingreso_Mensual)
## 
##  Shapiro-Wilk normality test
## 
## data:  df2$Ingreso_Mensual
## W = 0.82791, p-value < 2.2e-16

A partir de la prueba de Shapiro-Wilk aplicada a la variable Ingreso_Mensual, se obtuvo un valor p inferior a 2.2e-16. Dado que este valor es menor al nivel de significancia usual (α = 0.05), se rechaza la hipótesis nula de normalidad. Por lo tanto, se concluye que la variable no sigue una distribución normal.

Dado que la variable Ingreso_Mensual no cumple con el supuesto de normalidad, se opta por utilizar el Test Mann-Whitney, una prueba no paramétrica que permite comparar dos grupos independientes. Esta prueba contrasta la hipótesis nula de que las distribuciones de ambos grupos son iguales, frente a la hipótesis alternativa de que existen diferencias significativas entre ellos:

wilcox.test(Ingreso_Mensual ~ Rotación, data = df2)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  Ingreso_Mensual by Rotación
## W = 191601, p-value = 2.951e-14
## alternative hypothesis: true location shift is not equal to 0

El resultado arrojó un valor p de 2.951e-14, el cual es inferior al nivel de significancia de 0.05. Por lo tanto, se rechaza la hipótesis nula y se concluye que existen diferencias estadísticamente significativas en el ingreso mensual entre los empleados que presentan rotación y aquellos que no. Este resultado se respalda gráficamente en la siguiente Figura 1.15, donde se evidencia que la mediana del ingreso mensual es mayor en el grupo de empleados que no rotan (5204) en comparación con aquellos que sí rotan (3202), lo que sugiere una posible relación inversa entre el nivel de ingreso y la probabilidad de rotación. Este hallazgo es consistente con la hipótesis planteada en el análisis univariado, la cual se confirma con los resultados obtenidos:

aggregate(Ingreso_Mensual ~ Rotación, data = df2, median)
##   Rotación Ingreso_Mensual
## 1  No rota            5204
## 2  Sí rota            3202
ggplot(df2, aes(x = factor(Rotación), y = Ingreso_Mensual, fill = factor(Rotación))) +
  geom_boxplot() +
  scale_fill_manual(values = c("#727D84", "#AE123A"),
                    labels = c("No rota", "Sí rota")) +
  scale_x_discrete(labels = c("No rota", "Sí rota")) +
  labs(title = "Ingreso mensual vs Rotación",
       x = "Rotación",
       y = "Ingreso mensual",
       fill = "Rotación") +
  theme_minimal()
**Figura 1.15**: Boxplot. Rotación vs Ingresos

Figura 1.15: Boxplot. Rotación vs Ingresos

Rotación y Edad

Se evalúa el supuesto de normalidad para la variable Edad mediante la prueba de Shapiro-Wilk, con el fin de definir la prueba estadística adecuada para el análisis bivariado. De acuerdo con el análisis univariado previo, no se evidenciaba normalidad, lo cual se valida formalmente mediante esta prueba:

shapiro.test(df2$Edad)
## 
##  Shapiro-Wilk normality test
## 
## data:  df2$Edad
## W = 0.97745, p-value = 2.03e-14

Al igual que en la variable Ingreso_Mensual, la variable Edad no cumple con el supuesto de normalidad. Por lo tanto, se procede a aplicar la Mann-Whitney U test para comparar los grupos independientes.

wilcox.test(Edad ~ Rotación, data = df2)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  Edad by Rotación
## W = 185366, p-value = 5.281e-11
## alternative hypothesis: true location shift is not equal to 0

El análisis evidenció un valor p de 5.281e-11, significativamente menor al nivel de significancia de 0.05, lo que indica que existen diferencias relevantes en la edad entre los empleados que presentan rotación y aquellos que no. Esta diferencia se observa en la Figura 1.16, donde se aprecia una variación en la mediana de la edad entre los grupos, sugiriendo que esta variable podría influir en la probabilidad de rotación.

aggregate(Edad ~ Rotación, data = df2, median)
##   Rotación Edad
## 1  No rota   36
## 2  Sí rota   32
ggplot(df2, aes(x = factor(Rotación), y = Edad, fill = factor(Rotación))) +
  geom_boxplot() +
  scale_fill_manual(values = c("#727D84", "#AE123A"),
                    labels = c("No rota", "Sí rota")) +
  scale_x_discrete(labels = c("No rota", "Sí rota")) +
  labs(title = "Edad vs Rotación",
       x = "Rotación",
       y = "Edad",
       fill = "Rotación") +
  theme_minimal()
**Figura 1.16**: Boxplot. Rotación vs Edad

Figura 1.16: Boxplot. Rotación vs Edad

Los resultados muestran que los empleados que no rotan tienen una edad mediana de 36 años, mientras que los empleados que sí rotan tienen una edad mediana de 32 años. En términos laborales, este resultado sugiere que los empleados más jóvenes presentan mayor rotación, lo cual puede estar asociado a que se encuentran en etapas iniciales de su vida laboral, con mayor movilidad entre empleos, búsqueda de mejores oportunidades o menor estabilidad laboral en comparación con empleados de mayor edad.

Rotación y Antiguedad

Se evalúa la normalidad de la variable Antiguedad mediante la prueba de Shapiro-Wilk.

shapiro.test(df2$Antigüedad)
## 
##  Shapiro-Wilk normality test
## 
## data:  df2$Antigüedad
## W = 0.83899, p-value < 2.2e-16

Dado que no se evidencia normalidad, se procede a aplicar la misma prueba no paramétrica utilizada en las variables anteriores:

wilcox.test(Antigüedad ~ Rotación, data = df2)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  Antigüedad by Rotación
## W = 189639, p-value = 2.916e-13
## alternative hypothesis: true location shift is not equal to 0

Los resultados obtenidos muestran evidencia estadística suficiente (p-value = 2.916e-13) para afirmar que la antiguedad difiere entre los grupos de empleados según su condición de rotación. Tal como se observa en la Figura 1.17, la mediana de la antiguedad no es equivalente entre los grupos, lo que permite inferir que la antiguedad podría desempeñar un papel relevante en la dinámica de rotación.

aggregate(Antigüedad ~ Rotación, data = df2, median)
##   Rotación Antigüedad
## 1  No rota          6
## 2  Sí rota          3
ggplot(df2, aes(x = factor(Rotación), y = Antigüedad, fill = factor(Rotación))) +
  geom_boxplot() +
  scale_fill_manual(values = c("#727D84", "#AE123A"),
                    labels = c("No rota", "Sí rota")) +
  scale_x_discrete(labels = c("No rota", "Sí rota")) +
  labs(title = "Antigüedad vs Rotación",
       x = "Rotación",
       y = "Antigüedad",
       fill = "Rotación") +
  theme_minimal()
**Figura 1.17**: Boxplot. Rotación vs Antiguedad

Figura 1.17: Boxplot. Rotación vs Antiguedad

Se observa que los empleados que no presentan rotación tienen una mediana de antigüedad de 6 años, en contraste con los empleados que sí rotan, cuya antigüedad es menor, alrededor de 3 años. Este resultado indica que la probabilidad de abandono es mayor en empleados con menor tiempo de vinculación a la organización.

Correlación entre Edad y Antiguedad

Con el fin de evaluar la posible existencia de colinealidad entre las variables Edad y Antigüedad, se calculara el coeficiente de correlación de Pearson y el Factor de Inflación de la Varianza (VIF).

Coeficiente de Correlación:

cor(df2$Edad, df2$Antigüedad, use = "complete.obs")
## [1] 0.3112408

Grafico de Dispersión:

ggplot(df2, aes(x = Edad, y = Antigüedad)) +
  geom_point(color = "#2E86C1", alpha = 0.6) +
  geom_smooth(method = "lm", se = FALSE, color = "red") +
  labs(title = "Relación entre Edad y Antigüedad",
       x = "Edad",
       y = "Antigüedad") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
**Figura 1.18**: Dispersión Edad vs Antiguedad

Figura 1.18: Dispersión Edad vs Antiguedad

Factor VIF (Mide colinealidad):

modelo_vif <- lm(Ingreso_Mensual ~ Edad + Antigüedad, data = df2)
vif(modelo_vif)
##       Edad Antigüedad 
##   1.107261   1.107261

El coeficiente de correlación obtenido fue de 0,311, lo que indica una relación débil entre ambas variables. Esto sugiere que, aunque existe una relación positiva —lo cual es lógico, ya que empleados de mayor edad tienden a tener mayor antigüedad—, la relación no es lo suficientemente fuerte como para generar problemas de colinealidad (Figura 1.18).

Adicionalmente, se calcularon los valores del Factor de Inflación de la Varianza (VIF), obteniendo valores de 1,107 para ambas variables. Dado que estos valores son cercanos a 1 y muy inferiores a 5, se concluye que no existe colinealidad significativa entre las variables Edad y Antigüedad.

Por lo tanto, ambas variables pueden ser incluidas simultáneamente en el modelo Logit sin que se presenten problemas de multicolinealidad o inestabilidad en los coeficientes estimados.

Estimación del modelo

Se estima un modelo de regresión logística en el cual la variable respuesta es Rotación, codificada como una variable dicotómica, donde y=1 indica que el empleado presenta rotación y y=0 que no presenta rotación. Como variables explicativas, se incorporan las seis covariables seleccionadas en el análisis previo.

\(Rotación\) ~ \(Horas_Extra + Estado_Civil + Satisfación_Laboral + Ingreso_Mensual + Edad + Antigüedad\)

Rotacion_bin <- ifelse(df2$Rotación == "Sí rota", 1, 0)
modelo_logit <- glm(Rotación ~ Horas_Extra + Estado_Civil + factor(Satisfación_Laboral) +
                    Ingreso_Mensual + Edad + Antigüedad,
                    data = df2, family = binomial)

summary(modelo_logit)
## 
## Call:
## glm(formula = Rotación ~ Horas_Extra + Estado_Civil + factor(Satisfación_Laboral) + 
##     Ingreso_Mensual + Edad + Antigüedad, family = binomial, 
##     data = df2)
## 
## Coefficients:
##                                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                  -3.000e-01  3.735e-01  -0.803  0.42181    
## Horas_ExtraSi                 1.517e+00  1.587e-01   9.555  < 2e-16 ***
## Estado_CivilDivorciado       -3.260e-01  2.294e-01  -1.421  0.15535    
## Estado_CivilSoltero           8.523e-01  1.709e-01   4.986 6.16e-07 ***
## factor(Satisfación_Laboral)2 -4.362e-01  2.344e-01  -1.861  0.06275 .  
## factor(Satisfación_Laboral)3 -4.596e-01  2.069e-01  -2.221  0.02637 *  
## factor(Satisfación_Laboral)4 -1.063e+00  2.214e-01  -4.799 1.59e-06 ***
## Ingreso_Mensual              -7.785e-05  2.659e-05  -2.928  0.00342 ** 
## Edad                         -2.854e-02  1.006e-02  -2.836  0.00456 ** 
## Antigüedad                   -3.635e-02  1.843e-02  -1.972  0.04857 *  
## ---
## 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: 1088.4  on 1460  degrees of freedom
## AIC: 1108.4
## 
## Number of Fisher Scoring iterations: 5

El modelo de regresión logística estimado en su forma original (modelo logit) se expresa como:

\[ \ln\left(\frac{\hat{P}_i}{1-\hat{P}_i}\right) = -0.300 + 1.517\,\text{Horas Extra} - 0.326\,\text{Estado Civil Divorciado} \\[6pt] \quad + 0.852\,\text{Estado Civil Soltero} - 0.436\,I(\text{Satisfación Laboral}=2) - 0.460\,I(\text{Satisfación Laboral}=3) \\[6pt] \quad - 1.063\,I(\text{Satisfación Laboral}=4) - 0.0000779\,\text{Ingreso Mensual} - 0.0285\,\text{Edad} \\[6pt] \quad - 0.0364\,\text{Antigüedad} \tag{1} \]

Significancia Individual de las variables

En este caso la significancia del modelo se determina por los valores del estadístico Wald chi-square, bajo la condición el tamaño de la muestra grande.

\[H0:βi=0\] \[ H1:βi≠0 \]

Estadístico de prueba:

\[ W_i = \frac{\hat{\beta}_i}{\sigma_{\hat{\beta}_i}} \sim N(0,1) \] Los coeficientes obtenidos son los siguientes:

tabla_pvalores <- summary(modelo_logit)$coefficients[,4]

tabla1 <- data.frame(
  Variable = rownames(summary(modelo_logit)$coefficients),
  `p-valor` = tabla_pvalores
)

kable(tabla1, digits = 4,
      caption = "Tabla II. Valores-p de los coeficientes del modelo logístico") %>%
  kable_styling(full_width = FALSE, position = "center")
Tabla II. Valores-p de los coeficientes del modelo logístico
Variable p.valor
(Intercept) (Intercept) 0.4218
Horas_ExtraSi Horas_ExtraSi 0.0000
Estado_CivilDivorciado Estado_CivilDivorciado 0.1553
Estado_CivilSoltero Estado_CivilSoltero 0.0000
factor(Satisfación_Laboral)2 factor(Satisfación_Laboral)2 0.0628
factor(Satisfación_Laboral)3 factor(Satisfación_Laboral)3 0.0264
factor(Satisfación_Laboral)4 factor(Satisfación_Laboral)4 0.0000
Ingreso_Mensual Ingreso_Mensual 0.0034
Edad Edad 0.0046
Antigüedad Antigüedad 0.0486

En la Tabla II se presentan los valores-p asociados a cada uno de los coeficientes del modelo logístico, obtenidos a partir del estadístico de Wald. Los resultados muestran que las variables Horas Extra, Estado Civil Soltero, Ingreso Mensual y Edad son estadísticamente significativas al 5%, lo que indica que estas variables tienen un efecto significativo sobre la probabilidad de rotación. Por otro lado, la variable Estado Civil Divorciado no resulta estadísticamente significativa, ya que su valor-p es mayor a 0.05, por lo que no se encuentra evidencia suficiente para afirmar que esta variable influya en la probabilidad de rotación.

En el caso de la variable Satisfacción Laboral, al haber sido incluida en el modelo como una variable categórica, se observa que los niveles 3 y 4 son estadísticamente significativos al 5%, mientras que el nivel 2 presenta significancia al 10%. Los coeficientes asociados a estos niveles son negativos, lo que indica que, en comparación con el nivel base de satisfacción, los empleados con mayores niveles de satisfacción presentan una menor probabilidad de rotación. Adicionalmente, se evidencia que este efecto se intensifica a medida que aumenta el nivel de satisfacción laboral, siendo más pronunciado en el nivel 4. Este resultado sugiere una relación inversa entre la satisfacción laboral y la rotación, en concordancia con lo observado en el análisis bivariado.

Finalmente, la variable Antigüedad presenta un valor-p de 0.047, el cual es ligeramente menor que 0.05, por lo que resulta significativa al 5%. Sin embargo, dado que su valor se encuentra cercano al límite del nivel de significancia, su efecto debe interpretarse con cierta cautela, aunque su signo negativo sugiere que una mayor antigüedad en la empresa reduce la probabilidad de rotación.

Significancia del Modelo

En este caso se plantean las hipótesis :

\(H0:β1=β2=…βk=0\)

\(Ha:\) Algún βi es diferente de 0

El equivalente de la prueba global de significancia del modelo logit tiene como estadístico de prueba la chi-cuadrado que se obtiene restando la suma desviaciones del modelo nulo con la suma de las desviaciones de los residuales que se presentan en el resumen del modelo

\(X^2= Null deviance− Residual deviance=1298.6−1088.4=210.1583\)

with(modelo_logit, null.deviance - deviance )
## [1] 210.1853

Que tiene una distribución \(\chi^2_{gl_{null} - gl_{residual}}\):

with(modelo_logit, pchisq(null.deviance - deviance , df.null-df.residual, lower.tail = FALSE))
## [1] 2.416943e-40

Para evaluar la significancia global del modelo logístico se aplicó la prueba de razón de verosimilitud, comparando la devianza del modelo nulo con la devianza del modelo ajustado. El valor-p obtenido fue \(2.416943 \times 10^{-40}\), el cual es significativamente menor que 0.05. Por tanto, se rechaza la hipótesis nula de que todos los coeficientes del modelo son simultáneamente iguales a cero. En consecuencia, se concluye que el modelo es globalmente significativo y que, en conjunto, las variables explicativas incluidas contribuyen de manera significativa a explicar la probabilidad de rotación.

Interpretación Odds Ratio:

Recordemos que:

  • \(OR>1\) Aumenta la razon de la oportunidad
  • \(OR<1\) Disminuye la razon de la oportunidad
  • \(OR=1\) No afecta la razon de la oportunidad
exp(coef(modelo_logit))
##                  (Intercept)                Horas_ExtraSi 
##                    0.7408274                    4.5572550 
##       Estado_CivilDivorciado          Estado_CivilSoltero 
##                    0.7218259                    2.3450604 
## factor(Satisfación_Laboral)2 factor(Satisfación_Laboral)3 
##                    0.6465084                    0.6315528 
## factor(Satisfación_Laboral)4              Ingreso_Mensual 
##                    0.3455277                    0.9999222 
##                         Edad                   Antigüedad 
##                    0.9718591                    0.9643023
tabla_odds <- data.frame(
  Variable = c("Horas extra", "Soltero", "Divorciado",
               "Satisfacción 2", "Satisfacción 3", "Satisfacción 4",
               "Ingreso", "Edad", "Antigüedad"),
  `Odds Ratio` = c(4.56, 2.35, 0.72, 0.65, 0.63, 0.35, 0.9999, 0.97, 0.96),
  Interpretación = c("Aumenta mucho la rotación",
                     "Aumenta la rotación",
                     "Reduce rotación (no significativa)",
                     "Reduce rotación",
                     "Reduce rotación",
                     "Reduce mucho la rotación",
                     "Reduce ligeramente la rotación",
                     "Reduce rotación",
                     "Reduce rotación")
)

kable(
  tabla_odds,
  caption = "Tabla III. Odds Ratio e interpretación de las variables del modelo logístico",
  booktabs = TRUE,
  digits = 4,
  align = "ccc"
) %>%
  kable_styling(full_width = FALSE, position = "center") %>%
  row_spec(0, bold = TRUE)
Tabla III. Odds Ratio e interpretación de las variables del modelo logístico
Variable Odds.Ratio Interpretación
Horas extra 4.5600 Aumenta mucho la rotación
Soltero 2.3500 Aumenta la rotación
Divorciado 0.7200 Reduce rotación (no significativa)
Satisfacción 2 0.6500 Reduce rotación
Satisfacción 3 0.6300 Reduce rotación
Satisfacción 4 0.3500 Reduce mucho la rotación
Ingreso 0.9999 Reduce ligeramente la rotación
Edad 0.9700 Reduce rotación
Antigüedad 0.9600 Reduce rotación

A partir de los odds ratio estimados Tabla III , los resultados del modelo logístico permiten interpretar los efectos de las variables explicativas en términos de razón de oportunidades de rotación laboral:

  • Horas Extras:

El Odds Ratio asociado a la variable Horas Extra es 4.56, lo que indica que los empleados que realizan horas extra presentan una razón de oportunidad de rotación 4.56 veces mayor en comparación con aquellos que no las realizan. Esto representa un incremento aproximado del 356% en la razón de oportunidad de rotación.

  • Estado Civil:

Para la variable Estado Civil, los empleados solteros presentan un Odds Ratio de 2.35, lo que indica que tienen una razón de oportunidad de rotación 2.35 veces mayor en comparación con la categoría base (casados). Por otro lado, los empleados divorciados presentan un Odds Ratio de 0.72, lo que sugiere una menor razón de oportunidad de rotación respecto a los empleados casados; sin embargo, este efecto no resulta estadísticamente significativo, por lo que no es posible afirmar con evidencia suficiente que el estado civil en esta categoría tenga un efecto sobre la rotación.

  • Satisfacción Laboral:

En el caso de la variable Satisfacción Laboral, se observa que todos los niveles presentan Odds Ratio menores a 1, lo que indica una disminución en la razón de oportunidad de rotación en comparación con el nivel base.

En particular, el nivel 4 presenta un Odds Ratio de 0.35, lo que implica una reducción aproximada del 65% en la razón de oportunidad de rotación. De igual forma, los niveles 2 y 3 presentan reducciones cercanas al 35% y 37%, respectivamente. Estos resultados evidencian que, a mayor nivel de satisfacción laboral, menor es la razón de oportunidad de rotación.

  • Ingreso Mensual:

El Odds Ratio para Ingreso Mensual es 0.9999, lo que indica que incrementos en el ingreso reducen ligeramente la razón de oportunidad de rotación. Sin embargo, dado que el valor es muy cercano a 1, el efecto individual por unidad de ingreso es pequeño, aunque puede resultar relevante cuando se consideran incrementos acumulados en el ingreso.

  • Edad:

La variable Edad presenta un Odds Ratio de 0.97, lo que indica que, por cada año adicional de edad, la razón de oportunidad de rotación disminuye en aproximadamente un 2.8%. Esto sugiere que empleados de mayor edad tienden a presentar una menor propensión a la rotación.

  • Antigüedad:

La variable Antigüedad presenta un Odds Ratio de 0.96, lo que implica que, por cada año adicional en la empresa, la razón de oportunidad de rotación disminuye en aproximadamente un 3.6%. Este resultado evidencia que empleados con mayor tiempo de permanencia tienen menor tendencia a abandonar la organización.

En general, los resultados del modelo evidencian que variables como la realización de horas extra y el estado civil incrementan la razón de oportunidad de rotación, mientras que factores como la satisfacción laboral, el ingreso, la edad y la antigüedad contribuyen a reducirla. Estos resultados son consistentes con los análisis exploratorios realizados previamente.

Evaluación del modelo

A partir del análisis de la variable Rotación, se identifica un desbalance en la muestra, donde aproximadamente el 16% de los empleados presentan rotación frente al 84% que no rotan. Dado este desbalance de clases, resulta necesario emplear métricas de evaluación robustas, como la precisión (Precision) y la sensibilidad (Recall), que permiten evaluar de manera más adecuada el desempeño del modelo, especialmente en la correcta identificación de los casos de rotación.

En este contexto, el uso de un punto de corte estándar de 0.5 no resulta apropiado, ya que tendería a favorecer la clasificación de la clase mayoritaria. Inicialmente, se evaluó un umbral de 0.3; sin embargo, este valor arrojó una sensibilidad (Recall) inferior a 0.5, lo que evidenciaba una capacidad limitada del modelo para identificar los casos de rotación. Por ello, se ajusta el umbral a 0.2 con el objetivo de mejorar la capacidad del modelo para identificar correctamente los casos de rotación (clase minoritaria), priorizando la sensibilidad sobre la exactitud global.

# Probabilidades
prob <- predict(modelo_logit, type = "response")

# Punto de corte
pred <- ifelse(prob >= 0.2, "Sí rota", "No rota")

# Factores
pred <- factor(pred, levels = c("No rota", "Sí rota"))
real <- factor(df2$Rotación, levels = c("No rota", "Sí rota"))

# Matriz
cm <- confusionMatrix(pred, real, positive = "Sí rota")

cm$table
##           Reference
## Prediction No rota Sí rota
##    No rota     986      77
##    Sí rota     247     160
# Métricas
resumen <- data.frame(
  Accuracy = cm$overall["Accuracy"],
  Recall = cm$byClass["Sensitivity"],
  Precision = cm$byClass["Pos Pred Value"]
)

resumen
##           Accuracy    Recall Precision
## Accuracy 0.7795918 0.6751055 0.3931204

Interpretacion resultados

  • Sensitivity (Recall) = 0.6751, este resultado indica que el modelo logra identificar correctamente el 67.5% de los empleados que presentan rotación. Esta es una de las métricas más relevantes en este contexto, ya que permite evaluar la capacidad del modelo para detectar la clase minoritaria, lo cual es fundamental para la empresa en términos de prevención y toma de decisiones oportunas.

  • Precision (Pos Pred Value) = 0.3931, este resultado indica que, de los empleados que el modelo clasifica como en riesgo de rotación, el 39.3% efectivamente rota. Esta métrica refleja la proporción de predicciones positivas correctas y sugiere la presencia de falsos positivos en la clasificación.

No obstante, este resultado no resulta crítico desde el punto de vista organizacional, ya que los falsos positivos corresponden a empleados que, aunque son identificados como en riesgo, finalmente no abandonan la empresa. En este sentido, el impacto asociado a este tipo de error es limitado, dado que implica posibles intervenciones preventivas sobre empleados que permanecen en la organización.

  • Matriz de Confusion:
  1. Verdaderos negativos (986): empleados que no rotan y el modelo predijo correctamente.
  2. Falsos negativos (77): empleados que sí rotan pero el modelo no los detectó. Este es el caso más crítico, ya que corresponde a empleados en riesgo de salida que no son identificados, lo que limita la posibilidad de implementar acciones preventivas.
  3. Falsos positivos (247): empleados que no rotan pero el modelo los clasifica como en riesgo de rotación.
  4. Verdaderos positivos (160): empleados que rotan y el modelo identificó correctamente
  • Accurancy = 0.7796. El modelo clasifica correctamente el 77.96% de los casos. Sin embargo, esta métrica puede resultar limitada en contextos de datos desbalanceados, ya que tiende a estar influenciada por la clase mayoritaria y no refleja adecuadamente el desempeño del modelo sobre la clase de interés.

Con el fin de complementar la evaluación del modelo, se incorpora el análisis de la curva ROC (Receiver Operating Characteristic), la cual permite evaluar su capacidad discriminatoria independientemente del punto de corte seleccionado. A continuación, se presenta la curva ROC obtenida:

# Probabilidades predichas
prob <- predict(modelo_logit, type = "response")

# Curva ROC
roc_obj <- roc(df2$Rotación, prob)
## Setting levels: control = No rota, case = Sí rota
## Setting direction: controls < cases
# Graficar ROC
plot(roc_obj, col = "blue", lwd = 3)
**Figura 1.19**: Curva ROC- Modelo Logit estimado

Figura 1.19: Curva ROC- Modelo Logit estimado

Interpretacion de la curva ROC

Recordemos que la curva ROC, se lee de la siguiente forma:

  • Está cerca de la diagonal → modelo malo
  • Se aleja hacia la esquina superior izquierda → modelo bueno

La curva ROC (Figura 1.19):

  • Está bastante por encima de la diagonal
  • Se acerca a la esquina superior izquierda

Entonces:

  • La curva ROC se encuentra por encima de la línea diagonal, lo que indica que el modelo tiene capacidad de discriminación entre las categorías de la variable respuesta.

En conclusión, el modelo logístico presenta un buen desempeño general y puede ser utilizado como una herramienta para identificar empleados con riesgo de rotación, aunque su capacidad para detectar todos los casos de rotación es moderada.

Predicciones

Realizaremos dos predicciones utilizando casos extremos y asi evaluaremos el funcionamiento del modelo:

Caso 1

En este caso, consideraremos las siguientes caracteristicas:

  • Horas Extras: Si
  • Estado Civil: Soltero
  • Satisfaccion: 2
  • Ingreso: 3000
  • Edad: 30
  • Antiguedad: 2
nuevo <- data.frame(
  Horas_Extra = "Si",
  Estado_Civil = "Soltero",
  Satisfación_Laboral = 2,
  Ingreso_Mensual = 3000,
  Edad = 30,
  Antigüedad = 2
)

Calculo de probabibilidad

predict(modelo_logit, newdata = nuevo, type = "response")
##         1 
## 0.6154518

Definir el punto de corte

Se define un punto de corte de 0.2 (para ambos casos) debido al desbalance en la variable de rotación y a la necesidad de mejorar la identificación de los empleados que presentan este comportamiento. Este umbral permite aumentar la capacidad del modelo para detectar casos de rotación, lo cual resulta fundamental para el objetivo del análisis, (tal como se evidenció en la sección de evaluación de métricas).

\[ \text{Si } \hat{P}(\text{Rotación}=1) > 0.20 \Rightarrow \text{Intervenir} \]

\[ \text{Si } \hat{P}(\text{Rotación}=1) \le 0.20 \Rightarrow \text{No intervenir} \] Decisión Caso 1

Dado que nuestro \(\hat{p} = 0.6155\) y esto a su vez es \(0.6155>0.20\), entonces se debe intervenir, es decir, el empleado presenta un alto riesgo de rotación, por lo que la empresa debería considerar estrategias de intervención orientadas a mejorar su satisfacción laboral, sus condiciones laborales o sus incentivos, con el fin de reducir la probabilidad de rotación.

Caso 2

Realizaremos otra prueba considerando un caso extremo del anterior:

  • Horas Extras: No
  • Estado Civil: Casado
  • Satisfaccion: 4
  • Ingreso: 5000
  • Edad: 40
  • Antiguedad: 8
nuevo1 <- data.frame(
  Horas_Extra = "No",
  Estado_Civil = "Casado",
  Satisfación_Laboral = 4,
  Ingreso_Mensual = 5000,
  Edad = 40,
  Antigüedad = 8
)

Calculo de probabibilidad

predict(modelo_logit, newdata = nuevo1, type = "response")
##          1 
## 0.03975293

Decisión Caso 2

Dado que nuestro \(\hat{p} = 0.039\) y esto a su vez es \(0.0397< 0.20\), entonces no se debe intervenir, es decir, el empleado no presenta riesgo de rotación segun el modelo.

Estos resultados permiten concluir que el modelo responde de manera consistente frente a casos extremos, diferenciando adecuadamente entre perfiles con alta y baja propensión a la rotación, lo que refuerza su utilidad como herramienta de apoyo para la toma de decisiones.

Conclusiones

A partir del modelo de regresión logística, se identificaron los principales factores asociados a la rotación de empleados. En particular, variables como la realización de horas extra y el estado civil soltero incrementan la razón de oportunidad de rotación, mientras que la satisfacción laboral, el ingreso mensual, la edad y la antigüedad se asocian con una disminución en dicha razón.

Estos resultados evidencian que la rotación laboral está principalmente influenciada por factores relacionados con las condiciones de trabajo, el nivel de satisfacción y la estabilidad del empleado dentro de la organización.

Estrategias para disminuir la rotación

A partir de los hallazgos del modelo, se proponen las siguientes estrategias orientadas a mitigar la rotación laboral:

  1. Gestión de horas extra: reducir la carga laboral excesiva, optimizar la asignación de turnos, contratar personal adicional y fortalecer esquemas de compensación o flexibilidad laboral.

  2. Mejora de la satisfacción laboral: implementar programas de bienestar, reconocimiento al empleado, planes de carrera y esquemas de trabajo flexible.

  3. Política de compensación: establecer incentivos económicos, bonos por desempeño y beneficios adicionales que contribuyan a mejorar la percepción salarial.

  4. Gestión del talento joven y nuevo: desarrollar programas de inducción, mentoría y acompañamiento durante los primeros meses, así como planes de crecimiento profesional y bonos de permanencia.

  5. Segmentación por perfil: diseñar estrategias diferenciadas para empleados jóvenes y solteros, incluyendo oportunidades de desarrollo, capacitación y flexibilidad laboral.

Conclusion Final

En síntesis, el modelo de regresión logística no solo permitió identificar los factores que inciden en la rotación de empleados, sino también cuantificar su impacto en términos de razón de oportunidad.

Asimismo, el modelo constituye una herramienta útil para la gestión organizacional, ya que permite estimar el riesgo de rotación a nivel individual y facilitar la implementación de estrategias de intervención temprana, orientadas a mejorar la retención del talento y la estabilidad laboral.