En el dinámico entorno empresarial actual, la retención del talento se ha convertido en una prioridad estratégica para las organizaciones. La capacidad de comprender y prever los factores que influyen en la rotación de empleados se ha vuelto crucial para mantener equipos estables y productivos. En este contexto, la utilización de técnicas analíticas avanzadas, como la regresión logística, emerge como una herramienta poderosa para identificar patrones y tendencias en los datos de recursos humanos.
La presente investigación se enfoca en el estudio de los determinantes que inciden en la decisión de los empleados de cambiar de cargo dentro de una organización. Para ello, se recurre a datos históricos detallados sobre el empleo de los trabajadores, los cuales abarcan una variedad de variables relevantes, como la antigüedad en el cargo actual, el nivel de satisfacción laboral, el salario percibido, la edad y otros factores pertinentes. El objetivo principal es desarrollar un modelo de regresión logística que permita estimar la probabilidad de que un empleado cambie de puesto en el próximo período, identificando así los factores que ejercen una mayor influencia en estos movimientos.
El presente trabajo tiene como objetivo principal desarrollar un modelo de regresión logística para predecir la probabilidad de rotación de empleados en una organización, con base en datos históricos de recursos humanos. Además, se plantean los siguientes objetivos específicos:
Identificar y seleccionar las variables relevantes que influyen en la decisión de los empleados de cambiar de cargo dentro de la organización.
Estimar los coeficientes del modelo de regresión logística para cada variable seleccionada, con el fin de determinar su contribución a la probabilidad de rotación de empleados.
Proporcionar recomendaciones prácticas a la gerencia sobre cómo utilizar los resultados del modelo para tomar medidas proactivas para retener al talento clave, mejorar la gestión de recursos humanos y promover un ambiente laboral más estable y satisfactorio.
Librerías
library(paqueteMODELOS)
library(dplyr)
library(knitr)
library(rmarkdown)
library(kableExtra)
knitr::opts_chunk$set(echo = TRUE)
library(psych)
library(dplyr)
library(ggplot2)
library(table1)
require(table1)
library(tidyverse)
library(DescTools)
library(corrplot)
library(plotly)
library(car)
library(lmtest)
library(mice)
library(naniar)
library(DescTools)
library(VIM)
library(glmnet)
library(pROC)
Importación de la base de datos
Ahora se procederá a importar los datos para el modelo, que se encuentran en un repositorio de GitHub. Además, se presentará una descripción estructurada de la base de datos que incluye información sobre las clases de cada variable, así como las primeras observaciones de cada una. Este análisis proporcionará una visión general del conjunto de datos.
data("rotacion")
glimpse(rotacion)
## Rows: 1,470
## Columns: 24
## $ Rotación <chr> "Si", "No", "Si", "No", "No", "No", "No", …
## $ Edad <dbl> 41, 49, 37, 33, 27, 32, 59, 30, 38, 36, 35…
## $ `Viaje de Negocios` <chr> "Raramente", "Frecuentemente", "Raramente"…
## $ Departamento <chr> "Ventas", "IyD", "IyD", "IyD", "IyD", "IyD…
## $ Distancia_Casa <dbl> 1, 8, 2, 3, 2, 2, 3, 24, 23, 27, 16, 15, 2…
## $ Educación <dbl> 2, 1, 2, 4, 1, 2, 3, 1, 3, 3, 3, 2, 1, 2, …
## $ Campo_Educación <chr> "Ciencias", "Ciencias", "Otra", "Ciencias"…
## $ Satisfacción_Ambiental <dbl> 2, 3, 4, 4, 1, 4, 3, 4, 4, 3, 1, 4, 1, 2, …
## $ Genero <chr> "F", "M", "M", "F", "M", "M", "F", "M", "M…
## $ Cargo <chr> "Ejecutivo_Ventas", "Investigador_Cientifi…
## $ Satisfación_Laboral <dbl> 4, 2, 3, 3, 2, 4, 1, 3, 3, 3, 2, 3, 3, 4, …
## $ Estado_Civil <chr> "Soltero", "Casado", "Soltero", "Casado", …
## $ Ingreso_Mensual <dbl> 5993, 5130, 2090, 2909, 3468, 3068, 2670, …
## $ Trabajos_Anteriores <dbl> 8, 1, 6, 1, 9, 0, 4, 1, 0, 6, 0, 0, 1, 0, …
## $ Horas_Extra <chr> "Si", "No", "Si", "Si", "No", "No", "Si", …
## $ Porcentaje_aumento_salarial <dbl> 11, 23, 15, 11, 12, 13, 20, 22, 21, 13, 13…
## $ Rendimiento_Laboral <dbl> 3, 4, 3, 3, 3, 3, 4, 4, 4, 3, 3, 3, 3, 3, …
## $ Años_Experiencia <dbl> 8, 10, 7, 8, 6, 8, 12, 1, 10, 17, 6, 10, 5…
## $ Capacitaciones <dbl> 0, 3, 3, 3, 3, 2, 3, 2, 2, 3, 5, 3, 1, 2, …
## $ Equilibrio_Trabajo_Vida <dbl> 1, 3, 3, 3, 3, 2, 2, 3, 3, 2, 3, 3, 2, 3, …
## $ Antigüedad <dbl> 6, 10, 0, 8, 2, 7, 1, 1, 9, 7, 5, 9, 5, 2,…
## $ Antigüedad_Cargo <dbl> 4, 7, 0, 7, 2, 7, 0, 0, 7, 7, 4, 5, 2, 2, …
## $ Años_ultima_promoción <dbl> 0, 1, 0, 3, 2, 3, 0, 0, 1, 7, 0, 0, 4, 1, …
## $ Años_acargo_con_mismo_jefe <dbl> 5, 7, 0, 0, 2, 6, 0, 0, 8, 7, 3, 8, 3, 2, …
Limpieza de la base de datos
La base de datos cuenta con 1,470 registros y 24 variables, para validar estos datos se deben seguir ciertos pasos.
1. Llevar la base de datos a un data frame, tomando como tamaño de la muestra las 1,470 observaciones, para así analizar todo el conjunto.
rotacion_df <- sample_n(rotacion, 1470)
rotacion_df <- rotacion_df %>%
rename(Viaje_de_Negocios = `Viaje de Negocios`)
2. Visualizar datos faltantes
datosNA <- colSums(is.na(rotacion_df))
kable(datosNA, format = "html", table.attr = 'class = "table table-striped table-bordered"') %>% kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)
| x | |
|---|---|
| Rotación | 0 |
| Edad | 0 |
| Viaje_de_Negocios | 0 |
| Departamento | 0 |
| Distancia_Casa | 0 |
| Educación | 0 |
| Campo_Educación | 0 |
| Satisfacción_Ambiental | 0 |
| Genero | 0 |
| Cargo | 0 |
| Satisfación_Laboral | 0 |
| Estado_Civil | 0 |
| Ingreso_Mensual | 0 |
| Trabajos_Anteriores | 0 |
| Horas_Extra | 0 |
| Porcentaje_aumento_salarial | 0 |
| Rendimiento_Laboral | 0 |
| Años_Experiencia | 0 |
| Capacitaciones | 0 |
| Equilibrio_Trabajo_Vida | 0 |
| Antigüedad | 0 |
| Antigüedad_Cargo | 0 |
| Años_ultima_promoción | 0 |
| Años_acargo_con_mismo_jefe | 0 |
Con esta tabla confirmamos que no hay ningún dato faltanta en nuestra base de datos y que podemos proceder con los análisis requeridos.
La gerencia de la compañía ha propuesto una serie de pasos para realizar el análisis de la rotación de personal.
A manera de hipótesis, previo al análisis detallado, vamos a seleccionar 3 variables categóricas y 3 variables cuantitativas que se consideran relacionadas con la rotación de personal.
Variables categóricas
Viaje de negocios: Esta variable puede influir en la rotación de personal debido al estrés adicional, a la disponibilidad que se debe tener para realizar los viajes, el cambio constante de locación y a la falta de equilibrio entre el trabajo y la vida personal que pueden experimentar los empleados que viajan frecuentemente.
Estado civil: Este aspecto es importante al considerar la rotación de empleados porque puede afectar la estabilidad personal y financiera de los trabajadores. Las personas con compromisos familiares en contraste con las personas solteras pueden tener menos probabilidades de cambiar de trabajo debido a sus responsabilidades y beneficios laborales asociados, como seguros médicos para cónyuges. Además, el apoyo emocional de la pareja puede influir en la satisfacción laboral y en la decisión de quedarse en el empleo actual.
Horas extra: Las horas extras pueden indicar una carga de trabajo excesiva o problemas de gestión del tiempo, lo que podría contribuir al agotamiento y la insatisfacción laboral. Los empleados que trabajan constantemente horas extras pueden tener una mayor probabilidad de buscar oportunidades laborales que ofrezcan un mejor equilibrio entre trabajo y vida personal.
Variables cuantitativas
Edad: esta variable puede incidir en la rotación laboral debido a las diferencias en las expectativas laborales, las prioridades personales, la estabilidad financiera y las experiencias de discriminación por edad. La hipótesis es que los empleados más jóvenes podrían ser más propensos a rotar en busca de nuevas oportunidades, mientras que los empleados más mayores podrían tener una mayor estabilidad laboral.
Ingreso mensual: el salario es un factor importante que puede influir en la rotación laboral al afectar la motivación, estabilidad financiera, percepción de valor y competitividad en el mercado laboral. Ofrecer salarios justos y competitivos es fundamental para retener a los empleados y mantener la estabilidad en la fuerza laboral de una organización.
Equilibrio trabajo-vida: el desequilibrio entre el trabajo y la vida personal puede ser causante de alta rotación porque afecta negativamente el bienestar, la salud mental y la calidad de vida de los empleados, su productividad y rendimiento laboral, su lealtad y compromiso hacia la organización, y su atracción y retención en el mercado laboral. Lo que les puede llevar a buscar otras oportunidades laborales que les permitan recuperar el equilibrio perdido.
El análisis univariado es una técnica estadística que se centra en examinar una sola variable a la vez. Su objetivo principal es describir y comprender la distribución y las características de una variable de interés sin considerar la relación con otras variables.
Para realizar un análisis univariado es importante considerar tanto las variables cuantitativas como las cualitativas por separado.
Variables cualitativas
Vamos a observar el comportamiento de las 8 variables cualitativas siguiendo estos pasos:
#Data frame con las variables categóricas
df_cualitativas <- rotacion_df %>%
select_if(is.character) # Filtrar las variables tipo character
head(df_cualitativas)
## # A tibble: 6 × 8
## Rotación Viaje_de_Negocios Departamento Campo_Educación Genero Cargo
## <chr> <chr> <chr> <chr> <chr> <chr>
## 1 No Raramente IyD Salud M Investigador_C…
## 2 No Frecuentemente IyD Ciencias F Tecnico_Labora…
## 3 No Raramente IyD Ciencias F Tecnico_Labora…
## 4 Si Frecuentemente IyD Ciencias F Investigador_C…
## 5 Si Raramente IyD Ciencias F Investigador_C…
## 6 No Raramente IyD Salud M Investigador_C…
## # ℹ 2 more variables: Estado_Civil <chr>, Horas_Extra <chr>
# Calcular frecuencias y porcentajes para cada variable cualitativa
frecuencias <- function(data) {
freq <- table(data)
percent <- prop.table(freq) * 100
result <- data.frame(Frecuencia = freq, Porcentaje = percent)
return(result)
}
# Aplicar la función a cada variable cualitativa
for (col in names(df_cualitativas)) {
cat("Variable:", col, "\n")
print(frecuencias(df_cualitativas[[col]]))
cat("\n")
}
## Variable: Rotación
## Frecuencia.data Frecuencia.Freq Porcentaje.data Porcentaje.Freq
## 1 No 1233 No 83.87755
## 2 Si 237 Si 16.12245
##
## Variable: Viaje_de_Negocios
## Frecuencia.data Frecuencia.Freq Porcentaje.data Porcentaje.Freq
## 1 Frecuentemente 277 Frecuentemente 18.84354
## 2 No_Viaja 150 No_Viaja 10.20408
## 3 Raramente 1043 Raramente 70.95238
##
## Variable: Departamento
## Frecuencia.data Frecuencia.Freq Porcentaje.data Porcentaje.Freq
## 1 IyD 961 IyD 65.374150
## 2 RH 63 RH 4.285714
## 3 Ventas 446 Ventas 30.340136
##
## Variable: Campo_Educación
## Frecuencia.data Frecuencia.Freq Porcentaje.data Porcentaje.Freq
## 1 Ciencias 606 Ciencias 41.224490
## 2 Humanidades 27 Humanidades 1.836735
## 3 Mercadeo 159 Mercadeo 10.816327
## 4 Otra 82 Otra 5.578231
## 5 Salud 464 Salud 31.564626
## 6 Tecnicos 132 Tecnicos 8.979592
##
## Variable: Genero
## Frecuencia.data Frecuencia.Freq Porcentaje.data Porcentaje.Freq
## 1 F 588 F 40
## 2 M 882 M 60
##
## Variable: Cargo
## Frecuencia.data Frecuencia.Freq Porcentaje.data
## 1 Director_Investigación 80 Director_Investigación
## 2 Director_Manofactura 145 Director_Manofactura
## 3 Ejecutivo_Ventas 326 Ejecutivo_Ventas
## 4 Gerente 102 Gerente
## 5 Investigador_Cientifico 292 Investigador_Cientifico
## 6 Recursos_Humanos 52 Recursos_Humanos
## 7 Representante_Salud 131 Representante_Salud
## 8 Representante_Ventas 83 Representante_Ventas
## 9 Tecnico_Laboratorio 259 Tecnico_Laboratorio
## Porcentaje.Freq
## 1 5.442177
## 2 9.863946
## 3 22.176871
## 4 6.938776
## 5 19.863946
## 6 3.537415
## 7 8.911565
## 8 5.646259
## 9 17.619048
##
## Variable: Estado_Civil
## Frecuencia.data Frecuencia.Freq Porcentaje.data Porcentaje.Freq
## 1 Casado 673 Casado 45.78231
## 2 Divorciado 327 Divorciado 22.24490
## 3 Soltero 470 Soltero 31.97279
##
## Variable: Horas_Extra
## Frecuencia.data Frecuencia.Freq Porcentaje.data Porcentaje.Freq
## 1 No 1054 No 71.70068
## 2 Si 416 Si 28.29932
# Función para crear gráfico circular
piechart_categorical_with_labels <- function(data, var_name) {
freq <- table(data)
df <- data.frame(Categoria = names(freq), Frecuencia = as.numeric(freq))
total <- sum(df$Frecuencia)
df$Porcentaje <- df$Frecuencia / total * 100
pie_chart <- ggplot(df, aes(x = "", y = Frecuencia, fill = Categoria)) +
geom_bar(stat = "identity") +
geom_text(aes(label = paste0(Frecuencia, " (", round(Porcentaje), "%)")),
position = position_stack(vjust = 0.5)) +
coord_polar("y", start = 0) +
labs(title = paste("Gráfico Circular para", var_name),
fill = "Categoría", y = "Frecuencia")
return(pie_chart)
}
# Aplicar la función a cada variable cualitativa
for (col in names(df_cualitativas)) {
print(piechart_categorical_with_labels(df_cualitativas[[col]], col))
}
La mayoría de los empleados (83.88%) no han rotado, mientras que el 16.12% han rotado. Esto sugiere que la tasa de rotación en la empresa es relativamente baja, lo cual podría ser positivo en términos de estabilidad laboral.
La mayoría de los empleados (70.95%) viajan raramente por negocios, seguido por aquellos que viajan frecuentemente (18.84%). Esto indica que la mayoría de los empleados no están constantemente expuestos a viajes de negocios, lo que podría impactar en su satisfacción laboral y balance trabajo-vida.
El departamento más común entre los empleados es IyD (Investigación y Desarrollo), con el 65.37% de los empleados pertenecientes a este departamento. Esto sugiere que la empresa podría tener un enfoque significativo en la innovación y el desarrollo de productos.
La mayoría de los empleados (41.22%) tienen formación en ciencias, seguido por salud (31.56%). Esto sugiere que la empresa puede estar orientada hacia industrias que requieren una sólida formación científica y médica.
Hay una distribución casi equitativa entre géneros, con un ligero predominio de empleados masculinos (60%) sobre los femeninos (40%). Esto podría indicar una relativa igualdad de género en la empresa, aunque es importante seguir monitoreando cualquier disparidad potencial.
La distribución de cargos es variada, con los cargos de Ejecutivo de Ventas (22.18%) e Investigador Científico (19.86%) siendo los más comunes. Esto sugiere una estructura organizativa diversa con un enfoque tanto en el desarrollo de productos como en las ventas.
La mayoría de los empleados están casados (45.78%), seguidos por solteros (31.97%) y divorciados (22.24%). Esto podría tener implicaciones en las políticas de recursos humanos, especialmente en beneficios familiares y programas de conciliación laboral.
La mayoría de los empleados (71.70%) no trabajan horas extra, mientras que el 28.30% sí lo hacen. Esto puede indicar diferentes niveles de carga laboral y posiblemente influir en la satisfacción y el agotamiento de los empleados.
Variables cuantitativas
Para hacer el análisis univariado de las variables cuantitativas, haremos lo siguiente:
#Data frame con las variables categóricas
df_cuantitativas <- rotacion_df[, sapply(rotacion_df, is.numeric)]
head(df_cuantitativas)
## # A tibble: 6 × 16
## Edad Distancia_Casa Educación Satisfacción_Ambiental Satisfación_Laboral
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 32 2 3 4 2
## 2 43 10 4 3 3
## 3 42 3 3 3 4
## 4 35 25 4 4 2
## 5 56 14 4 2 2
## 6 25 2 1 1 1
## # ℹ 11 more variables: Ingreso_Mensual <dbl>, Trabajos_Anteriores <dbl>,
## # 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>
summary_stats <- function(data) {
summary_data <- summary(data)
mean_val <- mean(data, na.rm = TRUE)
median_val <- median(data, na.rm = TRUE)
sd_val <- sd(data, na.rm = TRUE)
quantiles <- quantile(data, na.rm = TRUE)
min_val <- min(data, na.rm = TRUE)
max_val <- max(data, na.rm = TRUE)
result <- data.frame(Media = mean_val,
Mediana = median_val,
Desviación_Estándar = sd_val,
Q1 = quantiles[2],
Q2 = quantiles[3],
Q3 = quantiles[4],
Mínimo = min_val,
Máximo = max_val)
return(result)
}
# Aplicar la función a cada variable cuantitativa
summary_list <- lapply(df_cuantitativas, summary_stats)
# Convertir la lista de data frames en una tabla Markdown formateada
for (i in seq_along(summary_list)) {
cat("###", names(summary_list)[i], "\n") # Nombre de la variable
print(knitr::kable(summary_list[[i]], format = "markdown", align = "c"), type = "text")
cat("\n\n")
}
## ### Edad
##
##
## | | Media | Mediana | Desviación_Estándar | Q1 | Q2 | Q3 | Mínimo | Máximo |
## |:---|:--------:|:-------:|:-------------------:|:--:|:--:|:--:|:------:|:------:|
## |25% | 36.92449 | 36 | 9.135938 | 30 | 36 | 43 | 18 | 60 |
##
##
## ### Distancia_Casa
##
##
## | | Media | Mediana | Desviación_Estándar | Q1 | Q2 | Q3 | Mínimo | Máximo |
## |:---|:--------:|:-------:|:-------------------:|:--:|:--:|:--:|:------:|:------:|
## |25% | 9.192517 | 7 | 8.106864 | 2 | 7 | 14 | 1 | 29 |
##
##
## ### Educación
##
##
## | | Media | Mediana | Desviación_Estándar | Q1 | Q2 | Q3 | Mínimo | Máximo |
## |:---|:--------:|:-------:|:-------------------:|:--:|:--:|:--:|:------:|:------:|
## |25% | 2.912925 | 3 | 1.024165 | 2 | 3 | 4 | 1 | 5 |
##
##
## ### Satisfacción_Ambiental
##
##
## | | Media | Mediana | Desviación_Estándar | Q1 | Q2 | Q3 | Mínimo | Máximo |
## |:---|:--------:|:-------:|:-------------------:|:--:|:--:|:--:|:------:|:------:|
## |25% | 2.721769 | 3 | 1.093082 | 2 | 3 | 4 | 1 | 4 |
##
##
## ### Satisfación_Laboral
##
##
## | | Media | Mediana | Desviación_Estándar | Q1 | Q2 | Q3 | Mínimo | Máximo |
## |:---|:--------:|:-------:|:-------------------:|:--:|:--:|:--:|:------:|:------:|
## |25% | 2.728571 | 3 | 1.102846 | 2 | 3 | 4 | 1 | 4 |
##
##
## ### Ingreso_Mensual
##
##
## | | Media | Mediana | Desviación_Estándar | Q1 | Q2 | Q3 | Mínimo | Máximo |
## |:---|:--------:|:-------:|:-------------------:|:----:|:----:|:----:|:------:|:------:|
## |25% | 6502.931 | 4919 | 4707.957 | 2911 | 4919 | 8379 | 1009 | 19999 |
##
##
## ### Trabajos_Anteriores
##
##
## | | Media | Mediana | Desviación_Estándar | Q1 | Q2 | Q3 | Mínimo | Máximo |
## |:---|:--------:|:-------:|:-------------------:|:--:|:--:|:--:|:------:|:------:|
## |25% | 2.693197 | 2 | 2.498009 | 1 | 2 | 4 | 0 | 9 |
##
##
## ### Porcentaje_aumento_salarial
##
##
## | | Media | Mediana | Desviación_Estándar | Q1 | Q2 | Q3 | Mínimo | Máximo |
## |:---|:--------:|:-------:|:-------------------:|:--:|:--:|:--:|:------:|:------:|
## |25% | 15.20952 | 14 | 3.659938 | 12 | 14 | 18 | 11 | 25 |
##
##
## ### Rendimiento_Laboral
##
##
## | | Media | Mediana | Desviación_Estándar | Q1 | Q2 | Q3 | Mínimo | Máximo |
## |:---|:--------:|:-------:|:-------------------:|:--:|:--:|:--:|:------:|:------:|
## |25% | 3.153742 | 3 | 0.3608235 | 3 | 3 | 3 | 3 | 4 |
##
##
## ### Años_Experiencia
##
##
## | | Media | Mediana | Desviación_Estándar | Q1 | Q2 | Q3 | Mínimo | Máximo |
## |:---|:--------:|:-------:|:-------------------:|:--:|:--:|:--:|:------:|:------:|
## |25% | 11.27959 | 10 | 7.780782 | 6 | 10 | 15 | 0 | 40 |
##
##
## ### Capacitaciones
##
##
## | | Media | Mediana | Desviación_Estándar | Q1 | Q2 | Q3 | Mínimo | Máximo |
## |:---|:-------:|:-------:|:-------------------:|:--:|:--:|:--:|:------:|:------:|
## |25% | 2.79932 | 3 | 1.289271 | 2 | 3 | 3 | 0 | 6 |
##
##
## ### Equilibrio_Trabajo_Vida
##
##
## | | Media | Mediana | Desviación_Estándar | Q1 | Q2 | Q3 | Mínimo | Máximo |
## |:---|:--------:|:-------:|:-------------------:|:--:|:--:|:--:|:------:|:------:|
## |25% | 2.761224 | 3 | 0.7064758 | 2 | 3 | 3 | 1 | 4 |
##
##
## ### Antigüedad
##
##
## | | Media | Mediana | Desviación_Estándar | Q1 | Q2 | Q3 | Mínimo | Máximo |
## |:---|:--------:|:-------:|:-------------------:|:--:|:--:|:--:|:------:|:------:|
## |25% | 7.008163 | 5 | 6.126525 | 3 | 5 | 9 | 0 | 40 |
##
##
## ### Antigüedad_Cargo
##
##
## | | Media | Mediana | Desviación_Estándar | Q1 | Q2 | Q3 | Mínimo | Máximo |
## |:---|:--------:|:-------:|:-------------------:|:--:|:--:|:--:|:------:|:------:|
## |25% | 4.229252 | 3 | 3.623137 | 2 | 3 | 7 | 0 | 18 |
##
##
## ### Años_ultima_promoción
##
##
## | | Media | Mediana | Desviación_Estándar | Q1 | Q2 | Q3 | Mínimo | Máximo |
## |:---|:--------:|:-------:|:-------------------:|:--:|:--:|:--:|:------:|:------:|
## |25% | 2.187755 | 1 | 3.22243 | 0 | 1 | 3 | 0 | 15 |
##
##
## ### Años_acargo_con_mismo_jefe
##
##
## | | Media | Mediana | Desviación_Estándar | Q1 | Q2 | Q3 | Mínimo | Máximo |
## |:---|:--------:|:-------:|:-------------------:|:--:|:--:|:--:|:------:|:------:|
## |25% | 4.123129 | 3 | 3.568136 | 2 | 3 | 7 | 0 | 17 |
# Histograma para Edad
ggplot(data = rotacion_df, aes(x = Edad)) +
geom_histogram(binwidth = 5, fill = "skyblue", color = "black") +
labs(title = "Histograma de Edad", x = "Edad", y = "Frecuencia")
La edad promedio de los empleados es de aproximadamente 36.92 años, con una mediana de 36 años. La desviación estándar indica que la edad de los empleados tiende a variar alrededor de 9.14 años. El rango intercuartílico (Q1-Q3) muestra que el 50% de los empleados tienen entre 30 y 43 años, mientras que el rango de edad va desde los 18 hasta los 60 años. Esto sugiere que la fuerza laboral tiende a ser relativamente joven, pero también incluye empleados más experimentados, lo que podría influir en la estabilidad laboral y la rotación.
# Gráfico de densidad para Distancia_Casa
ggplot(data = rotacion_df, aes(x = Distancia_Casa)) +
geom_density(fill = "lightgreen", color = "black") +
labs(title = "Gráfico de Densidad de Distancia_Casa", x = "Distancia_Casa", y = "Densidad")
En promedio, los empleados tienen una distancia de casa al trabajo de aproximadamente 9.19 kilómetros, con una mediana de 7 kilómetros. La desviación estándar indica que esta distancia varía en promedio alrededor de 8.11 kilómetros. El rango intercuartílico muestra que el 50% de los empleados tienen una distancia entre 2 y 14 kilómetros, y el rango de distancia va desde 1 hasta 29 kilómetros. Como se observa en el gráfico de densidad, la distancia a la que se encuentran las casas de los empleados tienden a inclinarse a menores distancias, el pico se encuentra entre los 0 y 5 km.
# Gráfico de barras para Educación
ggplot(data = rotacion_df, aes(x = Educación)) +
geom_bar(fill = "salmon", color = "black") +
labs(title = "Gráfico de Barras de Educación", x = "Educación", y = "Frecuencia")
La educación promedio de los empleados es de aproximadamente 2.91, con una mediana de 3. La desviación estándar sugiere que la educación varía en alrededor de 1.02 unidades. El rango intercuartílico muestra que el 50% de los empleados tienen entre 2 y 4 años de educación, y el rango educativo va desde 1 hasta 5 años.
# Diagrama de caja para Satisfacción_Ambiental
ggplot(data = rotacion_df, aes(x = "", y = Satisfacción_Ambiental)) +
geom_boxplot(fill = "orange", color = "black") +
labs(title = "Diagrama de Caja de Satisfacción_Ambiental", x = "", y = "Satisfacción_Ambiental")
# Gráfico de densidad para Satisfación_Laboral
ggplot(data = rotacion_df, aes(x = Satisfación_Laboral)) +
geom_density(fill = "purple", color = "black") +
labs(title = "Gráfico de Densidad de Satisfación_Laboral", x = "Satisfación_Laboral", y = "Densidad")
Tanto la satisfacción ambiental como la satisfacción laboral tienen medias similares, alrededor de 2.72, con medianas de 3. Las desviaciones estándar indican una variabilidad en las respuestas, con valores en promedio alrededor de 1.09 para la satisfacción ambiental y 1.10 para la satisfacción laboral. Los rangos intercuartílicos muestran que el 50% de los empleados tienen una satisfacción entre 2 y 4 para ambos aspectos, con rangos desde 1 hasta 4. Esto sugiere que hay variabilidad en los niveles de satisfacción laboral y ambiental entre los empleados, lo que podría afectar su intención de rotar.
# Diagrama de caja para Ingreso_Mensual
ggplot(data = rotacion_df, aes(x = "", y = Ingreso_Mensual)) +
geom_boxplot(fill = "yellow", color = "black") +
labs(title = "Diagrama de Caja de Ingreso_Mensual", x = "", y = "Ingreso_Mensual")
El ingreso mensual promedio de los empleados es de aproximadamente $6,502.93, con una mediana de $4,919. La desviación estándar sugiere una variabilidad significativa en los ingresos, con un rango intercuartílico que va desde $2,911 hasta $8,379. El rango de ingresos mensuales oscila entre $1,009 y $19,999.
En el boxplot se puede ver que hay una alta variabilidad en los salarios, donde la mayoría de empleados ganan menos de $ 10,000, la distribución de ingresos está sesgada hacia la izquierda, con una proporción significativa de empleados ganando menos que la media. Sin embargo hay varios empleados que superan este valor, los cuales se comportan como “outliers”, pueden ser managers o cargos de altos mandos. Esto puede tener implicaciones importantes en términos de satisfacción laboral, motivación y posiblemente en la rotación de empleados, especialmente si los empleados perciben inequidades salariales o insuficiencia en relación con su experiencia y habilidades.
# Gráfico de barras para Trabajos_Anteriores
ggplot(data = rotacion_df, aes(x = Trabajos_Anteriores)) +
geom_bar(fill = "cyan", color = "black") +
labs(title = "Gráfico de Barras de Trabajos_Anteriores", x = "Trabajos_Anteriores", y = "Frecuencia")
En promedio, los empleados han tenido alrededor de 2.69 trabajos anteriores, con una mediana de 2. La desviación estándar indica una variabilidad en la cantidad de trabajos anteriores de aproximadamente 2.50. El rango intercuartílico muestra que el 50% de los empleados han tenido entre 1 y 4 trabajos anteriores, con un rango desde 0 hasta 9 trabajos.
# Histograma para Porcentaje_aumento_salarial
ggplot(data = rotacion_df, aes(x = Porcentaje_aumento_salarial)) +
geom_histogram(binwidth = 5, fill = "pink", color = "black") +
labs(title = "Histograma de Porcentaje_aumento_salarial", x = "Porcentaje_aumento_salarial", y = "Frecuencia")
El porcentaje de aumento salarial promedio es de aproximadamente 15.21%, con una mediana de 14%. La desviación estándar sugiere que el aumento salarial varía en promedio alrededor de 3.66%. El rango intercuartílico indica que el 50% de los empleados han experimentado un aumento salarial entre 12% y 18%, con un rango desde 11% hasta 25%.
# Gráfico de densidad para Rendimiento_Laboral
ggplot(data = rotacion_df, aes(x = Rendimiento_Laboral)) +
geom_density(fill = "lightblue", color = "black") +
labs(title = "Gráfico de Densidad de Rendimiento_Laboral", x = "Rendimiento_Laboral", y = "Densidad")
El rendimiento laboral promedio es de aproximadamente 3.15, con una mediana de 3. La desviación estándar sugiere una consistencia en el rendimiento, con valores en promedio alrededor de 0.36. El rango intercuartílico indica que el 50% de los empleados tienen un rendimiento entre 3 y 4, con un rango desde 3 hasta 4.
# Gráfico de densidad para Años_Experiencia
ggplot(data = rotacion_df, aes(x = Años_Experiencia)) +
geom_density(fill = "green", color = "black") +
labs(title = "Gráfico de Densidad de Años_Experiencia", x = "Años_Experiencia", y = "Densidad")
La experiencia laboral promedio de los empleados es de aproximadamente 11.28 años, con una mediana de 10 años. La desviación estándar indica que la experiencia laboral varía en promedio alrededor de 7.78 años. El rango intercuartílico muestra que el 50% de los empleados tienen una experiencia laboral entre 6 y 15 años, con un rango desde 0 hasta 40 años. La media de años de experiencia es aproximadamente 11 años, lo que indica que la mayoría de los empleados tienen una experiencia laboral considerable. Esta experiencia puede influir en su compromiso con la organización y su propensión a cambiar de empleo.
# Gráfico de barras para Capacitaciones
ggplot(data = rotacion_df, aes(x = Capacitaciones)) +
geom_bar(fill = "brown", color = "black") +
labs(title = "Gráfico de Barras de Capacitaciones", x = "Capacitaciones", y = "Frecuencia")
En promedio, los empleados han recibido alrededor de 2.80 capacitaciones, con una mediana de 3, lo que sugiere un nivel moderado de inversión en el desarrollo de habilidades. La desviación estándar indica una variabilidad en la cantidad de capacitaciones de aproximadamente 1.29. El rango intercuartílico muestra que el 50% de los empleados han recibido entre 2 y 3 capacitaciones, con un rango desde 0 hasta 6 capacitaciones. La variabilidad en estos números indica que algunas personas pueden haber recibido más capacitación que otras, lo que podría influir en su compromiso y retención.
# Gráfico de barras para Equilibrio_Trabajo_Vida
ggplot(data = rotacion_df, aes(x = Equilibrio_Trabajo_Vida)) +
geom_bar(fill = "gray", color = "black") +
labs(title = "Gráfico de Barras de Equilibrio_Trabajo_Vida", x = "Equilibrio_Trabajo_Vida", y = "Frecuencia")
El equilibrio entre el trabajo y la vida personal tiene una puntuación promedio de aproximadamente 2.76, con una mediana de 3. La desviación estándar sugiere una variabilidad en el equilibrio trabajo-vida de alrededor de 0.71. El rango intercuartílico muestra que el 50% de los empleados tienen un equilibrio entre 2 y 3, con un rango desde 1 hasta 4.
# Diagrama de caja para Antigüedad
ggplot(data = rotacion_df, aes(x = "", y = Antigüedad)) +
geom_boxplot(fill = "red", color = "black") +
labs(title = "Diagrama de Caja de Antigüedad", x = "", y = "Antigüedad")
La antigüedad promedio de los empleados es de aproximadamente 7.01 años, con una mediana de 5 años. La desviación estándar sugiere una variabilidad en la antigüedad laboral de alrededor de 6.13 años. El rango intercuartílico muestra que el 50% de los empleados tienen una antigüedad entre 3 y 9 años, con un rango desde 0 hasta 40 años.
# Diagrama de caja para Antigüedad_Cargo
ggplot(data = rotacion_df, aes(x = "", y = Antigüedad_Cargo)) +
geom_boxplot(fill = "magenta", color = "black") +
labs(title = "Diagrama de Caja de Antigüedad_Cargo", x = "", y = "Antigüedad_Cargo")
# Diagrama de caja para Años_ultima_promoción
ggplot(data = rotacion_df, aes(x = "", y = Años_ultima_promoción)) +
geom_boxplot(fill = "darkgreen", color = "black") +
labs(title = "Diagrama de Caja de Años_ultima_promoción", x = "", y = "Años_ultima_promoción")
# Gráfico de barras para Años_acargo_con_mismo_jefe
ggplot(data = rotacion_df, aes(x = Años_acargo_con_mismo_jefe)) +
geom_bar(fill = "blue", color = "black") +
labs(title = "Gráfico de Barras de Años_acargo_con_mismo_jefe", x = "Años_acargo_con_mismo_jefe", y = "Frecuencia")
La antigüedad en el cargo y los años desde la última promoción tienen valores similares, con medias de aproximadamente 4.23 y 2.19, respectivamente. Las medianas son 3 para ambos casos. Las desviaciones estándar sugieren una variabilidad en la antigüedad en el cargo y en los años desde la última promoción de aproximadamente 3.62 y 3.22 años, respectivamente. Los rangos intercuartílicos muestran que el 50% de los empleados tienen una antigüedad en el cargo y años desde la última promoción entre 2 y 7, y 0 y 3, respectivamente. Los rangos van desde 0 hasta 18 años para la antigüedad en el cargo, y desde 0 hasta 15 años para los años desde la última promoción.
La media de años desde la última promoción es de aproximadamente 2.19, con una mediana de 1 año. Esto sugiere que muchos empleados pueden sentirse estancados en sus carreras, lo que podría aumentar su propensión a buscar oportunidades de avance en otras organizaciones.
Ahora realizaremos un análisis bivariado, donde la variable respuesta será la rotación, y tendrá la siguiente codificación \(y = 1\) significa que sí hay rotación de personal y \(y = 0\) significa que no hay rotación.
El análisis bivariado con un modelo de regresión logística tiene varios propósitos:
En general, el análisis bivariado en el contexto de la rotación de personal nos ayuda a comprender mejor los factores que influyen en este fenómeno y a identificar áreas donde la organización puede intervenir para reducir la rotación y mejorar la retención del personal.
rotacion_df$Rotación <- ifelse(rotacion_df$Rotación == "Si", 1, 0)
v_predictorias <- names(rotacion_df)[!names(rotacion_df) %in% c("Rotación")]
modelo <- glm(Rotación ~ ., data = rotacion_df[, c(v_predictorias, "Rotación")], family = "binomial")
summary(modelo)
##
## Call:
## glm(formula = Rotación ~ ., family = "binomial", data = rotacion_df[,
## c(v_predictorias, "Rotación")])
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 2.613e-01 1.600e+00 0.163 0.870276
## Edad -3.655e-02 1.328e-02 -2.753 0.005899 **
## Viaje_de_NegociosNo_Viaja -1.763e+00 3.958e-01 -4.454 8.44e-06 ***
## Viaje_de_NegociosRaramente -8.215e-01 2.062e-01 -3.984 6.78e-05 ***
## DepartamentoRH -1.292e+01 3.780e+02 -0.034 0.972728
## DepartamentoVentas 1.231e-01 1.023e+00 0.120 0.904238
## Distancia_Casa 4.250e-02 1.046e-02 4.063 4.85e-05 ***
## Educación -1.149e-02 8.552e-02 -0.134 0.893169
## Campo_EducaciónHumanidades 8.342e-01 7.860e-01 1.061 0.288527
## Campo_EducaciónMercadeo 3.823e-01 3.178e-01 1.203 0.229009
## Campo_EducaciónOtra 5.979e-02 4.024e-01 0.149 0.881890
## Campo_EducaciónSalud -1.136e-01 2.121e-01 -0.536 0.592226
## Campo_EducaciónTecnicos 9.281e-01 2.970e-01 3.125 0.001779 **
## Satisfacción_Ambiental -4.424e-01 8.119e-02 -5.449 5.05e-08 ***
## GeneroM 3.248e-01 1.795e-01 1.809 0.070386 .
## CargoDirector_Manofactura 1.269e+00 9.710e-01 1.307 0.191293
## CargoEjecutivo_Ventas 1.989e+00 1.390e+00 1.431 0.152359
## CargoGerente 1.247e+00 1.032e+00 1.208 0.227061
## CargoInvestigador_Cientifico 1.643e+00 1.021e+00 1.609 0.107544
## CargoRecursos_Humanos 1.519e+01 3.780e+02 0.040 0.967950
## CargoRepresentante_Salud 1.037e+00 9.640e-01 1.076 0.282059
## CargoRepresentante_Ventas 2.962e+00 1.482e+00 1.998 0.045682 *
## CargoTecnico_Laboratorio 2.587e+00 1.018e+00 2.541 0.011041 *
## Satisfación_Laboral -4.048e-01 7.925e-02 -5.109 3.24e-07 ***
## Estado_CivilDivorciado -3.973e-01 2.530e-01 -1.570 0.116313
## Estado_CivilSoltero 1.033e+00 1.941e-01 5.323 1.02e-07 ***
## Ingreso_Mensual -9.588e-07 5.854e-05 -0.016 0.986932
## Trabajos_Anteriores 1.756e-01 3.746e-02 4.688 2.76e-06 ***
## Horas_ExtraSi 1.872e+00 1.869e-01 10.014 < 2e-16 ***
## Porcentaje_aumento_salarial -2.302e-02 3.805e-02 -0.605 0.545193
## Rendimiento_Laboral 1.702e-01 3.889e-01 0.438 0.661621
## Años_Experiencia -5.408e-02 2.782e-02 -1.944 0.051874 .
## Capacitaciones -1.828e-01 7.125e-02 -2.566 0.010301 *
## Equilibrio_Trabajo_Vida -3.654e-01 1.207e-01 -3.027 0.002470 **
## Antigüedad 9.630e-02 3.750e-02 2.568 0.010220 *
## Antigüedad_Cargo -1.414e-01 4.386e-02 -3.224 0.001264 **
## Años_ultima_promoción 1.787e-01 4.112e-02 4.345 1.39e-05 ***
## Años_acargo_con_mismo_jefe -1.563e-01 4.599e-02 -3.399 0.000677 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1298.58 on 1469 degrees of freedom
## Residual deviance: 893.23 on 1432 degrees of freedom
## AIC: 969.23
##
## Number of Fisher Scoring iterations: 14
El resumen del modelo proporciona información sobre la relación entre las variables predictoras y la variable de respuesta “Rotación”. Aquí hay algunas conclusiones basadas en este:
Las variables significativas son aquellas con los valores-p más pequeños. Así, las 3 variables cuantitativas con mayor significancia para el modelo son:
Las 3 variables categóricas con mayor significancia para el modelo son:
De acuerdo con estos resultados podemos concluir lo siguiente respecto a la hipótesis planteada en el punto 4.1, donde se definieron las variables que se consideraban más importantes a la hora de evaluar la rotación del personal:
Vamos a realizar la estimación de un modelo de regresión logístico en el cual la variable respuesta es la rotación, donde \(y = 1\) significa que sí hay rotación de personal y \(y = 0\) significa que no hay rotación.Las covariables serán las elegidas en la hipótesis del punto 4.1 (Viaje de negocios, Estado civil, Horas extra, Edad, Ingreso mensual, Equilibrio trabajo-vida)
modelo1 <- glm(Rotación ~ Viaje_de_Negocios + Estado_Civil + Horas_Extra + Edad + Ingreso_Mensual + Equilibrio_Trabajo_Vida, data = rotacion_df, family = binomial)
summary(modelo1)
##
## Call:
## glm(formula = Rotación ~ Viaje_de_Negocios + Estado_Civil +
## Horas_Extra + Edad + Ingreso_Mensual + Equilibrio_Trabajo_Vida,
## family = binomial, data = rotacion_df)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 4.751e-01 4.868e-01 0.976 0.328986
## Viaje_de_NegociosNo_Viaja -1.289e+00 3.492e-01 -3.693 0.000222 ***
## Viaje_de_NegociosRaramente -6.318e-01 1.798e-01 -3.514 0.000442 ***
## Estado_CivilDivorciado -2.793e-01 2.292e-01 -1.219 0.222960
## Estado_CivilSoltero 8.371e-01 1.707e-01 4.903 9.43e-07 ***
## Horas_ExtraSi 1.455e+00 1.574e-01 9.241 < 2e-16 ***
## Edad -3.204e-02 1.015e-02 -3.155 0.001602 **
## Ingreso_Mensual -9.336e-05 2.496e-05 -3.740 0.000184 ***
## Equilibrio_Trabajo_Vida -2.716e-01 1.076e-01 -2.524 0.011591 *
## ---
## 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: 1091.6 on 1461 degrees of freedom
## AIC: 1109.6
##
## Number of Fisher Scoring iterations: 5
De este modelo podemos decir lo siguiente:
Intercepto: Este coeficiente representa la log-odds de rotación cuando todas las demás variables en el modelo son cero. En este caso, no es significativo (p = 0.329), lo que indica que no hay evidencia suficiente para afirmar que la log-odds de rotación es diferente de cero cuando todas las demás variables son cero. El valor del intercepto no contribuye de manera significativa a explicar la variabilidad en la variable de interés. Esto puede suceder cuando las variables predictoras son suficientes para explicar la variabilidad en la variable de interés por sí solas, sin la necesidad de un término de intercepción adicional.
Viajes de negocio (No Viaja): Los empleados que no viajan tienen log-odds de rotación más altos en comparación con los que viajan frecuentemente por negocios. Esto significa que hay una mayor probabilidad de que renuncien. Este efecto es muy significativo (p < 0.001), lo que indica que es una diferencia notable. Por cada unidad de disminución en la frecuencia de viajes de negocios, la probabilidad de rotación aumenta en 1.289 unidades
Viajes de negocio (Raramente Viaja): Similar al grupo anterior, aquellos que viajan raramente también tienen log-odds de rotación más altos que los viajeros frecuentes. Aunque el efecto no es tan fuerte como para los que no viajan (p = 0.000442), sigue siendo significativo. Esto sugiere que incluso viajar ocasionalmente puede influir en la decisión de un empleado de quedarse o irse. Por cada unidad de disminución en la frecuencia de viajes de negocios, la probabilidad de rotación aumenta en 0.6318 unidades
Esto dos resultados anteriores indican que los empleados que viajan con frecuencia por negocios tienen una menor probabilidad de renunciar en comparación con aquellos que no viajan o lo hacen raramente. Esto puede ser útil para la compañía, ya que sugiere que fomentar los viajes de negocios podría ayudar a retener a los empleados.
Estado civil (Soltero): Los empleados solteros tienen una probabilidad significativamente mayor de rotación en comparación con aquellos que tienen otro estado civil. Por cada cambio al estado civil soltero, la probabilidad de rotación aumenta en 0.8371 unidades (Estimate = 0.8371, p < 0.001).
Horas Extra: Los empleados que trabajan horas extra tienen una probabilidad significativamente mayor de rotación en comparación con aquellos que no lo hacen. Por cada unidad de aumento en la realización de horas extra, la probabilidad de rotación aumenta en 1.455 unidades (Estimate = 1.455, p < 2e-16).
Se encontró una asociación significativa entre la edad y la probabilidad de rotación. Por cada año adicional de edad de un empleado, la probabilidad de rotación disminuye en promedio en 0.03204 unidades (Estimate = -0.03204, p = 0.0016). Esto sugiere que los empleados más jóvenes tienden a tener una mayor probabilidad de rotación en comparación con los empleados más experimentados.
Se observó una asociación significativa entre el ingreso mensual y la probabilidad de rotación. Por cada aumento de un dólar en el ingreso mensual, la probabilidad de rotación disminuye en promedio en 0.00009336 unidades (Estimate = -0.00009336, p = 0.000184). Este hallazgo indica que los empleados con salarios más altos tienden a tener una menor probabilidad de rotación en comparación con aquellos con salarios más bajos.
Existe una asociación significativa entre el equilibrio trabajo-vida y la probabilidad de rotación. Por cada mejora de un punto en el equilibrio entre el trabajo y la vida personal, la probabilidad de rotación disminuye en promedio en 0.2716 unidades (Estimate = -0.2716, p = 0.0116). Esto sugiere que los empleados que perciben un mejor equilibrio entre su vida laboral y personal tienden a tener una menor probabilidad de rotación en comparación con aquellos que no lo perciben.
Viendo este modelo de regresión particularmente, sin considerar las demás variables, todas las 6 covariables son significativas y podrían predecir la rotación de personal.
Para evaluar el poder predictivo del modelo, podemos utilizar la curva ROC (Receiver Operating Characteristic) y el área bajo la curva (AUC). La curva ROC es una representación gráfica de la sensibilidad frente a la especificidad para diferentes umbrales de clasificación, mientras que el AUC proporciona una medida numérica del rendimiento del modelo.
# Obtener las probabilidades predichas por el modelo
probabilidades <- predict(modelo1, rotacion_df, type = "response")
# Calcular la curva ROC
roc_datos <- roc(rotacion_df$Rotación, probabilidades)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
# Graficar la curva ROC
plot(roc_datos, main = "Curva ROC", col = "cyan4", lwd = 2)
lines(x = c(0, 1), y = c(0, 1), col = "red", lty = 2)
2.El AUC proporciona una medida numérica del rendimiento del modelo. Es el área bajo la curva ROC y varía entre 0 y 1. Un AUC más cercano a 1 indica un mejor rendimiento del modelo en la clasificación de instancias positivas frente a negativas.
# Calcular el AUC
auc_datos <- auc(roc_datos)
cat("Área bajo la curva (AUC):", auc_datos, "\n")
## Área bajo la curva (AUC): 0.7676793
La curva ROC mostró un rendimiento consistente del modelo en la clasificación de las clases positivas y negativas a través de diferentes umbrales de probabilidad. El área bajo la curva (AUC) obtenida en la evaluación del modelo fue de 0.7676793. Este valor indica que el modelo tiene una capacidad predictiva moderadamente buena. Una AUC de 0.5 representa un rendimiento aleatorio, mientras que un valor cercano a 1.0 indica un rendimiento perfecto. Por lo tanto, el AUC obtenido sugiere que el modelo tiene una capacidad razonable para distinguir entre las clases positivas y negativas, lo que implica que puede ser útil en la predicción de la rotación del personal. Sin embargo, existe margen para mejorar su rendimiento.
En este punto, vamos a realizar una predicción de la probabilidad de rotación para un individuo hipotético y definiremos un umbral para decidir si se debe intervenir dicho empleado o no.
emp_hipotetico <- data.frame(
Viaje_de_Negocios = "No_Viaja",
Estado_Civil = "Soltero",
Horas_Extra = "Si",
Edad = 30,
Ingreso_Mensual = 2000,
Equilibrio_Trabajo_Vida = 1
)
prob_rotacion <- predict(modelo1, emp_hipotetico, type = "response")
umbral <- 0.3
if (prob_rotacion > umbral) {
cat("La probabilidad de que el empleado hipotético rote es alta (", round(prob_rotacion * 100, 2), "%). Se debe intervenir a este empleado.\n")
} else {
cat("La probabilidad de que el empleado hipotético rote es baja (", round(prob_rotacion * 100, 2), "%). No es necesario intervenir a este empleado en este momento.\n")
}
## La probabilidad de que el empleado hipotético rote es alta ( 51.44 %). Se debe intervenir a este empleado.
Para disminuir la rotación en la empresa, basándonos en las variables significativas identificadas en el análisis bivariado, podríamos considerar las siguientes estrategias:
Controlar las horas extras: Dado que el p-valor asociado con la variable “Horas Extra” es muy significativo (p < 2e-16), sugiere que los empleados que trabajan horas extras tienen mayores probabilidades de rotación. Para abordar esto, la empresa podría revisar y ajustar las cargas de trabajo para minimizar la necesidad de horas extras prolongadas.
Estado civil: Los empleados solteros tienen mayores probabilidades de rotación (p-valor = 1.02e-07). Implementar políticas que fomenten un equilibrio entre el trabajo y la vida personal podría ayudar a retener a estos empleados, como programas de flexibilidad laboral o beneficios familiares que no se limiten únicamente a cónyuges y a los hijos.
La antigüedad desde la última promoción está asociada significativamente con la rotación (p-valor = 1.39e-05). Ofrecer oportunidades de desarrollo profesional y promociones internas puede aumentar la retención de empleados al proporcionarles metas y trayectorias claras dentro de la empresa.
La distancia desde casa también está significativamente asociada con la rotación (p-valor = 4.85e-05). Ofrecer opciones de trabajo remoto o flexibilidad en los horarios de trabajo puede ayudar a mitigar este factor, permitiendo a los empleados reducir el tiempo y los costos de desplazamiento.
Una menor satisfacción laboral está relacionada con una mayor rotación (p-valor = 3.24e-07). Mejorar la cultura laboral, la comunicación interna y la retroalimentación continua puede contribuir a aumentar la satisfacción de los empleados y reducir la probabilidad de rotación.
Implementar estas estrategias podría ayudar a la empresa a retener a sus empleados clave y reducir los costos asociados con la rotación, al tiempo que fomenta un ambiente de trabajo más saludable y productivo.