1 Selección de variables

Inicialmente se carga la base de datos que vamos a utilizar para el ejercicio y posteriormente elegimos 3 variables categóricas y 3 variables cuantitativas que puedan relacionarse con la rotación del personal.

1.1 Elección de variables

Comenzamos eligiendo las 3 variables categorias de la base de datos:

Satisfacion_Laboral, esta variable tiene una relación clara, ya que hace referencia a la percepción del bienestar y motivación del lugar de trabajo, los valores de insatisfacción incrementaría considerablemente la probabilidad de abandono.

Satisfaccion_Ambiental, esta variable también se relaciona directamente con la rotación, ya que un trabajador que no se sienta satisfecho con el ambiente laboral de su lugar de trabajo puede optar por otras opciones laborales.

Estado_Civil, esta variable se puede relacionar teniendo en cuenta que las personas solteras o divorciadas tienen más libertad de elegir distintas opciones laborales, en cambio una persona casada pude ser menos arriesgada a la rotación por llegar a tener personas dependientes a su cargo.

Continuamos eligiendo las 3 variables cuantitativas:

Distancia_Casa, esta variable puede estar relacionada con la rotación debido que una distancia muy larga del trabajo a la casa puede generar desgaste y puede hacer que la persona opte por otras opciones más cercanas al lugar donde vive.

Trabajos_Anteriores, esta variable conbinada con la variable de años de experiencia nos puede mostrar el comportamiento del trabajador frente a la rotación, si es una persona que se caracteriza por cambiar de trabajo según los años que tiene en el mundo laboral.

Años_Experiencia, como se explica anteriormente podemos combinar con la variable anterior para identificar las personas que cambian más de trabajo con respecto a sus años trabajando.

2 Análisis univariado

Inicialmente cargamos la base de datos con las seis variables que eligimos anteriormente, incluyendo la variable “Rotacion” para realizar el análisis.

library(dplyr)
library(paqueteMODELOS)

data("rotacion")

rotacion_6var <- rotacion %>%
  select(1, 8, 11, 12, 5, 14, 18) 

names(rotacion_6var) <- c("Rotacion", "Satisfaccion_Ambiental", "Satisfacion_Laboral", "Estado_Civil", "Distancia_Casa", "Trabajos_Anteriores", "Anios_Experiencia")

rotacion_6var <- rotacion_6var %>%
  mutate(
    Satisfaccion_Ambiental = as.character(Satisfaccion_Ambiental),
    Satisfacion_Laboral = as.character(Satisfacion_Laboral),
    Estado_Civil = as.character(Estado_Civil)
  )

str(rotacion_6var)
## tibble [1,470 × 7] (S3: tbl_df/tbl/data.frame)
##  $ Rotacion              : chr [1:1470] "Si" "No" "Si" "No" ...
##  $ Satisfaccion_Ambiental: chr [1:1470] "2" "3" "4" "4" ...
##  $ Satisfacion_Laboral   : chr [1:1470] "4" "2" "3" "3" ...
##  $ Estado_Civil          : chr [1:1470] "Soltero" "Casado" "Soltero" "Casado" ...
##  $ Distancia_Casa        : num [1:1470] 1 8 2 3 2 2 3 24 23 27 ...
##  $ Trabajos_Anteriores   : num [1:1470] 8 1 6 1 9 0 4 1 0 6 ...
##  $ Anios_Experiencia     : num [1:1470] 8 10 7 8 6 8 12 1 10 17 ...

Analizamos si existen valores faltantes en la base de datos:

library(dplyr)
library(knitr)

tabla_faltantes <- data.frame(
  Variable = names(rotacion_6var),
  Tipo = sapply(rotacion_6var, class),
  Valores_Faltantes = sapply(rotacion_6var, function(x) sum(is.na(x))),
  Porcentaje_NAs = round(sapply(rotacion_6var, function(x) mean(is.na(x)) * 100), 2)
)

rownames(tabla_faltantes) <- NULL

kable(
  tabla_faltantes, 
  format = "markdown", 
  col.names = c("Variable", "Tipo de Dato", "Valores Faltantes (NA)", "% de Faltantes")
)
Variable Tipo de Dato Valores Faltantes (NA) % de Faltantes
Rotacion character 0 0
Satisfaccion_Ambiental character 0 0
Satisfacion_Laboral character 0 0
Estado_Civil character 0 0
Distancia_Casa numeric 0 0
Trabajos_Anteriores numeric 0 0
Anios_Experiencia numeric 0 0

Comprobamos que no hay valores faltantes y existe la totalidad de datos en las variables elegidas.

2.1 Análisis para variables cuantitativas

Se calculan las métricas de tendencia central como media, mediana y desviación estándar de cada una de las variables cuantitativas para iniciar el análisis:

library(dplyr)
library(knitr)

# Construir la tabla utilizando la posición numérica [6] para evitar problemas con la eñe
tabla_resumen_cuantitativa <- data.frame(
  Variable = c("Distancia_Casa", "Trabajos_Anteriores", "Anios_Experiencia"),
  Media = c(
    mean(rotacion_6var[[5]], na.rm = TRUE),
    mean(rotacion_6var[[6]], na.rm = TRUE),
    mean(rotacion_6var[[7]], na.rm = TRUE)
  ),
  Mediana = c(
    median(rotacion_6var[[5]], na.rm = TRUE),
    median(rotacion_6var[[6]], na.rm = TRUE),
    median(rotacion_6var[[7]], na.rm = TRUE)
  ),
  Desv_Estandar = c(
    sd(rotacion_6var[[5]], na.rm = TRUE),
    sd(rotacion_6var[[6]], na.rm = TRUE),
    sd(rotacion_6var[[7]], na.rm = TRUE)
  )
)


kable(
  tabla_resumen_cuantitativa, 
  format = "markdown", 
  col.names = c("Variable", "Media", "Mediana", "Desv_Estandar")
)
Variable Media Mediana Desv_Estandar
Distancia_Casa 9.192517 7 8.106864
Trabajos_Anteriores 2.693197 2 2.498009
Anios_Experiencia 11.279592 10 7.780782

Distancia_Casa: presenta una media aproximadamente de 9.2 km, con una media de 7 km y una desviación estándar alta, lo que indica que la mayoría de los empleados viven cerca del lugar de trabajo, pero existe un grupo pequeño con distancias largas.

Trabajos_Anteriores: Los empleados presentan un promedio de 2.7 trabajos previos a la empresa actual, con mediana de 2, lo que significa que la gran mayoría cueta con estabilidad o experiencia laboral previa.

Anios_Experiencia: La experiencia laboral acumulada muestra una media de 11.2 años, con mediana de 10 años, esto dice que la empresa retiene predominantemente a perfiles con trayectoria consolidada.

library(ggplot2)
library(gridExtra)

p1 <- ggplot(rotacion_6var, aes(y = Distancia_Casa)) +
  geom_boxplot(fill = "lightblue", color = "darkblue") +
  labs(title = "Distancia a Casa", y = "Kilómetros") +
  theme_minimal()

p2 <- ggplot(rotacion_6var, aes(y = Trabajos_Anteriores)) +
  geom_boxplot(fill = "lightgreen", color = "darkgreen") +
  labs(title = "Trabajos Anteriores", y = "Cantidad") +
  theme_minimal()

p3 <- ggplot(rotacion_6var, aes(y = Anios_Experiencia)) +
  geom_boxplot(fill = "lightyellow", color = "darkorange") +
  labs(title = "Años de Experiencia", y = "Años") +
  theme_minimal()

grid.arrange(p1, p2, p3, ncol = 3)

Distancia_Casa: el diagrama de cajas muestra una distribución sesgada positivamente. No presenta valores atípicos extremos fuera de los límites lógicos de la escala, aunque muestra que algunos empleados recorren distancias considerablemente mayores al promedio del primer y tercer cuartil.

Trabajos_Anteriores: los valores se concentran de manera regular dentro del rango esperado (de 0 a 9 trabajos), sin presencia de valores atípicos que distorsionen la media.

Anios_Experiencia: se observan valores muy altos que no clasifican como datos atípicos dado que sí entran dentro de los límites lógicos y hacen referencia a personas con perfiles de gran experiencia laboral.

2.2 Análisis para variables cualitativas

Continuando con el análisis de variables cualitativas, se construyen tablas de frecuencia que nos permite observar cómo se distribuyen los datos categóricos.

library(dplyr)
library(knitr)

t_amb <- table(rotacion_6var$Satisfaccion_Ambiental)
tabla_amb <- data.frame(Categoría = names(t_amb), Frecuencia_Absoluta = as.numeric(t_amb))
tabla_amb <- tabla_amb %>% 
  mutate(Porcentaje = round((Frecuencia_Absoluta / sum(Frecuencia_Absoluta)) * 100, 2))

kable(
  tabla_amb, 
  format = "markdown", 
  caption = "Distribución de frecuencias de satisfacción Ambiental"
)
Distribución de frecuencias de satisfacción Ambiental
Categoría Frecuencia_Absoluta Porcentaje
1 284 19.32
2 287 19.52
3 453 30.82
4 446 30.34
t_lab <- table(rotacion_6var$Satisfacion_Laboral)
tabla_lab <- data.frame(Categoría = names(t_lab), Frecuencia_Absoluta = as.numeric(t_lab))
tabla_lab <- tabla_lab %>% 
  mutate(Porcentaje = round((Frecuencia_Absoluta / sum(Frecuencia_Absoluta)) * 100, 2))

kable(
  tabla_lab, 
  format = "markdown", 
  caption = "Distribución de frecuencias de satisfación Laboral"
)
Distribución de frecuencias de satisfación Laboral
Categoría Frecuencia_Absoluta Porcentaje
1 289 19.66
2 280 19.05
3 442 30.07
4 459 31.22
t_est <- table(rotacion_6var$Estado_Civil)
tabla_est <- data.frame(Categoría = names(t_est), Frecuencia_Absoluta = as.numeric(t_est))
tabla_est <- tabla_est %>% 
  mutate(Porcentaje = round((Frecuencia_Absoluta / sum(Frecuencia_Absoluta)) * 100, 2))

kable(
  tabla_est, 
  format = "markdown", 
  caption = "Distribución de frecuencias de Estado Civil"
)
Distribución de frecuencias de Estado Civil
Categoría Frecuencia_Absoluta Porcentaje
Casado 673 45.78
Divorciado 327 22.24
Soltero 470 31.97

Satisfaccion_Ambiental: la distribución de frecuencias evidencia que la mayor parte de los empleados perciben un entorno físico y ambiental de trabajo favorable, concentrando los porcentajes más altos en los niveles superiores de la escala.

Satisfacion_Laboral: la presencia de porcentajes en los niveles más bajos de satisfacción laboral delimita un grupo específico de personal desmotivado o inconforme, el cual suele correlacionarse de manera directa con las rotaciones de talento.

Estado_Civil: permite conocer la estructura demográfica de la organización, segmentando la población entre solteros, casados y divorciados, donde predomina la categoría de casados en los empleados.

3 Análisis bivariado

Inicialmente se realiza un cambio en la variable “Rotacion”, donde Sí va a ser igual a 1 y No será 0. También, se ajustan los modelos de las variables cualitativas frente a la variable “Rotacion” para poder elegir la variable las variables determinantes.

library(dplyr)
library(knitr)

rotacion_6var <- rotacion_6var %>%
  mutate(Rotacion_bin = ifelse(Rotacion == "Sí" | Rotacion == "Si" | Rotacion == 1, 1, 0))

modelo_amb <- glm(Rotacion_bin ~ Satisfaccion_Ambiental, data = rotacion_6var, family = binomial)
summary(modelo_amb)
## 
## Call:
## glm(formula = Rotacion_bin ~ Satisfaccion_Ambiental, family = binomial, 
##     data = rotacion_6var)
## 
## Coefficients:
##                         Estimate Std. Error z value Pr(>|z|)    
## (Intercept)              -1.0799     0.1364  -7.917 2.43e-15 ***
## Satisfaccion_Ambiental2  -0.6560     0.2144  -3.060  0.00221 ** 
## Satisfaccion_Ambiental3  -0.7617     0.1931  -3.944 8.01e-05 ***
## Satisfaccion_Ambiental4  -0.7816     0.1946  -4.017 5.90e-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: 1278.0  on 1466  degrees of freedom
## AIC: 1286
## 
## Number of Fisher Scoring iterations: 4
modelo_lab <- glm(Rotacion_bin ~ Satisfacion_Laboral, data = rotacion_6var, family = binomial)
summary(modelo_lab)
## 
## Call:
## glm(formula = Rotacion_bin ~ Satisfacion_Laboral, family = binomial, 
##     data = rotacion_6var)
## 
## Coefficients:
##                      Estimate Std. Error z value Pr(>|z|)    
## (Intercept)           -1.2175     0.1401  -8.689  < 2e-16 ***
## Satisfacion_Laboral2  -0.4092     0.2137  -1.915   0.0555 .  
## Satisfacion_Laboral3  -0.4028     0.1899  -2.122   0.0339 *  
## Satisfacion_Laboral4  -0.8401     0.2033  -4.132 3.59e-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: 1281.2  on 1466  degrees of freedom
## AIC: 1289.2
## 
## Number of Fisher Scoring iterations: 4
modelo_est <- glm(Rotacion_bin ~ Estado_Civil, data = rotacion_6var, family = binomial)
summary(modelo_est)
## 
## Call:
## glm(formula = Rotacion_bin ~ Estado_Civil, family = binomial, 
##     data = rotacion_6var)
## 
## Coefficients:
##                        Estimate Std. Error z value Pr(>|z|)    
## (Intercept)             -1.9476     0.1166 -16.699  < 2e-16 ***
## Estado_CivilDivorciado  -0.2395     0.2175  -1.101    0.271    
## Estado_CivilSoltero      0.8772     0.1575   5.571 2.54e-08 ***
## ---
## 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: 1254.6  on 1467  degrees of freedom
## AIC: 1260.6
## 
## Number of Fisher Scoring iterations: 4

En la satisfacción ambiental todos los coeficientes frente al nivel base (Nivel 1) son negativos. Esto indica que a medida que aumenta la satisfacción ambiental en el lugar de trabajo, disminuye la posibilidad de rotación, un peor entorno físico incrementa de manera importante el riesgo de que el empleado renuncie.

En la Satisfacción laboral, una mayor conformidad y satisfacción con las funciones laborales reduce significativamente la probabilidad de abandono. El nivel 4 presenta la reducción más grande en el riesgo de rotación en comparación con el nivel de insatisfacción base.

Para el estado civil, estar soltero presenta un coeficiente positivo y altamente significativo (Beta = 0.8772). Esto significa que los empleados solteros tienen un log-odds de rotación significativamente mayor en comparación con los casados, lo que muestra una menor atadura familiar y una mayor propensión al cambio laboral.

A continuación podemos ver gráficamente lo anteriormente mencionado:

library(ggplot2)

ggplot(rotacion_6var, aes(x = factor(Satisfaccion_Ambiental), fill = factor(Rotacion))) +
  geom_bar(position = "fill") +
  labs(
    title = "Proporción de Rotación según Satisfacción Ambiental",
    x = "Nivel de Satisfacción Ambiental",
    y = "Proporción",
    fill = "¿Rotó?"
  ) +
  scale_y_continuous(labels = scales::percent) +
  theme_minimal() +
  scale_fill_manual(values = c("#2b5c8f", "#d95f02"))

ggplot(rotacion_6var, aes(x = factor(Satisfacion_Laboral), fill = factor(Rotacion))) +
  geom_bar(position = "fill") +
  labs(
    title = "Proporción de Rotación según Satisfacción Laboral",
    x = "Nivel de Satisfacción Laboral",
    y = "Proporción",
    fill = "¿Rotó?"
  ) +
  scale_y_continuous(labels = scales::percent) +
  theme_minimal() +
  scale_fill_manual(values = c("#2b5c8f", "#d95f02"))

ggplot(rotacion_6var, aes(x = Estado_Civil, fill = factor(Rotacion))) +
  geom_bar(position = "fill") +
  labs(
    title = "Proporción de Rotación según Estado Civil",
    x = "Estado Civil",
    y = "Proporción",
    fill = "¿Rotó?"
  ) +
  scale_y_continuous(labels = scales::percent) +
  theme_minimal() +
  scale_fill_manual(values = c("#2b5c8f", "#d95f02"))

En las anteriores gráficas podemos demostrar visualmente lo que nos mencionan los coeficientes, que las personas con menor satisfacción ambiental o laboral tienden a rotar más de empleo, igualmente sucede con el estado civil, las personas solteras son las que están más abiertas a cambiar de empleo.

Continuando con las variables cuantitativas se realizó el mismo ejercicio:

library(dplyr)
library(knitr)

modelo_distancia <- glm(Rotacion_bin ~ Distancia_Casa, data = rotacion_6var, family = binomial)
summary(modelo_distancia)
## 
## Call:
## glm(formula = Rotacion_bin ~ Distancia_Casa, family = binomial, 
##     data = rotacion_6var)
## 
## 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
modelo_trabajos <- glm(Rotacion_bin ~ Trabajos_Anteriores, data = rotacion_6var, family = binomial)
summary(modelo_trabajos)
## 
## Call:
## glm(formula = Rotacion_bin ~ Trabajos_Anteriores, family = binomial, 
##     data = rotacion_6var)
## 
## 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
modelo_experiencia <- glm(Rotacion_bin ~ Anios_Experiencia, data = rotacion_6var, family = binomial)
summary(modelo_experiencia)
## 
## Call:
## glm(formula = Rotacion_bin ~ Anios_Experiencia, family = binomial, 
##     data = rotacion_6var)
## 
## Coefficients:
##                   Estimate Std. Error z value Pr(>|z|)    
## (Intercept)       -0.88306    0.12744  -6.929 4.23e-12 ***
## Anios_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

En la variable distancia de casa, se presenta un coeficiente positivo, por lo que hace referencia a que una distancia mayor entre la casa y el trabajo es un factor para que el empleado pueda aceptar fácilmente otro empleo.

Para la variable de trabajos anteriores , se observa también un coeficiente positivo, donde se puede decir que entre mayor rotación haya tenido en trabajos anteriores, puede que sea una persona que rote fácilmente de trabajo.

En los años de experiencia tenemos un coeficiente negativo, lo que traduce que un empleado con varios años de experiencia tiende a rotar menos que uno con pocos años de experiencia.

A continuación podemos observar gráficamente el comportamiento de las variables con respecto a la rotación:

library(ggplot2)

ggplot(rotacion_6var, aes(x = factor(Rotacion_bin), y = Distancia_Casa, fill = factor(Rotacion_bin))) +
  geom_boxplot(alpha = 0.7) +
  labs(
    title = "Distribución de la Distancia a Casa según la Rotación",
    x = "Rotación (0 = No, 1 = Sí)",
    y = "Distancia a Casa",
    fill = "Rotación"
  ) +
  theme_minimal() +
  scale_fill_manual(values = c("#2b5c8f", "#d95f02"))

ggplot(rotacion_6var, aes(x = factor(Rotacion_bin), y = Trabajos_Anteriores, fill = factor(Rotacion_bin))) +
  geom_boxplot(alpha = 0.7) +
  labs(
    title = "Distribución de Trabajos Anteriores según la Rotación",
    x = "Rotación (0 = No, 1 = Sí)",
    y = "Número de Trabajos Anteriores",
    fill = "Rotación"
  ) +
  theme_minimal() +
  scale_fill_manual(values = c("#2b5c8f", "#d95f02"))

ggplot(rotacion_6var, aes(x = factor(Rotacion_bin), y = Anios_Experiencia, fill = factor(Rotacion_bin))) +
  geom_boxplot(alpha = 0.7) +
  labs(
    title = "Distribución de Años de Experiencia según la Rotación",
    x = "Rotación (0 = No, 1 = Sí)",
    y = "Años de Experiencia",
    fill = "Rotación"
  ) +
  theme_minimal() +
  scale_fill_manual(values = c("#2b5c8f", "#d95f02"))

En las dos primeras variables (distancia de casa y trbajos anteriores) podemos observar la relación que existe entre las personas que viven lejos del trabajo y que son más probable que cambien de empleo, igual que las que han tenido más trabajos anteriores puede tener relación en que son perosonas abiertas a la rotación laboral.

4 Estimación del modelo

Para la estimación del modelo de regresión logística múltiple, incorporamos las 6 variables seleccionadas en los puntos anteriores para evaluar su efecto conjunto sobre la probabilidad de rotación.

library(dplyr)
library(broom)
library(knitr)

modelo_multiple <- glm(
  Rotacion_bin ~ Satisfaccion_Ambiental + Satisfacion_Laboral + Estado_Civil + Distancia_Casa + Trabajos_Anteriores + Anios_Experiencia,
  data = rotacion_6var,
  family = binomial
)

tabla_coeficientes <- tidy(modelo_multiple) %>%
  mutate(
    estimate = round(estimate, 4),
    std.error = round(std.error, 4),
    statistic = round(statistic, 4),
    p.value = format.pval(p.value, digits = 4, eps = 0.001)
  )

kable(
  tabla_coeficientes, 
  format = "markdown", 
  col.names = c("Variable / Parámetro", "Estimación (β)", "Error Estándar", "Estadístico z", "Valor p"),
  caption = "Tabla. Coeficientes del modelo de regresión logística múltiple para la rotación."
)
Tabla. Coeficientes del modelo de regresión logística múltiple para la rotación.
Variable / Parámetro Estimación (β) Error Estándar Estadístico z Valor p
(Intercept) -0.4714 0.2738 -1.7216 0.085140
Satisfaccion_Ambiental2 -0.7370 0.2271 -3.2449 0.001175
Satisfaccion_Ambiental3 -0.8550 0.2061 -4.1486 < 0.001
Satisfaccion_Ambiental4 -0.8998 0.2074 -4.3379 < 0.001
Satisfacion_Laboral2 -0.5125 0.2278 -2.2500 0.024448
Satisfacion_Laboral3 -0.5404 0.2025 -2.6694 0.007598
Satisfacion_Laboral4 -0.9682 0.2153 -4.4978 < 0.001
Estado_CivilDivorciado -0.2806 0.2256 -1.2436 0.213643
Estado_CivilSoltero 0.8680 0.1658 5.2370 < 0.001
Distancia_Casa 0.0317 0.0090 3.5400 < 0.001
Trabajos_Anteriores 0.1119 0.0298 3.7577 < 0.001
Anios_Experiencia -0.0932 0.0136 -6.8600 < 0.001

Para las variables de satisfacción laboral y ambiental sucede un comportamiento similar, de los niveles 2 a 4 se tienen coeficientes negativos, pero con valores p < 0.01, lo que indica que con una leve mejoría en el ambiente del trabajo o en la satisfacción de las funciones laborales, puede reducir el riesgo de rotación en los empleados.

El coeficiente del estado civil soltero es positivo, lo que confirma que ese estado civil es el de una persona que está más abierta a la rotación.

La distancia a la casa y el número de trabajos anteriores cuentan con un coeficiente positivo, lo que significa que se confirma que una distancia mayor de la casa al trabajo y que la persona haya tenido varios trabajos antes significa que tiene mayor probabilidad de cambiar de trabajo.

Para los años de experiencia, se tiene un coeficiente negativo, pero altamente significativo con p < 0.001, demostrando que a mayor experiencia acumulada, menor es la probabilidad de cambiar de trabajo.

5 Evaluación

Para evaluar el poder predictivo del modelo de regresión logística múltiple, la herramienta estándar es la Curva ROC y el indicador numérico asociado conocido como AUC.

library(pROC)

predicciones_prob <- predict(modelo_multiple, type = "response")

curva_roc <- roc(rotacion_6var$Rotacion_bin, predicciones_prob)

print(auc(curva_roc))
## Area under the curve: 0.7448
plot(curva_roc, 
     main = "Curva ROC - Modelo de Regresión Logística Múltiple",
     col = "#2b5c8f", 
     lwd = 2,
     print.auc = TRUE,
     auc.polygon = TRUE,
     grid = c(0.1, 0.2),
     grid.col = c("green", "red"))

Para evaluar la capacidad de discriminación del modelo de regresión logística múltiple, se estimó la Curva ROC y se calculó el área bajo la curva (AUC). El modelo arrojó un valor de AUC de 0.745, lo cual indica un desempeño predictivo aceptable. Esto demuestra que las variables seleccionadas poseen la capacidad estadística de diferenciar de manera adecuada entre los colaboradores que deciden abandonar la empresa y aquellos que optan quedarse.

6 Predicciones

Para realizar la predicción de la probabilidad de rotación de un individuo hipotético y definir una estrategia de intervención, estructuramos el ejercicio en tres partes: la definición del perfil del empleado, el cálculo matemático mediante la función de enlace logístico, y la propuesta del punto de corte junto con su estrategia de retención.

6.1 Definición del perfil del empleado

  • Satisfacción Ambiental: Nivel 1.
  • Satisfacción Laboral: Nivel 1.
  • Estado Civil: Soltero.
  • Distancia a Casa: 25 kilómetros.
  • Trabajos Anteriores: 4 empleos previos.
  • Años de Experiencia: 2 años de experiencia total.

6.2 Cálculo de la probabilidad de rotación

A partir de los coeficientes estimados en el modelo múltiple anterior, calculamos el log-odds:

beta_intercepto  <- -0.4714
beta_soltero     <-  0.8680
beta_distancia   <-  0.0317
beta_trabajos    <-  0.1119
beta_experiencia <- -0.0932

distancia   <- 25
trabajos    <- 4
experiencia <- 2
es_soltero  <- 1

eta <- beta_intercepto + 
       (beta_soltero * es_soltero) + 
       (beta_distancia * distancia) + 
       (beta_trabajos * trabajos) + 
       (beta_experiencia * experiencia)

probabilidad <- 1 / (1 + exp(-eta))

cat("La probabilidad estimada de rotacion es:", round(probabilidad * 100, 2), "%\n")
## La probabilidad estimada de rotacion es: 81 %

Definimos un umbral del 40% de probabilidad, lo que quiere decir que los empleados que pasen el umbral de 40% con posible rotación requerirá intervención para retenerlo.

if (probabilidad >= 0.40) {
  cat("Resultado: Empleado supera el umbral del 40%. El empleado requiere intervencion preventiva.\n")
} else {
  cat("Resultado: El empleado se encuentra por debajo del umbral de riesgo.\n")
}
## Resultado: Empleado supera el umbral del 40%. El empleado requiere intervencion preventiva.

6.3 Estrategia de intervención para el empleado

Se identifica que el alto riesgo de este perfil está influenciado por su insatisfacción ambiental y laboral, y la distancia considerable de su hogar al trabajo.

Se le Asigna una revisión de clima laboral con su jefe inmediato para mejorar su satisfacción en las funciones cotidianas y su entorno físico de trabajo.

Evaluar opciones de trabajo híbrido o teleparcial para mitigar el impacto negativo de los 25 kilómetros de distancia entre su casa y la oficina.

7 Conclusiones

  • Dado que los niveles bajos de satisfacción incrementan drásticamente el riesgo de abandono, es prioritario implementar programas de mejora continua en el clima organizacional. Esto incluye auditorías ergonómicas y de confort en los espacios físicos de trabajo, claridad en las funciones y reconocimiento al desempeño para elevar la moral a los empleados.

  • El impacto positivo y significativo de la variable Distancia_Casa evidencia que los trayectos extensos desgastan al empleado y elevan la probabilidad de renuncia. Para mitigar este factor, la empresa puede estructurar esquemas de trabajo híbrido, horarios flexibles que eviten las horas pico de tráfico.

  • El análisis confirma que el estado civil soltero y un mayor número de trabajos anteriores actúan como factores de riesgo asociados a una mayor inestabilidad en la organización. Se recomienda diseñar un plan de acogida, fomentando un fuerte sentido de pertenencia y comunidad desde el inicio de su vinculación.