Cargue y visualización de la tabla de datos

Importar librerías.

Cargar y visualizar la base 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, …
rotacion <- as.data.frame(rotacion)
rotacion

Visualización de las variables de la tabla

variables <- colnames(rotacion)
print(variables)
##  [1] "Rotación"                    "Edad"                       
##  [3] "Viaje de Negocios"           "Departamento"               
##  [5] "Distancia_Casa"              "Educación"                  
##  [7] "Campo_Educación"             "Satisfacción_Ambiental"     
##  [9] "Genero"                      "Cargo"                      
## [11] "Satisfación_Laboral"         "Estado_Civil"               
## [13] "Ingreso_Mensual"             "Trabajos_Anteriores"        
## [15] "Horas_Extra"                 "Porcentaje_aumento_salarial"
## [17] "Rendimiento_Laboral"         "Años_Experiencia"           
## [19] "Capacitaciones"              "Equilibrio_Trabajo_Vida"    
## [21] "Antigüedad"                  "Antigüedad_Cargo"           
## [23] "Años_ultima_promoción"       "Años_acargo_con_mismo_jefe"

Diccionario de datos. • Rendimiento laboral: 1= bajo, 2=medio, 3=alto, 4=Muy alto. • Distancia de la casa: kilómetros de distancia desde la casa. • Educación: 1=primaria, 2=secundaria, 3=técnico/tecnólogo 4=pregrado y 5=posgrado. • Satisfacción ambiental: 1=Muy insatisfecho, 2=insatisfecho, 3=satisfecho y 4=Muy satisfecho. • Satisfacción laboral: 1=Muy insatisfecho, 2=insatisfecho, 3=satisfecho y 4=Muy satisfecho. • Trabajos anteriores: cantidad de trabajos antes de ingresar a la empresa. • Equilibrio_trabajo_vida: 1=Muy bajo, 2=bajo, 3=Medio, 4=alto.

Punto 1.

Seleccione 3 variables categóricas (distintas de rotación) y 3 variables cuantitativas, que se consideren estén relacionadas con la rotación. Nota: Debes justificar porque estas variables están relacionadas y que tipo de relación se espera entre ellas (Hipótesis).

Variables Numéricas: - Ingreso Mensual:La compensación económica es uno de los principales factores que influye en la decisión de permanecer o buscar otros empleos. Un salario bajo puede motivar a los empleados a buscar mejores oportunidades. Relación inversa: a mayor ingreso, menor rotación.

  • Distancia_Casa: La distancia entre la casa del empleado y el lugar de trabajo puede ser un factor clave en su decisión de mantenerse en un empleo. Desplazamientos largos pueden ser desgastantes y reducir la satisfacción laboral. Relación directa: a mayor distancia, mayor rotación.

  • Antigüedad: La cantidad de tiempo que un empleado ha estado en la empresa puede influir en su decisión de quedarse o irse. Empleados con mayor antigüedad pueden tener más incentivos para quedarse, como beneficios acumulados o estabilidad laboral.Relación directa: a mayor ingreso, mayor rotación.

Variables Categóricas: - Satisfacción_Laboral: La satisfacción con el trabajo desempeñado es crucial. Empleados insatisfechos tienen una mayor probabilidad de dejar sus puestos en búsqueda de mejores condiciones o ambientes laborales. Relación inversa, menos satisfacción mas rotación.

Estado_Civil: El estado civil puede influir en la rotación laboral. Por ejemplo, empleados casados podrían buscar mayor estabilidad, mientras que los solteros podrían estar más dispuestos a cambiar de trabajo.

Departamento: El departamento en el que trabaja el empleado puede influir en su rotación. Algunos departamentos pueden tener una carga de trabajo más alta o ambientes más estresantes, o puede tener bonificaciones o comisiones adicionales, lo que puede llevar a una mayor rotación.

# Seleccionar las columnas deseadas
rotacion <- rotacion %>%
  select(Rotación, Ingreso_Mensual, Distancia_Casa, Antigüedad, Satisfación_Laboral, Estado_Civil, Departamento)

# Recodificar la variable Satisfacción_Laboral
rotacion <- rotacion %>%
  mutate(Satisfación_Laboral = case_when(
    Satisfación_Laboral == 1 ~ "Muy insatisfecho",
    Satisfación_Laboral == 2 ~ "Insatisfecho",
    Satisfación_Laboral == 3 ~ "Satisfecho",
    Satisfación_Laboral == 4 ~ "Muy satisfecho",
    TRUE ~ as.character(Satisfación_Laboral)  # Mantener otros valores sin cambios
  ))

Punto 2.

Realiza un análisis univariado (caracterización) de la información contenida en la base de datos rotacion.

# Análisis descriptivo univariado
summary(rotacion)
##    Rotación         Ingreso_Mensual Distancia_Casa     Antigüedad    
##  Length:1470        Min.   : 1009   Min.   : 1.000   Min.   : 0.000  
##  Class :character   1st Qu.: 2911   1st Qu.: 2.000   1st Qu.: 3.000  
##  Mode  :character   Median : 4919   Median : 7.000   Median : 5.000  
##                     Mean   : 6503   Mean   : 9.193   Mean   : 7.008  
##                     3rd Qu.: 8379   3rd Qu.:14.000   3rd Qu.: 9.000  
##                     Max.   :19999   Max.   :29.000   Max.   :40.000  
##  Satisfación_Laboral Estado_Civil       Departamento      
##  Length:1470         Length:1470        Length:1470       
##  Class :character    Class :character   Class :character  
##  Mode  :character    Mode  :character   Mode  :character  
##                                                           
##                                                           
## 
sapply(rotacion, function(x) list(media=mean(as.numeric(x), na.rm=TRUE), 
                                  desviacion_std=sd(as.numeric(x), na.rm=TRUE)))
##                Rotación Ingreso_Mensual Distancia_Casa Antigüedad
## media          NaN      6502.931        9.192517       7.008163  
## desviacion_std NA       4707.957        8.106864       6.126525  
##                Satisfación_Laboral Estado_Civil Departamento
## media          NaN                 NaN          NaN         
## desviacion_std NA                  NA           NA
ggplot(rotacion, aes(x = Rotación)) +
  geom_histogram(binwidth = 1, fill = "blue", color = "black", stat = "count") +
  labs(title = "Histograma de Rotación", x = "Rotación", y = "Frecuencia") +
  theme_minimal()

La variable de interés está desbalanceada, aproximadamente un 15% de los empleados rota de sus puestos de trabajo.

# Lista de variables categóricas de interés
categorical_vars <- c("Departamento", "Satisfación_Laboral", "Estado_Civil")

# Crear un histograma para cada variable categórica
for (var in categorical_vars) {
  print(ggplot(rotacion, aes_string(x = var)) +
          geom_bar(fill = "steelblue") +
          theme_minimal() +
          labs(title = paste("Histograma de", var), x = var, y = "Frecuencia") +
          theme(axis.text.x = element_text(angle = 45, hjust = 1)))
}

La mayor parte de los empleados está en le departamento de IyD que se supondría se constituye en el área misional de la empresa. El departamento de recursos humanos es de soporte, por lo tanto la cantidad de empleados es menor.

De otra parte, los empleados están mayoritariamente satisfechos o muy satisfechos en sus puestos de trabajo.

Por último, los casados son el estado civil mayoritario en las empresas, seguidos por los solteros.

Punto 3.

Realiza un análisis bivariado en donde la variable respuesta sea Rotación codificada de la siguiente manera (y=1 es si rotación, y=0 es no rotación). Con base en estos resultados identifique cuales son las variables determinantes de la rotación e interpretar el signo del coeficiente estimado. Compare estos resultados con la hipotesis planteada en el punto 2.

Codificación de la variable respuesta

# Codificamos la variable Rotación
rotacion$Rotación <- ifelse(rotacion$Rotación == "Si", 1, 0)

Análisis Bivariado

# Análisis bivariado para variables numéricas
# Ingreso_Mensual
ggplot(rotacion, aes(x = Ingreso_Mensual, y = Rotación)) +
  geom_point() +
  geom_smooth(method = "lm") +
  ggtitle("Ingreso Mensual vs Rotación")
## `geom_smooth()` using formula = 'y ~ x'

cor_ingreso <- cor(rotacion$Ingreso_Mensual, rotacion$Rotación)
print(paste("Correlación Ingreso_Mensual y Rotación:", cor_ingreso))
## [1] "Correlación Ingreso_Mensual y Rotación: -0.159839582384988"
# Distancia_Casa
ggplot(rotacion, aes(x = Distancia_Casa, y = Rotación)) +
  geom_point() +
  geom_smooth(method = "lm") +
  ggtitle("Distancia Casa vs Rotación")
## `geom_smooth()` using formula = 'y ~ x'

cor_distancia <- cor(rotacion$Distancia_Casa, rotacion$Rotación)
print(paste("Correlación Distancia_Casa y Rotación:", cor_distancia))
## [1] "Correlación Distancia_Casa y Rotación: 0.0779235829557035"
# Antigüedad
ggplot(rotacion, aes(x = Antigüedad, y = Rotación)) +
  geom_point() +
  geom_smooth(method = "lm") +
  ggtitle("Antigüedad vs Rotación")
## `geom_smooth()` using formula = 'y ~ x'

cor_antiguedad <- cor(rotacion$Antigüedad, rotacion$Rotación)
print(paste("Correlación Antigüedad y Rotación:", cor_antiguedad))
## [1] "Correlación Antigüedad y Rotación: -0.134392213989976"
# Análisis para variables categóricas
# Satisfacción_Laboral
tabla_satisfaccion <- table(rotacion$Satisfación_Laboral, rotacion$Rotación)
chi_sq_satisfaccion <- chisq.test(tabla_satisfaccion)
print(chi_sq_satisfaccion)
## 
##  Pearson's Chi-squared test
## 
## data:  tabla_satisfaccion
## X-squared = 17.505, df = 3, p-value = 0.0005563
# Estado_Civil
tabla_estado_civil <- table(rotacion$Estado_Civil, rotacion$Rotación)
chi_sq_estado_civil <- chisq.test(tabla_estado_civil)
print(chi_sq_estado_civil)
## 
##  Pearson's Chi-squared test
## 
## data:  tabla_estado_civil
## X-squared = 46.164, df = 2, p-value = 9.456e-11
# Departamento
tabla_departamento <- table(rotacion$Departamento, rotacion$Rotación)
chi_sq_departamento <- chisq.test(tabla_departamento)
print(chi_sq_departamento)
## 
##  Pearson's Chi-squared test
## 
## data:  tabla_departamento
## X-squared = 10.796, df = 2, p-value = 0.004526

Resultados de los coeficientes de correlación: En los tres casos los valores dan muy bajos, sin embargo ese resultado es contraintuitivo, pues es bien sabido que el ingreso está asociado a la permanencia en un empleo. Lo mismo sucede con la distancia, si se vive muy lejos, es más probable que la persona dedida cambiar de trabajo. Así las cosas, se seguirá con estas tres variables.

Resultados de Chi-Cuadrado

  • Satisfacción Laboral vs Rotación: X-squared = 17.505, df = 3, p-value = 0.0005563 Dado que el p-value es mucho menor que 0.05, rechazamos la hipótesis nula. Esto sugiere que hay una relación significativa entre la satisfacción laboral y la rotación. Es decir, la rotación varía de manera significativa según los niveles de satisfacción laboral.

  • Estado Civil vs Rotación X-squared = 46.164, df = 2, p-value = 9.456e-11 Aquí también, el p-value es extremadamente bajo (mucho menor que 0.05), lo que indica que rechazamos la hipótesis nula. Esto sugiere que existe una relación significativa entre el estado civil y la rotación. La rotación de empleados difiere significativamente en función del estado civil.

  • Departamento vs Rotación X-squared = 10.796, df = 2, p-value = 0.004526 El p-value es menor que 0.05, lo que indica que también rechazamos la hipótesis nula en este caso. Esto sugiere que hay una relación significativa entre el departamento y la rotación. La rotación de empleados varía significativamente entre los diferentes departamentos.

A continuación se presentan gráficos de barras para ver el comportamiento de las variables categóricas comparadas con la rotación

library(dplyr)
library(ggplot2)


rotacion$Satisfación_Laboral <- as.factor(rotacion$Satisfación_Laboral)
rotacion$Departamento <- as.factor(rotacion$Departamento)

# Gráfico de barras agrupadas para Satisfacción_Laboral
ggplot(rotacion, aes(x = Satisfación_Laboral, fill = as.factor(Rotación))) +
  geom_bar(position = "dodge") +
  labs(title = "Rotación vs Satisfacción Laboral", 
       x = "Satisfacción Laboral", 
       y = "Cantidad", 
       fill = "Rotación") +
  theme_minimal()

# Gráfico de barras agrupadas para Departamento
ggplot(rotacion, aes(x = Departamento, fill = as.factor(Rotación))) +
  geom_bar(position = "dodge") +
  labs(title = "Rotación vs Departamento", 
       x = "Departamento", 
       y = "Cantidad", 
       fill = "Rotación") +
  theme_minimal()

# Gráfico de barras agrupadas para estado civil
ggplot(rotacion, aes(x = as.factor(Estado_Civil), fill = as.factor(Rotación))) +
  geom_bar(position = "dodge") +
  labs(title = "Rotación vs Estado civil", 
       x = "Estado civil", 
       y = "Cantidad", 
       fill = "Rotación") +
  theme_minimal()

En las gráficas se percibe que la varoable rotación está desbalanceada, sin enbargo, se percibe que a mayor satisfacción laboral, hay menos rotación, si está en un departamento de IyD rota menos o si es casado, rota menos.

Creación de variables dummy y visualización del gráfico de correlación

# Crear variables dummy
rotacion_dummies <- fastDummies::dummy_cols(rotacion, remove_first_dummy = TRUE, remove_selected_columns = TRUE)

# Calcular matriz de correlación
cor_matrix <- cor(rotacion_dummies, use = "pairwise.complete.obs")

library(corrplot)


corrplot(cor_matrix, method = "color", type = "upper", 
         tl.col = "black", tl.srt = 45, 
         addCoef.col = "black", # Añadir coeficientes
         number.cex = 0.7,      # Tamaño del texto de los coeficientes
         tl.cex = 0.6,          # Tamaño de los nombres de las variables
         main = "Matriz de Correlación", cex.main = 1.2)  # Tamaño del título

En el gráfico de correlación no se evidencian relaciones fuertes entre las variables.

Modelo logístico

Se crea un modelo logístico de la familia binomial.

# Ajuste preliminar de un modelo logístico para ver los coeficientes
modelo_logistico <- glm(Rotación ~ ., data = rotacion, family = binomial())
summary(modelo_logistico)
## 
## Call:
## glm(formula = Rotación ~ ., family = binomial(), data = rotacion)
## 
## Coefficients:
##                                       Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                         -1.559e+00  2.512e-01  -6.204 5.52e-10 ***
## Ingreso_Mensual                     -1.099e-04  2.537e-05  -4.331 1.48e-05 ***
## Distancia_Casa                       2.994e-02  8.868e-03   3.376 0.000737 ***
## Antigüedad                          -4.488e-02  1.823e-02  -2.461 0.013842 *  
## Satisfación_LaboralMuy insatisfecho  4.839e-01  2.255e-01   2.146 0.031885 *  
## Satisfación_LaboralMuy satisfecho   -4.850e-01  2.284e-01  -2.123 0.033724 *  
## Satisfación_LaboralSatisfecho        1.691e-02  2.160e-01   0.078 0.937616    
## Estado_CivilDivorciado              -2.449e-01  2.235e-01  -1.095 0.273313    
## Estado_CivilSoltero                  8.640e-01  1.645e-01   5.251 1.51e-07 ***
## DepartamentoRH                       5.781e-01  3.522e-01   1.641 0.100706    
## DepartamentoVentas                   6.087e-01  1.603e-01   3.798 0.000146 ***
## ---
## 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: 1161.8  on 1459  degrees of freedom
## AIC: 1183.8
## 
## Number of Fisher Scoring iterations: 5

Los resultados del modelo muestran que las variables ingreso mensual, distancia a casa, estado civil = soltero y departamento = ventas son significativas; las variables antigüedad, estar muy satisfecho o muy insatisfecho tiene menor significancia y estar divorciado, estar satisfecho o estar en el departamento de recursos humanos no tiene una relación significativa con la rotación.

Cálculo de valores exponenciales para interpretar los coeficientes.

# Obtener los coeficientes y sus valores exponenciales
coeficientes <- tidy(modelo_logistico) %>%
  mutate(Exp_Coef = exp(estimate))

# mantener solamente el valor estimado y el exponencial
coeficientes<- coeficientes %>%
  select(term, estimate, p.value, Exp_Coef)
# Mostrar la tabla de coeficientes
print(coeficientes)
## # A tibble: 11 × 4
##    term                                 estimate  p.value Exp_Coef
##    <chr>                                   <dbl>    <dbl>    <dbl>
##  1 (Intercept)                         -1.56     5.52e-10    0.210
##  2 Ingreso_Mensual                     -0.000110 1.48e- 5    1.00 
##  3 Distancia_Casa                       0.0299   7.37e- 4    1.03 
##  4 Antigüedad                          -0.0449   1.38e- 2    0.956
##  5 Satisfación_LaboralMuy insatisfecho  0.484    3.19e- 2    1.62 
##  6 Satisfación_LaboralMuy satisfecho   -0.485    3.37e- 2    0.616
##  7 Satisfación_LaboralSatisfecho        0.0169   9.38e- 1    1.02 
##  8 Estado_CivilDivorciado              -0.245    2.73e- 1    0.783
##  9 Estado_CivilSoltero                  0.864    1.51e- 7    2.37 
## 10 DepartamentoRH                       0.578    1.01e- 1    1.78 
## 11 DepartamentoVentas                   0.609    1.46e- 4    1.84
  1. Ingreso_Mensual Coeficiente: -0.000141494 RO: 0.9998585 Por cada unidad de aumento en el ingreso mensual, la probabilidad de que ocurra el evento disminuye ligeramente (aproximadamente un 0.014%). La RO cercana a 1 sugiere que el ingreso mensual tiene un efecto muy pequeño sobre la probabilidad del evento.

  2. Distancia_Casa Coeficiente: 0.03015627 RO: 10.306156 A medida que la distancia desde casa aumenta en una unidad, la probabilidad de que ocurra el evento aumenta significativamente, ya que la RO es mayor que 1. Esto sugiere que una mayor distancia puede estar asociada con un mayor riesgo de rotación.

  3. Antigüedad Coeficiente: -0.035424465 RO: 0.9651956 Un aumento en la antigüedad (tiempo en la empresa) se asocia con una ligera disminución en la probabilidad de rotación. La RO menor que 1 indica que a medida que los empleados son más antiguos, es menos probable que se vayan.

  4. Satisfacción_LaboralMuy insatisfecho Coeficiente: 0.52068224 RO: 16.831756 Los empleados que están “muy insatisfechos” tienen una probabilidad significativamente mayor de rotación, con una RO que indica que son 16.83 veces más propensos a dejar la empresa en comparación con aquellos que no están insatisfechos.

  5. Satisfacción_LaboralMuy satisfecho Coeficiente: -0.452943078 RO: 0.6357543 Los empleados “muy satisfechos” tienen una probabilidad menor de rotación. La RO sugiere que son aproximadamente un 36.5% menos propensos a dejar la empresa en comparación con aquellos que no son muy satisfechos.

  6. Satisfacción_LaboralSatisfecho Coeficiente: -0.066458127 RO: 0.9357021 La satisfacción laboral muestra un efecto negativo en la rotación, aunque menos pronunciado que en el caso de “muy satisfecho”. Esto sugiere que los empleados satisfechos tienen una ligera disminución en la probabilidad de rotación.

  7. Estado_CivilDivorciado Coeficiente: -0.336337591 RO: 0.7143819 Los empleados divorciados tienen una menor probabilidad de rotación en comparación con aquellos que no están divorciados. La RO indica que son aproximadamente un 28.6% menos propensos a dejar la empresa.

  8. Estado_CivilSoltero Coeficiente: 0.971615297 RO: 26.422090 Los empleados solteros tienen una probabilidad mucho mayor de rotación, siendo 26.42 veces más propensos a dejar la empresa en comparación con aquellos que no son solteros.

  9. DepartamentoRH Coeficiente: 0.745484988 RO: 21.074633 Los empleados en el departamento de Recursos Humanos tienen una probabilidad significativamente mayor de rotación, siendo 21.07 veces más propensos a dejar la empresa en comparación con otros departamentos.

Conclusión de los resultados del modelo:

La interpretación de los coeficientes y las razones de oportunidad permite entender cómo cada variable influye en la probabilidad de rotación del personal. La satisfacción laboral y el estado civil son particularmente relevantes, mientras que factores como el ingreso mensual y la antigüedad tienen efectos más sutiles.

Punto 4.

Realice una partición en los datos de forma aleatoria donde 70% sea un set para entrenar el modelo y 30% para prueba. Estime un modelo logístico con la muestra del 70%. Muestre los resultados.

# División de los datos
set.seed(123)  # Para reproducibilidad
indices <- sample(1:nrow(rotacion), size = 0.7 * nrow(rotacion))
train_data <- rotacion[indices, ]
test_data <- rotacion[-indices, ]

# Ajuste del modelo logístico
modelo_logistico <- glm(Rotación ~ ., data = train_data, family = binomial())
summary(modelo_logistico)
## 
## Call:
## glm(formula = Rotación ~ ., family = binomial(), data = train_data)
## 
## Coefficients:
##                                       Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                         -1.468e+00  3.038e-01  -4.834 1.34e-06 ***
## Ingreso_Mensual                     -1.415e-04  3.292e-05  -4.298 1.72e-05 ***
## Distancia_Casa                       3.016e-02  1.103e-02   2.734  0.00626 ** 
## Antigüedad                          -3.542e-02  2.179e-02  -1.626  0.10402    
## Satisfación_LaboralMuy insatisfecho  5.207e-01  2.784e-01   1.870  0.06146 .  
## Satisfación_LaboralMuy satisfecho   -4.529e-01  2.800e-01  -1.618  0.10571    
## Satisfación_LaboralSatisfecho       -6.646e-02  2.711e-01  -0.245  0.80637    
## Estado_CivilDivorciado              -3.363e-01  2.803e-01  -1.200  0.23018    
## Estado_CivilSoltero                  9.716e-01  1.993e-01   4.875 1.09e-06 ***
## DepartamentoRH                       7.455e-01  4.203e-01   1.774  0.07609 .  
## DepartamentoVentas                   5.739e-01  1.965e-01   2.920  0.00350 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 896.03  on 1028  degrees of freedom
## Residual deviance: 785.38  on 1018  degrees of freedom
## AIC: 807.38
## 
## Number of Fisher Scoring iterations: 6
coeficientes <- tidy(modelo_logistico) %>%
  mutate(Exp_Coef = exp(estimate))

# Mostrar la tabla de coeficientes
print(coeficientes)
## # A tibble: 11 × 6
##    term                            estimate std.error statistic p.value Exp_Coef
##    <chr>                              <dbl>     <dbl>     <dbl>   <dbl>    <dbl>
##  1 (Intercept)                     -1.47e+0 0.304        -4.83  1.34e-6    0.230
##  2 Ingreso_Mensual                 -1.41e-4 0.0000329    -4.30  1.72e-5    1.00 
##  3 Distancia_Casa                   3.02e-2 0.0110        2.73  6.26e-3    1.03 
##  4 Antigüedad                      -3.54e-2 0.0218       -1.63  1.04e-1    0.965
##  5 Satisfación_LaboralMuy insatis…  5.21e-1 0.278         1.87  6.15e-2    1.68 
##  6 Satisfación_LaboralMuy satisfe… -4.53e-1 0.280        -1.62  1.06e-1    0.636
##  7 Satisfación_LaboralSatisfecho   -6.65e-2 0.271        -0.245 8.06e-1    0.936
##  8 Estado_CivilDivorciado          -3.36e-1 0.280        -1.20  2.30e-1    0.714
##  9 Estado_CivilSoltero              9.72e-1 0.199         4.88  1.09e-6    2.64 
## 10 DepartamentoRH                   7.45e-1 0.420         1.77  7.61e-2    2.11 
## 11 DepartamentoVentas               5.74e-1 0.197         2.92  3.50e-3    1.78

Punto 5.

Evaluar el poder predictivo del modelo con base en la curva ROC y el AUC en el set de datos de prueba.

# Realizamos las predicciones en el conjunto de prueba
predicciones <- predict(modelo_logistico, newdata = test_data, type = "response")

# Calculamos la curva ROC y el AUC
roc_resultados <- roc(test_data$Rotación, predicciones)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
plot(roc_resultados)

auc(roc_resultados)
## Area under the curve: 0.6808

Un AUC de 0.6808 sugiere que el modelo tiene una capacidad moderada para distinguir entre las clases positivas y negativas. Aunque no es excelente, indica que el modelo es mejor que el azar.

Esto se corrobora con la gráfica de la curva ROC, al estar arriba de la diagonal, significa que el modelo tiene capacidad predictiva, aunque al estar lejos de la esquina izquierda, significa que esta predicción es limitada.

Evaluación del modelo

Se calculan los indicadres de Accuracy, Precision, Recall y F1 Score

# Realizamos las predicciones en el conjunto de prueba
predicciones <- predict(modelo_logistico, newdata = test_data, type = "response")

# Conversión de probabilidades a clases (usualmente 0.5 es el umbral)
clases_predichas <- ifelse(predicciones > 0.5, 1, 0)

# Tabla de confusión
tabla_confusion <- table(Predicción = clases_predichas, Real = test_data$Rotación)

# Calculamos los indicadores
TP <- tabla_confusion[2, 2]  # Verdaderos positivos
TN <- tabla_confusion[1, 1]  # Verdaderos negativos
FP <- tabla_confusion[1, 2]  # Falsos positivos
FN <- tabla_confusion[2, 1]  # Falsos negativos

# Accuracy
accuracy <- (TP + TN) / sum(tabla_confusion)

# Precision
precision <- TP / (TP + FP)

# Recall (Sensibilidad)
recall <- TP / (TP + FN)

# F1 Score
f1_score <- 2 * ((precision * recall) / (precision + recall))

# Resultados
cat("Accuracy:", accuracy, "\n")
## Accuracy: 0.8231293
cat("Precision:", precision, "\n")
## Precision: 0.04
cat("Recall:", recall, "\n")
## Recall: 0.3333333
cat("F1 Score:", f1_score, "\n")
## F1 Score: 0.07142857
  • Accuracy: 0.8231293 (82.31%): El modelo tiene un 82.31% de precisión general, lo que significa que el 82.31% de las predicciones realizadas son correctas. Sin embargo, este valor puede ser engañoso si hay un desbalance en las clases (Como se anotaba anteriormente, hay muchas más observaciones de una clase que de otra).
  • Precision: 0.04 (4%): La precisión es muy baja, solo un 4%. Esto indica que de todas las instancias que el modelo predijo como positivas (es decir, que rotarían), solo el 4% realmente rotaron. Esto sugiere que el modelo tiene un alto número de falsos positivos.
  • Recall: 0.3333333 (33.33%): El recall es del 33.33%, lo que significa que el modelo es capaz de identificar correctamente solo un 33.33% de los casos positivos reales (los que realmente rotan). Esto indica que hay un número significativo de falsos negativos, donde el modelo no identifica correctamente a los empleados que sí rotan.
  • F1 Score: 0.07142857 (7.14%): Interpretación: El F1 Score, que es la media armónica entre precisión y recall, es muy bajo (7.14%). Esto refleja que el modelo no está equilibrando bien la precisión y el recall. Un F1 Score bajo indica que el modelo no es efectivo en la clasificación de la clase positiva.

En síntesis: Aunque el accuracy parece razonablemente alto, los valores de precisión, recall y F1 Score sugieren que el modelo tiene un rendimiento deficiente en la identificación de los empleados que rotan. Esto puede deberse al desbalance en los datos o a que el modelo no está capturando adecuadamente las características relevantes para predecir la rotación. Es recomendable considerar ajustes en el modelo, como la recolección de más datos, el uso de otras variables, la aplicación de técnicas de balanceo de clases o el uso de otro tipo de modelos.

Punto 6.

En las conclusiones adicione una discución sobre cuál sería la estrategia para disminuir la rotación en la empresa (con base en las variables que resultaron significativas en el punto 3).

Conclusiones

Satisfacción Laboral como Factor Crítico: La insatisfacción laboral es un predictor fuerte de la rotación. Los empleados que se sienten “muy insatisfechos” tienen una probabilidad significativamente mayor de dejar la empresa. Esto indica que la satisfacción laboral debe ser una prioridad para la empresa.

Impacto del Estado Civil: Los empleados solteros tienden a tener una probabilidad mucho mayor de rotación en comparación con aquellos que están casados o divorciados. Esto sugiere que las condiciones personales pueden influir en la decisión de permanecer en la empresa.

Antigüedad y Compromiso: La antigüedad tiene un efecto negativo en la rotación, lo que sugiere que los empleados que llevan más tiempo en la empresa son menos propensos a dejarla. Esto resalta la importancia de fomentar el compromiso a largo plazo.

Efecto de la Distancia: La distancia desde el hogar también se relaciona con la rotación, indicando que los empleados que viven más lejos pueden sentirse menos vinculados a la empresa. Esto puede ser un factor a considerar en políticas de trabajo remoto o flexibilidad.

Departamento de Recursos Humanos: Los empleados en el departamento de Recursos Humanos tienen una mayor propensión a la rotación. Esto puede indicar problemas específicos en ese departamento que necesitan ser abordados.

Recomendaciones Estratégicas

Mejorar la Satisfacción Laboral: Implementar encuestas regulares de satisfacción laboral y actuar sobre los resultados. Crear programas de reconocimiento y recompensas para los empleados que se sientan valorados.

Desarrollo Profesional: Ofrecer oportunidades de desarrollo y capacitación. Programas de mentoría y planes de carrera pueden ayudar a aumentar la satisfacción y el compromiso.

Flexibilidad Laboral: Considerar políticas de trabajo flexible o remoto, especialmente para aquellos que viven lejos de la oficina. Esto puede ayudar a reducir la rotación al mejorar la calidad de vida de los empleados.

Atención a la Diversidad en el Estado Civil: Desarrollar programas de bienestar que aborden las necesidades de diferentes grupos de empleados, incluyendo aquellos que son solteros. Esto podría incluir actividades sociales o de integración.

Análisis de la Rotación en Recursos Humanos: Realizar un análisis más profundo de por qué los empleados en el departamento de Recursos Humanos tienden a rotar más. Podría ser útil llevar a cabo entrevistas de salida para entender mejor sus motivaciones.

Fomentar la Cultura Organizacional: Crear una cultura organizacional positiva que fomente la comunicación abierta y el apoyo entre empleados. Esto puede ayudar a crear un ambiente donde los empleados se sientan cómodos y valorados.

Cierre

Al abordar estos factores y poner en práctica estrategias específicas, la empresa puede mejorar la satisfacción y el compromiso de los empleados, lo que a su vez puede reducir la rotación y contribuir a un entorno de trabajo más estable y productivo.