Actividad 3 - Problema: Rotación de Cargo

Introducción.

La rotación de personal es uno de los desafíos más relevantes para las áreas de gestión del talento humano, ya que impacta directamente en la estabilidad de los equipos, la productividad organizacional y los costos asociados a procesos de selección, capacitación y adaptación. Comprender los factores que influyen en el cambio de carga por parte de los empleados permite a las organizaciones anticiparse a posibles renuncias o traslados, así como implementar estrategias efectivas de retención.

Este estudio tiene como propósito analizar los determinantes de la rotación de carga en una organización, a partir del análisis de variables personales, laborales y de comportamiento organizacional, mediante la aplicación de un modelo de regresión logística. Los resultados permitirán identificar perfiles de riesgo y establecer líneas de acción para fortalecer la permanencia del talento clave.

Objetivo general.

Estimar la probabilidad de rotación de carga de los empleados mediante un modelo de regresión logística, con el fin de identificar factores significativos que influyen en dicha rotación y proponer estrategias de intervención organizacional.

Objetivos específicos.

  • Seleccionar variables categóricas y cuantitativas potenciales asociadas con la rotación de carga, sustentadas en hipótesis teóricas y contexto organizacional.

  • Aplicar un modelo de regresión logística binaria para analizar el efecto individual de cada variable sobre la probabilidad de rotación.

  • Evaluar el poder predictivo del modelo y realizar predicciones individuales que sirven como insumo para la toma de decisiones estratégicas orientadas a la retención de personal

Punto 1: Selección de Variables + Hipótesis.

  • 3 variables categorizadas:

Horas_Extra

Viaje de Negocios

Estado_Civil

  • 3 cuantitativas:

Antigüedad_Cargo

Satisfación_Laboral

Ingreso_Mensual

  • Hipótesis clara por variable.

  • Justificación contextual (bienestar, motivación, salario, etc.)

Punto 1: Análisis - Selección de Variables + Hipótesis.

Las variables seleccionadas se fundamentan en factores combinados asociados con la permanencia laboral, tales como condiciones de trabajo, estado personal, motivación y remuneración. Se plantearon hipótesis orientadas a explorar cómo estas variables inciden en la decisión de un empleado de cambiar de carga.

Punto 2: Análisis Univariado.

Variables Categorias.

Horas_Extra.

# Calcular proporciones para agregar etiquetas
df_horas_extra <- rotacion %>%
  count(Horas_Extra) %>%
  mutate(Prop = n / sum(n),
         etiqueta = scales::percent(Prop))

# Gráfico con etiquetas
ggplot(df_horas_extra, aes(x = Horas_Extra, y = n)) +
  geom_bar(stat = "identity", fill = "#018ABE") +
  geom_text(aes(label = etiqueta), vjust = -0.5, size = 4) +
  ggtitle("Distribución de Horas Extra") +
  ylab("Frecuencia") +
  xlab("Horas Extra")

Punto 2: Análisis - Variables Categorias - Horas Extra.

La variable Horas_Extra si un empleado realiza o no trabajo adicional fuera de su jornada regular. En el análisis univariado se observa que el 71.7% de los empleados no realiza horas extra , mientras que un 28.3% sí lo hace .

Aunque la mayoría no incurre en tiempo adicional, la proporción de empleados que sí lo hace es considerable, lo que sugiere que existe una carga laboral extra para una parte relevante del personal. Este comportamiento puede ser un reflejo de altas exigencias organizacionales o posibles desequilibrios entre la vida personal y el trabajo.

En el contexto de rotación de carga, esta variable se considera relevante, ya que trabajar horas extra de forma constante podría generar fatiga, insatisfacción o burnout , factores que incrementan la probabilidad de que un empleado desee cambiar de carga.

Viaje de Negocios.

# Calcular proporciones para las etiquetas
df_viajes <- rotacion %>%
  count(`Viaje de Negocios`) %>%
  mutate(Prop = n / sum(n),
         etiqueta = scales::percent(Prop))

# Gráfico con etiquetas
ggplot(df_viajes, aes(x = `Viaje de Negocios`, y = n)) +
  geom_bar(stat = "identity", fill = "#C279AD") +
  geom_text(aes(label = etiqueta), vjust = -0.5, size = 4) +
  ggtitle("Distribución de Viajes de Negocios") +
  ylab("Frecuencia") +
  xlab("Frecuencia de viajes")

Punto 2: Análisis - Variables Categorias - Viaje de Negocios.

La variable Viaje de Negocios describe la frecuencia con la que los empleados deben desplazarse por motivos laborales. El análisis univariado muestra que el 71% de los empleados viajan raramente , el 18.8% lo hacen frecuentemente , y solo el 10.2% no viajan nunca .

Esta distribución sugiere que, si bien la mayoría de los empleados no viajan con frecuencia, existe una proporción no despreciable que sí lo hace de manera habitual. Los viajes de trabajo, si bien pueden ser oportunidades de desarrollo profesional, también representan una posible fuente de estrés, desequilibrio con la vida personal y desgaste físico , especialmente si son frecuentes o poco planificados.

En este sentido, Viaje de Negocioses una variable importante para el análisis de rotación, ya que se espera que una mayor frecuencia de viajes se asocie con una mayor probabilidad de cambio de carga , especialmente si los viajes afectan la satisfacción o calidad de vida del empleado.

Estado_Civil.

# Calcular proporciones para etiquetas
df_estado_civil <- rotacion %>%
  count(Estado_Civil) %>%
  mutate(Prop = n / sum(n),
         etiqueta = scales::percent(Prop))

# Gráfico con etiquetas
ggplot(df_estado_civil, aes(x = Estado_Civil, y = n)) +
  geom_bar(stat = "identity", fill = "#7597A2") +
  geom_text(aes(label = etiqueta), vjust = -0.5, size = 4) +
  ggtitle("Distribución del Estado Civil") +
  ylab("Frecuencia") +
  xlab("Estado Civil")

Punto 2: Análisis - Variables Categorias - Estado Civil.

La variable Estado_Civil representa la situación conyugal de los empleados. El análisis univariado muestra que el 45.8% de los empleados están casados , el 32% son solteros y el 22.2% están divorciados .

Esta distribución indica que existe una diversidad de condiciones personales dentro de la organización, siendo el grupo de casados ​​el más representativo. Desde el punto de vista organizacional, el estado civil puede influir en las decisiones de permanencia o cambio de cargo, ya que los empleados solteros podrían tener una mayor flexibilidad para asumir nuevos retos, relocalizarse o buscar crecimiento profesional de forma más activa.

Por lo tanto, se plantea la hipótesis de que los empleados solteros tienen una mayor probabilidad de rotar , lo cual será evaluado en el modelo logístico. Esta variable es clave para entender los factores personales que pueden estar relacionados con la movilidad interna o externa en la empresa.

Variables Cuantitativas.

Distribución de la Antigüedad en el Cargo.

# Instalar si no tenés ggplot2 y dplyr
library(ggplot2)
library(dplyr)

# Crear histograma con etiquetas encima
ggplot(rotacion, aes(x = Antigüedad_Cargo)) +
  geom_histogram(binwidth = 1, fill = "#756bb1", color = "white") +
  stat_bin(binwidth = 1, geom = "text", aes(label = ..count..), vjust = -0.5, size = 3) +
  ggtitle("Distribución de la Antigüedad en el Cargo") +
  xlab("Antigüedad (años)") +
  ylab("Frecuencia")
## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(count)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Punto 2: Análisis - Variables Cuantitativas - Antigüedad en el Cargo.

La variable Antigüedad_Cargo mide el número de años que un empleado lleva en su carga actual. Según el análisis univariado, los valores van desde 0 hasta 18 años, con una mediana de 3 años y una media de 4,23 años . El 50% de los empleados tiene entre 2 y 7 años de antigüedad, lo cual indica una distribución sesgada hacia la izquierda (concentración en valores bajos).

Este comportamiento sugiere que la mayoría de los empleados tiene relativamente poco tiempo en la carga actual , lo que podría indicar una alta rotación interna o externa, movilidad frecuente o incluso una estructura organizacional joven.

En términos de rotación, se plantea que una menor antigüedad en la carga puede estar asociada a una mayor probabilidad de cambio , ya sea por procesos de adaptación no completados, expectativas no cumplidas o búsqueda de nuevas oportunidades. Esta hipótesis será evaluada en el análisis bivariado y en el modelo logístico.

Distribución de la Satisfacción Laboral.

ggplot(rotacion, aes(x = Satisfación_Laboral)) +
  geom_histogram(binwidth = 1, fill = "#fb6a4a", color = "white") +
  stat_bin(binwidth = 1, geom = "text", aes(label = ..count..), vjust = -0.5, size = 4) +
  ggtitle("Distribución de la Satisfacción Laboral") +
  xlab("Nivel de Satisfacción (1 = baja, 4 = alta)") +
  ylab("Frecuencia")

Punto 2: Análisis - Variables Cuantitativas - Satisfacción Laboral.

La variable Satisfación_Laboral evalúa el nivel de satisfacción del empleado con su trabajo actual, en una escala ordinal de 1 (muy baja) a 4 (muy alta) . El análisis univariado muestra una mediana de 3 , con una media de 2.73 , lo cual indica una ligera tendencia hacia niveles intermedios de satisfacción.

El 25% de los empleados reporta una satisfacción de 2 o menos , mientras que el 50% tiene entre 2 y 4 . Esto revela una distribución moderadamente equilibrada , pero con una fracción importante de empleados que podrían estar insatisfechos o poco motivados .

Desde el punto de vista organizacional, esta variable es fundamental, ya que la satisfacción laboral está directamente relacionada con la permanencia . Se plantea la hipótesis de que a menor nivel de satisfacción, mayor es la probabilidad de rotación , lo cual será evaluado en el modelo predictivo. Mejorar este indicador podría ser una estrategia clave para la retención del talento.

Distribución del Ingreso Mensual.

ggplot(rotacion, aes(x = Ingreso_Mensual)) +
  geom_histogram(binwidth = 500, fill = "#B2D8EE", color = "white") +
  stat_bin(binwidth = 500, geom = "text", aes(label = ..count..), vjust = -0.5, size = 3) +
  ggtitle("Distribución del Ingreso Mensual") +
  xlab("Ingreso mensual ($)") +
  ylab("Frecuencia")

Punto 2: Análisis - Variables Cuantitativas - Ingreso Mensual.

La variable Ingreso_Mensual representa el salario mensual de los empleados en pesos. Según el análisis univariado, los ingresos varían entre $1.009.000 y $19.999.000 , con una media de $6.503.000 y una mediana de $4.919.000 . Esto indica una distribución sesgada positivamente , con presencia de valores altos (outliers) que elevan el promedio.

El 25% de los empleados gana menos de $2.911.000 , mientras que el 25% gana más de $8.379.000 , lo que evidencia una fuerte dispersión salarial . Esta variabilidad puede estar relacionada con la jerarquía organizacional, la antigüedad o el tipo de carga desempeñada.

Desde el enfoque de rotación, se considera que los niveles salariales pueden influir en la decisión de permanecer o buscar nuevas oportunidades . En este contexto, se plantea que los empleados con ingresos más bajos pueden estar más propensos a cambiar de cargo en busca de mejores condiciones económicas, lo que será contrastado en el análisis posterior.

Distribución de la Rotación.

# Calcular proporciones para etiquetas
df_rotacion <- rotacion %>%
  count(Rotación) %>%
  mutate(Prop = n / sum(n),
         etiqueta = scales::percent(Prop))

# Gráfico con etiquetas
ggplot(df_rotacion, aes(x = Rotación, y = n)) +
  geom_bar(stat = "identity", fill = "#E29095") +
  geom_text(aes(label = etiqueta), vjust = -0.5, size = 4) +
  ggtitle("Distribución de la Rotación") +
  ylab("Frecuencia") +
  xlab("¿Rotación de cargo?")

Punto 2: Análisis - Variables Cuantitativas - Distribución de la Rotación.

La variable Rotación representa si un empleado ha cambiado de carga dentro de la organización. En el análisis univariado, se observa que aproximadamente el 16% de los empleados ha rotado , mientras que el 84% no lo ha hecho .

Esta distribución revela que, aunque la mayoría de empleados se mantiene en su carga, existe una proporción significativa de rotación que justifica la necesidad de analizar sus causas. Incluso una tasa de rotación moderada puede representar un riesgo organizacional si involucra a talento clave, genera sobrecarga en otros empleados o impacta la continuidad de procesos.

La variable se convierte así en el foco del modelo de predicción , al permitir identificar qué factores influyen en esa decisión de cambio, y cómo la empresa puede anticiparse con medidas de retención y bienestar laboral.

Punto 3: Análisis de Bivariado.

Categóricas vs. Rotación.

# Horas_Extra
# Calcular proporciones por grupo
rotacion <- rotacion %>%
  mutate(rotacion_bin = ifelse(Rotación == "Si", 1, 0))
df_horas_prop <- rotacion %>%
  group_by(Horas_Extra, rotacion_bin) %>%
  summarise(n = n()) %>%
  mutate(prop = n / sum(n),
         etiqueta = percent(prop)) %>%
  ungroup()
## `summarise()` has grouped output by 'Horas_Extra'. You can override using the
## `.groups` argument.
# Gráfico de barras apiladas proporcionales con etiquetas
ggplot(df_horas_prop, aes(x = Horas_Extra, y = prop, fill = as.factor(rotacion_bin))) +
  geom_bar(stat = "identity", position = "stack") +
  geom_text(aes(label = etiqueta), position = position_stack(vjust = 0.5), size = 4, color = "white") +
  scale_fill_manual(values = c("#76C1DF", "#C5C7C6"), labels = c("No", "Sí")) +
  labs(
    fill = "Rotación",
    title = "Rotación según Horas Extra",
    x = "¿Trabaja horas extra?",
    y = "Proporción"
  )

Punto 3: Análisis Bivariado - Horas_Extra.

El análisis bivariado entre Horas_Extray Rotaciónmuestra que el 30.5% de los empleados que hacen horas extra han rotado , frente a solo el 10.4% entre quienes no hacen horas extra . Esta diferencia significativa sugiere una clara asociación entre trabajar horas extra y la probabilidad de cambio de carga.

Este resultado confirma la hipótesis planteada inicialmente , que establecía que los empleados que trabajan más allá de su jornada regular tienen mayor riesgo de rotación. Las razones pueden estar relacionadas con cansancio, desequilibrio de vida-trabajo, o percepción de sobrecarga laboral , lo que puede llevar al empleado a buscar un nuevo cargo con mejores condiciones.

de Además, este patrón se ratifica posteriormente en el modelo logístico, donde Horas_Extraresultó ser una de las variables más significativas, con un odds ratio elevado. Por tanto, este factor debe considerarse crítico en la estrategia de retención de talento.

#Viaje de Negocios

# Paso 1: Asegurarse que rotacion_bin existe
rotacion <- rotacion %>%
  mutate(rotacion_bin = ifelse(Rotación == "Si", 1, 0))

# Paso 2: Calcular proporciones y etiquetas
df_viaje_prop <- rotacion %>%
  group_by(`Viaje de Negocios`, rotacion_bin) %>%
  summarise(n = n(), .groups = "drop") %>%
  mutate(prop = n / sum(n),
         etiqueta = percent(prop))

# Paso 3: Gráfico
ggplot(df_viaje_prop, aes(x = `Viaje de Negocios`, y = prop, fill = as.factor(rotacion_bin))) +
  geom_bar(stat = "identity", position = "stack") +
  geom_text(aes(label = etiqueta), position = position_stack(vjust = 0.5), size = 4, color = "white") +
  scale_fill_manual(values = c("#E164AD", "#5A719A"), labels = c("No", "Sí")) +
  labs(
    fill = "Rotación",
    title = "Rotación según Viaje de Negocios",
    x = "Frecuencia de Viajes",
    y = "Proporción"
  )

Punto 3: Análisis Bivariado - Viaje de Negocios.

El análisis bivariado evidencia que la frecuencia de viajes de negocios está relacionada con la rotación de los empleados. Los empleados que viajan frecuentemente presentan una tasa de rotación del 24.9%, casi el triple que quienes no viajan (8%). Aquellos que viajan raramente tienen una rotación intermedia (15%).

Este patrón confirma la hipótesis planteada en el Punto 1, en la cual se sugería que una mayor frecuencia de viajes podría aumentar la probabilidad de rotación. El hecho de viajar constantemente puede generar fatiga, afectación del balance vida-trabajo, o desapego con el entorno laboral, lo cual impacta la intención de permanencia.

Esta tendencia también fue corroborada en el modelo logístico, donde viajar frecuentemente resultó ser un factor significativo que aumenta la probabilidad de rotación, mientras que no viajar se comportó como un factor protector.

# Estado_Civil

# Asegurarse que rotacion_bin está creada
rotacion <- rotacion %>%
  mutate(rotacion_bin = ifelse(Rotación == "Si", 1, 0))

# Calcular proporciones con etiquetas
df_estado_prop <- rotacion %>%
  group_by(Estado_Civil, rotacion_bin) %>%
  summarise(n = n(), .groups = "drop") %>%
  mutate(prop = n / sum(n),
         etiqueta = percent(prop))

# Graficar
ggplot(df_estado_prop, aes(x = Estado_Civil, y = prop, fill = as.factor(rotacion_bin))) +
  geom_bar(stat = "identity", position = "stack") +
  geom_text(aes(label = etiqueta), position = position_stack(vjust = 0.5), size = 4, color = "white") +
  scale_fill_manual(values = c("#6C8AA0", "#8C5999"), labels = c("No", "Sí")) +
  labs(
    fill = "Rotación",
    title = "Rotación según Estado Civil",
    x = "Estado Civil",
    y = "Proporción"
  )

Punto 3: Análisis Bivariado - Estado_Civil.

El análisis bivariado de la variable Estado_Civil muestra que los empleados solteros presentan la mayor proporción de rotación (25.5%), mientras que los casados y divorciados tienen tasas significativamente más bajas (12.5% y 10.1% respectivamente).

Este resultado confirma la hipótesis planteada inicialmente, en la que se asumía que los empleados solteros, al tener mayor independencia o menos responsabilidades familiares, podrían estar más dispuestos a cambiar de cargo en busca de crecimiento, nuevos retos o mejores condiciones laborales.

Este comportamiento también se refleja en el modelo logístico, donde el estado civil “Soltero” mostró un odds ratio mayor a 2, lo que refuerza su influencia como factor de riesgo frente a la rotación. Por tanto, Estado_Civil se constituye como un indicador relevante a tener en cuenta al momento de diseñar estrategias de fidelización o programas de desarrollo individualizado.

Cuantitativas vs. Rotación.

Antigüedad_Cargo.

# Antigüedad_Cargo

rotacion %>%
  group_by(rotacion_bin) %>%
  summarise(media = mean(Antigüedad_Cargo),
            mediana = median(Antigüedad_Cargo),
            sd = sd(Antigüedad_Cargo))
## # A tibble: 2 × 4
##   rotacion_bin media mediana    sd
##          <dbl> <dbl>   <dbl> <dbl>
## 1            0  4.48       3  3.65
## 2            1  2.90       2  3.17
ggplot(rotacion, aes(x = as.factor(rotacion_bin), y = Antigüedad_Cargo)) +
  geom_boxplot(fill = "#4BBAC3") +
  labs(x = "Rotación", y = "Antigüedad en el Cargo",
       title = "Antigüedad en el cargo vs. Rotación")

Punto 3: Análisis Bivariado - Antigüedad_Cargo (Cuantitativas).

El análisis bivariado de la variable Antigüedad_Cargo revela que los empleados que no han rotado tienen, en promedio, una antigüedad de 4.48 años en su cargo actual, mientras que aquellos que sí han rotado tienen una media de solo 2.90 años. La mediana también refleja esta diferencia: 3 años para quienes no rotan vs. 2 años para quienes sí.

Este resultado confirma la hipótesis planteada, la cual sugería que una menor antigüedad en el cargo se asocia a una mayor probabilidad de rotación. Esto puede estar relacionado con procesos de adaptación no completados, expectativas profesionales aún no cumplidas o inestabilidad en las primeras etapas de desempeño.

Este patrón es consistente con los resultados del modelo logístico, donde Antigüedad_Cargo mostró un efecto protector, es decir, cada año adicional en el cargo reduce la probabilidad de rotar. Esto indica que retener empleados en sus primeros años es clave para disminuir la rotación, y que los programas de inducción, acompañamiento o crecimiento temprano pueden marcar una gran diferencia.

Satisfación_Laboral.

rotacion %>%
  group_by(rotacion_bin) %>%
  summarise(
    media = mean(Satisfación_Laboral),
    mediana = median(Satisfación_Laboral),
    sd = sd(Satisfación_Laboral)
  )
## # A tibble: 2 × 4
##   rotacion_bin media mediana    sd
##          <dbl> <dbl>   <dbl> <dbl>
## 1            0  2.78       3  1.09
## 2            1  2.47       3  1.12
ggplot(rotacion, aes(x = as.factor(rotacion_bin), y = Satisfación_Laboral)) +
  geom_boxplot(fill = "#33608C") +
  labs(x = "Rotación", y = "Satisfacción Laboral",
       title = "Satisfacción Laboral vs. Rotación")

Punto 3: Análisis Bivariado - Satisfación_Laboral (Cuantitativas).

La variable Satisfación_Laboral presenta una diferencia notable entre empleados que han rotado y los que no. Quienes no rotan tienen una media de satisfacción de 2.78, mientras que quienes sí lo hacen reportan una media inferior de 2.47. Aunque la mediana en ambos casos es 3 (satisfacción media), la diferencia en los promedios es estadísticamente relevante en el modelo logístico.

Esta diferencia respalda la hipótesis planteada: menores niveles de satisfacción laboral están asociados con mayor probabilidad de rotación. El nivel de satisfacción puede estar influenciado por múltiples factores como liderazgo, ambiente laboral, carga de trabajo, oportunidades de crecimiento o reconocimiento.

Además, el modelo logístico confirma este hallazgo, mostrando un odds ratio menor a 1 para esta variable, lo que implica que a medida que aumenta la satisfacción laboral, disminuye la probabilidad de rotación. Por tanto, monitorear este indicador y actuar sobre él debería ser una prioridad estratégica para las áreas de gestión humana.

Ingreso_Mensual.

rotacion %>%
  group_by(rotacion_bin) %>%
  summarise(
    media = mean(Ingreso_Mensual),
    mediana = median(Ingreso_Mensual),
    sd = sd(Ingreso_Mensual)
  )
## # A tibble: 2 × 4
##   rotacion_bin media mediana    sd
##          <dbl> <dbl>   <dbl> <dbl>
## 1            0 6833.    5204 4818.
## 2            1 4787.    3202 3640.
ggplot(rotacion, aes(x = as.factor(rotacion_bin), y = Ingreso_Mensual)) +
  geom_boxplot(fill = "#B798AA") +
  labs(x = "Rotación", y = "Ingreso Mensual",
       title = "Ingreso Mensual vs. Rotación")

Punto 3: Análisis Bivariado - Ingreso_Mensual (Cuantitativas).

El ingreso mensual muestra una diferencia clara entre los empleados que rotan y los que no. Los empleados que no rotan ganan en promedio $6.833.000, mientras que los que rotan reciben en promedio $4.787.000, es decir, un 30% menos. La mediana también refleja esta brecha: $5.204.000 vs. $3.202.000.

Esta diferencia sustancial confirma la hipótesis planteada, donde se esperaba que los empleados con ingresos más bajos tuvieran una mayor propensión a cambiar de cargo. Esto puede deberse a la búsqueda de mejores oportunidades económicas o insatisfacción con la retribución frente al esfuerzo percibido.

Este patrón se ratifica en el modelo logístico, donde el ingreso mensual muestra un efecto ligeramente protector: aunque el odds ratio es cercano a 1, su dirección indica que a mayor ingreso, menor es la probabilidad de rotación, aunque con una magnitud menor que otras variables como Horas_Extra o Satisfación_Laboral.

Punto 4: Estimación del Modelo.

# Paso 1: Convertir variables categóricas a factores

rotacion <- rotacion %>%
  mutate(
    Horas_Extra = factor(Horas_Extra),
    `Viaje de Negocios` = factor(`Viaje de Negocios`),
    Estado_Civil = factor(Estado_Civil)
  )

# Paso 2: Estimar el modelo logístico

modelo_logit <- glm(
  rotacion_bin ~ Horas_Extra + `Viaje de Negocios` + Estado_Civil +
    Antigüedad_Cargo + Satisfación_Laboral + Ingreso_Mensual,
  data = rotacion,
  family = binomial(link = "logit")
)

#  Paso 3: Revisar los resultados del modelo

summary(modelo_logit)
## 
## Call:
## glm(formula = rotacion_bin ~ Horas_Extra + `Viaje de Negocios` + 
##     Estado_Civil + Antigüedad_Cargo + Satisfación_Laboral + 
##     Ingreso_Mensual, family = binomial(link = "logit"), data = rotacion)
## 
## Coefficients:
##                                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                  -5.952e-02  2.994e-01  -0.199 0.842409    
## Horas_ExtraSi                 1.480e+00  1.597e-01   9.269  < 2e-16 ***
## `Viaje de Negocios`No_Viaja  -1.311e+00  3.561e-01  -3.681 0.000232 ***
## `Viaje de Negocios`Raramente -6.932e-01  1.819e-01  -3.811 0.000139 ***
## Estado_CivilDivorciado       -3.472e-01  2.322e-01  -1.495 0.134789    
## Estado_CivilSoltero           8.615e-01  1.716e-01   5.021 5.13e-07 ***
## Antigüedad_Cargo             -1.081e-01  2.730e-02  -3.959 7.52e-05 ***
## Satisfación_Laboral          -3.342e-01  7.015e-02  -4.765 1.89e-06 ***
## Ingreso_Mensual              -1.004e-04  2.316e-05  -4.335 1.46e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1298.6  on 1469  degrees of freedom
## Residual deviance: 1067.9  on 1461  degrees of freedom
## AIC: 1085.9
## 
## Number of Fisher Scoring iterations: 5
# Odds ratios (exp(coef))
exp(coef(modelo_logit))
##                  (Intercept)                Horas_ExtraSi 
##                    0.9422145                    4.3928075 
##  `Viaje de Negocios`No_Viaja `Viaje de Negocios`Raramente 
##                    0.2695348                    0.4999523 
##       Estado_CivilDivorciado          Estado_CivilSoltero 
##                    0.7066350                    2.3666726 
##             Antigüedad_Cargo          Satisfación_Laboral 
##                    0.8975591                    0.7158819 
##              Ingreso_Mensual 
##                    0.9998996
# Intervalos de confianza de los OR
exp(confint(modelo_logit))
## Waiting for profiling to be done...
##                                  2.5 %    97.5 %
## (Intercept)                  0.5226864 1.6925169
## Horas_ExtraSi                3.2180901 6.0211523
## `Viaje de Negocios`No_Viaja  0.1286554 0.5247327
## `Viaje de Negocios`Raramente 0.3506934 0.7162383
## Estado_CivilDivorciado       0.4433388 1.1042083
## Estado_CivilSoltero          1.6939044 3.3211246
## Antigüedad_Cargo             0.8498345 0.9459489
## Satisfación_Laboral          0.6233752 0.8208909
## Ingreso_Mensual              0.9998523 0.9999433
# Extraer coeficientes como data frame
modelo_logit_df <- broom::tidy(modelo_logit, exponentiate = TRUE, conf.int = TRUE)

# Gráfico forest plot de los OR
ggplot(modelo_logit_df, aes(x = term, y = estimate, ymin = conf.low, ymax = conf.high)) +
  geom_pointrange(color = "#2c7fb8") +
  geom_hline(yintercept = 1, linetype = "dashed", color = "gray40") +
  coord_flip() +
  labs(
    title = "Odds Ratios e IC 95% - Modelo de Rotacion",
    x = "Variables",
    y = "Odds Ratio (escala logaritmica)"
  ) +
  scale_y_log10()

Punto 4: Análisis - Estimación del Modelo.

El modelo logístico confirmó que varias variables tienen un efecto significativo sobre la probabilidad de rotación. Los empleados que hacen horas extra tienen 4.39 veces más probabilidades de rotar, lo que refleja un impacto alto del desgaste laboral en la decisión de cambio.

También se observa que los empleados solteros tienen 2.37 veces más probabilidades de rotar que los casados, y que viajar poco o no viajar disminuye considerablemente esa probabilidad, evidenciando la importancia del equilibrio vida-trabajo.

Las variables cuantitativas presentan efectos esperados: mayor antigüedad y mayor satisfacción laboral reducen la probabilidad de rotación, actuando como factores protectores. Aunque el ingreso mensual tiene un efecto protector muy leve, sigue siendo consistente con la hipótesis de que salarios más altos favorecen la permanencia.

En general, el modelo presenta coeficientes estadísticamente significativos y en coherencia con los hallazgos del análisis bivariado, lo que indica que las variables seleccionadas son adecuadas para predecir el fenómeno de rotación.

Punto 5: Evaluación del Modelo.

# Paso 1: Obtener probabilidades predichas

# Predicciones del modelo
prob_pred <- predict(modelo_logit, type = "response")

# Paso 2: Calcular curva ROC y AUC

roc_obj <- roc(rotacion$rotacion_bin, prob_pred)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
# AUC
auc(roc_obj)
## Area under the curve: 0.788
# Paso 3: Graficar la curva ROC

plot(roc_obj, col = "#2c7fb8", lwd = 2, main = "Curva ROC - Modelo de Rotación")
abline(a = 0, b = 1, lty = 2, col = "red")  # línea aleatoria

Punto 5: Análisis - Evaluación del Modelo.

El modelo logístico obtuvo un AUC de 0.788, lo que indica un buen nivel de discriminación. En términos prácticos, significa que el modelo tiene un 78.8% de probabilidad de asignar una probabilidad de rotación más alta a un empleado que efectivamente rota, en comparación con uno que no.

Este valor está muy por encima del 0.5 (valor asociado al azar) y cercano al umbral de 0.8, considerado como una buena capacidad predictiva según la literatura. La curva ROC también mostró una trayectoria bien inclinada hacia la esquina superior izquierda, lo que confirma que el modelo es útil para la toma de decisiones en la organización.

A partir de este resultado, la empresa puede utilizar el modelo para detectar empleados en riesgo de rotación y actuar con antelación mediante programas de retención, bienestar o redirección laboral.

Punto 6: Predicción Individual + Punto de Corte.

# Paso 1: Crear un individuo hipotético

nuevo_empleado <- data.frame(
  Horas_Extra = factor("Si", levels = levels(rotacion$Horas_Extra)),
  Viaje.de.Negocios = factor("Frecuentemente", levels = levels(rotacion$`Viaje de Negocios`)),
  Estado_Civil = factor("Soltero", levels = levels(rotacion$Estado_Civil)),
  Antigüedad_Cargo = 1,
  Satisfación_Laboral = 2,
  Ingreso_Mensual = 3500
)

# Cambiar el nombre de la columna para que coincida exactamente con lo que R espera
colnames(nuevo_empleado)[2] <- "Viaje de Negocios"


# Paso 2: Predecir probabilidad de rotación

prob_rotacion <- predict(modelo_logit, newdata = nuevo_empleado, type = "response")
prob_rotacion
##         1 
## 0.7602232
# Punto de corte: 0.5

if (prob_rotacion > 0.5) {
  mensaje <- "Intervenir al empleado: alto riesgo de rotación"
}

Punto 6: Análisis - Predicción Individual + Punto de Corte.

Se realizó una predicción para un empleado hipotético que:

  • Trabaja horas extra.

  • Es soltero.

  • Viaja frecuentemente por negocios.

  • Lleva 1 año en el cargo.

  • Tiene una satisfacción laboral de 2 (baja).

  • Y un ingreso mensual de $3.500.000.

Al aplicar el modelo, se obtuvo una probabilidad de rotación del 76%, lo que lo ubica por encima del punto de corte de 0.5. En consecuencia, se considera que este empleado está en alto riesgo de rotar, y se recomienda intervenir con acciones orientadas a su retención.

Entre las estrategias sugeridas están: revisión de su carga laboral, mejora en el balance vida-trabajo, acompañamiento profesional, incentivos económicos o oportunidades de crecimiento interno.

Punto 7: Conclusiones y Estrategias de Intervención.

El presente análisis permitió identificar los principales factores asociados a la rotación de cargo en una organización, a partir de un enfoque de modelamiento estadístico con regresión logística. A través del estudio de seis variables explicativas —tres categóricas y tres cuantitativas— se evidenció que ciertas condiciones laborales y personales influyen significativamente en la probabilidad de rotación de los empleados.

Los hallazgos más relevantes del modelo indican que:

  • Trabajar horas extra aumenta más de cuatro veces la probabilidad de rotación.

  • Viajar frecuentemente por motivos laborales también incrementa el riesgo, mientras que no viajar actúa como un factor protector.

  • Los empleados solteros tienen una probabilidad significativamente mayor de rotar en comparación con los casados.

  • Menor antigüedad en el cargo se asocia fuertemente con la rotación, lo cual sugiere que los primeros años son críticos en la permanencia.

  • La satisfacción laboral tuvo un efecto protector claro: a mayor satisfacción, menor rotación.

  • El ingreso mensual mostró una relación negativa con la rotación, aunque con un efecto más leve.

Estrategias sugeridas para disminuir la rotación:

Con base en estos resultados, se recomienda a la organización implementar acciones focalizadas en los factores identificados como críticos:

  • Reducir la carga de horas extra mediante una mejor distribución de turnos y contratación de personal de refuerzo, especialmente en áreas con alta exigencia operativa.

  • Optimizar la política de viajes de negocios, promoviendo la planificación anticipada, compensaciones o alternativas virtuales que reduzcan el desgaste físico y emocional asociado.

  • Implementar estrategias personalizadas de fidelización para empleados jóvenes o solteros, como mentorías, rutas de crecimiento o programas de desarrollo profesional.

  • Fortalecer el acompañamiento en los primeros años del cargo, a través de procesos de inducción, coaching y seguimiento individual, dado que es el periodo de mayor riesgo de rotación.

  • Mejorar las condiciones laborales y el ambiente organizacional, ya que la satisfacción laboral demostró ser uno de los factores más relevantes en la decisión de permanencia.

  • Revisar la política salarial, especialmente en cargos donde los sueldos se encuentran por debajo de la media organizacional, ya que los empleados con ingresos más bajos presentan mayor rotación.

Bibliografía.

  • Hosmer, D. W., Lemeshow, S., & Sturdivant, R. X. (2013). Applied Logistic Regression (3rd ed.). Wiley.

  • Referencia clásica para la interpretación y construcción de modelos logísticos.

  • James, G., Witten, D., Hastie, T., & Tibshirani, R. (2021). An Introduction to Statistical Learning with Applications in R (2nd ed.). Springer.

Explica modelos estadísticos y aprendizaje supervisado, ideal para estudiantes.

  • Weiers, R. M. (2006). Introducción a la estadística para negocios. Cengage Learning.

Base de datos del ejercicio tomada/adaptada de este autor.

  • Wickham, H., & Grolemund, G. (2017). R for Data Science. O’Reilly Media.

Manual para el uso de R y tidyverse en análisis de datos reales.

  • R Core Team (2024). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. URL: https://www.r-project.org/

  • Según Hosmer et al. (2013), el modelo de regresión logística permite estimar la probabilidad de un evento binario como la rotación de personal.