1. INTRODUCCIÓN

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.

2. OBJETIVOS

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:

  1. Identificar y seleccionar las variables relevantes que influyen en la decisión de los empleados de cambiar de cargo dentro de la organización.

  2. 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.

  3. 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.

3. IMPORTACIÓN Y LIMPIEZA DE LOS DATOS

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.

4. ANÁLISIS DE LOS DATOS

La gerencia de la compañía ha propuesto una serie de pasos para realizar el análisis de la rotación de personal.

4.1. Selección de variables

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.

4.2. Análisis univariado

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:

  1. Llevar a un data frame las variables categóricas
#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>
  1. Calcular las frecuencias de cada variables
# 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
  1. Visualizar los comportamientos de las variables
# 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:

  1. Llevar a un data frame las 16 variables cuantitativas únicamente
#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>
  1. Calcular las medidas resumen
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   |
  1. Graficar los comportamientos de las variables
# 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.

4.3. Análisis bivariado

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:

  1. Identificar qué variables están asociadas significativamente con la rotación de personal.
  2. Interpretar la dirección del efecto de cada variable en la probabilidad de rotación. Por ejemplo, un coeficiente positivo para el ingreso mensual podría indicar que salarios más bajos están asociados con una mayor probabilidad de rotación.
  3. Podemos comparar los resultados del análisis bivariado con nuestras hipótesis previas sobre los factores que pueden influir en la rotación de personal. Por ejemplo, si esperamos que la satisfacción laboral esté inversamente relacionada con la rotación, podemos verificar si esto se refleja en los resultados del modelo.
  4. Identificar áreas específicas donde la organización puede intervenir para reducir la rotación de personal. Por ejemplo, si encontramos que el equilibrio entre el trabajo y la vida personal está fuertemente asociado con la rotación, la organización puede implementar políticas o programas para mejorar este aspecto.

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.

  1. Lo primero que debemos hacer es codificar la variable respuesta “rotacion”
rotacion_df$Rotación <- ifelse(rotacion_df$Rotación == "Si", 1, 0)
  1. Luego vamos a llevar a un data frame las variables predictorias, que serían todas las variables de la base de datos, exceptuando la rotación.
v_predictorias <- names(rotacion_df)[!names(rotacion_df) %in% c("Rotación")]
  1. Ajustar el modelo de regresión logística
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:

  1. Años de Última Promoción: Los empleados que fueron promovidos más recientemente tienen una probabilidad significativamente menor de rotación. El coeficiente estimado para esta variable es de -0.179, lo que indica que por cada año adicional desde la última promoción, la log-odds de rotación disminuye en 0.179 unidades, manteniendo constantes todas las demás variables en el modelo (p < 0.001). Esto sugiere que los empleados que han sido promovidos más recientemente tienden a permanecer en la empresa por más tiempo, lo que contribuye a una menor probabilidad de rotación.
  2. Distancia desde casa: Esta variable tiene un coeficiente estimado significativo y un valor de p muy pequeño, lo que indica una asociación significativa entre la distancia desde casa y la rotación del personal. Por cada unidad de aumento en la distancia desde casa, la probabilidad de rotación aumenta en 0.0425 unidades (Estimate = 0.0425, Pr(>|z|) < 0.001).
  3. Satisfacción_Laboral: Los empleados con niveles más bajos de satisfacción laboral tienen una probabilidad significativamente mayor de rotación. Por cada unidad de disminución en la satisfacción laboral, la probabilidad de rotación aumenta en 0.405 unidades (Estimate = -0.405, Pr(>|z|) < 0.001).

Las 3 variables categóricas con mayor significancia para el modelo son:

  1. Horas_Extra(Si): esta variable muestra la asociación más altamente significativa con la rotación del personal, con un valor de p extremadamente pequeño (< 2e-16). Los empleados que realizan horas extra tienen una probabilidad significativamente mayor de rotación en comparación con aquellos que no las realizan. Por cada unidad adicional de horas extra, la probabilidad de rotación aumenta en 1.872 unidades (Estimate = 1.872, p < 0.001).
  2. Estado Civil (Soltero): Los empleados solteros tienen una probabilidad significativamente mayor de rotación en comparación con aquellos con otros estados civiles (Estimate = 1.033, Pr(>|z|) < 0.001).
  3. Campo de Educación (Técnicos): Los empleados con formación técnica tienen una probabilidad significativamente mayor de rotación en comparación con aquellos con otros campos educativos (Estimate = 0.9281, Pr(>|z|) = 0.002). Esta asociación sugiere que los empleados con antecedentes educativos técnicos pueden tener diferentes expectativas laborales o enfrentar distintas oportunidades de carrera, lo que influye en su decisión de permanecer en la empresa.

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:

  1. Las variables categóricas consideradas en la hipótesis fueron los viajes de negocios, el estado civil y las horas extra. Si el empleado tiene que viajar, trabaja horas extra y está soltero tiene más probabilidades de buscar otro trabajo. En los resultados podemos comprobar que tanto las horas extra como el estado civil sí son las variables más significativas. Los viajes de negocios no está en el top 3 de variables categóricas, pero sí es determinante al considerar el tema de la rotación de personal. Y adicional a las 2 primeras variables se suma la de formación académica, donde los técnicos tienen más probabilidad de rotación.
  2. Para las variables cuantitativas se habían considerado como más importantes la edad, el ingreso mensual y el equilibrio trabajo-vida. De acuerdo con los resultados, la edad y el equilibrio entre el tabajo y la vida personal sí son significativos para predecir la rotación, pero el ingreso mensual no es un factor determinante (valor-p = 0.98 > 0.05). Aunque estas 2 variables sí son significativas, según los rsultados del modelo, las que más impactan la rotación son años de última promoción, distancia desde casa y la satisfacción laboral.

4.4. Estimación del modelo

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.

4.5. Evaluación del modelo

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.

  1. La curva ROC nos permite visualizar cómo varía la sensibilidad y la especificidad del modelo a medida que cambiamos el umbral de clasificación. Representa la tasa de verdaderos positivos (sensibilidad) frente a la tasa de falsos positivos (1 - especificidad) para diferentes umbrales de clasificación.
# 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.

4.6. Predicciones

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.

  1. Vamos a ingresar los datos hipotéticos del empleado a un data frame
emp_hipotetico <- data.frame(
  Viaje_de_Negocios = "No_Viaja",
  Estado_Civil = "Soltero",
  Horas_Extra = "Si",
  Edad = 30,
  Ingreso_Mensual = 2000,
  Equilibrio_Trabajo_Vida = 1
)
  1. Realizamos la predicción de la probabilidad de rotación y definimos el umbral de intervención.
prob_rotacion <- predict(modelo1, emp_hipotetico, type = "response")
  1. Definimos el umbral de invtervención para decidir si se debe intervenir o no
umbral <- 0.3
  1. Comparamos la probabilidad predicha con el umbral definido
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.

5. CONCLUSIONES

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:

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.