Introducción:

El presente trabajo tiene como objetivo predecir la rotación de empleados en una empresa, utilizando variables que se consideran influyentes en este fenómeno. La rotación de personal es un desafío importante para muchas organizaciones, ya que afecta tanto los costos operativos como la moral del equipo.

Para llevar a cabo este análisis, se ha utilizado un conjunto de datos que incluye información sobre diversos aspectos de los empleados, como la edad, el campo de educación, la satisfacción laboral y la antigüedad, entre otros. A partir de este conjunto de datos, se seleccionaron las variables que se cree tienen mayor relevancia en la predicción de la rotación.

Se ha utilizado un modelo de regresión logística para evaluar la influencia de estas variables en la probabilidad de rotación.

Selección de Variables:

Con el objetivo de realizar una predicción de la rotación, se procede a seleccionar las variables que pueden tener mayor influencia sobre la variable objetivo. Las variables disponibles son las siguientes:

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

Entre ellas, se eligen las siguientes:

  1. Satisfacción Ambiental: Se selecciona esta variable asumiendo que una baja satisfacción con respecto al ambiente laboral puede aumentar la probabilidad de rotación entre los empleados de la empresa.

  2. Estado Civil: La selección de esta variable se basa en la percepción de que las personas casadas suelen buscar mayor estabilidad laboral, lo que podría reducir la probabilidad de rotación en comparación con otros estados civiles.

  3. Campo de Educación: Se asume que personas de ciertas áreas de educación pueden ser más propensas a la rotación laboral debido a posibles insatisfacciones en su entorno profesional.

  4. Edad: Se plantea que las personas más jóvenes son más propensas a rotar, buscando mejores oportunidades, mientras que las personas de mayor edad tienden a buscar estabilidad en su empleo.

  5. Antigüedad: Un mayor tiempo en la empresa puede ser indicativo de un sentido de pertenencia hacia la organización, lo que podría motivar a las personas a permanecer por más tiempo en su puesto.

  6. Trabajos Anteriores: El número de empleos anteriores puede ser un indicador de la propensión de una persona a cambiar de trabajo. Por ello, es considerado un factor importante en la predicción de la rotación laboral.

rotacion <- rotacion[, c("Campo_Educación", "Estado_Civil", "Satisfacción_Ambiental",#"Horas_Extra",
                                "Edad", "Antigüedad",
                                "Trabajos_Anteriores", "Rotación")]

A partir de este punto, se verifica si existen datos faltantes y se aplican tratamientos básicos a los datos para su posterior análisis.

captured_output <- capture.output({
  md.pattern(rotacion[, 1:7], plot = TRUE, rotate.names = TRUE)
})

rotacion$Rotación = as.factor(rotacion$Rotación)
rotacion$Estado_Civil = as.factor(rotacion$Estado_Civil)
rotacion$Campo_Educación = as.factor(rotacion$Campo_Educación)##
rotacion$Satisfacción_Ambiental = as.factor(rotacion$Satisfacción_Ambiental)
rotacion$Rotación <- ifelse(rotacion$Rotación == "Si", 1, 0)
summary(rotacion)
##     Campo_Educación     Estado_Civil Satisfacción_Ambiental      Edad      
##  Ciencias   :606    Casado    :673   1:284                  Min.   :18.00  
##  Humanidades: 27    Divorciado:327   2:287                  1st Qu.:30.00  
##  Mercadeo   :159    Soltero   :470   3:453                  Median :36.00  
##  Otra       : 82                     4:446                  Mean   :36.92  
##  Salud      :464                                            3rd Qu.:43.00  
##  Tecnicos   :132                                            Max.   :60.00  
##    Antigüedad     Trabajos_Anteriores    Rotación     
##  Min.   : 0.000   Min.   :0.000       Min.   :0.0000  
##  1st Qu.: 3.000   1st Qu.:1.000       1st Qu.:0.0000  
##  Median : 5.000   Median :2.000       Median :0.0000  
##  Mean   : 7.008   Mean   :2.693       Mean   :0.1612  
##  3rd Qu.: 9.000   3rd Qu.:4.000       3rd Qu.:0.0000  
##  Max.   :40.000   Max.   :9.000       Max.   :1.0000

Análisis Univariado:

En primer lugar, se realiza un análisis univariado para cada una de las variables seleccionadas.

Distribución de la variable objetivo (Rotación)

Se observa que los datos están desbalanceados, presentando más casos de rotación igual a 0 (no rotación) que 1 (rotación), lo que podría dificultar la creación de un modelo predictivo con alta precisión. Un desbalance de clases como este puede afectar el rendimiento del modelo.

table(rotacion$Rotación)
## 
##    0    1 
## 1233  237

Satisfacción Ambiental

Se puede observar que la mayor parte de los empleados se encuentra en las categorías más altas de satisfacción ambiental. Esto refuerza la idea de que los niveles más bajos de satisfacción ambiental podrían estar relacionados con una mayor probabilidad de rotación.

table(rotacion$Satisfacción_Ambiental)
## 
##   1   2   3   4 
## 284 287 453 446

Estado Civil

Aunque la distribución del estado civil es acorde a lo esperado, las diferencias entre las categorías no son tan grandes como se pensaba. Esto sugiere que, si bien la hipótesis de que las personas casadas buscan mayor estabilidad laboral podría ser válida, tal vez no sea un factor tan influyente como se esperaba.

table(rotacion$Estado_Civil)
## 
##     Casado Divorciado    Soltero 
##        673        327        470

Campo de Educación

En el análisis univariado del campo de educación, no parece haber una relación clara con la rotación. Sin embargo, se observa que las carreras relacionadas con la ciencia son la moda en los datos, lo que puede ser relevante en análisis posteriores.

table(rotacion$Campo_Educación)
## 
##    Ciencias Humanidades    Mercadeo        Otra       Salud    Tecnicos 
##         606          27         159          82         464         132

Edad

La distribución de la edad está centrada alrededor de los 36 años, con una forma simétrica. Esto sugiere que la mayor parte de los empleados se encuentra en un rango de edad medio.

summary(rotacion$Edad)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   18.00   30.00   36.00   36.92   43.00   60.00
ggplot(rotacion, aes(x = Edad)) +
  geom_density(fill = "#2F7F00", alpha = 0.7) +
  labs(title = "Densidad Edad", 
       x = "Edad", 
       y = "Densidad") +
  theme_minimal()

Trabajos Anteriores

En cuanto a los empleos anteriores, se observa que tanto la media como la mediana están cerca de dos empleos. Sin embargo, hay algunos casos atípicos que alcanzan hasta 9 empleos anteriores, lo que genera una distribución inclinada a la derecha.

summary(rotacion$Trabajos_Anteriores)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   1.000   2.000   2.693   4.000   9.000
ggplot(rotacion, aes(x = Trabajos_Anteriores)) +
  geom_density(fill = "#8F7F00", alpha = 0.7) +
  labs(title = "Densidad Trabajos Anteriores", 
       x = "Trabajos Anteriores", 
       y = "Densidad") +
  theme_minimal()

Antigüedad

Finalmente, la distribución de la antigüedad también muestra una inclinación hacia la derecha, lo que indica que hay más empleados con pocos años en la empresa y menos con muchos años de antigüedad. Esto podría sugerir que la rotación es más común entre los empleados con menos tiempo en la empresa.

summary(rotacion$Antigüedad)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   3.000   5.000   7.008   9.000  40.000
ggplot(rotacion, aes(x = Antigüedad)) +
  geom_density(fill = "#FF7F00", alpha = 0.7) +
  labs(title = "Densidad Antigüedad", 
       x = "Antigüedad (años)", 
       y = "Densidad") +
  theme_minimal()

Análisis Bivariado:

Posteriormente, se realiza un análisis bivariado para observar cómo se relacionan las variables con la rotación. Para ello, primero analizamos la relación con las variables categóricas a través de tablas de validación cruzada y gráficas de barras.

Satisfacción Ambiental:

El análisis de la Satisfacción Ambiental muestra que hay un mayor porcentaje de rotación en los niveles más bajos de satisfacción.

ggplot(rotacion, aes(x = Satisfacción_Ambiental, fill = factor(Rotación))) +
  geom_bar(position = "fill") +
  scale_y_continuous(labels = scales::percent_format()) +
  labs(title = "Porcentaje de Rotación por Satisfacción Ambiental",
       y = "Porcentaje", x = "Satisfacción Ambiental", fill = "Rotación")

# Tabla de contingencia para Satisfacción Ambiental y Rotación
tabla_satisfaccion_ambiental <- table(rotacion$Satisfacción_Ambiental, rotacion$Rotación)
tabla_satisfaccion_ambiental
##    
##       0   1
##   1 212  72
##   2 244  43
##   3 391  62
##   4 386  60

Estado Civil:

En cuanto al Estado Civil, los resultados muestran el comportamiento esperado: las personas solteras presentan un mayor porcentaje de rotación. Sin embargo, un hallazgo inesperado es que las personas divorciadas son quienes muestran el menor porcentaje de rotación.

ggplot(rotacion, aes(x = Estado_Civil, fill = factor(Rotación))) +
  geom_bar(position = "fill") +
  scale_y_continuous(labels = scales::percent_format()) +
  labs(title = "Porcentaje de Rotación por Estado Civil",
       y = "Porcentaje", x = "Estado Civil", fill = "Rotación")

tabla_estado_civil <- table(rotacion$Estado_Civil, rotacion$Rotación)
tabla_estado_civil
##             
##                0   1
##   Casado     589  84
##   Divorciado 294  33
##   Soltero    350 120

Campo de Educación:

Finalmente, se observa que las personas con formación técnica, humanidades y mercadeo son quienes presentan un mayor porcentaje de rotación. Este hallazgo podría ser una métrica importante para comprender la rotación en función de esta variable.

ggplot(rotacion, aes(x = Campo_Educación, fill = factor(Rotación))) +
  geom_bar(position = "fill") +
  scale_y_continuous(labels = scales::percent_format()) +
  labs(title = "Porcentaje de Rotación por Campo de Educación",
       y = "Porcentaje", x = "Campo de Educación", fill = "Rotación") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

tabla_campo_educacion <- table(rotacion$Campo_Educación, rotacion$Rotación)
tabla_campo_educacion
##              
##                 0   1
##   Ciencias    517  89
##   Humanidades  20   7
##   Mercadeo    124  35
##   Otra         71  11
##   Salud       401  63
##   Tecnicos    100  32

Edad:

Los empleados que rotan tienden a ser más jóvenes en comparación con los que no rotan. La mediana y la media son menores para los que rotan (32 años frente a 36 años). Además, el rango intercuartílico para los que no rotan es mayor, lo que indica que las edades están más dispersas en este grupo.

Estos resultados sugieren que los empleados más jóvenes pueden tener una mayor tendencia a la rotación, mientras que los empleados de mayor edad tienden a permanecer en la empresa, lo que concuerda con la hipótesis planteada en la selección de variables.

# Gráfico de boxplot para Edad
ggplot(rotacion, aes(x = factor(Rotación), y = Edad, fill = factor(Rotación))) +
  geom_boxplot() +
  labs(title = "Distribución de Edad por Rotación", x = "Rotación", y = "Edad", fill = "Rotación")

tapply(rotacion$Edad, rotacion$Rotación, summary)
## $`0`
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   18.00   31.00   36.00   37.56   43.00   60.00 
## 
## $`1`
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   18.00   28.00   32.00   33.61   39.00   58.00

Antigüedad:

En cuanto a la antigüedad, se puede observar que los empleados que no rotan tienden a tener mayor antigüedad en la empresa. La mediana para este grupo es de 6 años, mientras que para los que rotan es de 3 años. La media y la mediana más bajas para el grupo que rota sugieren que la antigüedad está inversamente relacionada con la rotación. Es decir, a mayor antigüedad, menor es la probabilidad de rotación, como se esperaba desde el momento de la selección de variables.

# Gráfico de boxplot para Antigüedad
ggplot(rotacion, aes(x = factor(Rotación), y = Antigüedad, fill = factor(Rotación))) +
  geom_boxplot() +
  labs(title = "Distribución de Antigüedad por Rotación", x = "Rotación", y = "Antigüedad", fill = "Rotación")

tapply(rotacion$Antigüedad, rotacion$Rotación, summary)
## $`0`
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   3.000   6.000   7.369  10.000  37.000 
## 
## $`1`
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   1.000   3.000   5.131   7.000  40.000

Trabajos Anteriores:

Finalmente, se realiza un análisis sobre la cantidad de trabajos anteriores. Curiosamente, aunque la mediana para los que rotan es menor (1 empleo anterior frente a 2 para los que no rotan), la media es mayor para los que rotan (2.94 frente a 2.65). Esto sugiere que los empleados que rotan tienden a haber tenido más trabajos anteriores en promedio, lo que podría indicar una mayor predisposición al cambio de empleo.

La distribución inclinada hacia la derecha en ambos grupos muestra que, aunque la mayoría de los empleados han tenido pocos empleos anteriores, hay una minoría que ha tenido varios trabajos, lo que podría influir en la rotación.

# Gráfico de boxplot para Trabajos Anteriores
ggplot(rotacion, aes(x = factor(Rotación), y = Trabajos_Anteriores, fill = factor(Rotación))) +
  geom_boxplot() +
  labs(title = "Distribución de Trabajos Anteriores por Rotación", x = "Rotación", y = "Trabajos Anteriores", fill = "Rotación")

tapply(rotacion$Trabajos_Anteriores, rotacion$Rotación, summary)
## $`0`
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   1.000   2.000   2.646   4.000   9.000 
## 
## $`1`
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   1.000   1.000   2.941   5.000   9.000

Modelado:

Finalmente, tras realizar el análisis de las variables, se ajusta un modelo de regresión logística para determinar la probabilidad de rotación, basado en las variables seleccionadas. Para esto, se realiza una partición de los datos, utilizando el 70% de la muestra como conjunto de entrenamiento y el 30% restante como conjunto de prueba.

trainIndex <- createDataPartition(rotacion$Rotación, p = 0.7, list = FALSE)
trainData <- rotacion[trainIndex,]
testData <- rotacion[-trainIndex,]

modelo_final <- glm(Rotación ~ Satisfacción_Ambiental + Estado_Civil + Campo_Educación + 
                      Edad + Trabajos_Anteriores + Antigüedad, 
                    family = binomial(link = "logit"), 
                    data = rotacion)

summary(modelo_final)
## 
## Call:
## glm(formula = Rotación ~ Satisfacción_Ambiental + Estado_Civil + 
##     Campo_Educación + Edad + Trabajos_Anteriores + Antigüedad, 
##     family = binomial(link = "logit"), data = rotacion)
## 
## Coefficients:
##                            Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                 0.32892    0.37623   0.874  0.38198    
## Satisfacción_Ambiental2    -0.66659    0.22508  -2.962  0.00306 ** 
## Satisfacción_Ambiental3    -0.83645    0.20468  -4.087 4.38e-05 ***
## Satisfacción_Ambiental4    -0.88083    0.20637  -4.268 1.97e-05 ***
## Estado_CivilDivorciado     -0.27873    0.22417  -1.243  0.21373    
## Estado_CivilSoltero         0.80518    0.16604   4.849 1.24e-06 ***
## Campo_EducaciónHumanidades  1.00446    0.47720   2.105  0.03530 *  
## Campo_EducaciónMercadeo     0.66608    0.23649   2.817  0.00485 ** 
## Campo_EducaciónOtra        -0.08197    0.35586  -0.230  0.81782    
## Campo_EducaciónSalud       -0.11794    0.18674  -0.632  0.52766    
## Campo_EducaciónTecnicos     0.64866    0.24943   2.601  0.00931 ** 
## Edad                       -0.04845    0.00985  -4.919 8.69e-07 ***
## Trabajos_Anteriores         0.09568    0.03099   3.087  0.00202 ** 
## Antigüedad                 -0.04905    0.01712  -2.865  0.00418 ** 
## ---
## 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: 1160.3  on 1456  degrees of freedom
## AIC: 1188.3
## 
## Number of Fisher Scoring iterations: 5

Una vez realizado el modelo se procede a realizar una interpretacion de los coeficientes obtenidos:

Interpretación de coeficientes:

  1. Edad: exp(-0.04845) ≈ 0.953. Esto significa que, por cada año adicional de la persona, la probabilidad de rotación disminuye en un 4.7%. Es decir, a mayor edad, menor es la probabilidad de que el empleado rote.

  2. Trabajos Anteriores: exp(0.09568) ≈ 1.100. Esto indica que, por cada trabajo anterior que haya tenido el empleado, la probabilidad de rotación aumenta en un 10%. A más trabajos previos, mayor es la tendencia a rotar.

  3. Antigüedad: exp(-0.04905) ≈ 0.952. Esto sugiere que, por cada año adicional de antigüedad en la empresa, la probabilidad de rotación disminuye en un 4.8%. A mayor antigüedad, menor probabilidad de rotación.

  4. Satisfacción Ambiental: Dado que esta es una variable categórica, se elige un nivel de la variable como referencia, y se comparan los demás niveles con respecto a este. En este caso, se selecciona como valor de referencia Satisfacción Ambiental 1:

    • Satisfacción Ambiental 2: exp(-0.66659) ≈ 0.513. Los empleados con una satisfacción ambiental 2 tienen aproximadamente un 49% menor probabilidad de rotar en comparación con aquellos con satisfacción ambiental 1.

    • Satisfacción Ambiental 3: exp(-0.83645) ≈ 0.433. Los empleados con satisfacción ambiental 3 son un 57% menos propensos a rotar que los empleados con satisfacción ambiental 1.

    • Satisfacción Ambiental 4: exp(-0.88083) ≈ 0.414. Los empleados con satisfacción ambiental 4 son un 59% menos propensos a rotar que aquellos con satisfacción ambiental 1.

  5. Estado Civil: En este caso, el estado civil “casado” se usa como referencia, por lo que los demás estados se comparan con este:

    • Divorciado: exp(-0.27873) ≈ 0.756. Los empleados divorciados tienen un 24% menor probabilidad de rotar en comparación con los empleados casados,Sin embargo, este coeficiente no es estadísticamente significativo en el modelo, por lo que su efecto es incierto.

    • Soltero: exp(0.80518) ≈ 2.238. Los empleados solteros tienen un 123% mayor probabilidad de rotar en comparación con los empleados casados. Esto implica que, por cada empleado casado que rote, es 2.23 veces más probable que una persona soltera lo haga.

  6. Campo de Estudio: En este caso, el campo de estudio “ciencias” se usa como referencia, y las demás categorías se interpretan en relación con este:

    • Humanidades: exp(1.00446) ≈ 2.730. Los empleados con carreras en humanidades tienen 2.73 veces más probabilidad de rotar que aquellos con formación en ciencias, es decir, un 173% mayor probabilidad de rotación.

    • Mercadeo: exp(0.66608) ≈ 1.947. Los empleados con formación en mercadeo tienen un 94% mayor probabilidad de rotar en comparación con los empleados con formación en ciencias.

    • Otra: exp(-0.08197) ≈ 0.921. Los empleados cuyo campo de estudio es “otra” tienen un 8% menor probabilidad de rotar en comparación con los empleados con formación en ciencias. Sin embargo, este coeficiente no es estadísticamente significativo en el modelo, por lo que su efecto es incierto.

    • Salud: exp(-0.11794) ≈ 0.888. Los empleados con formación en salud tienen un 11.2% menor probabilidad de rotar en comparación con aquellos de ciencias.Sin embargo, este coeficiente no es estadísticamente significativo en el modelo, por lo que su efecto es incierto.

    • Técnicos: exp(0.64866) ≈ 1.913. Los empleados con formación técnica tienen un 91% mayor probabilidad de rotar en comparación con los empleados de ciencias.

Evaluación del modelo:

Una vez ajustado el modelo, se procede a su validación utilizando métricas como el AUC (Área Bajo la Curva) y la Curva ROC, además de la matriz de confusión, que permite verificar métricas como la tasa de verdaderos positivos o recall. Dado que este es un caso con datos desbalanceados, el recall es una medida apropiada para evaluar el desempeño del modelo.

valor_pronosticado <- predict(modelo_final, newdata = testData, type = "response")
curva_ROC <- roc(testData$Rotación, valor_pronosticado)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
auc <- round(auc(curva_ROC, levels = c(0, 1), direction = "<"), 4)
ggroc(curva_ROC, colour = "#FF7F00", size = 1) +
  ggtitle(paste0("Curva ROC ", "(AUC = ", auc, ")")) +
  xlab("Especificidad") +
  ylab("Sensibilidad")+
   geom_abline(slope = 1, intercept = 1, linetype = "dashed", color = "red")

El modelo muestra un AUC de 0.7546, lo que indica que el modelo tiene un rendimiento razonable en términos de separación entre clases. Sin embargo, al analizar la matriz de confusión, se observa que, aunque hay un buen porcentaje de aciertos en la clasificación, el modelo tiene dificultades para identificar los casos positivos correctamente, lo que se refleja en un mayor número de falsos negativos.

niveles_pronosticados <- ifelse(valor_pronosticado > 0.5, 1, 0)
rendimiento_data <- data.frame(observados = testData$Rotación, 
                               predicciones = niveles_pronosticados)

VP <- sum(rendimiento_data$observados == 1 & rendimiento_data$predicciones == 1)  # Verdaderos Positivos
VN <- sum(rendimiento_data$observados == 0 & rendimiento_data$predicciones == 0)  # Verdaderos Negativos
FP <- sum(rendimiento_data$observados == 0 & rendimiento_data$predicciones == 1)  # Falsos Positivos
FN <- sum(rendimiento_data$observados == 1 & rendimiento_data$predicciones == 0)  # Falsos Negativos
matriz_confusion <- matrix(c(VP, FP, FN, VN), nrow = 2)
rownames(matriz_confusion) <- c("Real: 1 (Rotación)", "Real: 0 (No Rotación)")
colnames(matriz_confusion) <- c("Pred: 1 (Rotación)", "Pred: 0 (No Rotación)")
print(matriz_confusion)
##                       Pred: 1 (Rotación) Pred: 0 (No Rotación)
## Real: 1 (Rotación)                    13                    52
## Real: 0 (No Rotación)                  4                   372

La matriz de confusión muestra que el modelo logra un buen accuracy (precisión global), pero debido al desbalance en los datos, presenta dificultades en la detección de casos positivos. Esto implica que el modelo tiende a producir falsos negativos (predice que no habrá rotación cuando en realidad la hay).

Finalmente, se calculan métricas de desempeño adicionales como el Accuracy y el Recall para evaluar el rendimiento del modelo en un contexto desbalanceado:

ACCURACY <- (VP+VN)/(VP+VN+FP+FN) 
ACCURACY 
## [1] 0.8730159
RECALL <- VP/(VP+FN)
RECALL
## [1] 0.2
  • Accuracy: Mide el porcentaje total de predicciones correctas (tanto positivas como negativas) en el modelo. Dado el desbalance de clases, el accuracy puede ser alto, ya que el modelo predice correctamente muchos negativos.

  • Recall: Mide la capacidad del modelo para identificar correctamente los casos positivos (rotación). Un recall bajo indicaría que el modelo tiene dificultades para detectar rotaciones, lo cual es común en modelos entrenados con datos desbalanceados.

Estrategia para disminuir la rotación

Teniendo en cuenta los resultados, las variables más significativas para predecir la rotación son la edad, la satisfacción ambiental, el estado civil, el campo de educación, la antigüedad y el número de trabajos anteriores.

Estrategias recomendadas:

  1. Mejorar la satisfacción ambiental:

Dado que la satisfacción ambiental es un factor crucial en la probabilidad de rotación, es fundamental que la empresa implemente estrategias para mejorar el ambiente laboral. Esto puede incluir proporcionar mejores condiciones de trabajo, realizar encuestas periódicas para evaluar la satisfacción y tomar medidas basadas en los resultados obtenidos.

  1. Enfoque en empleados más jóvenes:

Los empleados más jóvenes mostraron una mayor tendencia a rotar, lo que sugiere la necesidad de desarrollar programas de retención específicos para este grupo. Ofrecer oportunidades de crecimiento profesional, capacitaciones y planes de desarrollo de carrera podría ayudar a reducir la rotación entre los empleados jóvenes, que a menudo están en búsqueda de nuevas oportunidades.

  1. Empleados con alta rotación previa:

Los empleados que han tenido varios trabajos anteriores son más propensos a rotar nuevamente. Para mitigar este riesgo, la empresa podría diseñar programas de mentoría y apoyo enfocados en este grupo, buscando satisfacer sus necesidades específicas y aumentar su compromiso con la organización.