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.
A continuación se describen los pasos que la gerencia ha propuesto para el análisis:
A continuación, se presentan las variables del conjunto de datos:
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 ...
Se realizó el proceso de encoding para asignar una valor numérico a las variables cualitativas:
# Limpiar nombres de columnas para quitar tildes y pasar todo a snake_case
names(rotacion) <- names(rotacion) %>%
stri_trans_general("Latin-ASCII") %>% # Quita tildes
tolower() # Todo en minúsculas
# Crear dataset limpio
rotacion_limpia <- rotacion %>%
mutate(
# Variable objetivo
rotacion_binaria = ifelse(rotacion == "Si", 1, 0),
# Variables categóricas
rendimiento_laboral = factor(rendimiento_laboral,
levels = 1:4,
labels = c("Bajo", "Medio", "Alto", "Muy Alto")),
horas_extra = factor(horas_extra, levels = c("no", "si")),
equilibrio_trabajo_vida = factor(equilibrio_trabajo_vida,
levels = 1:4,
labels = c("Muy Bajo", "Bajo", "Medio", "Alto")),
educacion = factor(educacion,
levels = 1:5,
labels = c("Primaria", "Secundaria", "Tecnico/Tecnologo", "Pregrado", "Posgrado")),
satisfaccion_ambiental = factor(satisfaccion_ambiental,
levels = 1:4,
labels = c("Muy Insatisfecho", "Insatisfecho", "Satisfecho", "Muy Satisfecho")),
satisfacion_laboral = factor(satisfacion_laboral,
levels = 1:4,
labels = c("Muy Insatisfecho", "Insatisfecho", "Satisfecho", "Muy Satisfecho")),
# Variables numericas
distancia_casa = as.numeric(distancia_casa),
antiguedad_cargo = as.numeric(antiguedad_cargo),
trabajos_anteriores = as.numeric(trabajos_anteriores))
str(rotacion)
tibble [1,470 × 24] (S3: tbl_df/tbl/data.frame)
$ rotacion : 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 ...
$ educacion : num [1:1470] 2 1 2 4 1 2 3 1 3 3 ...
$ campo_educacion : chr [1:1470] "Ciencias" "Ciencias" "Otra" "Ciencias" ...
$ satisfaccion_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" ...
$ satisfacion_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 ...
$ anos_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 ...
$ antiguedad : num [1:1470] 6 10 0 8 2 7 1 1 9 7 ...
$ antiguedad_cargo : num [1:1470] 4 7 0 7 2 7 0 0 7 7 ...
$ anos_ultima_promocion : num [1:1470] 0 1 0 3 2 3 0 0 1 7 ...
$ anos_acargo_con_mismo_jefe : num [1:1470] 5 7 0 0 2 6 0 0 8 7 ...
Se seleccionaron seis variables independientes que podrían estar relacionadas con la rotación de cargo. Estas se clasifican según su nivel de medición: categóricas ordinales y cuantitativas.
rendimiento_laboral
- Codificación: 1 = Bajo, 2 = Medio, 3 = Alto, 4 = Muy Alto
- Justificación: Un menor rendimiento podría asociarse con desmotivación
o con riesgo de reasignación.
- Hipótesis: A menor rendimiento laboral, mayor probabilidad de
rotación.
satisfaccion_laboral
- Codificación: 1 = Muy insatisfecho, 2 = Insatisfecho, 3 = Satisfecho,
4 = Muy satisfecho
- Justificación: La percepción del trabajo influye directamente en la
intención de permanecer o cambiar de cargo.
- Hipótesis: A menor satisfacción laboral, mayor probabilidad de
rotación.
satisfacion_ambiental
- Codificación: 1 = Muy insatisfecho, 2 = Insatisfecho, 3 = Satisfecho,
4 = Muy satisfecho
- Justificación: Un entorno físico desfavorable puede aumentar la
intención de cambio.
- Hipótesis: A menor satisfacción ambiental, mayor probabilidad de
rotación.
distancia_casa
- Tipo: Cuantitativa continua (en kilómetros)
- Justificación: Las largas distancias afectan el bienestar y podrían
incentivar la rotación.
- Hipótesis: A mayor distancia desde casa, mayor probabilidad de
rotación.
trabajos_anteriores
- Tipo: Cuantitativa discreta
- Justificación: Las personas con mayor historial de cambio pueden tener
mayor propensión a rotar.
- Hipótesis: A mayor número de trabajos anteriores, mayor probabilidad
de rotación.
edad
- Tipo: Cuantitativa discreta
- Justificación: La edad puede influir en la estabilidad laboral;
personas más jóvenes pueden buscar crecimiento.
- Hipótesis: A menor edad, mayor probabilidad de rotación.
Se realizó un análisis univariado de las variables seleccionadas, utilizando:
Gráficos de barras para variables categóricas.
Histogramas y resúmenes estadísticos para variables
cuantitativas.
Análisis específico de la variable objetivo
rotacion_binaria.
color_unico <- "#4B8BBE"
# Rendimiento Laboral
tabla_rendimiento <- rotacion_limpia %>% count(rendimiento_laboral)
knitr::kable(tabla_rendimiento, caption = "Frecuencia de Rendimiento Laboral")
| rendimiento_laboral | n |
|---|---|
| Alto | 1244 |
| Muy Alto | 226 |
ggplot(tabla_rendimiento, aes(x = rendimiento_laboral, y = n)) +
geom_col(fill = color_unico, width = 0.35) +
geom_text(aes(label = n), vjust = -0.3, size = 5) +
labs(title = "Rendimiento Laboral", y = "Frecuencia", x = "") +
theme_minimal()
# Satisfacción Laboral
tabla_satisf_lab <- rotacion_limpia %>% count(satisfacion_laboral)
knitr::kable(tabla_satisf_lab, caption = "Frecuencia de Satisfacción Laboral")
| satisfacion_laboral | n |
|---|---|
| Muy Insatisfecho | 289 |
| Insatisfecho | 280 |
| Satisfecho | 442 |
| Muy Satisfecho | 459 |
ggplot(tabla_satisf_lab, aes(x = satisfacion_laboral, y = n)) +
geom_col(fill = color_unico, width = 0.35) +
geom_text(aes(label = n), vjust = -0.3, size = 5) +
labs(title = "Satisfaccion Laboral", y = "Frecuencia", x = "") +
theme_minimal()
# Satisfacción Ambiental
tabla_satisf_amb <- rotacion_limpia %>% count(satisfaccion_ambiental)
knitr::kable(tabla_satisf_amb, caption = "Frecuencia de Satisfacción Ambiental")
| satisfaccion_ambiental | n |
|---|---|
| Muy Insatisfecho | 284 |
| Insatisfecho | 287 |
| Satisfecho | 453 |
| Muy Satisfecho | 446 |
ggplot(tabla_satisf_amb, aes(x = satisfaccion_ambiental, y = n)) +
geom_col(fill = color_unico, width = 0.35) +
geom_text(aes(label = n), vjust = -0.3, size = 5) +
labs(title = "Satisfaccion Ambiental", y = "Frecuencia", x = "") +
theme_minimal()
rendimiento_laboral
La mayoría de los empleados se encuentra clasificada en el nivel “Alto” de rendimiento, seguida por una proporción relevante en el nivel “Muy Alto”. Este patrón sugiere que, en general, la organización cuenta con un equipo de alto desempeño. Sin embargo, es pertinente analizar los casos de rotación incluso entre empleados con buen rendimiento, ya que podrían estar influenciados por otros factores organizacionales o personales.
satisfaccion_laboral
La distribución de esta variable muestra una tendencia hacia niveles altos de satisfacción, con las categorías “Satisfecho” y “Muy Satisfecho” concentrando la mayor parte de las respuestas. Esto refleja una percepción positiva del entorno laboral por parte de los empleados. No obstante, la presencia de una proporción no despreciable en los niveles de insatisfacción sugiere posibles focos de atención que podrían relacionarse con decisiones de rotación.
satisfaccion_ambiental
Se observa una concentración predominante en los niveles “Satisfecho” y “Muy Satisfecho”, lo que indica que la mayoría de los empleados percibe condiciones ambientales favorables en su lugar de trabajo. Sin embargo, cerca del 39% se ubica en niveles bajos de satisfacción, lo cual representa una oportunidad para mejorar el entorno físico y, con ello, mitigar posibles riesgos de rotación asociados a este factor.
# Distancia desde casa
summary(rotacion_limpia$distancia_casa)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.000 2.000 7.000 9.193 14.000 29.000
ggplot(rotacion_limpia, aes(x = distancia_casa)) +
geom_histogram(bins = 20, fill = color_unico, color = "white") +
labs(title = "Distancia desde Casa", x = "Kilómetros", y = "Frecuencia") +
theme_minimal()
# Trabajos Anteriores
summary(rotacion_limpia$trabajos_anteriores)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.000 1.000 2.000 2.693 4.000 9.000
ggplot(rotacion_limpia, aes(x = trabajos_anteriores)) +
geom_histogram(binwidth = 1, fill = color_unico, color = "white") +
labs(title = "Trabajos Anteriores", x = "Cantidad", y = "Frecuencia") +
theme_minimal()
# Edad
summary(rotacion_limpia$edad)
Min. 1st Qu. Median Mean 3rd Qu. Max.
18.00 30.00 36.00 36.92 43.00 60.00
ggplot(rotacion_limpia, aes(x = edad)) +
geom_histogram(bins = 20, fill = color_unico, color = "white") +
labs(title = "Edad de los Empleados", x = "Edad (años)", y = "Frecuencia") +
theme_minimal()
distancia_casa
La variable representa la distancia en kilómetros entre el lugar de residencia del empleado y la empresa. El análisis muestra una distribución sesgada a la derecha, donde la mayoría de los empleados vive a menos de 10 km de su lugar de trabajo (mediana = 7 km). Sin embargo, existen casos atípicos que alcanzan hasta los 29 km, lo cual podría afectar la satisfacción y predisposición al cambio de cargo en estos empleados.
trabajos_anteriores
Esta variable refleja la cantidad de empleos previos que ha tenido cada empleado. La mediana es de 2 trabajos anteriores, con valores que oscilan entre 0 y 9. La distribución muestra una fuerte concentración en valores bajos, indicando que una gran parte del personal no ha tenido mucha rotación laboral previa. No obstante, se observan empleados con historial laboral más amplio, lo que podría relacionarse con una mayor predisposición a rotar.
edad
La edad de los empleados presenta una distribución relativamente simétrica, con una media cercana a los 37 años y un rango de 18 a 60 años. La mayoría se encuentra entre los 30 y 45 años, lo que refleja una plantilla laboral predominantemente adulta. Esta variable será importante al explorar si la edad influye en la decisión de cambio de cargo.
# Tabla de frecuencias
tabla_rotacion <- rotacion_limpia %>%
count(rotacion_binaria) %>%
mutate(etiqueta = ifelse(rotacion_binaria == 1, "Sí rotó", "No rotó"))
# Mostrar tabla
knitr::kable(tabla_rotacion, caption = "Distribución de la Variable Rotación")
| rotacion_binaria | n | etiqueta |
|---|---|---|
| 0 | 1233 | No rotó |
| 1 | 237 | Sí rotó |
# Gráfico
ggplot(tabla_rotacion, aes(x = etiqueta, y = n)) +
geom_col(fill = "#4B8BBE") +
geom_text(aes(label = n), vjust = -0.3, size = 5) +
labs(title = "Distribución de Rotación de Cargo", x = "Rotación", y = "Frecuencia") +
theme_minimal()
La variable rotacion_binaria representa el evento de
rotación de cargo por parte de los empleados, donde 1 = “Sí rotó” y 0 =
“No rotó”. Como se observa, la gran mayoría de los empleados no presenta
rotación en el periodo analizado (1.233 casos), mientras que 237
empleados sí cambiaron de cargo.
Esta distribución indica un evento poco frecuente (rotación ≈ 16%), lo cual es relevante para la estimación del modelo logístico, ya que la variable dependiente está desbalanceada. Este tipo de comportamiento es común en estudios organizacionales, y su análisis detallado permitirá identificar los factores que diferencian a los empleados que rotan de aquellos que permanecen estables.
Se realizó la exploración de la relación entre la variable
dependiente rotacion_binaria (1 = Sí rotó, 0 = No rotó) y
las seis variables independientes seleccionadas previamente:
color_unico <- "#4B8BBE"
# Función auxiliar para graficar barras proporcionales con etiquetas
graficar_proporcion_con_etiquetas <- function(df, variable, titulo, xlab) {
df_prop <- df %>%
group_by({{ variable }}, rotacion_binaria) %>%
summarise(n = n(), .groups = "drop") %>%
group_by({{ variable }}) %>%
mutate(prop = n / sum(n),
etiqueta = paste0(round(prop * 100, 1), "%"))
ggplot(df_prop, aes(x = {{ variable }}, y = prop, fill = factor(rotacion_binaria))) +
geom_col(position = "stack") +
geom_text(aes(label = etiqueta),
position = position_stack(vjust = 0.5),
color = "white", size = 5) +
scale_fill_manual(values = c("gray80", color_unico),
labels = c("No rotó", "Sí rotó")) +
labs(title = titulo, x = xlab, y = "Proporción", fill = "Rotación") +
theme_minimal()
}
# --- Rendimiento Laboral ---
graficar_proporcion_con_etiquetas(rotacion_limpia, rendimiento_laboral,
"Rotación vs Rendimiento Laboral", "Rendimiento Laboral")
# --- Satisfacción Laboral ---
graficar_proporcion_con_etiquetas(rotacion_limpia, satisfacion_laboral,
"Rotación vs Satisfacción Laboral", "Satisfacción Laboral")
# --- Satisfacción Ambiental ---
graficar_proporcion_con_etiquetas(rotacion_limpia, satisfaccion_ambiental,
"Rotación vs Satisfacción Ambiental", "Satisfacción Ambiental")
Rotación vs rendimiento_laboral
Se observa que la proporción de empleados que rotan es similar en los niveles “Alto” y “Muy Alto”, con aproximadamente un 16% en cada grupo. Esto sugiere que, en este caso, el rendimiento laboral no presenta una diferencia marcada en la rotación, aunque se esperaba lo contrario. Por lo tanto, esta evidencia no valida completamente la hipótesis planteada.
Rotación vs satisfaccion_laboral
Los empleados con menor satisfacción laboral muestran una mayor probabilidad de rotar. Por ejemplo, el 22.8% de quienes se encuentran en la categoría “Muy Insatisfecho” presentan rotación, en contraste con solo el 11.3% de los clasificados como “Muy Satisfecho”. Estos resultados respaldan la hipótesis inicial, en la que una menor satisfacción se asocia con mayor rotación.
Rotación vs satisfacion_ambiental
Se evidencia un descenso progresivo en la rotación conforme aumenta la satisfacción ambiental. El grupo clasificado como “Muy Insatisfecho” registra una rotación del 25.4%, mientras que en la categoría “Muy Satisfecho” la rotación es de apenas el 13.5%. Esto confirma que un entorno físico desfavorable puede incrementar la probabilidad de rotación del personal.
color_unico <- "#4B8BBE"
# --- Distancia desde casa vs Rotación ---
ggplot(rotacion_limpia, aes(x = factor(rotacion_binaria), y = distancia_casa)) +
geom_boxplot(fill = color_unico) +
labs(title = "Distancia desde Casa vs Rotación",
x = "Rotación (0 = No, 1 = Sí)",
y = "Distancia (km)") +
theme_minimal()
# --- Trabajos anteriores vs Rotación ---
ggplot(rotacion_limpia, aes(x = factor(rotacion_binaria), y = trabajos_anteriores)) +
geom_boxplot(fill = color_unico) +
labs(title = "Trabajos Anteriores vs Rotación",
x = "Rotación (0 = No, 1 = Sí)",
y = "Cantidad de Trabajos Anteriores") +
theme_minimal()
# --- Edad vs Rotación ---
ggplot(rotacion_limpia, aes(x = factor(rotacion_binaria), y = edad)) +
geom_boxplot(fill = color_unico) +
labs(title = "Edad vs Rotación",
x = "Rotación (0 = No, 1 = Sí)",
y = "Edad (años)") +
theme_minimal()
distancia_casa
El boxplot evidencia que los empleados que sí rotaron tienden a vivir a mayor distancia del lugar de trabajo. La mediana y el rango intercuartílico son ligeramente más altos en este grupo, lo cual es coherente con la hipótesis planteada: a mayor distancia desde casa, mayor probabilidad de rotación.
trabajos_anteriores
Se observa una mayor cantidad de trabajos previos entre quienes rotaron, con una mayor dispersión y presencia de valores atípicos hacia la derecha. Este comportamiento respalda la hipótesis de que los empleados con mayor historial laboral previo tienden a mostrar mayor movilidad dentro de la organización.
edad
Los empleados que rotaron tienden a ser más jóvenes. El boxplot muestra que la mediana de edad es más alta en el grupo que no rota, mientras que quienes han rotado se concentran en edades más bajas. Este resultado valida la hipótesis de que los empleados más jóvenes presentan una mayor predisposición al cambio, posiblemente en búsqueda de nuevas oportunidades o crecimiento profesional.
Se realizó la estimación del ** modelo de regresión logística** con
la variable rotacion_binaria como variable dependiente (1 =
sí rotó, 0 = no rotó) y seis variables independientes: tres categóricas
ordinales (rendimiento_laboral,
satisfaccion_laboral, satisfaccion_ambiental)
y tres cuantitativas (distancia_casa,
trabajos_anteriores, edad).
# Dataset solo con las 6 variables predictoras + respuesta
rotacion_modelo <- rotacion_limpia %>%
select(
rotacion_binaria, # Variable dependiente
rendimiento_laboral, # Categórica ordinal
satisfacion_laboral, # Categórica ordinal
satisfaccion_ambiental, # Categórica ordinal
distancia_casa, # Cuantitativa
trabajos_anteriores, # Cuantitativa
edad # Cuantitativa
)
modelo_logistico <- glm(
rotacion_binaria ~ rendimiento_laboral + satisfacion_laboral +
satisfaccion_ambiental + distancia_casa + trabajos_anteriores + edad,
data = rotacion_modelo,
family = binomial(link = "logit")
)
# Resumen del modelo
summary(modelo_logistico)
Call:
glm(formula = rotacion_binaria ~ rendimiento_laboral + satisfacion_laboral +
satisfaccion_ambiental + distancia_casa + trabajos_anteriores +
edad, family = binomial(link = "logit"), data = rotacion_modelo)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 1.144867 0.378696 3.023 0.002501 **
rendimiento_laboralMuy Alto 0.001973 0.204212 0.010 0.992290
satisfacion_laboralInsatisfecho -0.414726 0.221007 -1.877 0.060583 .
satisfacion_laboralSatisfecho -0.466832 0.197810 -2.360 0.018275 *
satisfacion_laboralMuy Satisfecho -0.865758 0.209852 -4.126 3.70e-05 ***
satisfaccion_ambientalInsatisfecho -0.725949 0.222596 -3.261 0.001109 **
satisfaccion_ambientalSatisfecho -0.824857 0.200589 -4.112 3.92e-05 ***
satisfaccion_ambientalMuy Satisfecho -0.828246 0.201908 -4.102 4.09e-05 ***
distancia_casa 0.028085 0.008738 3.214 0.001308 **
trabajos_anteriores 0.109756 0.029586 3.710 0.000208 ***
edad -0.064822 0.009406 -6.892 5.51e-12 ***
---
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: 1196.5 on 1459 degrees of freedom
AIC: 1218.5
Number of Fisher Scoring iterations: 5
# Coeficientes exponentiados (Odds Ratios)
exp(coef(modelo_logistico))
(Intercept) rendimiento_laboralMuy Alto
3.1420231 1.0019753
satisfacion_laboralInsatisfecho satisfacion_laboralSatisfecho
0.6605214 0.6269856
satisfacion_laboralMuy Satisfecho satisfaccion_ambientalInsatisfecho
0.4207326 0.4838653
satisfaccion_ambientalSatisfecho satisfaccion_ambientalMuy Satisfecho
0.4382978 0.4368148
distancia_casa trabajos_anteriores
1.0284834 1.1160058
edad
0.9372340
# Intervalos de confianza al 95%
exp(confint(modelo_logistico))
2.5 % 97.5 %
(Intercept) 1.5006405 6.6310997
rendimiento_laboralMuy Alto 0.6636506 1.4805908
satisfacion_laboralInsatisfecho 0.4265253 1.0160046
satisfacion_laboralSatisfecho 0.4252726 0.9245056
satisfacion_laboralMuy Satisfecho 0.2779601 0.6336959
satisfaccion_ambientalInsatisfecho 0.3109591 0.7453768
satisfaccion_ambientalSatisfecho 0.2951389 0.6486638
satisfaccion_ambientalMuy Satisfecho 0.2933148 0.6480173
distancia_casa 1.0108957 1.0461611
trabajos_anteriores 1.0526606 1.1822929
edad 0.9198068 0.9543804
El resumen del modelo indicó que todas las variables incluidas
resultaron estadísticamente significativas al 95% de confianza, excepto
el nivel “Muy Alto” de rendimiento_laboral, que no presentó
un efecto estadísticamente significativo.
A continuación se interpretan los resultados a partir de los odds ratios estimados:
satisfaccion_laboral: A medida que aumenta la satisfacción, la probabilidad de rotación disminuye. Ser “Muy Satisfecho” reduce la probabilidad de rotación en un 67% (OR ≈ 0.33).
satisfaccion_ambiental: Los empleados con menor satisfacción ambiental tienen mayor probabilidad de rotar. Por ejemplo, estar “Insatisfecho” se asocia con un aumento en el riesgo de rotación, mientras que niveles altos de satisfacción ambiental se relacionan con una reducción de hasta un 56% en la probabilidad de rotar (OR ≈ 0.44).
distancia_casa: Por cada kilómetro adicional entre el hogar y el lugar de trabajo, la probabilidad de rotación aumenta en un 3% (OR ≈ 1.03).
trabajos_anteriores: Cada trabajo previo adicional incrementa la probabilidad de rotación en aproximadamente un 11% (OR ≈ 1.11), validando la hipótesis de que los empleados con mayor historial laboral muestran mayor predisposición al cambio.
edad: Por cada año adicional de edad, la probabilidad de rotación disminuye en un 6% (OR ≈ 0.94), lo cual sugiere que los empleados más jóvenes son más propensos a rotar.
rendimiento_laboral: Contrario a lo esperado, el nivel “Muy Alto” de rendimiento no mostró un efecto significativo sobre la rotación (OR ≈ 1.00, p > 0.99). Esto podría indicar que el rendimiento elevado no necesariamente implica una menor rotación, posiblemente debido a procesos de promoción interna o movilidad voluntaria entre cargos de alto rendimiento.
Para medir el poder predictivo del modelo de regresión logística, se utilizó la curva ROC (Receiver Operating Characteristic) junto con el Área Bajo la Curva (AUC). Esta herramienta permite evaluar la capacidad del modelo para distinguir entre empleados que rotaron de cargo (rotacion_binaria = 1) y aquellos que no lo hicieron (rotacion_binaria = 0).
library(pROC)
# 1. Obtener probabilidades predichas del modelo logístico
probabilidades <- predict(modelo_logistico, type = "response")
# 2. Calcular la curva ROC
roc_modelo <- roc(rotacion_modelo$rotacion_binaria, probabilidades)
# 3. Calcular AUC
auc_modelo <- auc(roc_modelo)
print(auc_modelo) # Mostrará el valor del AUC en consola
Area under the curve: 0.7002
# 4. Graficar curva ROC
plot(roc_modelo,
col = "#4B8BBE", # Azul institucional
lwd = 2, # Grosor de línea
main = "Curva ROC - Modelo de Rotación")
abline(a = 0, b = 1, lty = 2, col = "gray") # Línea diagonal de referencia
En el modelo estimado, el valor obtenido fue AUC = 0.7002, lo que indica un poder discriminativo aceptable. Este resultado significa que el modelo tiene una capacidad razonable para diferenciar entre empleados que rotan y los que no rotan.
Visualmente, la curva ROC se aleja de la línea diagonal (modelo aleatorio), confirmando que el modelo tiene una mejor capacidad de predicción que el azar. Aunque no alcanza un nivel excelente (AUC > 0.9), el resultado obtenido permite utilizar el modelo como herramienta de apoyo para identificar perfiles con mayor riesgo de rotación y establecer estrategias preventivas en la gestión del talento humano.
Se realiza una predicción sobre la probabilidad de rotación de un empleado hipotético, utilizando el modelo logístico estimado previamente. Adicionalmente, se define un punto de corte para determinar si el caso requiere intervención por parte del área de talento humano.
# Crear nuevo individuo hipotético
empleado_nuevo <- data.frame(
rendimiento_laboral = factor("Alto", levels = levels(rotacion_modelo$rendimiento_laboral)),
satisfacion_laboral = factor("Insatisfecho", levels = levels(rotacion_modelo$satisfacion_laboral)),
satisfaccion_ambiental = factor("Satisfecho", levels = levels(rotacion_modelo$satisfaccion_ambiental)),
distancia_casa = 12, # kilómetros
trabajos_anteriores = 4, # trabajos previos
edad = 30 # años
)
# Predecir probabilidad de rotación
prob_rotacion <- predict(modelo_logistico, newdata = empleado_nuevo, type = "response")
prob_rotacion
1
0.2204001
Se construyó un caso hipotético para evaluar la probabilidad de que un empleado rote de cargo. El perfil definido presenta un nivel de rendimiento laboral “Alto”, satisfacción laboral “Insatisfecho”, satisfacción ambiental “Satisfecho”, 12 kilómetros de distancia al trabajo, 4 trabajos anteriores y una edad de 30 años.
El modelo de regresión logística predice una probabilidad de rotación de 22.0% (0.2204). Considerando un punto de corte del 30% como umbral de intervención, este caso no sería considerado de alto riesgo. Sin embargo, dado que el nivel de satisfacción laboral es bajo y el historial de trabajos anteriores es elevado, podría ser conveniente realizar acciones preventivas de parte del área de talento humano.
El modelo de regresión logística permitió identificar variables clave que influyen en la rotación de empleados dentro de la organización. Entre los factores más significativos se encuentran la satisfacción laboral, la satisfacción ambiental, el número de trabajos anteriores, la edad y la distancia desde el hogar al trabajo. Estos elementos mostraron una relación estadísticamente significativa con la probabilidad de rotación, lo cual respalda su importancia en la toma de decisiones estratégicas de retención.
Con base en estos hallazgos, se recomienda enfocar las estrategias de intervención en los empleados que presentan baja satisfacción laboral o ambiental, que han tenido múltiples empleos previos o que viven lejos del lugar de trabajo. Las acciones pueden incluir mejoras en el entorno físico, programas de bienestar, flexibilidad laboral o rutas de desarrollo profesional, que permitan aumentar el compromiso y disminuir el riesgo de rotación. El modelo, con un AUC de 0.70, demuestra ser una herramienta útil para anticipar comportamientos de salida y optimizar la gestión del talento humano.