El objetivo de este trabajo es desarrollar un modelo de regresión logística que permita estimar la probabilidad de que un empleado presente rotación laboral e identificar los factores que tienen mayor influencia en este comportamiento. Los resultados permitirán a la gerencia formular iniciativas orientadas a mejorar el ambiente laboral y fortalecer aquellos aspectos que favorecen la permanencia de los empleados en su departamento actual. De esta manera, se busca contribuir a la consolidación de equipos de trabajo estables, comprometidos y satisfechos con sus roles actuales.
Para desarrollar el análisis, se utilizarán datos históricos recopilados por la empresa, los cuales incluyen variables relacionadas con la antigüedad, la satisfacción laboral, el ingreso mensual, la edad y otras características personales y laborales de los empleados. La base de datos utilizada se denomina rotacion y se encuentra disponible en el paquete paqueteMODELOS de R.
A continuación, se carga la base de datos que se utilizará durante el desarrollo de la actividad. Posteriormente, se examinan sus dimensiones, estructura y tipos de variables con el propósito de conocer la información disponible e identificar posibles necesidades de preparación y limpieza.
library(paqueteMODELOS)
library(dplyr)
library(ggplot2)
library(tidyr)
library(pROC)
data("rotacion")
datos <- rotacion
head(rotacion)
## # A tibble: 6 × 24
## Rotación Edad `Viaje de Negocios` Departamento Distancia_Casa Educación
## <chr> <dbl> <chr> <chr> <dbl> <dbl>
## 1 Si 41 Raramente Ventas 1 2
## 2 No 49 Frecuentemente IyD 8 1
## 3 Si 37 Raramente IyD 2 2
## 4 No 33 Frecuentemente IyD 3 4
## 5 No 27 Raramente IyD 2 1
## 6 No 32 Frecuentemente IyD 2 2
## # ℹ 18 more variables: Campo_Educación <chr>, Satisfacción_Ambiental <dbl>,
## # Genero <chr>, Cargo <chr>, Satisfación_Laboral <dbl>, Estado_Civil <chr>,
## # Ingreso_Mensual <dbl>, Trabajos_Anteriores <dbl>, Horas_Extra <chr>,
## # Porcentaje_aumento_salarial <dbl>, Rendimiento_Laboral <dbl>,
## # Años_Experiencia <dbl>, Capacitaciones <dbl>,
## # Equilibrio_Trabajo_Vida <dbl>, Antigüedad <dbl>, Antigüedad_Cargo <dbl>,
## # Años_ultima_promoción <dbl>, Años_acargo_con_mismo_jefe <dbl>
dim(datos)
## [1] 1470 24
La base de datos cuenta con 1470 registros y 24 variables que describen diferentes características personales y laborales de los empleados. A continuación, se presentan las variables junto con su clasificación según el tipo de dato
La exploración inicial se realizara diferenciando las variables cuantitativas de las cualitativas.
En esta sección se analizan las medidas de tendencia central, dispersión y posición de las variables cuantitativas, así como sus valores mínimos y máximos, con el fin de identificar posibles valores atípicos o inconsistencias. Para ello, se seleccionan las variables cuantitativas de la base de datos y se genera una tabla resumen que permite describir su comportamiento.
variables_cuant <- c(
"Edad",
"Distancia_Casa",
"Ingreso_Mensual",
"Trabajos_Anteriores",
"Porcentaje_aumento_salarial",
"Años_Experiencia",
"Capacitaciones",
"Antigüedad",
"Antigüedad_Cargo",
"Años_ultima_promoción",
"Años_acargo_con_mismo_jefe"
)
resumen_cuant <- sapply(
datos[variables_cuant],
function(x) {
c(
Registros = sum(!is.na(x)),
Faltantes = sum(is.na(x)),
Mínimo = min(x, na.rm = TRUE),
Q1 = quantile(x, 0.25, na.rm = TRUE),
Mediana = median(x, na.rm = TRUE),
Media = mean(x, na.rm = TRUE),
Q3 = quantile(x, 0.75, na.rm = TRUE),
Máximo = max(x, na.rm = TRUE),
Desviación_estándar = sd(x, na.rm = TRUE)
)
}
)
resumen_cuant <- round(t(resumen_cuant), 2)
knitr::kable(
resumen_cuant,
caption = "Resumen descriptivo de las variables cuantitativas"
)
| Registros | Faltantes | Mínimo | Q1.25% | Mediana | Media | Q3.75% | Máximo | Desviación_estándar | |
|---|---|---|---|---|---|---|---|---|---|
| Edad | 1470 | 0 | 18 | 30 | 36 | 36.92 | 43 | 60 | 9.14 |
| Distancia_Casa | 1470 | 0 | 1 | 2 | 7 | 9.19 | 14 | 29 | 8.11 |
| Ingreso_Mensual | 1470 | 0 | 1009 | 2911 | 4919 | 6502.93 | 8379 | 19999 | 4707.96 |
| Trabajos_Anteriores | 1470 | 0 | 0 | 1 | 2 | 2.69 | 4 | 9 | 2.50 |
| Porcentaje_aumento_salarial | 1470 | 0 | 11 | 12 | 14 | 15.21 | 18 | 25 | 3.66 |
| Años_Experiencia | 1470 | 0 | 0 | 6 | 10 | 11.28 | 15 | 40 | 7.78 |
| Capacitaciones | 1470 | 0 | 0 | 2 | 3 | 2.80 | 3 | 6 | 1.29 |
| Antigüedad | 1470 | 0 | 0 | 3 | 5 | 7.01 | 9 | 40 | 6.13 |
| Antigüedad_Cargo | 1470 | 0 | 0 | 2 | 3 | 4.23 | 7 | 18 | 3.62 |
| Años_ultima_promoción | 1470 | 0 | 0 | 0 | 1 | 2.19 | 3 | 15 | 3.22 |
| Años_acargo_con_mismo_jefe | 1470 | 0 | 0 | 2 | 3 | 4.12 | 7 | 17 | 3.57 |
Todas las variables cuantitativas tienen 1470 registros y no presentan datos faltantes. Los valores mínimos y máximos encontrados parecen razonables para cada variable. Por ejemplo, las edades están entre 18 y 60 años, la experiencia laboral entre 0 y 40 años y el ingreso mensual entre 1009 y 19999.Los valores de cero en variables como antigüedad, promociones o capacitaciones también son normales, ya que pueden corresponder a empleados nuevos o que aún no han sido promovidos. En general, no se observan valores incoherentes en estas variables.
Ahora bien, para visualizar los posibles valores atípicos, se realizaron boxplots de las variables cuantitativas.
datos %>%
select(all_of(variables_cuant)) %>%
pivot_longer(
cols = everything(),
names_to = "Variable",
values_to = "Valor"
) %>%
ggplot(aes(x = Variable, y = Valor)) +
geom_boxplot(fill = "orange", alpha = 0.7) +
facet_wrap(~ Variable, scales = "free_y") +
theme_minimal() +
theme(
axis.text.x = element_blank(),
axis.ticks.x = element_blank()
) +
labs(
title = "Boxplots de las variables cuantitativas",
x = "",
y = "Valor"
)
En los boxplots se observan algunos valores alejados del comportamiento general en ciertas variables. Por ejemplo, se evidencian empleados con ingresos mensuales más altos, mayor cantidad de años de experiencia, más antigüedad en la empresa y más tiempo en el cargo o con el mismo jefe.Estos valores no se consideran errores, ya que pueden corresponder a empleados con mayor trayectoria o cargos más altos dentro de la organización. Por esta razón, se decide conservarlos en la base de datos para continuar con el análisis.
Para las variables cualitativas se revisó el número de categorías y su distribución de frecuencias. De manera similar a las variables cuantitativas, se creó un vector con las variables cualitativas para facilitar su exploración. Posteriormente, se presenta una tabla resumen con la cantidad de registros, valores faltantes y categorías únicas de cada variable. Esto permite identificar si existen categorías mal escritas, datos faltantes o valores poco comunes dentro de la base de datos.
variables_cual <- c(
"Rotación",
"Viaje de Negocios",
"Departamento",
"Campo_Educación",
"Genero",
"Cargo",
"Estado_Civil",
"Horas_Extra",
"Educación",
"Satisfacción_Ambiental",
"Satisfación_Laboral",
"Rendimiento_Laboral",
"Equilibrio_Trabajo_Vida"
)
resumen_cual <- data.frame(
Registros = sapply(datos[variables_cual], function(x) sum(!is.na(x))),
Faltantes = sapply(datos[variables_cual], function(x) sum(is.na(x))),
Categorias_unicas = sapply(datos[variables_cual], function(x) length(unique(x)))
)
knitr::kable(
resumen_cual,
caption = "Resumen de variables cualitativas"
)
| Registros | Faltantes | Categorias_unicas | |
|---|---|---|---|
| Rotación | 1470 | 0 | 2 |
| Viaje de Negocios | 1470 | 0 | 3 |
| Departamento | 1470 | 0 | 3 |
| Campo_Educación | 1470 | 0 | 6 |
| Genero | 1470 | 0 | 2 |
| Cargo | 1470 | 0 | 9 |
| Estado_Civil | 1470 | 0 | 3 |
| Horas_Extra | 1470 | 0 | 2 |
| Educación | 1470 | 0 | 5 |
| Satisfacción_Ambiental | 1470 | 0 | 4 |
| Satisfación_Laboral | 1470 | 0 | 4 |
| Rendimiento_Laboral | 1470 | 0 | 2 |
| Equilibrio_Trabajo_Vida | 1470 | 0 | 4 |
for (v in variables_cual) {
cat("\n\nVariable:", v, "\n")
print(unique(datos[[v]]))
}
##
##
## Variable: Rotación
## [1] "Si" "No"
##
##
## Variable: Viaje de Negocios
## [1] "Raramente" "Frecuentemente" "No_Viaja"
##
##
## Variable: Departamento
## [1] "Ventas" "IyD" "RH"
##
##
## Variable: Campo_Educación
## [1] "Ciencias" "Otra" "Salud" "Mercadeo" "Tecnicos"
## [6] "Humanidades"
##
##
## Variable: Genero
## [1] "F" "M"
##
##
## Variable: Cargo
## [1] "Ejecutivo_Ventas" "Investigador_Cientifico"
## [3] "Tecnico_Laboratorio" "Director_Manofactura"
## [5] "Representante_Salud" "Gerente"
## [7] "Representante_Ventas" "Director_Investigación"
## [9] "Recursos_Humanos"
##
##
## Variable: Estado_Civil
## [1] "Soltero" "Casado" "Divorciado"
##
##
## Variable: Horas_Extra
## [1] "Si" "No"
##
##
## Variable: Educación
## [1] 2 1 4 3 5
##
##
## Variable: Satisfacción_Ambiental
## [1] 2 3 4 1
##
##
## Variable: Satisfación_Laboral
## [1] 4 2 3 1
##
##
## Variable: Rendimiento_Laboral
## [1] 3 4
##
##
## Variable: Equilibrio_Trabajo_Vida
## [1] 1 3 2 4
A partir de la revisión de las categorías únicas de las variables cualitativas, no se identifican errores de digitación ni categorías duplicadas que representen la misma información. Por ejemplo, variables como Rotación, Genero y Horas_Extra presentan únicamente dos categorías, mientras que variables como Departamento, Estado_Civil, Viaje de Negocios y Cargo muestran categorías claramente diferenciadas.En general, las variables cualitativas no presentan inconsistencias visibles, por lo cual se conservan sin realizar modificaciones para continuar con el análisis.
Se revisó la existencia de registros duplicados en la base de datos. El resultado muestra que todos los registros son únicos, por lo cual no fue necesario eliminar observaciones repetidas.
registros_totales <- nrow(datos)
registros_unicos <- nrow(distinct(datos))
registros_duplicados <- registros_totales - registros_unicos
tabla_duplicados <- data.frame(
Registros_totales = registros_totales,
Registros_unicos = registros_unicos,
Registros_duplicados = registros_duplicados
)
knitr::kable(
tabla_duplicados,
caption = "Revisión de registros duplicados"
)
| Registros_totales | Registros_unicos | Registros_duplicados |
|---|---|---|
| 1470 | 1470 | 0 |
La variable Rotación presenta un desbalance de clases, ya que la mayoría de empleados no presentan rotación. Esto es importante tenerlo en cuenta porque el modelo podría tender a predecir con mayor facilidad la categoría mayoritaria. Por esta razón, al momento de dividir la base en datos de entrenamiento y prueba, se tendrá en cuenta la distribución de la variable respuesta, buscando que ambos conjuntos conserven una proporción similar de empleados que rotan y que no rotan. Además, más adelante el modelo no se evaluará únicamente con la exactitud, sino también con métricas como la curva ROC y el AUC.
tabla_rotacion <- datos %>%
count(Rotación) %>%
mutate(Porcentaje = round(n / sum(n) * 100, 2))
knitr::kable(
tabla_rotacion,
caption = "Distribución de la variable Rotación"
)
| Rotación | n | Porcentaje |
|---|---|---|
| No | 1233 | 83.88 |
| Si | 237 | 16.12 |
Finalmente, se creó una variable binaria para representar la rotación de empleados, donde 1 indica que el empleado presenta rotación y 0 indica que no presenta rotación. Esta variable será utilizada posteriormente como variable respuesta en el modelo de regresión logística.
datos <- datos %>%
mutate(
rotacion_binaria = ifelse(Rotación == "Si", 1, 0)
)
table(datos$Rotación, datos$rotacion_binaria)
##
## 0 1
## No 1233 0
## Si 0 237
Antes de seleccionar las variables para el modelo, se explorará la correlación entre las variables cuantitativaspara identificar cuáles están muy relacionadas y podrían aportar información similar. Esta revisión ayudará a evitar la selección de variables redundantes y facilitará la interpretación del modelo. La decisión también tendrá en cuenta el significado de cada variable y su relación esperada con la rotación.
# Correlación entre las variables cuantitativas
matriz_cor <- cor(
datos[variables_cuant],
method = "spearman",
use = "complete.obs"
)
knitr::kable(
round(matriz_cor, 2),
caption = "Correlación de Spearman entre variables cuantitativas"
)
| Edad | Distancia_Casa | Ingreso_Mensual | Trabajos_Anteriores | Porcentaje_aumento_salarial | Años_Experiencia | Capacitaciones | Antigüedad | Antigüedad_Cargo | Años_ultima_promoción | Años_acargo_con_mismo_jefe | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Edad | 1.00 | -0.02 | 0.47 | 0.35 | 0.01 | 0.66 | 0.00 | 0.25 | 0.20 | 0.17 | 0.19 |
| Distancia_Casa | -0.02 | 1.00 | 0.00 | -0.01 | 0.03 | 0.00 | -0.02 | 0.01 | 0.01 | 0.00 | 0.00 |
| Ingreso_Mensual | 0.47 | 0.00 | 1.00 | 0.19 | -0.03 | 0.71 | -0.03 | 0.46 | 0.39 | 0.26 | 0.37 |
| Trabajos_Anteriores | 0.35 | -0.01 | 0.19 | 1.00 | 0.00 | 0.32 | -0.05 | -0.17 | -0.13 | -0.07 | -0.14 |
| Porcentaje_aumento_salarial | 0.01 | 0.03 | -0.03 | 0.00 | 1.00 | -0.03 | 0.00 | -0.05 | -0.03 | -0.06 | -0.03 |
| Años_Experiencia | 0.66 | 0.00 | 0.71 | 0.32 | -0.03 | 1.00 | -0.01 | 0.59 | 0.49 | 0.33 | 0.50 |
| Capacitaciones | 0.00 | -0.02 | -0.03 | -0.05 | 0.00 | -0.01 | 1.00 | 0.00 | 0.00 | 0.01 | -0.01 |
| Antigüedad | 0.25 | 0.01 | 0.46 | -0.17 | -0.05 | 0.59 | 0.00 | 1.00 | 0.85 | 0.52 | 0.84 |
| Antigüedad_Cargo | 0.20 | 0.01 | 0.39 | -0.13 | -0.03 | 0.49 | 0.00 | 0.85 | 1.00 | 0.51 | 0.72 |
| Años_ultima_promoción | 0.17 | 0.00 | 0.26 | -0.07 | -0.06 | 0.33 | 0.01 | 0.52 | 0.51 | 1.00 | 0.47 |
| Años_acargo_con_mismo_jefe | 0.19 | 0.00 | 0.37 | -0.14 | -0.03 | 0.50 | -0.01 | 0.84 | 0.72 | 0.47 | 1.00 |
Para facilitar la identificación de correlaciones altas, a continuación se presenta una tabla con los pares de variables cuantitativas cuya correlación, en valor absoluto, es mayor o igual a 0.70. Esto ayudará a revisar cuáles podrían aportar información similar y a decidir si conviene seleccionar solo una de ellas.
# Seleccionar parejas con correlación absoluta de 0.70 o más
pares <- which(
abs(matriz_cor) >= 0.70 & upper.tri(matriz_cor),
arr.ind = TRUE
)
correlaciones_altas <- data.frame(
Variable_1 = rownames(matriz_cor)[pares[, 1]],
Variable_2 = colnames(matriz_cor)[pares[, 2]],
Correlacion = round(matriz_cor[pares], 2)
)
knitr::kable(
correlaciones_altas,
caption = "Pares de variables con correlación alta"
)
| Variable_1 | Variable_2 | Correlacion |
|---|---|---|
| Ingreso_Mensual | Años_Experiencia | 0.71 |
| Antigüedad | Antigüedad_Cargo | 0.85 |
| Antigüedad | Años_acargo_con_mismo_jefe | 0.84 |
| Antigüedad_Cargo | Años_acargo_con_mismo_jefe | 0.72 |
Se observan correlaciones altas entre variables que, por su significado, se esperaba que estuvieran relacionadas. Por ejemplo, los empleados con más experiencia tienden a tener mayores ingresos. También se encuentra una relación alta entre la antigüedad en la empresa, el tiempo en el cargo y los años con el mismo jefe. Estos resultados se tendrán en cuenta al seleccionar las variables, para evitar incluir varias que puedan aportar información similar.
Con base en lo anterior, se seleccionaron tres variables cualitativas: satisfacción laboral, horas extra y equilibrio entre el trabajo y la vida personal; y tres cuantitativas: porcentaje de aumento salarial, años desde la última promoción y años con el mismo jefe. Estas variables permiten explorar cómo las condiciones de trabajo, el reconocimiento económico y las oportunidades de crecimiento se relacionan con la rotación. Se espera que una menor satisfacción laboral, trabajar horas extra, un menor equilibrio entre el trabajo y la vida personal y más años sin recibir una promoción se relacionen con una mayor probabilidad de rotación. Por otro lado, se plantea que un mayor aumento salarial y una relación más estable con el mismo jefe podrían favorecer la permanencia de los empleados en su departamento actual.
Satisfacción laboral: se espera que los empleados con menor satisfacción laboral tengan una mayor probabilidad de rotación. Cuando una persona no se siente a gusto con sus funciones o con el trabajo que realiza, puede perder motivación y buscar un cambio. Por ello, se plantea que los niveles altos de satisfacción se relacionen con una menor probabilidad de rotación.
Horas extra: se espera que los empleados que trabajan horas extra tengan una mayor probabilidad de rotación que quienes no lo hacen. El tiempo adicional de trabajo puede generar cansancio, aumentar el estrés y reducir el tiempo disponible para descansar o compartir con la familia. Estas situaciones podrían motivar al empleado a buscar mejores condiciones laborales.
Equilibrio entre el trabajo y la vida personal: se espera que los empleados con un menor equilibrio tengan una mayor probabilidad de rotación. Si el trabajo dificulta atender responsabilidades familiares, estudiar o realizar actividades personales, puede generar inconformidad. En cambio, un mejor equilibrio podría favorecer la permanencia del empleado en su departamentro actual.
Porcentaje de aumento salarial: se espera que un mayor porcentaje de aumento salarial se relacione con una menor probabilidad de rotación. Un aumento puede percibirse como un reconocimiento al esfuerzo y al aporte del empleado, lo que podría fortalecer su motivación para permanecer en su área actual. Esta hipótesis se refiere al porcentaje de aumento recibido, no al monto del salario.
Años desde la última promoción: se espera que, a mayor número de años sin recibir una promoción, aumente la probabilidad de rotación. Pasar mucho tiempo sin ascender puede generar una sensación de estancamiento o de falta de oportunidades de crecimiento. Esto podría llevar al empleado a buscar un cambio que le permita avanzar en su trayectoria laboral.
Años con el mismo jefe: se espera que un mayor número de años con el mismo jefe se relacione con una menor probabilidad de rotación. Compartir más tiempo podría facilitar la comunicación, la confianza y el conocimiento de las expectativas de trabajo. Sin embargo, el tiempo con el mismo jefe no garantiza una buena relación; esta es una posible explicación que se contrastará con los datos.
En esta sección se analizará cada una de las seis variables seleccionadas y la variable respuesta, rotación, para conocer cómo se distribuyen sus valores. Se utilizarán medidas descriptivas y gráficos según el tipo de variable.
A continuación se presenta una tabla con el mínimo, la mediana, la media, el máximo y la desviación estándar de las tres variables cuantitativas seleccionadas. Además, se incluyen boxplots para complementar el resumen y visualizar la dispersión de los datos y los posibles valores atípicos.
# Variables cuantitativas seleccionadas
cuanti_seleccionadas <- c(
"Porcentaje_aumento_salarial",
"Años_ultima_promoción",
"Años_acargo_con_mismo_jefe"
)
# Resumen descriptivo
resumen_seleccionadas <- data.frame(
Variable = cuanti_seleccionadas,
Minimo = sapply(datos[cuanti_seleccionadas], min),
Mediana = sapply(datos[cuanti_seleccionadas], median),
Media = sapply(datos[cuanti_seleccionadas], mean),
Maximo = sapply(datos[cuanti_seleccionadas], max),
Desviacion = sapply(datos[cuanti_seleccionadas], sd)
)
knitr::kable(
resumen_seleccionadas,
digits = 2,
row.names = FALSE,
caption = "Resumen de las variables cuantitativas seleccionadas"
)
| Variable | Minimo | Mediana | Media | Maximo | Desviacion |
|---|---|---|---|---|---|
| Porcentaje_aumento_salarial | 11 | 14 | 15.21 | 25 | 3.66 |
| Años_ultima_promoción | 0 | 1 | 2.19 | 15 | 3.22 |
| Años_acargo_con_mismo_jefe | 0 | 3 | 4.12 | 17 | 3.57 |
cuanti_seleccionadas <- c(
"Porcentaje_aumento_salarial",
"Años_ultima_promoción",
"Años_acargo_con_mismo_jefe"
)
datos %>%
select(all_of(cuanti_seleccionadas)) %>%
pivot_longer(
cols = everything(),
names_to = "Variable",
values_to = "Valor"
) %>%
ggplot(aes(x = "", y = Valor)) +
geom_boxplot(fill = "orange", alpha = 0.7) +
facet_wrap(
~ Variable,
scales = "free_y",
labeller = as_labeller(c(
Porcentaje_aumento_salarial = "Aumento salarial (%)",
Años_ultima_promoción = "Años desde última promoción",
Años_acargo_con_mismo_jefe = "Años con el mismo jefe"
))
) +
theme_minimal() +
theme(axis.ticks.x = element_blank()) +
labs(
title = "Distribución de las variables cuantitativas",
x = NULL,
y = "Valor"
)
De acuerdo con los resultados anteriores, se observa lo siguiente:
El aumento salarial promedio es de 15.21 %, con un mínimo de 11 % y un máximo de 25 %. Esto representa una diferencia de 14 puntos porcentuales entre los extremos. La mediana es de 14 %, lo que indica que al menos la mitad de los empleados recibió un aumento igual o inferior a ese porcentaje. En el boxplot no se observan valores atípicos.
El tiempo promedio desde la última promoción es de 2.19 años y la mediana es de un año. Esto indica que las promociones de buena parte de los empleados son recientes, aunque hay registros de hasta 15 años desde la última promoción. El boxplot señala como atípicos los valores superiores a 7.5 años, que en esta base corresponden a ocho años o más.
Los empleados llevan en promedio 4.12 años con el mismo jefe, con una mediana de tres años. Los valores van de cero a 17 años y la mitad central de los registros se encuentra entre dos y siete años. El boxplot muestra algunos valores atípicos altos, correspondientes a empleados que llevan entre 15 y 17 años con el mismo jefe.
Estas diferencias describen las condiciones de los empleados. Su relación con la rotación se revisará posteriormente en el análisis bivariado.
Para la variable horas extra, se presenta un gráfico de barras que muestra el porcentaje de empleados que trabajan tiempo adicional y de quienes no lo hacen.
Se observa que la mayoría de los empleados, un 71.7 %, no trabaja horas
extra, mientras que el 28.3 % sí lo hace. Es decir, aproximadamente tres
de cada diez empleados trabajan tiempo adicional.
Se presenta un gráfico de barras con las cuatro categorías de satisfacción laboral y el porcentaje de empleados que corresponde a cada una.
El gráfico muestra que el 61.29 % de los empleados se concentra en las categorías 3 y 4, mientras que el 38.71 % se encuentra en las categorías 1 y 2. Si se supone que la escala va de menor a mayor satisfacción, estos resultados indicarían que la mayoría presenta una satisfacción laboral relativamente alta. Sin embargo, esta interpretación es provisional, ya que la documentación disponible no especifica el significado de los códigos.
Al igual que para las dos variables anteriores, se presenta un gráfico de barras del equilibrio entre el trabajo y la vida personal. Esta variable tiene cuatro categorías, cuyo significado no se especifica en la documentación disponible.
El gráfico muestra que la mayoría de los empleados se concentra en la
categoría 3, con un 60.75 %, seguida de la categoría 2, con un 23.40 %.
Las categorías 4 y 1 representan el 10.41 % y el 5.44 %,
respectivamente. Si se supone que la escala aumenta de menor a mayor
equilibrio entre el trabajo y la vida personal, el 71.16 % estaría en
las dos categorías superiores. Esta interpretación es provisional, ya
que no se ha confirmado el significado de los códigos.
Se utiliza un gráfico de barras para representar el porcentaje de empleados que cambiaron de departamento y de quienes no lo hicieron..
Se observa que el 83.88 % (1233 empleados) no presentó rotación, mientras que el 16.12% (237 empleados) sí lo hizo, lo que confirma el desbalance de clases identificado anteriormente.
Esta característica se tendrá en cuenta al dividir los datos en entrenamiento y prueba, procurando conservar proporciones similares en ambos conjuntos. Además, al evaluar el modelo se revisará su capacidad para identificar a los empleados que presentan rotación, ya que son la categoría minoritaria.
En el análisis bivariado se explorará la relación entre la variable objetivo, rotación, y cada una de las seis variables seleccionadas. Se utilizarán gráficos adecuados para cada tipo de variable, con el fin de identificar diferencias entre los empleados que presentan rotación y quienes no, y comparar los resultados con las hipótesis planteadas.
Hipótesis planteada: se espera que los empleados que trabajan horas extra tengan una mayor probabilidad de rotación que quienes no lo hacen.
El siguiente gráfico separa a los empleados en dos grupos: quienes presentaron rotación y quienes no. Dentro de cada grupo, se muestra cuántos trabajan horas extra y cuántos no, junto con sus porcentajes. Esto permite comparar qué tan común es trabajar horas extra en ambos grupos, aunque tengan tamaños diferentes.
Como se observa en el gráfico: - Entre los empleados que presentaron
rotación, las cantidades son relativamente cercanas: 127 trabajaban
horas extra (53.6 %) y 110 no lo hacían (46.4 %). Hay una ligera mayoría
de empleados con horas extra en este grupo. - Entre quienes no
presentaron rotación, la diferencia es más marcada: 944 empleados no
trabajaban horas extra (76.6 %), mientras que 289 sí lo hacían (23.4 %).
En conjunto, trabajar horas extra es más común entre quienes rotaron que
entre quienes no lo hicieron. Este resultado es consistente con la
hipótesis planteada, aunque por sí solo no demuestra que las horas extra
causen la rotación.
Aquí evaluamos si hay evidencia estadística de asociación entre horas extra y rotación, usando una regresión logística con una sola variable explicativa.
Las hipótesis de la prueba son:
H₀: β₁ = 0: trabajar horas extra no se asocia con la probabilidad de rotació. H₁: β₁ ≠ 0: trabajar horas extra sí se asocia con la probabilidad de rotación
##
## Call:
## glm(formula = rotacion_binaria ~ Horas_Extra, family = binomial(link = "logit"),
## data = datos)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.1496 0.1007 -21.338 <2e-16 ***
## Horas_ExtraSi 1.3274 0.1466 9.056 <2e-16 ***
## ---
## 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: 1217.2 on 1468 degrees of freedom
## AIC: 1221.2
##
## Number of Fisher Scoring iterations: 4
El coeficiente de horas extra es positivo (1.3274) y su valor p es menor que 0.05, por lo que se rechaza la hipótesis nula de ausencia de asociación. En este análisis bivariado, los empleados que trabajan horas extra presentan una mayor probabilidad de rotación que quienes no lo hacen. El resultado respalda la hipótesis planteada, aunque no demuestra causalidad y todavía no tiene en cuenta las otras variables seleccionadas.
Calculemos el odds ratio para expresar el tamaño de la asociación
## Horas_ExtraSi
## 3.771249
Quienes trabajan horas extra tienen 3.77 veces los odds de rotación de quienes no trabajan horas extra, en este modelo bivariado.
Miremos el intervalo de confianza.
## OR 2.5 % 97.5 %
## 3.771249 2.829585 5.026291
Los empleados que trabajan horas extra tienen 3.77 veces los odds de rotación de quienes no lo hacen. El intervalo de confianza del 95 % va de 2.83 a 5.03 y no incluye 1, lo que coincide con la asociación significativa encontrada en la prueba de Wald. Este resultado respalda la hipótesis planteada, aunque no demuestra que las horas extra causen la rotación. La comparación corresponde a los odds, no directamente a la probabilidad, y todavía no considera las otras variables del modelo.
Hipótesis: a menor satisfacción, mayor probabilidad de rotación, recordando que el significado de los códigos aún no está confirmado. El siguiente gráfico compara la distribución de la satisfacción laboral entre quienes presentaron rotación y quienes no. Para cada grupo se muestran cuatro barras, una por categoría de satisfacción, con la cantidad de empleados y su porcentaje. Los porcentajes suman 100 % dentro de cada grupo, lo que permite comparar su distribución aunque tengan tamaños diferentes.
Aunque no se ha confirmado el significado de las categorías, si suponemos que 1 representa menor satisfacción y 4 mayor satisfacción, se observan diferencias entre ambos grupos. Entre quienes no presentaron rotación, el 62.9 % se concentra en las categorías 3 y 4, frente al 52.7 % de quienes sí rotaron. La categoría 1 representa el 18.1 % de quienes no rotaron y el 27.8 % de quienes sí lo hicieron, una diferencia de 9.7 puntos porcentuales. Por su parte, la categoría 4 pasa del 33 % al 21.9 %, una diferencia de 11.1 puntos porcentuales.Bajo el supuesto señalado, estos resultados son consistentes con la hipótesis de que una menor satisfacción laboral se relaciona con una mayor probabilidad de rotación. Sin embargo, no permiten afirmar que la insatisfacción haya causado el cambio de departamento.
Para evaluar la asociación entre satisfacción laboral y rotación, se ajusta una regresión logística con satisfacción laboral como variable cualitativa. Aunque es una sola variable, tiene cuatro categorías, por lo que el modelo estima tres coeficientes: compara las categorías 2, 3 y 4 con la categoría 1, que se toma como referencia.
Las pruebas de Wald permiten evaluar cada comparación por separado. Además, se utiliza una prueba global de razón de verosimilitud para evaluar la asociación de la variable completa con la rotación. Para esta prueba global se plantean las siguientes hipótesis:
Si el valor p de la prueba global es menor que 0.05, se rechaza H₀. Después se revisan los signos de los coeficientes y sus pruebas individuales para identificar las diferencias frente a la categoría de referencia.
##
## Call:
## glm(formula = rotacion_binaria ~ factor(Satisfación_Laboral),
## family = binomial(link = "logit"), data = datos)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.2175 0.1401 -8.689 < 2e-16 ***
## factor(Satisfación_Laboral)2 -0.4092 0.2137 -1.915 0.0555 .
## factor(Satisfación_Laboral)3 -0.4028 0.1899 -2.122 0.0339 *
## factor(Satisfación_Laboral)4 -0.8401 0.2033 -4.132 3.59e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1298.6 on 1469 degrees of freedom
## Residual deviance: 1281.2 on 1466 degrees of freedom
## AIC: 1289.2
##
## Number of Fisher Scoring iterations: 4
## Single term deletions
##
## Model:
## rotacion_binaria ~ factor(Satisfación_Laboral)
## Df Deviance AIC LRT Pr(>Chi)
## <none> 1281.2 1289.2
## factor(Satisfación_Laboral) 3 1298.6 1300.6 17.357 0.0005969 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
La prueba global muestra que existe una asociación entre satisfacción laboral y rotación, ya que su valor p es menor que 0.05. Al comparar cada categoría con la 1, todos los coeficientes son negativos, pero solo las categorías 3 y 4 presentan diferencias estadísticamente significativas. Para la categoría 2, el valor p es de 0.0555, por lo que no hay evidencia suficiente para afirmar que difiere de la categoría 1 al nivel del 5 %. Si suponemos que los números más altos representan mayor satisfacción, estos resultados respaldan la hipótesis de que una mayor satisfacción laboral se relaciona con una menor probabilidad de rotación. Esto indica una asociación, sin demostrar que la satisfacción sea la causa del cambio de departamento.
Calculemos odds ratios ya que para esta variable se presentan categorias unto con sus intervalos de confianza.
## factor(Satisfación_Laboral)2 factor(Satisfación_Laboral)3
## 0.6642062 0.6684323
## factor(Satisfación_Laboral)4
## 0.4316879
## OR 2.5 % 97.5 %
## factor(Satisfación_Laboral)2 0.6642062 0.4369578 1.0096394
## factor(Satisfación_Laboral)3 0.6684323 0.4607376 0.9697532
## factor(Satisfación_Laboral)4 0.4316879 0.2898262 0.6429869
Como los odds ratios son menores que 1, la reducción porcentual de los odds se calcula con la fórmula: (1 − OR) × 100. Por ejemplo, para la categoría 4, el cálculo es (1 − 0.4317) × 100 = 56.8 %. Esto significa que sus odds de rotación son un 56.8 % menores que los de la categoría 1, tomada como referencia. Esta reducción corresponde a los odds, no directamente a la probabilidad de rotación.aplicando el mismo cálculo, las categorías 2 y 3 presentan odds estimados un 33.6 % y un 33.2 % menores, respectivamente. Sin embargo, en la categoría 2 el intervalo de confianza incluye 1, por lo que no hay evidencia suficiente para afirmar una diferencia frente a la categoría 1. En las categorías 3 y 4, los intervalos quedan por debajo de 1 y las diferencias son estadísticamente significativas.
Hipotesis:los empleados con menor equilibrio entre el trabajo y la vida personal tienen mayor probabilidad de rotación.
El siguiente gráfico separa a los epleados según si presentaron rotación o no y muestra las cuatro categorías de equilibrio entre el trabajo y la vida personal. Cada barra indica la cantidad de empleados y su porcentaje dentro del grupo de rotación, lo que permite comparar cómo se distribuyen las categorías en ambos grupos.
En ambos grupos predomina la categoría 3: representa el 62.1 % de
quienes no presentaron rotación y el 53.6 % de quienes sí lo hicieron,
una diferencia de 8.5 puntos porcentuales. Las categorías 2 y 4 tienen
porcentajes similares entre ambos grupos. Sin embargo, la categoría 1
representa el 4.5 % de quienes no rotaron y el 10.5 % de quienes sí
rotaron. Si suponemos que 1 corresponde a un menor equilibrio entre el
trabajo y la vida personal, esta diferencia sería consistente con la
hipótesis planteada. No obstante, el patrón no es uniforme en todas las
categorías y su significado aún no está confirmado. Más adelante se
evaluará si la asociación es estadísticamente significativa.
Para revisar si el equilibrio trabajo-vida está relacionado con la rotación, usamos una regresión logística. Como esta variable tiene cuatro categorías, tomamos la categoría 1 como referencia y comparamos las otras tres con ella. Primero revisamos la prueba global, que plantea:
Si el valor p es menor que 0.05, rechazamos H₀. Luego, con las pruebas de Wald, revisamos cuáles categorías presentan diferencias frente a la 1 y usamos el signo de cada coeficiente para conocer la dirección de esas diferencias.
##
## Call:
## glm(formula = rotacion_binaria ~ factor(Equilibrio_Trabajo_Vida),
## family = binomial(link = "logit"), data = datos)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.7885 0.2412 -3.269 0.001080 **
## factor(Equilibrio_Trabajo_Vida)2 -0.8071 0.2809 -2.873 0.004066 **
## factor(Equilibrio_Trabajo_Vida)3 -1.0085 0.2595 -3.886 0.000102 ***
## factor(Equilibrio_Trabajo_Vida)4 -0.7520 0.3212 -2.341 0.019215 *
## ---
## 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: 1284.5 on 1466 degrees of freedom
## AIC: 1292.5
##
## Number of Fisher Scoring iterations: 4
## Single term deletions
##
## Model:
## rotacion_binaria ~ factor(Equilibrio_Trabajo_Vida)
## Df Deviance AIC LRT Pr(>Chi)
## <none> 1284.5 1292.5
## factor(Equilibrio_Trabajo_Vida) 3 1298.6 1300.6 14.073 0.002807 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Calculemos entonces el OR junto con el intervalo de confianza asociado
## OR 2.5 % 97.5 %
## factor(Equilibrio_Trabajo_Vida)2 0.4461538 0.2572525 0.7737660
## factor(Equilibrio_Trabajo_Vida)3 0.3647520 0.2193190 0.6066231
## factor(Equilibrio_Trabajo_Vida)4 0.4714286 0.2512052 0.8847145
Los resultados muestran que el equilibrio entre el trabajo y la vida personal está asociado con la rotación, pues la prueba global tiene un valor p de 0.0028, menor que 0.05. Frente a la categoría 1, las categorías 2, 3 y 4 presentan menores odds de rotación, y ninguno de sus intervalos de confianza incluye el 1, por lo que las tres comparaciones son significativas.
Suponiendo que las categorías más altas indican un mejor equilibrio, este resultado apoya la hipótesis planteada. Sin embargo, no se observa una disminución progresiva de la rotación al subir de categoría, ya que la categoría 3 presenta el menor OR. Esto indica una asociación, pero no demuestra que un mejor equilibrio cause una menor rotación.
Hipotesis: se espera que un mayor porcentaje de aumento salarial se relacione con una menor probabilidad de rotación, porque podría representar un reconocimiento económico que motive al empleado a permanecer en su departamento Para este análisis se compara una variable binaria, rotación, con una cuantitativa, porcentaje de aumento salarial. Se utiliza un boxplot para comparar la mediana, la dispersión y los posibles valores atípicos entre ambos grupos.
Los dos grupos presentan una mediana de aumento salarial del 14 %. La mitad central de los datos se encuentra entre el 12 % y el 18 % para quienes no rotaron, y entre el 12 % y el 17 % para quienes sí lo hicieron. Ambos grupos alcanzan aumentos del 25 %, aunque este valor aparece como atípico entre quienes presentaron rotación. En general, las distribuciones son muy similares. Aunque quienes no rotaron presentan un tercer cuartil ligeramente mayor, el gráfico no muestra una diferencia clara que permita respaldar la hipótesis de que un mayor aumento salarial se relaciona con menor rotación. Esta relación se evaluará posteriormente con la regresión logística.
Para evaluar si el porcentaje de aumento salarial está relacionado con la rotación, se ajusta una regresión logística con esta variable como explicativa. Mediante la prueba de Wald se evalúa si su coeficiente es diferente de cero. Se espera un coeficiente negativo, de acuerdo con la hipótesis de que un mayor aumento salarial se relaciona con una menor probabilidad de rotación.
H₀: β₁ = 0: no hay asociación entre el porcentaje de aumento salarial y la rotación. H₁: β₁ ≠ 0: existe asociación entre ambas variables
##
## Call:
## glm(formula = rotacion_binaria ~ Porcentaje_aumento_salarial,
## family = binomial(link = "logit"), data = datos)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.49563 0.30459 -4.910 9.09e-07 ***
## Porcentaje_aumento_salarial -0.01012 0.01959 -0.517 0.605
## ---
## 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: 1298.3 on 1468 degrees of freedom
## AIC: 1302.3
##
## Number of Fisher Scoring iterations: 3
El coeficiente obtenido es negativo (−0.01012), lo que coincide con la dirección esperada. Sin embargo, el valor p de 0.605 es mayor que 0.05, por lo que no se rechaza H₀. Así, este análisis no aporta evidencia suficiente para respaldar que un mayor porcentaje de aumento salarial se relacione con una menor rotación. La variable se mantendrá en el modelo múltiple para evaluar su asociación al considerar también las demás variables seleccionadas.
## OR 2.5 % 97.5 %
## 0.9899272 0.9526329 1.0286816
El OR de 0.9899 indica que, por cada punto porcentual adicional de aumento salarial, se estiman unos odds de rotación aproximadamente 1.01 % menores, calculado como (1 − 0.9899272) × 100. Sin embargo, el intervalo de confianza del 95 % [0.9526, 1.0287] incluye el 1, por lo que esta disminución no es estadísticamente significativa. Esto coincide con el valor p de 0.605: no encontramos evidencia suficiente para respaldar la hipótesis planteada en este análisis bivariado.
Hipotesis: a mayor número de años desde la última promoción, mayor probabilidad de rotación, pues pasar mucho tiempo sin ascender podría generar una sensación de estancamiento y la persona buscara cambiar de área en busca de más oportunidades.
Al igual que en el análisis anterior, se compara una variable binaria
con una cuantitativa. Se presentan boxplots de los años desde la última
promoción para quienes presentaron rotación y quienes no
Ambos grupos tienen una mediana de un año. Entre quienes no rotaron, el 75 % de los registros presenta hasta tres años desde la última promoción, mientras que entre quienes sí rotaron este valor es de dos años. Ambos grupos tienen valores atípicos altos que alcanzan los 15 años, aunque estos se identifican a partir de ocho años en quienes no rotaron y de seis años en quienes sí lo hicieron.El gráfico no muestra el patrón esperado de más años sin promoción entre quienes rotaron. Por el contrario, sus valores centrales son similares o ligeramente menores. Por ahora, esta comparación visual no respalda la hipótesis planteada; posteriormente se evaluará la relación mediante la regresión logística.
Para evaluar esta relación, ajustamos una regresión logística y usamos la prueba de Wald para revisar si el coeficiente es diferente de cero:
H₀: β₁ = 0: los años desde la última promoción no están asociados con la rotación. H₁: β₁ ≠ 0: existe asociación entre ambas variables.
##
## Call:
## glm(formula = rotacion_binaria ~ Años_ultima_promoción, family = binomial(link = "logit"),
## data = datos)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.58703 0.08501 -18.670 <2e-16 ***
## Años_ultima_promoción -0.02979 0.02358 -1.263 0.206
## ---
## 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: 1296.9 on 1468 degrees of freedom
## AIC: 1300.9
##
## Number of Fisher Scoring iterations: 4
## OR 2.5 % 97.5 %
## 0.9706525 0.9268193 1.0165588
El análisis no mostró una asociación estadísticamente significativa entre los años desde la última promoción y la rotación (p = 0.206). Aunque esperábamos que más años sin ascender se relacionaran con mayor rotación, el coeficiente fue negativo (−0.02979). El OR de 0.9707 y su intervalo de confianza del 95 % [0.9268, 1.0166], que incluye el 1, tampoco permiten respaldar la hipótesis planteada. Por tanto, no se rechaza H₀ y se mantiene la variable para evaluar su comportamiento junto con las demás en el modelo múltiple.
Hipotesis:cuantos más años permanezca un empleado con el mismo jefe, menor será su probabilidad de rotación. El siguiente gráfico compara los años con el mismo jefe entre los empleados que presentaron rotación y quienes no. Se utiliza un boxplot para cada grupo, lo que permite observar diferencias en la mediana, la dispersión y los posibles valores atípicos.
En este gráfico, quienes no presentaron rotación tienden a acumular más
años con el mismo jefe. Su mediana es de tres años, frente a dos años
entre quienes sí rotaron. La mitad central de los datos se encuentra
entre dos y siete años para quienes no rotaron, y entre cero y cinco
años para quienes sí lo hicieron.
También se observan valores atípicos altos en ambos grupos: entre 15 y 17 años para quienes no rotaron y de 14 años para quienes sí rotaron. Hay registros de cero años en ambos grupos, aunque estos tienen mayor presencia entre quienes presentaron rotación, cuyo primer cuartil es cero.Estos resultados son consistentes con la hipótesis de que más años con el mismo jefe se relacionan con una menor probabilidad de rotación. Sin embargo, todavía falta evaluar si esta asociación es estadísticamente significativa.
Para comprobar la hipotesis, se ajusta una regresión logística y se utiliza la prueba de Wald:
H₀: β₁ = 0: los años con el mismo jefe no están asociados con la rotación. H₁: β₁ ≠ 0: los años con el mismo jefe están asociados con la rotación.
Esperamos obtener un coeficiente negativo, un valor p menor que 0.05 y un OR menor que 1.
##
## Call:
## glm(formula = rotacion_binaria ~ Años_acargo_con_mismo_jefe,
## family = binomial(link = "logit"), data = datos)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.14677 0.10244 -11.195 < 2e-16 ***
## Años_acargo_con_mismo_jefe -0.14138 0.02407 -5.874 4.26e-09 ***
## ---
## 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: 1258.7 on 1468 degrees of freedom
## AIC: 1262.7
##
## Number of Fisher Scoring iterations: 5
## OR 2.5 % 97.5 %
## 0.8681623 0.8281578 0.9100991
El análisis muestra que los años con el mismo jefe están asociados significativamente con la rotación, ya que el valor p es menor que 0.05. Además, el coeficiente es negativo, el OR es menor que 1 y su intervalo de confianza del 95 % no incluye el 1. Esto indica que, por cada año adicional con el mismo jefe, disminuyen los odds de que el empleado presente rotación, lo cual respalda la hipótesis planteada. Esta relación se volverá a evaluar en el modelo múltiple junto con las demás variables seleccionadas.
A continuación, se resumen los resultados de las pruebas realizadas en el análisis bivariado. Para cada variable se presenta su valor p, la dirección observada de la asociación asociación y si esta fue estadísticamente significativa al nivel de 0.05.En satisfacción laboral y equilibrio trabajo-vida se presenta el valor p global, porque cada variable tiene cuatro categorías y, por tanto, tres coeficientes. En las demás variables se presenta el valor p de la prueba de Wald de su único coeficiente.
| Variable | Valor_p | Direccion | Conclusion |
|---|---|---|---|
| Horas extra | < 0.001 | Aumenta la rotación | Significativa |
| Satisfacción laboral | < 0.001 | Menores odds frente a la categoría 1 | Significativa globalmente |
| Equilibrio trabajo-vida | 0.00281 | Menores odds frente a la categoría 1 | Significativa globalmente |
| Porcentaje de aumento salarial | 0.60536 | Disminución no significativa | No significativa |
| Años desde la última promoción | 0.20645 | Disminución no significativa | No significativa |
| Años con el mismo jefe | < 0.001 | Disminuye la rotación | Significativa |
En conjunto, el análisis bivariado mostró asociaciones significativas entre la rotación y las variables horas extra, satisfacción laboral, equilibrio trabajo-vida y años con el mismo jefe. Por el contrario, el porcentaje de aumento salarial y los años desde la última promoción no mostraron una asociación significativa de manera individual. Sin embargo, las seis variables se mantendrán para estimar el modelo múltiple y evaluar su comportamiento al considerar simultáneamente el efecto de las demás variables.
La variable objetivo Rotación fue codificada de forma binaria para ajustar el modelo de regresión logística. Se asignó el valor 0 a los empleados que no presentaron rotación y el valor 1 a quienes sí la presentaron. Por tanto, el evento que busca estimar el modelo corresponde a la presencia de rotación.
Las variables cualitativas fueron definidas como factores para que el modelo generara automáticamente las variables dummy. Se tomó como referencia la categoría “No” para horas extra y la categoría 1 para satisfacción laboral y equilibrio trabajo-vida. De esta manera, los coeficientes de las demás categorías se interpretarán en comparación con sus respectivas categorías de referencia.
datos$Horas_Extra <- factor(
datos$Horas_Extra,
levels = c("No", "Si")
)
datos$Satisfación_Laboral <- factor(
datos$Satisfación_Laboral,
levels = c(1, 2, 3, 4)
)
datos$Equilibrio_Trabajo_Vida <- factor(
datos$Equilibrio_Trabajo_Vida,
levels = c(1, 2, 3, 4)
)
Antes de estimar el modelo, la base de datos se dividió de manera estratificada en tres conjuntos. El 70 % se destinó al entrenamiento del modelo. El 30 % restante se dividió en partes aproximadamente iguales: una para seleccionar el punto de corte y otra para realizar la evaluación final. La división estratificada permite conservar una proporción similar de empleados con y sin rotación en los tres conjuntos.
| Conjunto | Total | Sin_rotacion | Con_rotacion | Porcentaje_rotacion |
|---|---|---|---|---|
| Entrenamiento | 1029 | 863 | 166 | 16.13 |
| Validación | 221 | 185 | 36 | 16.29 |
| Prueba final | 220 | 185 | 35 | 15.91 |
La base de datos se dividió de manera estratificada en tres conjuntos. Se utilizaron 1,029 registros para entrenar el modelo, 221 para seleccionar el punto de corte y 220 para realizar la evaluación final. La rotación representa el 16.13 % del conjunto de entrenamiento, el 16.29 % del conjunto de validación y el 15.91 % del conjunto de prueba final. Por tanto, los tres conjuntos mantienen una distribución similar de la variable objetivo.
| Conjunto | Total | Sin_rotacion | Con_rotacion | Porcentaje_rotacion |
|---|---|---|---|---|
| Entrenamiento | 1029 | 863 | 166 | 16.13 |
| Prueba | 441 | 370 | 71 | 16.10 |
Con los 1029 registros del conjunto de entrenamiento se ajusta un modelo de regresión logística múltiple. La variable objetivo corresponde a la rotación, codificada como 1 cuando el empleado presentó rotación y 0 cuando no la presentó. El modelo incluye las tres variables cualitativas y las tres cuantitativas seleccionadas anteriormente, con el propósito de estimar conjuntamente su relación con la probabilidad de rotación.
modelo_multiple <- glm(
rotacion_binaria ~ Horas_Extra +
Satisfación_Laboral +
Equilibrio_Trabajo_Vida +
Porcentaje_aumento_salarial +
Años_ultima_promoción +
Años_acargo_con_mismo_jefe,
family = binomial(link = "logit"),
data = datos_entrenamiento
)
El modelo de regresion logistica debe de cumplir los siguientes supuestos: - Independencia de las observaciones. - Ausencia de multicolinealidad. - Linealidad en el logit de las variables cuantitativas. - Ausencia de observaciones excesivamente influyentes.
A continuación se revisaran estos.
La regresión logística requiere que las observaciones sean independientes. En la exploración inicial no se encontraron registros completamente duplicados y, según la estructura de la base, cada fila representa la información de un empleado. Por esta razón, se asumirá que las observaciones son independientes. Sin embargo, debido a que la base no contiene un identificador único, no es posible comprobar directamente que un mismo empleado no aparezca más de una vez.
La matriz de correlación presentada anteriormente no mostró correlaciones altas entre las tres variables cuantitativas seleccionadas. Sin embargo, como la correlación analiza las variables de dos en dos, se complementó esta revisión mediante el VIF, el cual permite evaluar la relación de cada variable explicativa con el conjunto de las demás variables incluidas en el modelo. Para interpretar los resultados se utilizarán los siguientes criterios:
Un VIF menor o igual a 5 indica que no existen problemas importantes de multicolinealidad. Un VIF mayor que 5 y menor o igual que 10 indica multicolinealidad moderada. Un VIF superior a 10 indica un problema grave de multicolinealidad.
Debido a que el modelo incluye variables cualitativas con varias categorías, se utilizará el GVIF ajustado por sus grados de libertad para realizar la comparación.
| VIF ajustado | |
|---|---|
| Horas_Extra | 1.023 |
| Satisfación_Laboral | 1.016 |
| Equilibrio_Trabajo_Vida | 1.012 |
| Porcentaje_aumento_salarial | 1.007 |
| Años_ultima_promoción | 1.424 |
| Años_acargo_con_mismo_jefe | 1.441 |
Los valores del VIF ajustado se encuentran entre 1.007 y 1.441, por debajo del límite de 5 establecido para identificar problemas de multicolinealidad. Los valores más altos corresponden a años con el mismo jefe (1.441) y años desde la última promoción (1.424); sin embargo, siguen siendo bajos. Por tanto, no se encuentra evidencia de multicolinealidad entre las variables explicativas y todas pueden mantenerse en el modelo.
La regresión logística no exige que las variables cuantitativas tengan una distribución normal. Sin embargo, sí supone que estas variables tengan una relación aproximadamente lineal con el logaritmo de los odds de rotación. Por esta razón, se revisan el porcentaje de aumento salarial, los años desde la última promoción y los años con el mismo jefe. Para evaluar este supuesto se utiliza una versión de la prueba de Box-Tidwell, en la que cada variable se combina con su logaritmo. Como las variables relacionadas con los años contienen valores iguales a cero, se suma 1 antes de calcular el logaritmo para evitar errores.Las hipótesis son:
H₀: la relación de la variable con el logit puede considerarse lineal. H₁: existe evidencia de que la relación no es lineal.
Un valor p mayor que 0.05 indica que no hay evidencia para decir que se incumple el supuesto. Si el valor p es menor que 0.05, se considera que la relación podría no ser lineal y será necesario revisar la forma en que esa variable se incluye en el modelo.
| Estimate | Pr(>|z|) | |
|---|---|---|
| bt_aumento | 0.2396 | 0.2990 |
| bt_promocion | -0.0225 | 0.7337 |
| bt_jefe | 0.1530 | 0.0136 |
Los resultados muestran que el porcentaje de aumento salarial y los años desde la última promoción cumplen el supuesto de linealidad en el logit, debido a que sus valores p son mayores que 0.05. Por el contrario, los años con el mismo jefe presentan un valor p de 0.0136, lo que indica una posible relación no lineal con la rotación. Por esta razón, será necesario ajustar la forma en que esta variable se incluye en el modelo, probando un término cuadrático
Análisis variable años con el mismo jefe
La prueba anterior mostró que la relación entre los años con el mismo jefe y la rotación posiblemente no sigue una línea recta. Esto quiere decir que el efecto de un año adicional podría cambiar según el tiempo que el empleado ya lleve con ese jefe. Por ejemplo, pasar de cero a un año podría tener un efecto diferente a pasar de diez a once años. Como primera alternativa, se agregó al modelo el valor de los años con el mismo jefe elevado al cuadrado. Este término permite representar una relación curva sin convertir la variable en categorías. Sin embargo, al comparar este modelo con el modelo inicial se obtuvo un valor p de 0.1603. Como es mayor que 0.05, no se encontró evidencia suficiente para afirmar que el término cuadrático mejora el modelo, por lo que esta alternativa no fue seleccionada.
modelo_ajustado <- update(
modelo_multiple,
. ~ . + I(Años_acargo_con_mismo_jefe^2)
)
## Analysis of Deviance Table
##
## Model 1: rotacion_binaria ~ Horas_Extra + Satisfación_Laboral + Equilibrio_Trabajo_Vida +
## Porcentaje_aumento_salarial + Años_ultima_promoción + Años_acargo_con_mismo_jefe
## Model 2: rotacion_binaria ~ Horas_Extra + Satisfación_Laboral + Equilibrio_Trabajo_Vida +
## Porcentaje_aumento_salarial + Años_ultima_promoción + Años_acargo_con_mismo_jefe +
## I(Años_acargo_con_mismo_jefe^2)
## Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1 1018 792.21
## 2 1017 790.24 1 1.971 0.1603
Como segunda alternativa, se aplicó una transformación logarítmica. Debido a que algunos empleados tienen cero años con el mismo jefe, se sumó 1 antes de calcular el logaritmo. Esta transformación permite representar que las diferencias durante los primeros años podrían tener un efecto mayor y que dicho efecto puede reducirse a medida que pasa el tiempo.
Para comparar esta alternativa con el modelo inicial se utilizó el AIC, donde un valor menor indica un mejor ajuste. El modelo inicial presentó un AIC de 814.21 y el modelo con la transformación logarítmica obtuvo un AIC de 806.17. La reducción de aproximadamente 8 puntos muestra que el modelo logarítmico representa mejor los datos. Por esta razón, se seleccionó esta transformación para los años con el mismo jefe y se utilizará el modelo logarítmico en los análisis posteriores.
modelo_logaritmico <- update(
modelo_multiple,
. ~ . - Años_acargo_con_mismo_jefe +
log1p(Años_acargo_con_mismo_jefe)
)
## df AIC
## modelo_multiple 11 814.2131
## modelo_logaritmico 11 806.1736
El modelo final se estima nuvamente con las seis variables, reemplazando los años con el mimso jefe por su transformación logarítmica. Las demás variables conservaron su forma original.
modelo_final <- glm(
rotacion_binaria ~ Horas_Extra +
Satisfación_Laboral +
Equilibrio_Trabajo_Vida +
Porcentaje_aumento_salarial +
Años_ultima_promoción +
log1p(Años_acargo_con_mismo_jefe),
family = binomial(link = "logit"),
data = datos_entrenamiento
)
##
## Call:
## glm(formula = rotacion_binaria ~ Horas_Extra + Satisfación_Laboral +
## Equilibrio_Trabajo_Vida + Porcentaje_aumento_salarial + Años_ultima_promoción +
## log1p(Años_acargo_con_mismo_jefe), family = binomial(link = "logit"),
## data = datos_entrenamiento)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.65110 0.55003 1.184 0.236508
## Horas_ExtraSi 1.37724 0.18581 7.412 1.24e-13 ***
## Satisfación_Laboral2 -0.49096 0.26882 -1.826 0.067797 .
## Satisfación_Laboral3 -0.56646 0.24116 -2.349 0.018829 *
## Satisfación_Laboral4 -1.32185 0.27211 -4.858 1.19e-06 ***
## Equilibrio_Trabajo_Vida2 -1.01185 0.35098 -2.883 0.003940 **
## Equilibrio_Trabajo_Vida3 -1.20733 0.32135 -3.757 0.000172 ***
## Equilibrio_Trabajo_Vida4 -1.23476 0.41852 -2.950 0.003174 **
## Porcentaje_aumento_salarial -0.02076 0.02590 -0.802 0.422832
## Años_ultima_promoción 0.05811 0.03325 1.748 0.080545 .
## log1p(Años_acargo_con_mismo_jefe) -0.76897 0.12818 -5.999 1.98e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 909.34 on 1028 degrees of freedom
## Residual deviance: 784.17 on 1018 degrees of freedom
## AIC: 806.17
##
## Number of Fisher Scoring iterations: 5
En general, el modelo cumple el supuesto de independencia y no presenta problemas de multicolinealidad. En la evaluación de linealidad, el porcentaje de aumento salarial y los años desde la última promoción cumplieron el supuesto. Los años con el mismo jefe mostraron una posible relación no lineal, por lo que se probaron las formas cuadrática y logarítmica. Finalmente, se eligió la transformación logarítmica porque presentó un menor AIC y mejoró el ajuste del modelo.
El intercepto no es significativo, pero eso no representa un problema ni se utiliza para decidir qué variables son importantes.
Para revisar si algún registro está afectando demasiado los resultados del modelo, se calculará la distancia de Cook. Primero se utilizará el límite \(4/n\), que permite señalar observaciones que conviene revisar con mayor detalle. También se tendrá en cuenta el criterio \(D_i>1\), el cual indica una posible observación fuertemente influyente. Superar alguno de estos valores no significa que el registro deba eliminarse automáticamente, ya que primero se debe revisar la magnitud de su influencia y comprobar que no corresponda a un dato válido.
# Distancia de Cook
cook <- cooks.distance(modelo_final)
# Número de observaciones utilizadas en el modelo
n <- nobs(modelo_final)
# Límites de referencia
limite_revision <- 4 / n
limite_fuerte <- 1
# Resumen
resumen_cook <- data.frame(
Criterio = c(
"Superiores a 4/n",
"Superiores a 1",
"Distancia máxima"
),
Resultado = c(
sum(cook > limite_revision),
sum(cook > limite_fuerte),
round(max(cook), 4)
)
)
knitr::kable(
resumen_cook,
caption = "Evaluación de observaciones influyentes"
)
| Criterio | Resultado |
|---|---|
| Superiores a 4/n | 91.0000 |
| Superiores a 1 | 0.0000 |
| Distancia máxima | 0.0188 |
El criterio \(4/n\) identificó 91
registros para revisión. Sin embargo, ninguno superó el valor de 1 y la
distancia máxima fue de 0.0188. Por tanto, no se encontraron
observaciones excesivamente influyentes y se conservaron todos los
registros en el modelo.
Para saber si el modelo aporta información sobre la rotación, se comparará el modelo final con un modelo nulo que no contiene variables explicativas. Esta comparación permitirá determinar si incluir las seis variables mejora significativamente la explicación de la rotación.
Las hipótesis son:
Si el valor p es menor que 0.05, se rechaza H₀ y se concluye que el modelo es globalmente significativo.
# Modelo sin variables explicativas
modelo_nulo <- glm(
rotacion_binaria ~ 1,
family = binomial(link = "logit"),
data = datos_entrenamiento
)
# Comparación con el modelo final
anova(
modelo_nulo,
modelo_final,
test = "Chisq"
)
## Analysis of Deviance Table
##
## Model 1: rotacion_binaria ~ 1
## Model 2: rotacion_binaria ~ Horas_Extra + Satisfación_Laboral + Equilibrio_Trabajo_Vida +
## Porcentaje_aumento_salarial + Años_ultima_promoción + log1p(Años_acargo_con_mismo_jefe)
## Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1 1028 909.34
## 2 1018 784.17 10 125.16 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
La prueba presentó un valor p menor que 0.05, por lo que se rechaza H₀. Esto indica que el modelo final es globalmente significativo y que, en conjunto, las variables incluidas aportan información para explicar la rotación. Sin embargo, este resultado no significa que todas las variables sean significativas de manera individual, por lo que a continuación se revisarán sus coeficientes por separado
Para esta sección se interpretará cada coeficiente manteniendo constante los demas. A continuación se presenta una tabla resumen, donde se muestran los Odds ratios junto con los intervalos de confianza. Para facilitar la lectura es importante tener en cuenta lo siguiente:
Es importante tener en cuenta que la variable años con el mismo jefe tiene transformacion logaritmica y su OR no representa dfectamente el cambio por un año adicional.
| Variable | Coeficiente | OR | IC_inferior | IC_superior | Valor_p |
|---|---|---|---|---|---|
| Horas_ExtraSi | 1.3772 | 3.9640 | 2.7540 | 5.7056 | 0.0000000 |
| Satisfación_Laboral2 | -0.4910 | 0.6120 | 0.3614 | 1.0366 | 0.0677974 |
| Satisfación_Laboral3 | -0.5665 | 0.5675 | 0.3538 | 0.9105 | 0.0188291 |
| Satisfación_Laboral4 | -1.3218 | 0.2666 | 0.1564 | 0.4545 | 0.0000012 |
| Equilibrio_Trabajo_Vida2 | -1.0118 | 0.3635 | 0.1827 | 0.7233 | 0.0039401 |
| Equilibrio_Trabajo_Vida3 | -1.2073 | 0.2990 | 0.1593 | 0.5613 | 0.0001719 |
| Equilibrio_Trabajo_Vida4 | -1.2348 | 0.2909 | 0.1281 | 0.6607 | 0.0031744 |
| Porcentaje_aumento_salarial | -0.0208 | 0.9795 | 0.9310 | 1.0305 | 0.4228318 |
| Años_ultima_promoción | 0.0581 | 1.0598 | 0.9930 | 1.1312 | 0.0805452 |
| log1p(Años_acargo_con_mismo_jefe) | -0.7690 | 0.4635 | 0.3605 | 0.5959 | 0.0000000 |
En general, las variables que no resultaron significativas fueron la categoría 2 de satisfacción laboral, el porcentaje de aumento salarial y los años desde la última promoción, ya que sus valores p fueron mayores que 0.05 y sus intervalos de confianza incluyeron el 1.El resultado más fuerte se observa en las horas extra. Los empleados que trabajan horas extra tienen aproximadamente 3.96 veces los odds de presentar rotación frente a quienes no las trabajan. Por otro lado, las categorías más altas de satisfacción laboral y equilibrio trabajo-vida se relacionan con menores odds de rotación. Por ejemplo, la categoría 4 de satisfacción presenta odds 73.3 % menores que la categoría 1.
Los años con el mismo jefe también muestran una relación negativa y significativa con la rotación, aunque su interpretación no se realiza directamente por cada año adicional porque esta variable fue transformada usando el logaritmo. En conclusión, trabajar horas extra se relaciona con una mayor rotación, mientras que una mayor satisfacción, un mejor equilibrio trabajo-vida y llevar más tiempo con el mismo jefe se relacionan con una menor rotación. Estos resultados tienen en cuenta las demás variables incluidas en el modelo y muestran asociaciones, pero no demuestran que una variable sea la causa directa de la rotación.
A continuation evaluems que ocurre si se retira cada variable del modelo.
## Single term deletions
##
## Model:
## rotacion_binaria ~ Horas_Extra + Satisfación_Laboral + Equilibrio_Trabajo_Vida +
## Porcentaje_aumento_salarial + Años_ultima_promoción + log1p(Años_acargo_con_mismo_jefe)
## Df Deviance AIC LRT Pr(>Chi)
## <none> 784.17 806.17
## Horas_Extra 1 839.29 859.29 55.118 1.135e-13 ***
## Satisfación_Laboral 3 809.72 825.72 25.551 1.184e-05 ***
## Equilibrio_Trabajo_Vida 3 797.37 813.37 13.195 0.004234 **
## Porcentaje_aumento_salarial 1 784.82 804.82 0.650 0.419949
## Años_ultima_promoción 1 787.11 807.11 2.940 0.086406 .
## log1p(Años_acargo_con_mismo_jefe) 1 822.10 842.10 37.929 7.336e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
De acuerdo con la prueba global de cada variable, las que presentan un mayor aporte al ajuste del modelo son las horas extra, los años con el mismo jefe y la satisfacción laboral. Al retirar cualquiera de ellas, el AIC aumenta de manera importante y sus valores p son menores que 0.05. El equilibrio trabajo-vida también aporta significativamente, aunque en menor medida. Por otro lado, el porcentaje de aumento salarial y los años desde la última promoción no mostraron una contribución significativa. Estos resultados son coherentes con los odds ratios, los valores p y los intervalos de confianza observados anteriormente. Además, la prueba global de cada variable confirma que las horas extra, los años con el mismo jefe, la satisfacción laboral y el equilibrio trabajo-vida aportan significativamente al modelo. Por su parte, la comparación con el modelo nulo mostró que el modelo completo también es estadísticamente significativo.
Primero se utilizarán los 221 registros del conjunto de validación para comparar diferentes puntos de corte y seleccionar el más conveniente. En esta etapa se revisarán las matrices de confusión, la sensibilidad, la especificidad, la precisión, F1 y la exactitud balanceada. Los 220 registros de prueba final no se utilizarán durante esta selección, ya que se reservarán para evaluar el desempeño definitivo del modelo.
probabilidades_validacion <- predict(
modelo_final,
newdata = datos_validacion,
type = "response"
)
Antes de comenzar esta sección, es importante tener en cuenta que hasta el momento se tiene:
El punto de corte determina desde qué probabilidad un empleado será clasificado como un posible caso de rotación. Un punto de corte alto genera menos predicciones de rotación, mientras que uno más bajo permite detectar más casos, aunque también puede aumentar las clasificaciones incorrectas. Debido al desbalance de la variable objetivo, se compararán diferentes puntos de corte utilizando los datos de validación para observar cómo cambia el desempeño del modelo y seleccionar el valor más conveniente. Los datos de prueba final se reservarán para evaluar el modelo después de tomar esta decisión.
| Punto_corte | Sensibilidad | Especificidad | Exactitud | Precision | F1 | Exactitud_balanceada |
|---|---|---|---|---|---|---|
| 0.2 | 61.11 | 76.22 | 73.76 | 33.33 | 43.14 | 68.66 |
| 0.3 | 33.33 | 88.11 | 79.19 | 35.29 | 34.29 | 60.72 |
| 0.4 | 22.22 | 95.14 | 83.26 | 47.06 | 30.19 | 58.68 |
| 0.5 | 11.11 | 98.38 | 84.16 | 57.14 | 18.60 | 54.74 |
Al aumentar el punto de corte mejoran la especificidad, la exactitud y la precisión, pero la sensibilidad disminuye bastante. Por ejemplo, con un corte de 0.50 el modelo identifica muy pocos empleados que realmente presentan rotación. Por eso, compararemos varios puntos de corte usando sus matrices de confusión y métricas como sensibilidad, especificidad, exactitud, precisión, F1 y exactitud balanceada. F1 combina la sensibilidad y la precisión. La exactitud balanceada, por su parte, es el promedio entre la sensibilidad y la especificidad, y resulta útil porque en la base hay muchos más empleados sin rotación que con rotación. También revisaremos la curva ROC y el AUC para conocer qué tan bien diferencia el modelo entre empleados con y sin rotación. Con toda esta información escogeremos el punto de corte que detecte una buena cantidad de empleados con rotación sin generar demasiadas falsas alarmas.
A continuación se presentan las matrices de confusion para cada uno de los putnos de corte presentados en la tabla anterior.
##
## Punto de corte: 0.2
## Prediccion
## Real No Sí
## No 141 44
## Sí 14 22
##
## Punto de corte: 0.3
## Prediccion
## Real No Sí
## No 163 22
## Sí 24 12
##
## Punto de corte: 0.4
## Prediccion
## Real No Sí
## No 176 9
## Sí 28 8
##
## Punto de corte: 0.5
## Prediccion
## Real No Sí
## No 182 3
## Sí 32 4
Las matrices de confusión muestran que, al aumentar el punto de corte, el modelo detecta cada vez menos empleados que realmente presentaron rotación. Con el corte de 0.20 identifica correctamente 22 de los 36 casos reales, aunque también clasifica incorrectamente a 44 empleados como posibles casos de rotación. En cambio, con el corte de 0.50 solamente identifica 4 de los 36 casos reales. Por esta razón, entre los valores evaluados, el corte de 0.20 parece ser el más conveniente para detectar empleados con posible riesgo de rotación, aunque todavía se revisará la curva ROC antes de tomar la decisión
Calculemos el mejor punto de corte con base en la curva ROC.
## threshold sensitivity specificity
## 1 0.1918471 0.6388889 0.7459459
Finalmente, el área bajolla curva que nos indica la capacidad del modelo.
## Area under the curve: 0.7098
La curva ROC se calculó con los datos de prueba y muestra cómo cambian la sensibilidad y las falsas alarmas al utilizar distintos puntos de corte. Cuanto más se aleja la curva de la línea diagonal, mayor es la capacidad del modelo para diferenciar entre empleados con y sin rotación. El área bajo la curva fue de 0.7098, lo que indica que el modelo tiene una capacidad aceptable para diferenciar ambos grupos. En otras palabras, existe aproximadamente un 70.98 % de posibilidad de que el modelo le asigne una probabilidad de rotación más alta a un empleado que realmente rotó que a uno que no lo hizo. adicionalmente, la curva ROC encontró que el punto de corte más cercano a la esquina superior izquierda es 0.1918, con una sensibilidad de 63.88 % y una especificidad de 74.59 %. Como este valor es muy cercano a 0.20 y coincide con lo observado en las matrices de confusión y las demás métricas, finalmente se selecciona 0.20 como punto de corte para clasificar las predicciones del modelo.
Después de seleccionar el punto de corte con los datos de validación, se evaluará el desempeño del modelo utilizando los 220 registros reservados para la prueba final. Estos datos no fueron utilizados para estimar el modelo ni para escoger el punto de corte, por lo que permiten revisar su funcionamiento con información diferente. En esta etapa se mantendrá el punto de corte de 0.20 y se calcularán la matriz de confusión y las métricas finales del modelo.
# Punto de corte seleccionado con validación
punto_corte_final <- 0.20
# Probabilidades estimadas en la prueba final
probabilidades_prueba_final <- predict(
modelo_final,
newdata = datos_prueba_final,
type = "response"
)
# Verificar la cantidad de probabilidades
length(probabilidades_prueba_final)
## [1] 220
Ahora bien calculemos la clasificación y matriz de confusion final con el putno de corte de 0.2
## Prediccion
## Real No Sí
## No 148 37
## Sí 13 22
En los datos de prueba final, el modelo mostró un mejor desempeño para identificar a los empleados que no presentaron rotación. Clasificó correctamente 148 de los 185 casos sin rotación y detectó 22 de los 35 empleados que sí rotaron. Aunque se presentaron 37 falsas alarmas y 13 casos de rotación no fueron detectados, el punto de corte de 0.20 permitió identificar una proporción importante de los empleados con riesgo de rotación.
Ahora se calculan las metricas finales, junto con la curva ROC y el AUC.
| Metrica | Porcentaje |
|---|---|
| Sensibilidad | 62.86 |
| Especificidad | 80.00 |
| Exactitud | 77.27 |
| Precisión | 37.29 |
| F1 | 46.81 |
| Exactitud balanceada | 71.43 |
## Area under the curve: 0.7765
Al evaluar el modelo con los 220 datos de prueba final y utilizar el punto de corte de 0.20, se obtuvo una sensibilidad de 62.86 % y una especificidad de 80 %. Esto significa que el modelo identificó 22 de los 35 empleados que realmente rotaron y 148 de los 185 que no rotaron. La exactitud fue de 77.27 %, aunque este resultado debe interpretarse teniendo en cuenta que existen muchos más empleados sin rotación.La precisión fue de 37.29 %, lo que indica que varias de las alertas generadas fueron falsas. Sin embargo, el F1 alcanzó 46.81 % y la exactitud balanceada fue de 71.43 %, mostrando que el modelo logra un equilibrio aceptable entre detectar empleados con rotación y reconocer a quienes no rotan. Por otro lado, la curva ROC obtuvo un área bajo la curva de 0.7765. Esto indica que el modelo tiene una capacidad aceptable para diferenciar entre empleados con y sin rotación. En general, el modelo funciona mejor identificando a quienes no rotan, pero también logra detectar una proporción importante de los casos de rotación. Por tanto, puede utilizarse como una herramienta de apoyo para identificar empleados que deberían ser revisados con mayor atención, pero no como la única base para tomar decisiones.
En esta sección se realizara la predicción de un empleado hipotetito con características propias y se calculara su probabilidad de rotación
Las caracteristicas del empleasdo son las siguienteS:
Para realizar la predicción, creamos un empleado hipotético e ingresamos sus características en las mismas variables utilizadas para construir el modelo.
nuevo_empleado <- data.frame(
Horas_Extra = factor(
"Si",
levels = levels(datos_entrenamiento$Horas_Extra)
),
Satisfación_Laboral = factor(
2,
levels = levels(datos_entrenamiento$Satisfación_Laboral)
),
Equilibrio_Trabajo_Vida = factor(
2,
levels = levels(datos_entrenamiento$Equilibrio_Trabajo_Vida)
),
Porcentaje_aumento_salarial = 12,
Años_ultima_promoción = 4,
Años_acargo_con_mismo_jefe = 2
)
A continuación, ingresamos las características del nuevo empleado en el modelo para calcular su probabilidad estimada de rotación.
probabilidad_nuevo <- predict(
modelo_final,
newdata = nuevo_empleado,
type = "response"
)
round(probabilidad_nuevo * 100, 2)
## 1
## 41.68
## 1
## "Sí presenta riesgo de rotación"
La probabilidad estimada para este empleado fue de 41.68 %. Para convertir esta probabilidad en una respuesta de “Sí” o “No”, utilizamos el punto de corte seleccionado de 0.20. Como la probabilidad obtenida supera el 20 %, el modelo clasifica al empleado con posible riesgo de rotación.Esto no significa que el empleado necesariamente vaya a rotar, sino que, según sus características y el punto de corte utilizado, el modelo lo identifica como un caso que podría requerir mayor atención.
Para comparar los resultados, crearemos un segundo empleado hipotético con características muy diferentes a las del primero. En este caso, el empleado no trabaja horas extra, presenta mayores niveles de satisfacción laboral y equilibrio entre trabajo y vida personal, y lleva más años con el mismo jefe. Luego calcularemos su probabilidad de rotación y compararemos el resultado con el obtenido para el primer empleado.
segundo_empleado <- data.frame(
Horas_Extra = factor(
"No",
levels = levels(datos_entrenamiento$Horas_Extra)
),
Satisfación_Laboral = factor(
4,
levels = levels(datos_entrenamiento$Satisfación_Laboral)
),
Equilibrio_Trabajo_Vida = factor(
4,
levels = levels(datos_entrenamiento$Equilibrio_Trabajo_Vida)
),
Porcentaje_aumento_salarial = 15,
Años_ultima_promoción = 1,
Años_acargo_con_mismo_jefe = 8
)
## 1
## 2.09
## 1
## "No presenta riesgo de rotación"
El segundo empleado obtuvo una probabilidad estimada de rotación de 2.09 %. Como este valor es menor que el punto de corte de 0.20, el modelo lo clasifica sin riesgo de rotación
| Empleado | Horas_extra | Satisfaccion_laboral | Equilibrio_trabajo_vida | Aumento_salarial | Años_ultima_promocion | Años_mismo_jefe | Probabilidad_rotacion | Clasificacion |
|---|---|---|---|---|---|---|---|---|
| Empleado 1 | Sí | 2 | 2 | 12 % | 4 | 2 | 41.68 % | Sí presenta riesgo de rotación |
| Empleado 2 | No | 4 | 4 | 15 % | 1 | 8 | 2.09 % | No presenta riesgo de rotación |
Al compararlo con el primer empleado, que obtuvo una probabilidad de 41.68 %, se observa una diferencia bastante grande. Esto es coherente con las características de ambos perfiles: el segundo empleado no trabaja horas extra, tiene mayor satisfacción laboral, un mejor equilibrio entre trabajo y vida personal y lleva más tiempo con el mismo jefe. Estas características están relacionadas con una menor rotación según los resultados del modelo.
Las horas extra, la satisfacción laboral, el equilibrio trabajo-vida y los años con el mismo jefe están relacionados significativamente con la rotación.
Las horas extra fueron uno de los factores más importantes. Quienes las trabajan presentan 3.96 veces los odds de rotación frente a quienes no las trabajan.
Una mayor satisfacción laboral, un mejor equilibrio trabajo-vida y más tiempo con el mismo jefe se relacionan con una menor rotación.
El aumento salarial y los años desde la última promoción no fueron significativos en el modelo.
El punto de corte de 0.20 permitió detectar el 62.86 % de los empleados que rotaron y el 80 % de quienes no rotaron.
El AUC de 0.7765 indica que el modelo tiene una capacidad aceptable para diferenciar entre empleados con y sin rotación.
El modelo puede servir como una alerta para detectar posibles casos de riesgo, pero no debe ser la única herramienta para tomar decisiones.
Revisar la carga de trabajo y evitar que las horas extra sean frecuentes.
Realizar encuestas cortas para conocer la satisfacción de los empleados.
Promover horarios flexibles y un mejor equilibrio entre el trabajo y la vida personal.
Fortalecer la comunicación y la relación entre los empleados y sus jefes.
Revisar de forma preventiva los casos con una probabilidad de rotación igual o superior al 20 %, sin utilizar el resultado para sancionar o señalar empleados.
Actualizar el modelo con nuevos datos para comprobar que su desempeño se mantenga.