Problema: Rotación de cargo

En una organización, se busca comprender y prever los factores que influyen en la rotación de empleados entre distintos cargos. La empresa ha recopilado datos históricos sobre el empleo de sus trabajadores, incluyendo variables como la antigüedad en el cargo actual, el nivel de satisfacción laboral, el salario actual, edad y otros factores relevantes. La gerencia planea desarrollar un modelo de regresión logística que permita estimar la probabilidad de que un empleado cambie de cargo en el próximo período y determinar cuales factores indicen en mayor proporción a estos cambios.

Con esta información, la empresa podrá tomar medidas proactivas para retener a su talento clave, identificar áreas de mejora en la gestión de recursos humanos y fomentar un ambiente laboral más estable y tranquilo. La predicción de la probabilidad de rotación de empleados ayudará a la empresa a tomar decisiones estratégicas informadas y a mantener un equipo de trabajo comprometido y satisfecho en sus roles actuales.

En este caso se cuentan con 24 variables, como se muestra a continuación, de las cuales se escogerán 3 variables cualitativas y otras 3 variables cuantitativas que se tenga la hipotesís de una relación con la variable rotación.

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, …

Hipotesis

De las 23 variables explicativas de la rotación, se escogen como variables cuantitativas: Edad, Trabajos anteriores y Ingreso mensual. En este sentido se espera que, empleados de menor edad sean más propensos a rotar, en busca de otras oportunidades, ya sea por experimentar o por otras circunstancias ligadas a otras de las variables. En el caso de trabajos anteriores, puede tener una relación con la rotación, ya que puede ser más afín a cambiar rapidamente, en ese caso, se esperaría que a medida que tenga más trabajos anteriores, es más probable que rote. Finalmente, en el caso del ingreso mensual, tiene una relación con la rotación por la satisfacción económica del trabajo hecho por lo que, entre mayor sea el ingreso mensual es posible que menor sea la probabilidad de rotar.

Por otro lado, respecto a las variables cualitativas, se escogen: Estado civil, Equilibrio trabajo vida y Horas extra. En el caso de estado civil, puede suponer una relación en la medida que al tener vinculos solidos con otra persona o proyectos de vida, las personas no se arriesguen a rotar, en ese sentido, se esperaría que aquellas personas solteras sean más probable que roten mientras que otros vinculos no. En el equilibrio trabajo vida, entendido como una variable categorica ordinal, a partir de una escala Likert, en la que se entendería que a menor número es menor equilibrio, o menos satisfecho con ese equilibrio. En ese sentido, una persona con un descontento con su equilibrio trabajo vida, va a querer rotar para mejorar ese equilibrio. Finalmente, en el caso de las horas extras, tienen una relación con la rotación entendiendo el desgaste que puede suponer un trabajo adicional, así, una persona que tenga horas extra es posible que piense rotar, antes que una persona que no tenga horas extra.

Ahora bien, para corrobar estas hipotesis, se presenta el análisis a continuación.

Inicialmente se hará la discriminación entre variables cualitativas y variables cuantitativas.

Análisis univariado

# Crear un marco de datos para almacenar la información
info_variables <- data.frame(Nombre = names(rotacion), Cualitativa = "-", Cuantitativa = "-")

cualitativas_txt <- c("Rotación", "Viaje de Negocios", "Departamento", "Educación",
                  "Campo_Educación", "Satisfacción_Ambiental", "Genero", "Cargo",
                  "Satisfación_Laboral", "Estado_Civil", "Horas_Extra",
                  "Rendimiento_Laboral", "Equilibrio_Trabajo_Vida")

# Identificar variables cualitativas y marcarlas con 1
info_variables$Cualitativa[info_variables$Nombre %in% cualitativas_txt] <- "Sí"

# Identificar variables cuantitativas y marcarlas con 1
info_variables$Cuantitativa[info_variables$Cualitativa != "Sí"] <- "Sí"

# Mostrar el cuadro de 3 columnas
print(info_variables)
##                         Nombre Cualitativa Cuantitativa
## 1                     Rotación          Sí            -
## 2                         Edad           -           Sí
## 3            Viaje de Negocios          Sí            -
## 4                 Departamento          Sí            -
## 5               Distancia_Casa           -           Sí
## 6                    Educación          Sí            -
## 7              Campo_Educación          Sí            -
## 8       Satisfacción_Ambiental          Sí            -
## 9                       Genero          Sí            -
## 10                       Cargo          Sí            -
## 11         Satisfación_Laboral          Sí            -
## 12                Estado_Civil          Sí            -
## 13             Ingreso_Mensual           -           Sí
## 14         Trabajos_Anteriores           -           Sí
## 15                 Horas_Extra          Sí            -
## 16 Porcentaje_aumento_salarial           -           Sí
## 17         Rendimiento_Laboral          Sí            -
## 18            Años_Experiencia           -           Sí
## 19              Capacitaciones           -           Sí
## 20     Equilibrio_Trabajo_Vida          Sí            -
## 21                  Antigüedad           -           Sí
## 22            Antigüedad_Cargo           -           Sí
## 23       Años_ultima_promoción           -           Sí
## 24  Años_acargo_con_mismo_jefe           -           Sí

Variables cuantitativas

# Seleccionar variables cuantitativas
cuantitativas <- select(rotacion, -one_of(cualitativas_txt))

cuantitativas_txt <- names(cuantitativas)

plots <- list()

# Iterar sobre los elementos de la lista cuantitativas

for(i in seq_along(cuantitativas)) {
  # Crear el boxplot y agregarlo a la lista de plots
  plots[[i]] <- plot_ly(y = cuantitativas[[i]], type = "box",
                        name = names(cuantitativas)[i])
}

# Crea subplots usando subplot de plotly
subplot(plots, nrows = 3, margin = 0.05) %>%
  layout(title = list(text = "Análisis univariado de variables cuantitativas"),
         showlegend = FALSE)

Variables cualitativas

# Seleccionar variables cuantitativas
cualitativas <- select(rotacion, one_of(cualitativas_txt))

plots <- list()

# Iterar sobre los elementos de la lista cuantitativas
for(i in seq_along(cualitativas)) {
  
  relative_freq_table <- table(cualitativas[[i]]) / length(cualitativas[[i]]) * 100
  relative_freq_table <- as.data.frame(relative_freq_table)
  
  plots[[i]] <- plot_ly(y = relative_freq_table$Freq,
                        x = relative_freq_table$Var1,
                        type = "bar",
                        name = names(cualitativas)[i])
}

# Crea subplots usando subplot de plotly
subplot(plots, nrows = 5, margin = 0.05) %>%
  layout(title = list(text = "Análisis univariado de variables cualitativas"),
         showlegend = FALSE)

Análisis bivariado

plots <- list()

# Iterar sobre los elementos de la lista cuantitativas
for(i in seq_along(cuantitativas)) {
  # Crear el boxplot y agregarlo a la lista de plots
  plots[[i]] <- plot_ly(y = cuantitativas[[i]], x = rotacion$Rotación, type = "box",
                        name = names(cuantitativas)[i])
}

# Crea subplots agrupados por la variable "Rotación" usando subplot de plotly
subplot(plots, nrows = 3, margin = 0.05) %>%
  layout(title = list(text = "Análisis univariado de variables cuantitativas agrupadas por Rotación"),
         showlegend = FALSE)
plots <- list()

# Iterar sobre los elementos de la lista cualitativas
for(i in seq_along(cualitativas)) {
  # Calcular la tabla de frecuencia relativa para cada variable cualitativa
  relative_freq_table <- table(cualitativas[[i]], cualitativas$Rotación)/ nrow(cualitativas) * 100
  relative_freq_table <- as.data.frame(relative_freq_table)
  # Crear el gráfico de barras de frecuencia relativa y agregarlo a la lista de plots
  plots[[i]] <- plot_ly(data = relative_freq_table, x = ~Var1, y = ~Freq,
                        type = "bar", color = ~Var2,
                        legendgroup = ~Var2,
                        colors = c("#1bcc3b", "#eb8e2a"),
                        name = names(cualitativas)[i])
}

plots[[1]] <- NULL

# Crear subplots agrupados por la variable "Rotación" usando subplot de plotly
subplot(plots, nrows = 4, margin = 0.05) %>%
  layout(title = list(text = "Análisis univariado de variables cualitativas agrupadas por Rotación"),
         showlegend = FALSE)

Medidas de asociación cualitativas bivariadas

A continuación se realizarán los test de chi cuadrado para identificar si existe asociación entre las variables cualitativas en relación con la rotación y posteriormente, con aquellas que tenga relación se hará el test de V de Cramer para analizar la fuerza de esa asociación.

# Prueba chi cuadrado sólo para cualitativas
estadisticos <- vector()
pvalor <- vector()
# Iterar sobre los elementos de la lista cualitativas
for(i in seq_along(cualitativas)) {
  estadisticos[i] <- chisq.test(table(cualitativas[[i]], cualitativas$Rotación))$statistic[[1]]
  pvalor[i] <- chisq.test(table(cualitativas[[i]], cualitativas$Rotación))$p.value
}

chisq <- data.frame(nombre = names(cualitativas),
                    x_squared = as.numeric(estadisticos),
                    p_value = as.numeric(pvalor))

chisq <- chisq[-1,]


# Función para la interpretación
interpretar_resultado <- function(valor) {
  if (valor < 0.05) "Están asociadas" else "No están asociadas"
}

# Añadimos la columna de interpretación usando mapply
chisq$interpretacion <- mapply(interpretar_resultado, chisq$p_value)


print(chisq)
##                     nombre    x_squared      p_value     interpretacion
## 2        Viaje de Negocios 2.418241e+01 5.608614e-06    Están asociadas
## 3             Departamento 1.079601e+01 4.525607e-03    Están asociadas
## 4                Educación 3.073961e+00 5.455253e-01 No están asociadas
## 5          Campo_Educación 1.602467e+01 6.773980e-03    Están asociadas
## 6   Satisfacción_Ambiental 2.250388e+01 5.123469e-05    Están asociadas
## 7                   Genero 1.116967e+00 2.905724e-01 No están asociadas
## 8                    Cargo 8.619025e+01 2.752482e-15    Están asociadas
## 9      Satisfación_Laboral 1.750508e+01 5.563005e-04    Están asociadas
## 10            Estado_Civil 4.616368e+01 9.455511e-11    Están asociadas
## 11             Horas_Extra 8.756429e+01 8.158424e-21    Están asociadas
## 12     Rendimiento_Laboral 1.547544e-04 9.900745e-01 No están asociadas
## 13 Equilibrio_Trabajo_Vida 1.632510e+01 9.725699e-04    Están asociadas

A partir de este análisis de Chi-cuadrado se identifica que muchas de las variables sí están asociadas con la rotación, a excepción de la educación, el género y el rendimiento laboral.

# Prueba chi cuadrado sólo para cualitativas
cramer_value <- vector()

cramer_var <- c("Rotación", chisq[chisq$interpretacion == "Están asociadas",]$nombre)

cramer <- select(cualitativas, one_of(cramer_var))

# Iterar sobre los elementos de la lista cualitativas
for(i in seq_along(cramer)) {
  cramer_value[i] <- cramerV(
    cramer[[i]], cramer$Rotación
  )
}

df_cramer <- data.frame(nombre = names(cramer),
                    Test_cramer = as.numeric(cramer_value))

df_cramer <- df_cramer[-1,]

print(df_cramer)
##                     nombre Test_cramer
## 2        Viaje de Negocios      0.1283
## 3             Departamento      0.0857
## 4          Campo_Educación      0.1044
## 5   Satisfacción_Ambiental      0.1237
## 6                    Cargo      0.2421
## 7      Satisfación_Laboral      0.1091
## 8             Estado_Civil      0.1772
## 9              Horas_Extra      0.2461
## 10 Equilibrio_Trabajo_Vida      0.1054

Ahora, a partir de la información de V de Cramer, es posible inferir que existe una asociación muy debil entre las variables cualitativas y la rotación del empleado, siendo más alta, las horas extras.

Medidas de asociación cuantitativas bivariadas

normalidad <- vector()
homocedasticidad <- vector()

# Iterar sobre los elementos de la lista cuantitativas
for(i in seq_along(cuantitativas)) {
  normalidad[i] <- if (ad.test(cuantitativas[[i]])$p.value > 0.05) "Cumple" else "No cumple"  #Test Anderson-Darling para muestras grandes
  homocedasticidad <- if(leveneTest(cuantitativas[[1]] ~ rotacion$Rotación)$'Pr(>F)'[1] > 0.05) "Cumple" else "No cumple"
}

supuestos <- data.frame(nombre = names(cuantitativas),
                        normalidad = normalidad,
                        homocedasticidad = homocedasticidad)

print(supuestos)
##                         nombre normalidad homocedasticidad
## 1                         Edad  No cumple           Cumple
## 2               Distancia_Casa  No cumple           Cumple
## 3              Ingreso_Mensual  No cumple           Cumple
## 4          Trabajos_Anteriores  No cumple           Cumple
## 5  Porcentaje_aumento_salarial  No cumple           Cumple
## 6             Años_Experiencia  No cumple           Cumple
## 7               Capacitaciones  No cumple           Cumple
## 8                   Antigüedad  No cumple           Cumple
## 9             Antigüedad_Cargo  No cumple           Cumple
## 10       Años_ultima_promoción  No cumple           Cumple
## 11  Años_acargo_con_mismo_jefe  No cumple           Cumple

A partir de esta información, al no cumplir con el supuesto de normalidad de distribución de los datos, pero sí cumplen con la homocedasticidad, es posible usar una prueba no parametrica como lo es la prueba de Mann-Whitney U, la cual permitirá indicar si existe una relación entre cada una de estas variables explicativas y la rotación.

wilcox <- vector()

grupo1_b <- rotacion %>% filter(Rotación == "Si")
grupo2_b <- rotacion %>% filter(Rotación == "No")

# Iterar sobre los elementos de la lista cuantitativas
for(i in seq_along(cuantitativas)) {
  grupo1 <- grupo1_b[,cuantitativas_txt[i]][[1]]
  grupo2 <- grupo2_b[,cuantitativas_txt[i]][[1]]
  wilcox[i] <- if (wilcox.test(grupo1, grupo2)$p.value < 0.05) "Relacionados" else "No relacionados"
}

test_wilcox <- data.frame(nombre = names(cuantitativas),
                          relacion = wilcox)

print(test_wilcox)
##                         nombre        relacion
## 1                         Edad    Relacionados
## 2               Distancia_Casa    Relacionados
## 3              Ingreso_Mensual    Relacionados
## 4          Trabajos_Anteriores No relacionados
## 5  Porcentaje_aumento_salarial No relacionados
## 6             Años_Experiencia    Relacionados
## 7               Capacitaciones    Relacionados
## 8                   Antigüedad    Relacionados
## 9             Antigüedad_Cargo    Relacionados
## 10       Años_ultima_promoción    Relacionados
## 11  Años_acargo_con_mismo_jefe    Relacionados

Ahora bien, según la prueba U de Mann-Whitney se identifica que en alguna medida casi todas las variables cuantitativas están relacionadas con la rotación, ya que las medias de los grupos que sí rotaron frente a los grupos que no rotaron son significativamente diferentes. Sólamente el número de trabajos anteriores y el porcentaje de aumento salarial no presentan ninguna diferencia entre rotar o no, en otras palabras, estas dos variables no son relevantes.

Esto señala que las hipotesis planteadas inicialmente coinciden parcialmente con lo que muestran estos estadisticos de correlación con la rotación. Al respecto, es necesario señalar que, como se presentó previamente, la Educación no presenta una relación con la rotación, por lo que sería la hipotesis que no se cumplió.

Estimación del modelo y evaluación

Para la estimación del modelo, se dividieron los datos originales en una proporción 7:3, donde el 70% de los datos se destinaron a realizar el entrenamiento del modelo, y el restante se destinó a las pruebas del modelo entrenado.

training_indices <- createDataPartition(rotacion$Rotación, p = 0.7, list = FALSE)
datos_entrenamiento <- rotacion[training_indices, ]
datos_prueba <- rotacion[-training_indices, ]

modelo <- glm(as.numeric(as.factor(Rotación)) - 1 ~ Edad + Trabajos_Anteriores +
                Ingreso_Mensual + Estado_Civil + Equilibrio_Trabajo_Vida + Horas_Extra +
                Educación,
              data = datos_entrenamiento, family = binomial(link = "logit"))
summary(modelo)
## 
## Call:
## glm(formula = as.numeric(as.factor(Rotación)) - 1 ~ Edad + Trabajos_Anteriores + 
##     Ingreso_Mensual + Estado_Civil + Equilibrio_Trabajo_Vida + 
##     Horas_Extra + Educación, family = binomial(link = "logit"), 
##     data = datos_entrenamiento)
## 
## Coefficients:
##                           Estimate Std. Error z value Pr(>|z|)    
## (Intercept)              4.008e-01  5.719e-01   0.701 0.483476    
## Edad                    -4.955e-02  1.333e-02  -3.716 0.000202 ***
## Trabajos_Anteriores      1.879e-01  3.830e-02   4.905 9.33e-07 ***
## Ingreso_Mensual         -1.194e-04  3.199e-05  -3.733 0.000189 ***
## Estado_CivilDivorciado  -3.624e-01  2.749e-01  -1.318 0.187413    
## Estado_CivilSoltero      8.959e-01  2.094e-01   4.279 1.88e-05 ***
## Equilibrio_Trabajo_Vida -3.223e-01  1.266e-01  -2.546 0.010882 *  
## Horas_ExtraSi            1.611e+00  1.949e-01   8.268  < 2e-16 ***
## Educación               -5.285e-02  9.441e-02  -0.560 0.575641    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 909.69  on 1029  degrees of freedom
## Residual deviance: 739.78  on 1021  degrees of freedom
## AIC: 757.78
## 
## Number of Fisher Scoring iterations: 6

En el modelo implementado se encuentra que la Educación no es significativa para el modelo de regresión logistica. Por otro lado, se encuentra que respecto al estado civil, el cual se encontró una relación con la rotación, a pesar de no ser fuerte, es significativamente fuerte para aquellas personas que están solteras, en otras palabras, las personas solteras, en comparación con las personas casadas, son más propensas a rotar. Además, en relación a los divorciados, las diferencias no son significativas con los casados, es decir, siguen su mismo comportamiento.

Finalmente, el equilibrio trabajo vida a pesar de ser significativo, tiene una significancia baja, en comparación con las otras variables explicativas. Ahora bien, a modo de resumen, las variables que contribuyen a la decisión de rotar positivamente son: el número de trabajos pasados, el hecho de ser soltero y si debe hacer horas extra, tal como se previó en las hipotesis. Mientras que, una mayor edad, un mayor ingreso, estar en unión con otra persona, y un buen equilibrio trabajo vida, contribuyen negativamente a tomar la decisión de rotar, tal como se previó en las hipotesis.

# Obtener las probabilidades predichas por el modelo
predicciones <- predict(modelo, newdata = datos_prueba, type = "response")
clases_predichas <- ifelse(predicciones > 0.5, 1, 0)

# Calcular la curva ROC y el AUC
roc_datos <- roc(as.numeric(
  factor(datos_prueba$Rotación,
    levels = levels(as.factor(rotacion$Rotación)))) - 1, predicciones)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
auc_valor <- auc(roc_datos)

# Graficar la curva ROC
plot(roc_datos, main = "Curva ROC", xlim = c(1, 0))
abline(a = 0, b = 1, lty = 2) # Línea diagonal de referencia
legend("bottomright", legend = paste("AUC =", round(auc_valor, 3)), bty = "n")

A partir de la gráfica se asume que el modelo tiene una alta capacidad predictiva, por lo cercano a una gráfica ideal, alejandose de linea estándar, así como un valor de área bajo la curva superior a 0.5.

Predicción de usuarios y posibles correcciones

A partir de los datos originales, se presentará un caso hipotetico de un nuevo empleado, con ciertas condiciones, al cual se estimará su probabilidad de rotar o no, en caso de una probabilidad de más del 50%, se creará una acción para disminuir esa probabilidad.

Sitación inicial

Se tiene un usuario con las siguientes caracteristicas.

# Características del individuo hipotético
nuevo_individuo <- data.frame(
  Edad = 30,
  Trabajos_Anteriores = 2,
  Ingreso_Mensual = 3000,
  Estado_Civil = factor("Soltero",
                        levels = levels(as.factor(rotacion$Estado_Civil))), # Convertir el Estado_Civil a factor y reordenarlo según el modelo
  Equilibrio_Trabajo_Vida = 3,
  Horas_Extra = factor("Si",
                        levels = levels(as.factor(rotacion$Horas_Extra))),
  Educación = 3
)

print(nuevo_individuo)
##   Edad Trabajos_Anteriores Ingreso_Mensual Estado_Civil Equilibrio_Trabajo_Vida
## 1   30                   2            3000      Soltero                       3
##   Horas_Extra Educación
## 1          Si         3

A partir de esto se estimará su probabilidad de rotar:

# Realizar la predicción de la probabilidad de rotación
prob_rotacion <- round(predict(modelo, newdata = nuevo_individuo, type = "response"),4)*100

# Imprimir la probabilidad predicha
print(paste("La probabilidad predicha de rotación es:", prob_rotacion))
## [1] "La probabilidad predicha de rotación es: 57.77"
# Definir un punto de corte (por ejemplo, 0.5)
punto_corte <- 50

# Decisión basada en el punto de corte
if (prob_rotacion >= punto_corte) {
  print("Se debe intervenir con el empleado para motivarlo.")
} else {
  print("No se requiere intervención con el empleado en este momento.")
}
## [1] "Se debe intervenir con el empleado para motivarlo."

Ya que es probable que el empleado decida rotar, y que es díficil influir en algunas de las variables predictoras, como la edad, la situación civil y demás. La acción más inmediata con un efecto inmediato en la decisión del empleado, es la eliminación de las horas extra, pues al no tener horas extra tendrá el efecto siguiente:

Corrección

Se renuevan las caracteristicas del nuevo usuario, sólo modificando las horas extra

individuo_corregido <- nuevo_individuo
individuo_corregido$Horas_Extra <- factor("No",
                        levels = levels(as.factor(rotacion$Horas_Extra)))

print(individuo_corregido)
##   Edad Trabajos_Anteriores Ingreso_Mensual Estado_Civil Equilibrio_Trabajo_Vida
## 1   30                   2            3000      Soltero                       3
##   Horas_Extra Educación
## 1          No         3

Y a continuación se evalua nuevamente la probabilidad de rotar:

# Realizar la predicción de la probabilidad de rotación
prob_rotacion_2 <- round(predict(modelo, newdata = individuo_corregido, type = "response"),4)*100

# Imprimir la probabilidad predicha
print(paste("La probabilidad predicha de rotación, sin horas extra, es:", prob_rotacion_2))
## [1] "La probabilidad predicha de rotación, sin horas extra, es: 21.45"

Por lo que la probabilidad de rotar se disminuye en más de 30 puntos porcentuales. De aquí lo siguiente que se podría hacer es aumentar el salario.