Enunciado de la Actividad
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.
Carga de Librerías
En esta sección se cargan las librerías necesarias para el desarrollo del análisis. Las herramientas aquí dispuestas (que pueden verse dando click en ¿show’) permiten realizar la manipulación de la base de datos, la construcción de tablas y gráficos, la estimación del modelo de regresión logística, así como la evaluación de su capacidad predictiva mediante la curva ROC y el AUC.
Adicionalmente, se define una paleta de colores para conservar uniformidad visual en el informe.
# ============================
# 0.1 CARGA DE LIBRERÍAS
# ============================
# Manipulación y visualización
library(tidyverse)
library(ggplot2)
library(plotly)
# Tablas
library(gt)
library(DT)
# Modelado y partición
library(caret)
# Evaluación del modelo
library(pROC)
# Carga de base de datos
library(paqueteMODELOS)
# Paleta institucional del informe
pal <- c("#222222", "#6B2EBF", "#F7B26A", "#76A9DC", "#6DC8A4")
Carga de Base de Datos
La base de datos utilizada en este trabajo corresponde al conjunto rotacion, disponible en el paquete paqueteMODELOS. Para garantizar la reproducibilidad del análisis, se verifica primero la disponibilidad del paquete y, en caso de ser necesario, se instala desde el repositorio oficial. Posteriormente, se carga la base de datos y se realiza una inspección inicial de su dimensión y estructura con el fin de confirmar que la información está lista para el desarrollo del modelo de regresión logística.
# ============================
# 0.2 CARGA DE LA BASE DE DATOS
# ============================
# Instalar devtools si no está disponible
if (!requireNamespace("devtools", quietly = TRUE)) {
install.packages("devtools")
}
# Instalar paqueteMODELOS desde GitHub si no está disponible
if (!requireNamespace("paqueteMODELOS", quietly = TRUE)) {
devtools::install_github("centromagis/paqueteMODELOS", force = TRUE)
}
# Cargar paquete y base de datos
library(paqueteMODELOS)
data("rotacion")
# Verificación rápida
dim(rotacion)
## [1] 1470 24
glimpse(rotacion)
## Rows: 1,470
## Columns: 24
## $ Rotación <chr> "Si", "No", "Si", "No", "No", "No", "No", …
## $ Edad <dbl> 41, 49, 37, 33, 27, 32, 59, 30, 38, 36, 35…
## $ `Viaje de Negocios` <chr> "Raramente", "Frecuentemente", "Raramente"…
## $ Departamento <chr> "Ventas", "IyD", "IyD", "IyD", "IyD", "IyD…
## $ Distancia_Casa <dbl> 1, 8, 2, 3, 2, 2, 3, 24, 23, 27, 16, 15, 2…
## $ Educación <dbl> 2, 1, 2, 4, 1, 2, 3, 1, 3, 3, 3, 2, 1, 2, …
## $ Campo_Educación <chr> "Ciencias", "Ciencias", "Otra", "Ciencias"…
## $ Satisfacción_Ambiental <dbl> 2, 3, 4, 4, 1, 4, 3, 4, 4, 3, 1, 4, 1, 2, …
## $ Genero <chr> "F", "M", "M", "F", "M", "M", "F", "M", "M…
## $ Cargo <chr> "Ejecutivo_Ventas", "Investigador_Cientifi…
## $ Satisfación_Laboral <dbl> 4, 2, 3, 3, 2, 4, 1, 3, 3, 3, 2, 3, 3, 4, …
## $ Estado_Civil <chr> "Soltero", "Casado", "Soltero", "Casado", …
## $ Ingreso_Mensual <dbl> 5993, 5130, 2090, 2909, 3468, 3068, 2670, …
## $ Trabajos_Anteriores <dbl> 8, 1, 6, 1, 9, 0, 4, 1, 0, 6, 0, 0, 1, 0, …
## $ Horas_Extra <chr> "Si", "No", "Si", "Si", "No", "No", "Si", …
## $ Porcentaje_aumento_salarial <dbl> 11, 23, 15, 11, 12, 13, 20, 22, 21, 13, 13…
## $ Rendimiento_Laboral <dbl> 3, 4, 3, 3, 3, 3, 4, 4, 4, 3, 3, 3, 3, 3, …
## $ Años_Experiencia <dbl> 8, 10, 7, 8, 6, 8, 12, 1, 10, 17, 6, 10, 5…
## $ Capacitaciones <dbl> 0, 3, 3, 3, 3, 2, 3, 2, 2, 3, 5, 3, 1, 2, …
## $ Equilibrio_Trabajo_Vida <dbl> 1, 3, 3, 3, 3, 2, 2, 3, 3, 2, 3, 3, 2, 3, …
## $ Antigüedad <dbl> 6, 10, 0, 8, 2, 7, 1, 1, 9, 7, 5, 9, 5, 2,…
## $ Antigüedad_Cargo <dbl> 4, 7, 0, 7, 2, 7, 0, 0, 7, 7, 4, 5, 2, 2, …
## $ Años_ultima_promoción <dbl> 0, 1, 0, 3, 2, 3, 0, 0, 1, 7, 0, 0, 4, 1, …
## $ Años_acargo_con_mismo_jefe <dbl> 5, 7, 0, 0, 2, 6, 0, 0, 8, 7, 3, 8, 3, 2, …
# ============================
# 1.1 IDENTIFICACIÓN DE VARIABLES
# ============================
tabla_variables <- data.frame(
Variable = names(rotacion),
Tipo = sapply(rotacion, class)
) %>%
mutate(
Naturaleza = case_when(
Tipo %in% c("numeric", "integer") ~ "Numérica",
Tipo %in% c("factor", "character") ~ "Categórica",
TRUE ~ "Otra"
)
) %>%
select(Variable, Naturaleza)
datatable(
tabla_variables,
rownames = FALSE,
caption = htmltools::tags$caption(
style = "caption-side: top; text-align: center; font-weight: bold;",
"Tabla 1. Variables de la base de datos y su naturaleza"
),
options = list(
pageLength = 8,
lengthChange = FALSE,
searching = FALSE,
info = FALSE,
autoWidth = TRUE
),
class = "compact stripe hover"
)
En la Tabla 1 se presentan las variables disponibles en la base de datos ‘rotación’ junto con su clasificación según su naturaleza. Esta identificación es fundamental para orientar el análisis más adelante, pues permite seleccionar adecuadamente las variables que serán utilizadas en el modelo de regresión logística, diferenciando entre las variables numéricas y categóricas. Asimismo, esta revisión inicial facilita la construcción de análisis univariados y bivariados acordes con el tipo de información contenida en cada variable.
# ============================
# 1.2 SELECCIÓN DE VARIABLES
# ============================
variables_seleccionadas <- data.frame(
Variable = c(
"Edad", "Ingreso_Mensual", "Antiguedad_Cargo",
"Horas_Extra", "Cargo", "Estado_Civil"
),
Tipo = c(
"Numérica", "Numérica", "Numérica",
"Categórica", "Categórica", "Categórica"
),
Justificacion = c(
"La edad puede influir en la estabilidad laboral y en la disposición al cambio de cargo.",
"El ingreso mensual está relacionado con la satisfacción laboral y puede afectar la probabilidad de rotación.",
"Menor antigüedad en el cargo puede asociarse con una mayor probabilidad de rotación, debido a un menor nivel de adaptación y consolidación en el puesto.",
"Las horas extra pueden generar sobrecarga laboral y aumentar la probabilidad de cambio de cargo.",
"El cargo determina responsabilidades y nivel jerárquico, lo cual puede incidir en la rotación.",
"El estado civil puede influir en la estabilidad y en las decisiones laborales del empleado."
)
)
variables_seleccionadas %>%
gt() %>%
tab_header(
title = "Tabla 2. Variables seleccionadas y justificación"
) %>%
cols_label(
Variable = "Variable",
Tipo = "Tipo",
Justificacion = "Justificación"
) %>%
tab_options(
heading.align = "center",
table.font.size = 12
)
| Tabla 2. Variables seleccionadas y justificación | ||
| Variable | Tipo | Justificación |
|---|---|---|
| Edad | Numérica | La edad puede influir en la estabilidad laboral y en la disposición al cambio de cargo. |
| Ingreso_Mensual | Numérica | El ingreso mensual está relacionado con la satisfacción laboral y puede afectar la probabilidad de rotación. |
| Antiguedad_Cargo | Numérica | Menor antigüedad en el cargo puede asociarse con una mayor probabilidad de rotación, debido a un menor nivel de adaptación y consolidación en el puesto. |
| Horas_Extra | Categórica | Las horas extra pueden generar sobrecarga laboral y aumentar la probabilidad de cambio de cargo. |
| Cargo | Categórica | El cargo determina responsabilidades y nivel jerárquico, lo cual puede incidir en la rotación. |
| Estado_Civil | Categórica | El estado civil puede influir en la estabilidad y en las decisiones laborales del empleado. |
Como bien se puede evidenciar, dentro de la Tabla 2 y con base en la revisión de la estructura de la base de datos, se realizó una selección de 6 variables explicativas, 3 de naturaleza numérica y 3 categóricas, que se han considerando relevantes para explicar la rotación de empleados.
Esta selección fue realizada teniendo en cuenta fundamentalmente factores asociados a la estabilidad laboral y la satisfacción, la carga de trabajo y las características del rol dentro de la organización, los cuales pueden influir en la probabilidad de que un empleado cambie de cargo.
A partir de las variables seleccionadas, a continuación se plantearán las siguientes hipótesis respecto de su posible relación con la rotación de empleados; se hace hincapié - como se mencionaba previamente - que estas hipótesis se fundamentan en factores asociados a la satisfacción laboral, la estabilidad, la carga de trabajo y las condiciones del entorno organizacional.
Edad
Se espera que la edad esté relacionada con la
rotación en cuanto a que los empleados más jóvenes tienden a buscar
mayores oportunidades de crecimiento y cambio laboral. Por tanto,
la hipótesis es que a menor edad, mayor
probabilidad de rotación.
Ingreso_Mensual
Es esperable que el ingreso mensual
influya en la rotación, pues salarios más bajos pueden generar
insatisfacción laboral. En consecuencia, la hipótesis
es que a menor ingreso mensual, mayor probabilidad de rotación.
Antigüedad_Cargo
Normalmente períodos prolongados
en una misma posición pueden generar desgaste o estancamiento
profesional y períodos cortos dificultad para la adaptación. Por
consiguiente la hipótesis sería que a menor o
excesiva antigüedad en el cargo, mayor probabilidad de rotación.
Horas_Extra
La realización de horas extra se
relaciona con la rotación pues una mayor carga laboral puede generar
agotamiento y afectar el equilibrio entre la vida personal y laboral. En
consecuencia, la hipótesis que se plantea es que
los empleados que realizan horas extra tienen mayor probabilidad de
rotación que aquellos que no las realizan.
Cargo
Se estima probable que el cargo influya en la
rotación, dado que diferentes niveles jerárquicos implican distintas
responsabilidades, niveles de presión y oportunidades de crecimiento. De
este modo, se plantea la hipótesis que la
probabilidad de rotación varía según el cargo ocupado por el
empleado.
Estado_Civil
El estado civil puede asociarse con
la rotación en el sentido de que las responsabilidades personales y
familiares influyen en la estabilidad laboral. La
hipótesis es que los empleados solteros podrían
presentar una mayor probabilidad de rotación en comparación con aquellos
con mayores compromisos familiares
# ============================
# 2.1.1 DISTRIBUCIÓN DE LA EDAD
# ============================
library(plotly)
plot_ly(
data = rotacion,
x = ~Edad,
type = "histogram",
nbinsx = 30,
marker = list(
color = "#6B2EBF",
line = list(color = "white", width = 1)
),
opacity = 0.8,
hovertemplate = paste(
"<b>Rango de edad:</b> %{x}<br>",
"<b>Frecuencia:</b> %{y}<extra></extra>"
)
) %>%
layout(
xaxis = list(title = "Edad"),
yaxis = list(title = "Frecuencia"),
bargap = 0.05
)
Figura 1. Distribución de la edad de los empleados.
La Figura 1 logra describir la distribución de la edad de los empleados en la organización. Se observa una concentración mayoritaria de individuos en rangos intermedios de edad, lo que sugiere que la fuerza laboral está compuesta principalmente por empleados en etapas activas de su vida profesional. La presencia de valores en rangos más bajos y más altos refleja diversidad etaria dentro de la empresa, lo cual por su parte puede relacionarse a diferentes niveles de experiencia y estabilidad laboral.
# ============================
# 2.1.1 BOXPLOT EDAD
# ============================
library(plotly)
plot_ly(
data = rotacion,
y = ~Edad,
type = "box",
boxpoints = "outliers",
hoverinfo = "y", # 🔥 CLAVE: elimina etiquetas raras
marker = list(
color = "#222222",
size = 4,
opacity = 0.6
),
line = list(color = "#222222"),
fillcolor = "#6DC8A4"
) %>%
layout(
yaxis = list(title = "Edad"),
xaxis = list(showticklabels = FALSE)
)
Figura 2. Boxplot de la edad de los empleados.
Aunque el histograma de la Figura 1 permite identificar valores en los extremos de la distribución, estos no se clasifican como valores atípicos bajo el criterio del rango intercuartílico, lo que puede evidenciarse claramente en la anterior Figura 2.
De hecho, a partir del boxplot se obtiene que el primer cuartil es aproximadamente Q1 ≈ 30 y el tercer cuartil Q3 ≈ 43, lo que implica un rango intercuartílico de RIQ ≈ 13. Con base en este criterio, los límites para identificar valores atípicos corresponden a aproximadamente 10.5 para el límite inferior y 62.5 para el límite superior. Dado que los valores observados en la variable edad se encuentran dentro del rango aproximado de 18 a 60, todos los datos están contenidos dentro de estos límites, lo que explica la ausencia de outliers estadísticamente significativos en esta variable.
# ============================
# 2.1.2 DISTRIBUCIÓN INGRESO MENSUAL
# ============================
library(plotly)
plot_ly(
data = rotacion,
x = ~Ingreso_Mensual,
type = "histogram",
nbinsx = 30,
marker = list(
color = "#6B2EBF",
line = list(color = "white", width = 1)
),
opacity = 0.8,
hovertemplate = paste(
"<b>Ingreso:</b> %{x}<br>",
"<b>Frecuencia:</b> %{y}<extra></extra>"
)
) %>%
layout(
xaxis = list(title = "Ingreso mensual"),
yaxis = list(title = "Frecuencia"),
bargap = 0.05
)
Figura 3. Distribución del ingreso mensual de los empleados.
La Figura 3, que muestra la distribución del ingreso mensual de los empleados evidencia una concentración importante de observaciones en niveles bajos y medios de ingreso, mientras que a medida que el salario aumenta, la frecuencia disminuye progresivamente. Esta forma sugiere una distribución asimétrica a la derecha, donde pocos empleados perciben ingresos significativamente más altos, lo cual es consistente con estructuras salariales jerárquicas dentro de las organizaciones.
# ============================
# 2.1.2 BOXPLOT INGRESO MENSUAL
# ============================
library(plotly)
plot_ly(
data = rotacion,
y = ~Ingreso_Mensual,
type = "box",
boxpoints = "outliers",
hoverinfo = "y",
marker = list(
color = "#222222",
size = 4,
opacity = 0.6
),
line = list(color = "#222222"),
fillcolor = "#6DC8A4"
) %>%
layout(
yaxis = list(title = "Ingreso mensual"),
xaxis = list(showticklabels = FALSE)
)
Figura 4. Boxplot del ingreso mensual de los empleados.
El anterior boxplot de la Figura 4 permite analizar la dispersión del ingreso mensual y la presencia de valores atípicos.
A diferencia de la variable edad, en este caso es común observar valores extremos superiores, los cuales corresponden a empleados con ingresos significativamente más altos que el promedio, lo que ya pudo verse en la Figura 3. Los valores que se identifican como outliers en el boxplot no necesariamente representan errores, sino que reflejan la existencia de diferentes niveles salariales dentro de la organización, quizá asociados a cargos de mayor responsabilidad o jerarquía. Esta variabilidad es esperada en contextos organizacionales y resulta relevante para el análisis de la rotación.
La variable Antigüedad_Cargo se encuentra medida en años en una escala continua. Esto sugiere que la antigüedad ha sido calculada con mayor precisión (por ejemplo, a partir de días o meses), permitiendo capturar de manera más detallada el tiempo que un empleado ha permanecido en su cargo.
Esta característica resulta adecuada para el análisis, ya que evita la pérdida de información asociada a la medición en años enteros.
# ============================
# 2.1.3 DISTRIBUCIÓN ANTIGÜEDAD_CARGO
# ============================
graf_antiguedad <- rotacion %>%
ggplot(aes(x = Antigüedad_Cargo)) +
geom_histogram(fill = "#6B2EBF", color = "white", bins = 30, alpha = 0.8) +
labs(
x = "Antigüedad en el cargo",
y = "Frecuencia"
) +
theme_minimal()
ggplotly(graf_antiguedad)
Figura 5. Distribución de la antigüedad en el cargo de los empleados (medida en años, escala continua).
La Figura 5 presenta la distribución de la antigüedad en el cargo de los empleados determinada por años, en una escala continua. Se observa una mayor concentración de individuos con niveles bajos y medios de antigüedad, lo que sugiere una dinámica organizacional en la que los cambios de cargo o la movilidad interna son relativamente frecuentes. No obstante, se puede ver también que a medida que aumenta la antigüedad, la frecuencia disminuye, indicando que menos empleados permanecen largos periodos en el mismo cargo.
# ============================
# 2.1.3 BOXPLOT ANTIGÜEDAD_CARGO
# ============================
box_antiguedad <- rotacion %>%
ggplot(aes(y = Antigüedad_Cargo)) +
geom_boxplot(fill = "#6DC8A4", alpha = 0.7) +
theme_minimal() +
labs(
y = "Antigüedad en el cargo"
)
ggplotly(box_antiguedad)
Figura 6. Boxplot de la antigüedad en el cargo.
En el boxplot de la Figura 6 se evidencia la dispersión de la antigüedad en el cargo y la posible presencia de valores atípicos. Si bien la mayoría de los empleados se concentra en niveles bajos y moderados de antigüedad, hay algunos individuos que presentan valores superiores, esto puede reflejar empleados con mayor permanencia en sus cargos. Esta variabilidad resulta relevante para analizar posibles efectos sobre la rotación.
# ============================
# 2.2.1 DISTRIBUCIÓN HORAS EXTRA
# ============================
graf_horas <- rotacion %>%
count(Horas_Extra) %>%
ggplot(aes(x = Horas_Extra, y = n, fill = Horas_Extra)) +
geom_col(alpha = 0.8) +
scale_fill_manual(values = c("#6B2EBF", "#76A9DC")) +
labs(
x = "Horas extra",
y = "Frecuencia"
) +
theme_minimal() +
theme(legend.position = "none")
ggplotly(graf_horas)
Figura 7. Distribución de empleados según realización de horas extra.
La Figura 7 presenta la distribución de los empleados según la realización de horas extra. Se observa que la población se divide entre aquellos que realizan horas extra y aquellos que no, lo que permite identificar la proporción relativa de empleados sometidos a una mayor carga laboral. Esta variable resulta especialmente relevante, ya que puede estar asociada a niveles de estrés, desgaste laboral y menor equilibrio entre la vida personal y profesional, factores que pueden incidir directamente en la rotación de empleados dentro de la organización.
# ============================
# 2.2.2 DISTRIBUCIÓN CARGO
# ============================
graf_cargo <- rotacion %>%
count(Cargo) %>%
arrange(desc(n)) %>%
ggplot(aes(x = reorder(Cargo, n), y = n, fill = Cargo)) +
geom_col(alpha = 0.8) +
coord_flip() +
labs(
x = "Cargo",
y = "Frecuencia"
) +
theme_minimal() +
theme(legend.position = "none")
ggplotly(graf_cargo)
Figura 8. Distribución de empleados según cargo.
Para la Figura 8 se presenta la distribución de los empleados según el cargo que ocupan dentro de la organización. Se observa que algunos cargos concentran una mayor proporción de empleados, lo que sugiere una estructura organizacional donde ciertos roles operativos o intermedios son más frecuentes. Por el contrario, cargos de mayor nivel jerárquico presentan menor frecuencia, lo cual es consistente con estructuras empresariales típicas.
Esta variable resulta relevante, ya que diferentes cargos implican distintos niveles de responsabilidad, presión y oportunidades de crecimiento, factores que pueden influir en la probabilidad de rotación.
# ============================
# 2.2.3 DISTRIBUCIÓN ESTADO CIVIL
# ============================
graf_estado <- rotacion %>%
count(Estado_Civil) %>%
arrange(desc(n)) %>%
ggplot(aes(x = reorder(Estado_Civil, n), y = n, fill = Estado_Civil)) +
geom_col(alpha = 0.8) +
coord_flip() +
labs(
x = "Estado civil",
y = "Frecuencia"
) +
theme_minimal() +
theme(legend.position = "none")
ggplotly(graf_estado)
Figura 9. Distribución de empleados según estado civil.
La Figura 9 muestra la distribución de los empleados según su estado civil. Se observa que la mayor proporción de empleados corresponde a la categoría de casados, seguida por los solteros, mientras que los divorciados representan el grupo menos numeroso dentro de la organización.
Esta distribución sugiere que la empresa cuenta con una población laboral predominantemente estable desde el punto de vista familiar. La variable resulta relevante para el análisis, ya que las responsabilidades personales y familiares asociadas a cada estado civil podrían influir en la estabilidad laboral y en la probabilidad de rotación de los empleados.
# ============================
# 2.3 DISTRIBUCIÓN DE ROTACIÓN
# ============================
rotacion %>%
count(Rotación) %>%
mutate(
prop = round(n / sum(n) * 100, 2),
prop = paste0(prop, " %")
) %>%
gt() %>%
tab_header(
title = "Tabla 3. Distribución de la Rotación"
) %>%
cols_label(
Rotación = "Estado",
n = "Número de empleados",
prop = "Participación"
) %>%
cols_align(
align = "center",
everything()
) %>%
tab_options(
table.font.size = px(12)
)
| Tabla 3. Distribución de la Rotación | ||
| Estado | Número de empleados | Participación |
|---|---|---|
| No | 1233 | 83.88 % |
| Si | 237 | 16.12 % |
graf_rotacion <- rotacion %>%
count(Rotación) %>%
ggplot(aes(x = Rotación, y = n, fill = Rotación)) +
geom_col(alpha = 0.8) +
labs(
x = "Rotación",
y = "Frecuencia"
) +
theme_minimal() +
theme(legend.position = "none")
ggplotly(graf_rotacion)
Figura 10. Distribución de variable rotación.
La figura 10 muestra la distribución de la variable Rotación, la cual permite identificar la proporción de empleados que sí han rotado y aquellos que no. Este análisis es importante porque permite evaluar si existe un desbalance entre categorías, lo cual puede influir en la estimación e interpretación del modelo logístico.
En esta sección se realiza un análisis bivariado entre la variable respuesta Rotación y cada una de las seis variables seleccionadas previamente en el punto 1, con el propósito de identificar cuáles de ellas presentan una relación individual con la probabilidad de rotación de empleados.
Para ello, se definió la variable respuesta Rotación en forma binaria, de tal manera que:
• y = 1: si el empleado presenta rotación
• y = 0: si el empleado no presenta rotación
Posteriormente, se van a estimar los modelos de regresión logística simples, es decir, un modelo por cada variable explicativa, lo cual permite evaluar:
Este análisis constituye una etapa preliminar importante antes de estimar el modelo logístico multivariado, ya que permite detectar variables potencialmente determinantes de la rotación y contrastar empíricamente las hipótesis formuladas en el punto anterior.
Antes de realizar el análisis bivariado, es necesario adecuar la base de datos para la estimación de modelos de regresión logística. En particular, se requiere que la variable respuesta Rotación esté codificada en formato binario, de manera que el modelo pueda interpretar correctamente la ocurrencia o no del evento de interés.
Asimismo, las variables categóricas deben ser reconocidas por R como factores, con el fin de que sean tratadas adecuadamente en los modelos posteriores.
# ============================
# 3.1 PREPARACIÓN DE LOS DATOS
# ============================
rotacion <- rotacion %>%
mutate(
rotacion_bin = ifelse(`Rotación` == "Si", 1, 0),
Horas_Extra = as.factor(Horas_Extra),
Cargo = as.factor(Cargo),
Estado_Civil = as.factor(Estado_Civil)
)
# ============================
# TABLA DE DISTRIBUCIÓN DE LA VARIABLE RESPUESTA
# ============================
rotacion %>%
mutate(
rotacion_bin_texto = ifelse(rotacion_bin == 1, "Sí rotación", "No rotación")
) %>%
count(rotacion_bin_texto) %>%
mutate(
porcentaje = round(n / sum(n) * 100, 2),
porcentaje = paste0(porcentaje, " %")
) %>%
gt() %>%
tab_header(
title = "Tabla 4. Distribución de la variable respuesta codificada"
) %>%
cols_label(
rotacion_bin_texto = "Categoría",
n = "Frecuencia",
porcentaje = "Participación"
) %>%
cols_align(
align = "center",
everything()
) %>%
tab_options(
table.font.size = px(12),
heading.title.font.size = px(14),
column_labels.font.size = px(12)
)
| Tabla 4. Distribución de la variable respuesta codificada | ||
| Categoría | Frecuencia | Participación |
|---|---|---|
| No rotación | 1233 | 83.88 % |
| Sí rotación | 237 | 16.12 % |
La tabla 4 presenta la distribución de la variable respuesta rotacion_bin, la cual será utilizada en los modelos logísticos posteriores. Esta transformación permite representar de forma binaria la ocurrencia del evento de interés, es decir, la rotación de empleados dentro de la organización.
En esta subsección se analiza la relación entre la variable respuesta Rotación y las variables cuantitativas seleccionadas en el punto 1.
Para ello, se estiman modelos de regresión logística simples, uno por cada variable numérica, con el propósito de evaluar si dichas covariables presentan una asociación individual con la probabilidad de rotación.
En este contexto, el signo del coeficiente estimado permite interpretar la dirección del efecto:
-Un coeficiente positivo indica que al aumentar la variable, aumenta la probabilidad de rotación;
-Un coeficiente negativo indica que al aumentar la variable, disminuye la probabilidad de rotación.
Adicionalmente, la significancia estadística del parámetro permite determinar si la relación observada es relevante desde el punto de vista inferencial.
La variable Edad fue seleccionada como posible factor asociado a la rotación, bajo la hipótesis de que los empleados más jóvenes podrían presentar una mayor propensión a cambiar de cargo o abandonar la organización, debido a menores niveles de estabilidad laboral, búsqueda de mejores oportunidades o una etapa profesional más dinámica.
Para evaluar esta hipótesis, se estimó un modelo logístico simple entre la variable respuesta Rotación y la variable explicativa Edad.
# ============================
# 3.2.1 EDAD
# ============================
modelo_biv_edad <- glm(
rotacion_bin ~ Edad,
family = binomial(link = "logit"),
data = rotacion
)
# Extraer resultados del modelo
tabla_edad <- data.frame(
Parámetro = rownames(summary(modelo_biv_edad)$coefficients),
Coeficiente = summary(modelo_biv_edad)$coefficients[,1],
Error_Estándar = summary(modelo_biv_edad)$coefficients[,2],
Estadístico_z = summary(modelo_biv_edad)$coefficients[,3],
Valor_p = summary(modelo_biv_edad)$coefficients[,4],
Odds_Ratio = exp(summary(modelo_biv_edad)$coefficients[,1])
)
# Mostrar tabla bonita
tabla_edad %>%
mutate(
Coeficiente = round(Coeficiente, 4),
Error_Estándar = round(Error_Estándar, 4),
Estadístico_z = round(Estadístico_z, 4),
Valor_p = round(Valor_p, 4),
Odds_Ratio = round(Odds_Ratio, 4)
) %>%
gt() %>%
tab_header(
title = "Tabla 5. Modelo logístico bivariado: Edad"
) %>%
cols_label(
Parámetro = "Parámetro",
Coeficiente = "Coeficiente",
Error_Estándar = "Error estándar",
Estadístico_z = "Estadístico z",
Valor_p = "Valor-p",
Odds_Ratio = "Odds Ratio"
) %>%
cols_align(
align = "center",
everything()
) %>%
tab_options(
table.font.size = px(12),
heading.title.font.size = px(14),
column_labels.font.size = px(12),
data_row.padding = px(6)
)
| Tabla 5. Modelo logístico bivariado: Edad | |||||
| Parámetro | Coeficiente | Error estándar | Estadístico z | Valor-p | Odds Ratio |
|---|---|---|---|---|---|
| (Intercept) | 0.2064 | 0.3060 | 0.6745 | 0.5 | 1.2292 |
| Edad | -0.0523 | 0.0087 | -6.0063 | 0.0 | 0.9491 |
La tabla 5 presenta los resultados del modelo logístico bivariado estimado entre la variable respuesta Rotación y la variable explicativa Edad.
El modelo logístico bivariado muestra que la variable Edad tiene un coeficiente negativo (-0.0523) y estadísticamente significativo (valor-p ≈ 0.000), lo que indica que a medida que aumenta la edad, disminuye la probabilidad de rotación. En términos de odds ratio (0.9491), cada año adicional reduce las probabilidades de rotación en aproximadamente un 5%. Este resultado es consistente con la hipótesis planteada, según la cual los empleados más jóvenes presentan una mayor propensión a rotar.
La variable Ingreso mensual fue seleccionada como posible determinante de la rotación, bajo la hipótesis de que empleados con menores niveles salariales podrían presentar una mayor probabilidad de rotación, debido a menores niveles de satisfacción económica o búsqueda de mejores oportunidades laborales.
Para evaluar esta relación, se estimó un modelo logístico simple entre la variable respuesta Rotación y la variable explicativa Ingreso mensual.
# ============================
# 3.2.2 INGRESO MENSUAL
# ============================
modelo_biv_ingreso <- glm(
rotacion_bin ~ Ingreso_Mensual,
family = binomial(link = "logit"),
data = rotacion
)
tabla_ingreso <- data.frame(
Parámetro = rownames(summary(modelo_biv_ingreso)$coefficients),
Coeficiente = summary(modelo_biv_ingreso)$coefficients[,1],
Error_Estándar = summary(modelo_biv_ingreso)$coefficients[,2],
Estadístico_z = summary(modelo_biv_ingreso)$coefficients[,3],
Valor_p = summary(modelo_biv_ingreso)$coefficients[,4],
Odds_Ratio = exp(summary(modelo_biv_ingreso)$coefficients[,1])
)
tabla_ingreso %>%
mutate(
Coeficiente = round(Coeficiente, 4),
Error_Estándar = round(Error_Estándar, 4),
Estadístico_z = round(Estadístico_z, 4),
Valor_p = round(Valor_p, 4),
Odds_Ratio = round(Odds_Ratio, 4)
) %>%
gt() %>%
tab_header(
title = "Tabla 6. Modelo logístico bivariado: Ingreso mensual"
) %>%
cols_label(
Parámetro = "Parámetro",
Coeficiente = "Coeficiente",
Error_Estándar = "Error estándar",
Estadístico_z = "Estadístico z",
Valor_p = "Valor-p",
Odds_Ratio = "Odds Ratio"
) %>%
cols_align(
align = "center",
everything()
) %>%
tab_options(
table.font.size = px(12),
heading.title.font.size = px(14),
column_labels.font.size = px(12),
data_row.padding = px(6)
)
| Tabla 6. Modelo logístico bivariado: Ingreso mensual | |||||
| Parámetro | Coeficiente | Error estándar | Estadístico z | Valor-p | Odds Ratio |
|---|---|---|---|---|---|
| (Intercept) | -0.9291 | 0.1292 | -7.1911 | 0 | 0.3949 |
| Ingreso_Mensual | -0.0001 | 0.0000 | -5.8793 | 0 | 0.9999 |
La tabla 6 del modelo logístico bivariado muestra que la variable Ingreso mensual tiene un coeficiente negativo (-0.0001) y estadísticamente significativo (valor-p ≈ 0.000), lo que indica que a mayores ingresos mensuales disminuye la probabilidad de rotación. Aunque el efecto por cada unidad monetaria es pequeño, el signo del coeficiente confirma una relación inversa entre salario y rotación. En términos del odds ratio (0.9999), el incremento en el ingreso reduce ligeramente las probabilidades de rotación, resultado consistente con la hipótesis de que empleados con menores ingresos presentan mayor propensión a abandonar la organización.
La variable Antigüedad del cargo fue seleccionada como posible factor asociado a la rotación, bajo la hipótesis de que empleados con menor tiempo en su cargo podrían presentar una mayor probabilidad de rotación, debido a menores niveles de adaptación, experiencia acumulada o estabilidad dentro de la organización.
Para evaluar esta relación, se estimó un modelo logístico simple entre la variable respuesta Rotación y la variable explicativa Antigüedad del cargo.
# ============================
# 3.2.3 ANTIGÜEDAD DEL CARGO
# ============================
modelo_biv_antiguedad <- glm(
rotacion_bin ~ Antigüedad_Cargo,
family = binomial(link = "logit"),
data = rotacion
)
tabla_antiguedad <- data.frame(
Parámetro = rownames(summary(modelo_biv_antiguedad)$coefficients),
Coeficiente = summary(modelo_biv_antiguedad)$coefficients[,1],
Error_Estándar = summary(modelo_biv_antiguedad)$coefficients[,2],
Estadístico_z = summary(modelo_biv_antiguedad)$coefficients[,3],
Valor_p = summary(modelo_biv_antiguedad)$coefficients[,4],
Odds_Ratio = exp(summary(modelo_biv_antiguedad)$coefficients[,1])
)
tabla_antiguedad %>%
mutate(
Coeficiente = round(Coeficiente, 4),
Error_Estándar = round(Error_Estándar, 4),
Estadístico_z = round(Estadístico_z, 4),
Valor_p = round(Valor_p, 4),
Odds_Ratio = round(Odds_Ratio, 4)
) %>%
gt() %>%
tab_header(
title = "Tabla 7. Modelo logístico bivariado: Antigüedad del cargo"
) %>%
cols_label(
Parámetro = "Parámetro",
Coeficiente = "Coeficiente",
Error_Estándar = "Error estándar",
Estadístico_z = "Estadístico z",
Valor_p = "Valor-p",
Odds_Ratio = "Odds Ratio"
) %>%
cols_align(
align = "center",
everything()
) %>%
tab_options(
table.font.size = px(12),
heading.title.font.size = px(14),
column_labels.font.size = px(12),
data_row.padding = px(6)
)
| Tabla 7. Modelo logístico bivariado: Antigüedad del cargo | |||||
| Parámetro | Coeficiente | Error estándar | Estadístico z | Valor-p | Odds Ratio |
|---|---|---|---|---|---|
| (Intercept) | -1.1184 | 0.1038 | -10.7745 | 0 | 0.3268 |
| Antigüedad_Cargo | -0.1463 | 0.0242 | -6.0333 | 0 | 0.8639 |
La tabla 7 del modelo logístico bivariado muestra que la variable Antigüedad cargo tiene un coeficiente negativo (-0.1463) y estadísticamente significativo (valor-p ≈ 0.000), lo que indica que a medida que aumenta el tiempo de permanencia en el cargo, disminuye la probabilidad de rotación. En términos del odds ratio (0.8639), cada unidad adicional de antigüedad reduce las probabilidades de rotación en aproximadamente un 13.6%. Este resultado es consistente con la hipótesis planteada, según la cual los empleados con menor antigüedad en el cargo presentan una mayor propensión a rotar.
En esta subsección se analiza la relación entre la variable respuesta Rotación y las variables explicativas categóricas seleccionadas en el punto 1.
Para ello, se estiman modelos de regresión logística simples, uno por cada variable categórica, con el propósito de evaluar si existen diferencias en la probabilidad de rotación entre las distintas categorías de cada variable.
En este caso, la interpretación de los coeficientes se realiza comparando cada categoría frente a una categoría de referencia. Un coeficiente positivo indica una mayor probabilidad de rotación frente a la categoría base, mientras que un coeficiente negativo indica una menor probabilidad relativa.
La variable Horas extra fue seleccionada como posible factor asociado a la rotación, bajo la hipótesis de que empleados que realizan trabajo adicional fuera de la jornada habitual podrían presentar una mayor probabilidad de rotación, debido a mayores niveles de carga laboral, estrés o desgaste organizacional.
Para evaluar esta relación, se estimó un modelo logístico simple entre la variable respuesta Rotación y la variable explicativa Horas extra.
# ============================
# REFERENCIA PARA HORAS EXTRA
# ============================
rotacion$Horas_Extra <- relevel(rotacion$Horas_Extra, ref = "No")
# ============================
# 3.3.1 HORAS EXTRA
# ============================
modelo_biv_horas <- glm(
rotacion_bin ~ Horas_Extra,
family = binomial(link = "logit"),
data = rotacion
)
tabla_horas <- data.frame(
Parámetro = rownames(summary(modelo_biv_horas)$coefficients),
Coeficiente = summary(modelo_biv_horas)$coefficients[,1],
Error_Estándar = summary(modelo_biv_horas)$coefficients[,2],
Estadístico_z = summary(modelo_biv_horas)$coefficients[,3],
Valor_p = summary(modelo_biv_horas)$coefficients[,4],
Odds_Ratio = exp(summary(modelo_biv_horas)$coefficients[,1])
)
tabla_horas %>%
mutate(
Coeficiente = round(Coeficiente, 4),
Error_Estándar = round(Error_Estándar, 4),
Estadístico_z = round(Estadístico_z, 4),
Valor_p = round(Valor_p, 4),
Odds_Ratio = round(Odds_Ratio, 4)
) %>%
gt() %>%
tab_header(
title = "Tabla 8. Modelo logístico bivariado: Horas Extra"
) %>%
cols_label(
Parámetro = "Parámetro",
Coeficiente = "Coeficiente",
Error_Estándar = "Error estándar",
Estadístico_z = "Estadístico z",
Valor_p = "Valor-p",
Odds_Ratio = "Odds Ratio"
) %>%
cols_align(
align = "center",
everything()
) %>%
tab_options(
table.font.size = px(12),
heading.title.font.size = px(14),
column_labels.font.size = px(12),
data_row.padding = px(6)
)
| Tabla 8. Modelo logístico bivariado: Horas Extra | |||||
| Parámetro | Coeficiente | Error estándar | Estadístico z | Valor-p | Odds Ratio |
|---|---|---|---|---|---|
| (Intercept) | -2.1496 | 0.1007 | -21.3379 | 0 | 0.1165 |
| Horas_ExtraSi | 1.3274 | 0.1466 | 9.0563 | 0 | 3.7712 |
La tabla 8* del modelo logístico bivariado muestra que la variable Horas extra** tiene un coeficiente positivo (1.3274) y estadísticamente significativo (valor-p ≈ 0.000), lo que indica que los empleados que realizan horas extra presentan una mayor probabilidad de rotación en comparación con aquellos que no las realizan. En términos del odds ratio (3.7712), quienes trabajan horas extra tienen aproximadamente 3.77 veces más probabilidades de rotar frente a quienes no lo hacen. Este resultado es consistente con la hipótesis planteada, según la cual una mayor carga laboral se asocia con mayores niveles de rotación.
La variable Estado civil fue seleccionada como posible factor asociado a la rotación, bajo la hipótesis de que ciertas condiciones personales o familiares pueden influir en la estabilidad laboral del empleado. En particular, se plantea que algunos grupos, como los empleados solteros, podrían presentar una mayor probabilidad de rotación en comparación con otros estados civiles.
Para evaluar esta relación, se estimó un modelo logístico simple entre la variable respuesta Rotación y la variable explicativa Estado civil.
# ============================
# REFERENCIA PARA ESTADO CIVIL
# ============================
rotacion$Estado_Civil <- relevel(rotacion$Estado_Civil, ref = "Casado")
# ============================
# 3.3.2 ESTADO CIVIL
# ============================
modelo_biv_estado <- glm(
rotacion_bin ~ Estado_Civil,
family = binomial(link = "logit"),
data = rotacion
)
tabla_estado <- data.frame(
Parámetro = rownames(summary(modelo_biv_estado)$coefficients),
Coeficiente = summary(modelo_biv_estado)$coefficients[,1],
Error_Estándar = summary(modelo_biv_estado)$coefficients[,2],
Estadístico_z = summary(modelo_biv_estado)$coefficients[,3],
Valor_p = summary(modelo_biv_estado)$coefficients[,4],
Odds_Ratio = exp(summary(modelo_biv_estado)$coefficients[,1])
)
tabla_estado %>%
mutate(
Coeficiente = round(Coeficiente, 4),
Error_Estándar = round(Error_Estándar, 4),
Estadístico_z = round(Estadístico_z, 4),
Valor_p = round(Valor_p, 4),
Odds_Ratio = round(Odds_Ratio, 4)
) %>%
gt() %>%
tab_header(
title = "Tabla 9. Modelo logístico bivariado: Estado Civil"
) %>%
cols_label(
Parámetro = "Parámetro",
Coeficiente = "Coeficiente",
Error_Estándar = "Error estándar",
Estadístico_z = "Estadístico z",
Valor_p = "Valor-p",
Odds_Ratio = "Odds Ratio"
) %>%
cols_align(
align = "center",
everything()
) %>%
tab_options(
table.font.size = px(12),
heading.title.font.size = px(14),
column_labels.font.size = px(12),
data_row.padding = px(6)
)
| Tabla 9. Modelo logístico bivariado: Estado Civil | |||||
| Parámetro | Coeficiente | Error estándar | Estadístico z | Valor-p | Odds Ratio |
|---|---|---|---|---|---|
| (Intercept) | -1.9476 | 0.1166 | -16.6991 | 0.0000 | 0.1426 |
| Estado_CivilDivorciado | -0.2395 | 0.2175 | -1.1010 | 0.2709 | 0.7871 |
| Estado_CivilSoltero | 0.8772 | 0.1575 | 5.5708 | 0.0000 | 2.4041 |
La tabla 9 del modelo logístico bivariado muestra que, en comparación con los empleados casados (categoría de referencia), los empleados solteros presentan un coeficiente positivo (0.8772) y estadísticamente significativo (valor-p ≈ 0.000), lo que indica una mayor probabilidad de rotación. En términos del odds ratio (2.4041), los empleados solteros tienen aproximadamente 2.4 veces más probabilidades de rotar que los casados. Por otro lado, la categoría divorciado no resultó estadísticamente significativa (valor-p = 0.2709), por lo que no se evidencia una diferencia clara frente a los empleados casados. Estos resultados sugieren que el estado civil sí influye en la rotación, especialmente en el caso de los empleados solteros.
La variable Cargo fue seleccionada como posible factor asociado a la rotación, dado que las condiciones laborales, responsabilidades, nivel de exigencia y oportunidades de crecimiento pueden variar entre los diferentes cargos dentro de la organización.
En este sentido, se plantea que algunos cargos podrían presentar una mayor probabilidad de rotación en comparación con otros.
Para evaluar esta relación, se estimó un modelo logístico simple entre la variable respuesta Rotación y la variable explicativa Cargo.
data.frame(
Categorías_de_Cargo = levels(rotacion$Cargo)
) %>%
gt() %>%
tab_header(
title = "Tabla 10. Categorías de la variable Cargo"
) %>%
cols_label(
Categorías_de_Cargo = "Cargo"
) %>%
cols_align(
align = "center",
everything()
) %>%
tab_options(
table.font.size = px(12),
heading.title.font.size = px(14),
column_labels.font.size = px(12)
)
| Tabla 10. Categorías de la variable Cargo |
| Cargo |
|---|
| Director_Investigación |
| Director_Manofactura |
| Ejecutivo_Ventas |
| Gerente |
| Investigador_Cientifico |
| Recursos_Humanos |
| Representante_Salud |
| Representante_Ventas |
| Tecnico_Laboratorio |
La tabla 10 anterior muestra las distintas categorías de la variable Cargo, que representan los roles ocupados por los empleados dentro de la organización.
La variable Cargo corresponde a una variable categórica que agrupa los distintos roles ocupados por los empleados dentro de la organización. Para su análisis, se estimó un modelo logístico bivariado con el fin de evaluar si la probabilidad de rotación difiere entre cargos.
# ============================
# 3.3.3 CARGO
# ============================
modelo_biv_cargo <- glm(
rotacion_bin ~ Cargo,
family = binomial(link = "logit"),
data = rotacion
)
tabla_cargo <- data.frame(
Parámetro = rownames(summary(modelo_biv_cargo)$coefficients),
Coeficiente = summary(modelo_biv_cargo)$coefficients[,1],
Error_Estándar = summary(modelo_biv_cargo)$coefficients[,2],
Estadístico_z = summary(modelo_biv_cargo)$coefficients[,3],
Valor_p = summary(modelo_biv_cargo)$coefficients[,4],
Odds_Ratio = exp(summary(modelo_biv_cargo)$coefficients[,1])
)
tabla_cargo %>%
mutate(
Coeficiente = round(Coeficiente, 4),
Error_Estándar = round(Error_Estándar, 4),
Estadístico_z = round(Estadístico_z, 4),
Valor_p = round(Valor_p, 4),
Odds_Ratio = round(Odds_Ratio, 4)
) %>%
gt() %>%
tab_header(
title = "Tabla 11. Modelo logístico bivariado: Cargo"
) %>%
cols_label(
Parámetro = "Parámetro",
Coeficiente = "Coeficiente",
Error_Estándar = "Error estándar",
Estadístico_z = "Estadístico z",
Valor_p = "Valor-p",
Odds_Ratio = "Odds Ratio"
) %>%
cols_align(
align = "center",
everything()
) %>%
tab_options(
table.font.size = px(12),
heading.title.font.size = px(14),
column_labels.font.size = px(12),
data_row.padding = px(6)
)
| Tabla 11. Modelo logístico bivariado: Cargo | |||||
| Parámetro | Coeficiente | Error estándar | Estadístico z | Valor-p | Odds Ratio |
|---|---|---|---|---|---|
| (Intercept) | -3.6636 | 0.7161 | -5.1159 | 0.0000 | 0.0256 |
| CargoDirector_Manofactura | 1.0609 | 0.7875 | 1.3471 | 0.1780 | 2.8889 |
| CargoEjecutivo_Ventas | 2.1119 | 0.7308 | 2.8898 | 0.0039 | 8.2639 |
| CargoGerente | 0.6983 | 0.8504 | 0.8212 | 0.4116 | 2.0103 |
| CargoInvestigador_Cientifico | 2.0125 | 0.7336 | 2.7433 | 0.0061 | 7.4816 |
| CargoRecursos_Humanos | 2.4596 | 0.7881 | 3.1208 | 0.0018 | 11.7000 |
| CargoRepresentante_Salud | 1.0568 | 0.7951 | 1.3292 | 0.1838 | 2.8770 |
| CargoRepresentante_Ventas | 3.2480 | 0.7504 | 4.3284 | 0.0000 | 25.7400 |
| CargoTecnico_Laboratorio | 2.5075 | 0.7308 | 3.4313 | 0.0006 | 12.2741 |
La Tabla 11 presenta los resultados del modelo logístico bivariado para la variable Cargo. En este caso, la interpretación de los coeficientes se realiza con respecto a la categoría de referencia definida automáticamente por R, por lo que cada cargo se compara frente a ese grupo base.
A partir de los resultados, se observa que varios cargos presentan coeficientes positivos y estadísticamente significativos, lo que indica una mayor probabilidad de rotación en comparación con la categoría de referencia del modelo. Entre los cargos con mayor efecto se destacan Representante de Ventas (odds ratio = 25.74), Técnico de Laboratorio (12.27), Recursos Humanos (11.70), Ejecutivo de Ventas (8.26) e Investigador Científico (7.48), evidenciando una asociación importante entre el tipo de cargo y la rotación laboral. Por el contrario, cargos como Director de Manufactura, Gerente y Representante de Salud no presentan evidencia estadísticamente significativa, por lo que no se puede afirmar que difieran de la categoría base en términos de rotación.
En general, los resultados del análisis bivariado son consistentes con las hipótesis planteadas en el punto 2. En particular, se confirma que variables como la edad, el ingreso mensual y la antigüedad en el cargo presentan una relación inversa con la rotación, indicando que empleados más jóvenes, con menores ingresos y menor tiempo en el cargo tienen mayor probabilidad de abandonar la organización. Asimismo, se evidencia que factores como la realización de horas extra, el estado civil y el cargo influyen en la rotación, siendo mayor en empleados que trabajan horas adicionales, en aquellos solteros y en ciertos cargos específicos.
En conjunto, estos resultados permiten identificar variables potencialmente determinantes de la rotación, validando en gran medida las hipótesis formuladas previamente.
En esta sección se estima un modelo de regresión logística multivariado, en el cual la variable respuesta es Rotación, codificada como:
• y = 1: si el empleado presenta rotación
• y = 0: si el empleado no presenta rotación
El objetivo es analizar de forma conjunta el efecto de las seis variables seleccionadas previamente sobre la probabilidad de rotación, permitiendo identificar cuáles conservan un efecto estadísticamente significativo al controlar por las demás covariables.
A diferencia del análisis bivariado, en este caso el modelo permite evaluar el aporte individual de cada variable dentro de un contexto multivariado, lo cual ofrece una explicación más completa y robusta del fenómeno de rotación laboral.
Con base en los resultados obtenidos en el análisis previo, se estimó un modelo logístico multivariado incluyendo las siguientes covariables:
• Edad
• Ingreso mensual
• Antigüedad del cargo
• Horas Extra
• Estado Civil
• Cargo
Donde la forma general del modelo puede expresarse como:
\[ \ln\left(\frac{p_i}{1-p_i}\right)=\beta_0+\beta_1 \text{Edad}+\beta_2 \text{Ingreso mensual}+\beta_3 \text{Antigüedad del cargo}+\beta_4 \text{Horas Extra}+\beta_5 \text{Estado Civil}+\beta_6 \text{Cargo} \]
\(p_i\) representa la probabilidad de que el empleado presente rotación.
A continuación, se estima el modelo logístico multivariado utilizando la función glm() de R con familia binomial y enlace logit.
Esta estimación permite obtener los coeficientes del modelo, sus errores estándar, la significancia estadística y los odds ratios, los cuales facilitan la interpretación del efecto de cada covariable sobre la probabilidad de rotación.
# ============================
# 4.2 MODELO LOGÍSTICO FINAL
# ============================
modelo_final <- glm(
rotacion_bin ~ Edad + Ingreso_Mensual + Antigüedad_Cargo +
Horas_Extra + Estado_Civil + Cargo,
family = binomial(link = "logit"),
data = rotacion
)
La forma funcional del modelo estimado (como se habia mostrado anteriormente) es la siguiente:
\[ \ln\left(\frac{p_i}{1-p_i}\right)=\beta_0+\beta_1 \text{Edad}+\beta_2 \text{Ingreso mensual}+\beta_3 \text{Antigüedad del cargo}+\beta_4 \text{Horas Extra}+\beta_5 \text{Estado Civil}+\beta_6 \text{Cargo} \]
data.frame(
Variable = c(
"Edad",
"Ingreso mensual",
"Antigüedad del cargo",
"Horas Extra",
"Estado Civil",
"Cargo"
),
Tipo = c(
"Cuantitativa",
"Cuantitativa",
"Cuantitativa",
"Categórica",
"Categórica",
"Categórica"
),
Rol = c(
"Explicativa",
"Explicativa",
"Explicativa",
"Explicativa",
"Explicativa",
"Explicativa"
)
) %>%
gt() %>%
tab_header(
title = "Tabla 12. Variables incluidas en el modelo logístico"
) %>%
cols_label(
Variable = "Variable",
Tipo = "Tipo de variable",
Rol = "Rol en el modelo"
) %>%
cols_align(
align = "center",
everything()
) %>%
tab_options(
table.font.size = px(12),
heading.title.font.size = px(14),
column_labels.font.size = px(12),
data_row.padding = px(6)
)
| Tabla 12. Variables incluidas en el modelo logístico | ||
| Variable | Tipo de variable | Rol en el modelo |
|---|---|---|
| Edad | Cuantitativa | Explicativa |
| Ingreso mensual | Cuantitativa | Explicativa |
| Antigüedad del cargo | Cuantitativa | Explicativa |
| Horas Extra | Categórica | Explicativa |
| Estado Civil | Categórica | Explicativa |
| Cargo | Categórica | Explicativa |
La Tabla 12 presenta las variables incluidas en el modelo de regresión logística multivariado. En ella se observa que el modelo fue estimado con seis covariables explicativas, de las cuales tres son cuantitativas (Edad, Ingreso mensual y Antigüedad del cargo) y tres son categóricas (Horas Extra, Estado Civil y Cargo). Estas variables fueron seleccionadas con el propósito de evaluar su efecto conjunto sobre la probabilidad de rotación de los empleados.
La siguiente tabla presenta los resultados del modelo de regresión logística multivariado estimado.
En ella se reportan los coeficientes estimados, sus errores estándar, el estadístico de prueba z, el valor-p y los correspondientes odds ratios, con el fin de identificar qué variables explicativas influyen significativamente en la probabilidad de rotación.
La interpretación del signo del coeficiente permite determinar la dirección del efecto de cada variable, mientras que el valor-p permite establecer su significancia estadística dentro del modelo conjunto.
tabla_modelo_final <- data.frame(
Parámetro = rownames(summary(modelo_final)$coefficients),
Coeficiente = summary(modelo_final)$coefficients[,1],
Error_Estándar = summary(modelo_final)$coefficients[,2],
Estadístico_z = summary(modelo_final)$coefficients[,3],
Valor_p = summary(modelo_final)$coefficients[,4],
Odds_Ratio = exp(summary(modelo_final)$coefficients[,1])
)
tabla_modelo_final %>%
mutate(
Coeficiente = round(Coeficiente, 4),
Error_Estándar = round(Error_Estándar, 4),
Estadístico_z = round(Estadístico_z, 4),
Valor_p = round(Valor_p, 4),
Odds_Ratio = round(Odds_Ratio, 4)
) %>%
gt() %>%
tab_header(
title = "Tabla 13. Modelo de regresión logística multivariado"
) %>%
cols_label(
Parámetro = "Parámetro",
Coeficiente = "Coeficiente",
Error_Estándar = "Error estándar",
Estadístico_z = "Estadístico z",
Valor_p = "Valor-p",
Odds_Ratio = "Odds Ratio"
) %>%
cols_align(
align = "center",
everything()
) %>%
tab_options(
table.font.size = px(12),
heading.title.font.size = px(14),
column_labels.font.size = px(12),
data_row.padding = px(6)
)
| Tabla 13. Modelo de regresión logística multivariado | |||||
| Parámetro | Coeficiente | Error estándar | Estadístico z | Valor-p | Odds Ratio |
|---|---|---|---|---|---|
| (Intercept) | -3.5624 | 1.0338 | -3.4459 | 0.0006 | 0.0284 |
| Edad | -0.0267 | 0.0102 | -2.6037 | 0.0092 | 0.9737 |
| Ingreso_Mensual | 0.0000 | 0.0000 | 1.0123 | 0.3114 | 1.0000 |
| Antigüedad_Cargo | -0.0983 | 0.0277 | -3.5506 | 0.0004 | 0.9064 |
| Horas_ExtraSi | 1.5506 | 0.1628 | 9.5253 | 0.0000 | 4.7143 |
| Estado_CivilDivorciado | -0.3206 | 0.2330 | -1.3759 | 0.1688 | 0.7257 |
| Estado_CivilSoltero | 0.8042 | 0.1734 | 4.6370 | 0.0000 | 2.2350 |
| CargoDirector_Manofactura | 1.1686 | 0.8896 | 1.3136 | 0.1890 | 3.2174 |
| CargoEjecutivo_Ventas | 2.2410 | 0.8462 | 2.6485 | 0.0081 | 9.4028 |
| CargoGerente | 0.7258 | 0.8659 | 0.8383 | 0.4019 | 2.0665 |
| CargoInvestigador_Cientifico | 1.9455 | 0.9358 | 2.0790 | 0.0376 | 6.9973 |
| CargoRecursos_Humanos | 2.8328 | 0.9591 | 2.9535 | 0.0031 | 16.9926 |
| CargoRepresentante_Salud | 1.2255 | 0.8940 | 1.3708 | 0.1704 | 3.4060 |
| CargoRepresentante_Ventas | 3.1987 | 0.9647 | 3.3157 | 0.0009 | 24.5019 |
| CargoTecnico_Laboratorio | 2.7246 | 0.9331 | 2.9201 | 0.0035 | 15.2500 |
La Tabla 13 muestra que, al analizar todas las variables de manera conjunta, no todas conservan la misma importancia que habían mostrado en el análisis bivariado.
En primer lugar, la edad presenta un coeficiente negativo y estadísticamente significativo (p = 0.0092), lo que indica que a medida que aumenta la edad, disminuye la probabilidad de rotación. De forma similar, la antigüedad en el cargo también tiene un efecto negativo y significativo (p = 0.0004), sugiriendo que los empleados que llevan más tiempo en su puesto tienden a permanecer más en la empresa.
Por otro lado, la variable Horas Extra mantiene un efecto positivo y altamente significativo (p < 0.001), lo que evidencia que los trabajadores que realizan horas extra tienen mayor probabilidad de rotar. En cuanto al estado civil, solo la categoría Soltero presenta un efecto positivo y significativo, lo que sugiere una mayor probabilidad de rotación en comparación con la categoría de referencia.
Finalmente, en la variable Cargo, se observa que algunos puestos específicos como Ejecutivo de Ventas, Investigador Científico, Recursos Humanos, Representante de Ventas y Técnico de Laboratorio muestran una mayor probabilidad de rotación y resultan estadísticamente significativos dentro del modelo. En cambio, otros cargos no presentan diferencias significativas frente al grupo de referencia.
En conjunto, estos resultados permiten identificar con mayor claridad qué variables realmente mantienen un efecto sólido sobre la rotación del personal cuando se analizan varios factores al mismo tiempo.
A partir de los resultados del modelo logístico multivariado, se identifican como variables estadísticamente significativas al nivel del 5% las siguientes:
• Edad: presenta un coeficiente negativo, lo que indica que a mayor edad disminuye la probabilidad de rotación.
• Antigüedad del cargo: también presenta un efecto negativo y significativo, evidenciando que una mayor permanencia en el cargo reduce la probabilidad de rotación.
• Horas Extra: muestra un coeficiente positivo y altamente significativo, lo que indica que realizar horas extra incrementa la probabilidad de rotación.
• Estado Civil (Soltero): presenta un efecto positivo y significativo, indicando una mayor probabilidad de rotación frente a la categoría de referencia.
• Cargo: algunas categorías específicas, como Ejecutivo de Ventas, Investigador Científico, Recursos Humanos, Representante de Ventas y Técnico de Laboratorio, presentan coeficientes positivos y significativos, lo que sugiere una mayor probabilidad de rotación frente al grupo base.
Por otro lado, variables como Ingreso mensual, Estado Civil (Divorciado) y algunos cargos no resultaron estadísticamente significativos, por lo que no se puede afirmar que tengan un efecto determinante dentro del modelo multivariado.
Un hallazgo importante del modelo multivariado es que Ingreso mensual pierde significancia estadística frente a lo observado en el análisis bivariado, lo que sugiere que su relación con la rotación podría estar explicada por otras variables incluidas en el modelo, como el cargo, la antigüedad o las horas extra.
Con el fin de facilitar la interpretación del modelo, a continuación se presentan únicamente las variables y categorías que resultaron estadísticamente significativas al nivel del 5%.
Estas covariables pueden considerarse como los principales factores determinantes de la rotación dentro del modelo logístico multivariado.
tabla_significativas <- tabla_modelo_final %>%
filter(Valor_p < 0.05)
tabla_significativas %>%
mutate(
Coeficiente = round(Coeficiente, 4),
Error_Estándar = round(Error_Estándar, 4),
Estadístico_z = round(Estadístico_z, 4),
Valor_p = round(Valor_p, 4),
Odds_Ratio = round(Odds_Ratio, 4)
) %>%
gt() %>%
tab_header(
title = "Tabla 14. Variables significativas del modelo logístico"
) %>%
cols_label(
Parámetro = "Parámetro",
Coeficiente = "Coeficiente",
Error_Estándar = "Error estándar",
Estadístico_z = "Estadístico z",
Valor_p = "Valor-p",
Odds_Ratio = "Odds Ratio"
) %>%
cols_align(
align = "center",
everything()
) %>%
tab_options(
table.font.size = px(12),
heading.title.font.size = px(14),
column_labels.font.size = px(12),
data_row.padding = px(6)
)
| Tabla 14. Variables significativas del modelo logístico | |||||
| Parámetro | Coeficiente | Error estándar | Estadístico z | Valor-p | Odds Ratio |
|---|---|---|---|---|---|
| (Intercept) | -3.5624 | 1.0338 | -3.4459 | 0.0006 | 0.0284 |
| Edad | -0.0267 | 0.0102 | -2.6037 | 0.0092 | 0.9737 |
| Antigüedad_Cargo | -0.0983 | 0.0277 | -3.5506 | 0.0004 | 0.9064 |
| Horas_ExtraSi | 1.5506 | 0.1628 | 9.5253 | 0.0000 | 4.7143 |
| Estado_CivilSoltero | 0.8042 | 0.1734 | 4.6370 | 0.0000 | 2.2350 |
| CargoEjecutivo_Ventas | 2.2410 | 0.8462 | 2.6485 | 0.0081 | 9.4028 |
| CargoInvestigador_Cientifico | 1.9455 | 0.9358 | 2.0790 | 0.0376 | 6.9973 |
| CargoRecursos_Humanos | 2.8328 | 0.9591 | 2.9535 | 0.0031 | 16.9926 |
| CargoRepresentante_Ventas | 3.1987 | 0.9647 | 3.3157 | 0.0009 | 24.5019 |
| CargoTecnico_Laboratorio | 2.7246 | 0.9331 | 2.9201 | 0.0035 | 15.2500 |
La Tabla 14 resume las variables que resultaron estadísticamente significativas dentro del modelo logístico multivariado. En ella se observa que factores como la edad, la antigüedad del cargo, la realización de horas extra, el hecho de ser soltero y algunos cargos específicos mantienen una asociación significativa con la probabilidad de rotación, aun después de controlar por las demás covariables incluidas en el modelo.
En conclusión, el modelo de regresión logística multivariado permitió identificar cuáles variables explican de manera conjunta la probabilidad de rotación de los empleados. Los resultados evidencian que factores como la edad, la antigüedad del cargo, la realización de horas extra, el hecho de ser soltero y algunos cargos específicos presentan una influencia estadísticamente significativa sobre la rotación laboral.
En particular, se encontró que la probabilidad de rotación es mayor en empleados más jóvenes, con menor tiempo en el cargo, que realizan horas extra, que son solteros y que ocupan determinados cargos dentro de la organización. Por el contrario, variables como el ingreso mensual no conservaron significancia estadística al ser analizadas conjuntamente con las demás covariables, lo que sugiere que su efecto puede estar explicado por otros factores del modelo.
En términos generales, el modelo estimado permite concluir que la rotación no depende de un único factor, sino de la interacción de múltiples características personales, laborales y organizacionales. Estos hallazgos resultan útiles para la toma de decisiones dentro de la empresa, al permitir identificar perfiles y condiciones asociadas con una mayor probabilidad de rotación.
A continuación se presenta una matriz de confusión que resume el desempeño del modelo logístico multivariado en términos de clasificaciones correctas e incorrectas. Teniendo en cuenta que los aciertos del modelo corresponden a los casos correctamente clasificados (verdaderos positivos y verdaderos negativos), mientas que los errores corresponden a los casos mal classificados (falsos positivos y falsos negativos), se calcula la proporción de clasificaciones correctas como una medida de la bondad de ajuste del modelo.
# ============================
# 5.0 BONDAD DE AJUSTE (MATRIZ DE CONFUSION)
# ============================
# Probabilidades predichas y umbral de clasificacion
prob_rotacion_eval <- predict(modelo_final, type = "response")
roc_eval <- roc(rotacion$rotacion_bin, prob_rotacion_eval, quiet = TRUE)
umbral_eval <- as.numeric(coords(roc_eval, x = "best", best.method = "youden")["threshold"])
pred_rotacion <- ifelse(prob_rotacion_eval >= umbral_eval, 1, 0)
VP <- sum(pred_rotacion == 1 & rotacion$rotacion_bin == 1)
VN <- sum(pred_rotacion == 0 & rotacion$rotacion_bin == 0)
FP <- sum(pred_rotacion == 1 & rotacion$rotacion_bin == 0)
FN <- sum(pred_rotacion == 0 & rotacion$rotacion_bin == 1)
total <- VP + VN + FP + FN
matriz_confusion <- table(
Real = factor(rotacion$rotacion_bin, levels = c(1, 0), labels = c("Si", "No")),
Predicho = factor(pred_rotacion, levels = c(1, 0), labels = c("Si", "No"))
)
matriz_confusion
## Predicho
## Real Si No
## Si 142 95
## No 186 1047
La proporción de clasificaciones correctas (exactitud), usada como aproximación del índice de ajuste, se calcula como:
\[ ext{Exactitud} = \frac{VP + VN}{VP + VN + FP + FN} \]
Sustituyendo con los valores del modelo:
\[ \frac{142 + 1047}{142 + 1047 + 186 + 95} = \frac{1189}{1470} = 0.8088 \]
Este valor indica que el modelo clasifica correctamente aproximadamente el 80.88% de los casos, lo cual representa una medida global de su capacidad de ajuste.
Se crea esta medida por su importancia para evaluar el desempeño del modelo, aunque es importante considerar también otras métricas como la sensibilidad, especificidad y el AUC para obtener una evaluación más completa. y con el fin de cumplir con el objetivo de evaluar la capacidad predictiva del medelo, se procde a analizar la curva ROC y el AUC.
Para evaluar el poder predictivo del modelo logístico, se utiliza la curva ROC y el AUC (Area Under the Curve). La curva ROC compara la tasa de verdaderos positivos (sensibilidad) frente a la tasa de falsos positivos (1 - especificidad) para distintos umbrales de clasificación. El AUC resume esta capacidad de discriminación: valores cercanos a 1 indican mejor desempeño, mientras que valores cercanos a 0.5 reflejan un desempeño similar al azar.
# ============================
# 5.1 CURVA ROC Y AUC
# ============================
prob_rotacion <- predict(modelo_final, type = "response")
curva_roc <- roc(rotacion$rotacion_bin, prob_rotacion, quiet = TRUE)
auc_rotacion <- round(auc(curva_roc), 4)
ggroc(curva_roc, colour = "#FF7F00", size = 1, legacy.axes = TRUE) +
geom_abline(intercept = 0, slope = 1, linetype = "dashed", color = "red", linewidth = 0.8) +
ggtitle(paste0("Curva ROC del modelo (AUC = ", auc_rotacion, ")")) +
xlab("1 - Especificidad") +
ylab("Sensibilidad") +
theme_classic(base_size = 14)
El AUC obtenido es 0.7889, lo que sugiere una capacidad de discriminación aceptable del modelo para diferenciar empleados que rotan y que no rotan.
La curva ROC se ubica claramente por encima de la diagonal, lo que indica que el modelo discrimina mejor que hacerlo azar. El AUC = 0.7889 evidencia una capacidad de discriminación aceptable, en promedio, el modelo asigna mayores probabilidades de rotación a quienes efectivamente rotan que a quienes no. Esto sugiere que el modelo es útil para priorizar intervenciones, aunque todavía existe margen de mejora, ya que un AUC cercano a 0.8 no implica clasificación perfecta. Además, la curva refleja el trade‑off entre sensibilidad y especificidad, de modo que la elección del umbral debe ajustarse según el objetivo de la organización.
En este apartado se realiza una predicción puntual para un individuo hipotético con características específicas y se define un punto de corte para decidir si se recomienda intervenir y por lo tanto, implementar una estrategia de motivación o retención.
Para el ejemplo, se considera un empleado joven, con baja antigüedad en el cargo, que realiza horas extra y es soltero, en un cargo con alta probabilidad de rotación. Las características del individuo son las siguientes:
# ============================
# 5.2 PREDICCIÓN INDIVIDUAL
# ============================
nuevo_empleado <- tibble(
Edad = 28,
Ingreso_Mensual = 2500,
Antigüedad_Cargo = 1,
Horas_Extra = factor("Si", levels = levels(rotacion$Horas_Extra)),
Estado_Civil = factor("Soltero", levels = levels(rotacion$Estado_Civil)),
Cargo = factor("Representante_Ventas", levels = levels(rotacion$Cargo))
)
prob_rotacion_nuevo <- predict(modelo_final, newdata = nuevo_empleado, type = "response")
# Punto de corte sugerido con base en la curva ROC (criterio de Youden)
roc_modelo <- roc(rotacion$rotacion_bin, predict(modelo_final, type = "response"), quiet = TRUE)
auc_modelo <- round(auc(roc_modelo), 4)
coords_youden <- coords(
roc_modelo,
x = "best",
best.method = "youden",
ret = c("threshold", "sensitivity", "specificity")
)
umbral <- as.numeric(coords_youden["threshold"])
sens_youden <- as.numeric(coords_youden["sensitivity"])
spec_youden <- as.numeric(coords_youden["specificity"])
decision_youden <- ifelse(prob_rotacion_nuevo >= umbral, "Intervenir", "No intervenir")
decision_05 <- ifelse(prob_rotacion_nuevo >= 0.5, "Intervenir", "No intervenir")
resultado_pred <- tibble(
Probabilidad_rotacion = round(prob_rotacion_nuevo, 4),
AUC = auc_modelo,
Umbral_Youden = round(umbral, 4),
Sensibilidad_Youden = round(sens_youden, 4),
Especificidad_Youden = round(spec_youden, 4),
Decision_Youden = decision_youden,
Decision_0_5 = decision_05
)
resultado_pred %>%
gt() %>%
tab_header(
title = "Tabla 15. Resultados de la prediccion individual"
) %>%
cols_label(
Probabilidad_rotacion = "Probabilidad de rotacion",
AUC = "AUC del modelo",
Umbral_Youden = "Umbral (Youden)",
Sensibilidad_Youden = "Sensibilidad",
Especificidad_Youden = "Especificidad",
Decision_Youden = "Decision (Youden)",
Decision_0_5 = "Decision (0.5)"
) %>%
cols_align(
align = "center",
everything()
) %>%
tab_options(
table.font.size = px(12),
heading.title.font.size = px(14),
column_labels.font.size = px(12),
data_row.padding = px(6)
)
| Tabla 15. Resultados de la prediccion individual | ||||||
| Probabilidad de rotacion | AUC del modelo | Umbral (Youden) | Sensibilidad | Especificidad | Decision (Youden) | Decision (0.5) |
|---|---|---|---|---|---|---|
| 0.7796 | 0.7889 | 0.2359 | 0.5992 | 0.8491 | Intervenir | Intervenir |
Resultados explícitos:
Punto de corte para intervenir: El umbral que maximiza el índice de Youden en la curva ROC para este caso es el umbral es 0.2359; si la probabilidad estimada es mayor o igual a este valor, se recomienda intervenir.
# ============================
# 5.2.1 GRAFICO DEL UMBRAL (YOUDEN) EN LA ROC
# ============================
coords_youden_plot <- coords(
roc_modelo,
x = "best",
best.method = "youden",
ret = c("specificity", "sensitivity", "threshold")
)
spec_y <- as.numeric(coords_youden_plot["specificity"])
sens_y <- as.numeric(coords_youden_plot["sensitivity"])
thr_y <- as.numeric(coords_youden_plot["threshold"])
ggroc(roc_modelo, colour = "#FF7F00", size = 1, legacy.axes = TRUE) +
geom_abline(intercept = 0, slope = 1, linetype = "dashed", color = "red", linewidth = 0.8) +
geom_vline(xintercept = 1 - spec_y, linetype = "dotted", color = "#222222", linewidth = 0.8) +
geom_point(
aes(x = 1 - spec_y, y = sens_y),
color = "#222222",
size = 3
) +
geom_text(
aes(
x = 1 - spec_y,
y = sens_y,
label = paste0("Umbral = ", round(thr_y, 4))
),
vjust = -1,
hjust = 0.5,
size = 3.5
) +
ggtitle("Curva ROC con punto de corte (Youden)") +
xlab("1 - Especificidad") +
ylab("Sensibilidad") +
theme_classic(base_size = 14)
Con los valores arrojados anteriormente se puede concluir que, para este individuo hipotético, la probabilidad de rotación es de aproximadamente 77.96%. Dado que esta probabilidad es mayor o igual al umbral óptimo identificado por el criterio de Youden = 0.2359, se recomienda intervenir para este empleado, implementando estrategias de motivación o retención específicas.
Para este perfil (joven, baja antiguedad, horas extra, soltero, cargo de ventas), una estrategia concreta seria:
Los resultados del modelo multivariado muestran que la rotación no responde a un solo factor, sino a un conjunto de condiciones que, cuando se combinan, aumentan el riesgo de salida. La evidencia empírica apunta a un patrón claro: los empleados más jóvenes, con baja antigüedad, que realizan horas extra y que pertenecen a ciertos cargos presentan una probabilidad significativamente mayor de rotación. Por tanto, la intervención no debería ser general e indistinta, sino estratégica y focalizada, porque es en esos segmentos donde la organización obtiene el mayor retorno de las acciones de retención.
En términos prácticos, este hallazgo implica que reducir la sobrecarga laboral, fortalecer el acompañamiento en las etapas iniciales y ofrecer trayectorias de crecimiento visibles no son solo buenas prácticas de bienestar, sino respuestas coherentes con los determinantes identificados por el modelo. Del mismo modo, intervenir por cargo y ajustar incentivos o condiciones específicas en las áreas con mayor riesgo es una decisión basada en evidencia, ya que allí la probabilidad de rotación es sistemáticamente más alta. En síntesis, el análisis respalda una política de retención proactiva y segmentada, orientada a disminuir la presión operativa y a fortalecer la permanencia del talento en los perfiles más vulnerables.