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.

A continuación se describen los pasos que la gerencia ha propuesto para el análisis:

#install.packages("devtools") # solo la primera vez
#devtools::install_github("dgonxalex80/paqueteMODELOS", force =TRUE)
library(paqueteMODELOS)
## Loading required package: boot
## Loading required package: broom
## Loading required package: GGally
## Loading required package: ggplot2
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
## Loading required package: gridExtra
## Loading required package: knitr
## Loading required package: summarytools
data("rotacion")
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:gridExtra':
## 
##     combine
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
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, …

1. Selección de variables

Seleccione 3 variables categóricas (distintas de rotación) y 3 variables cuantitativas, que se consideren estén relacionadas con la rotación.

Variables Categoricas

Campo_Educación: Depende la profesión del empleado puede recibir mas o menos ofertas laborales. Viaje de Negocios: Las personas que viajan con frecuencia por negocios podrían experimentar más estrés y desgaste, lo que podría estar relacionado con la rotación. Horas_Extra: Los empleados que trabajan horas extra constantemente podrían experimentar un mayor agotamiento y descontento, lo que podría aumentar la probabilidad de rotación.

Variables Cuantitativas

Edad: La edad puede estar relacionada con la rotación, ya que los empleados más jóvenes podrían estar más dispuestos a cambiar de empleo en busca de oportunidades de crecimiento, mientras que los empleados mayores podrían estar buscando estabilidad. Satisfación_Laboral: Este indicador refleja claramente que nivel de apego tiene un empleado hacia su compañia y su posición. Antigüedad_Cargo: Las personas con mas antiguedad en su cargo tienden a evitar realizar cambios en su vida profesional.

Se podría hipotetizar que existe una relación compleja entre las variables seleccionadas y la rotación laboral. Por ejemplo, se podría plantear que los empleados que trabajan en campos de educación altamente demandados pueden recibir constantemente ofertas de empleo tentadoras, lo que aumenta su propensión a cambiar de trabajo (variable Campo_Educación). Además, aquellos que viajan frecuentemente por negocios o realizan horas extra constantemente pueden experimentar un mayor desgaste y agotamiento, lo que podría aumentar su insatisfacción laboral y, por lo tanto, su probabilidad de buscar nuevas oportunidades laborales (variables Viaje de Negocios y Horas_Extra). Por otro lado, la edad y la antigüedad en el cargo podrían actuar como factores mitigantes. Los empleados más jóvenes podrían estar más dispuestos a cambiar de trabajo en busca de crecimiento profesional, mientras que los empleados mayores y con más antigüedad en su cargo podrían valorar más la estabilidad laboral y ser menos propensos a cambiar de empleo. Además, la satisfacción laboral podría mediar en estas relaciones, ya que los empleados más satisfechos con su trabajo podrían ser menos propensos a cambiar de empleo, independientemente de otros factores.

2. Análisis univariado

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

summary(rotacion)
##    Rotación              Edad       Viaje de Negocios  Departamento      
##  Length:1470        Min.   :18.00   Length:1470        Length:1470       
##  Class :character   1st Qu.:30.00   Class :character   Class :character  
##  Mode  :character   Median :36.00   Mode  :character   Mode  :character  
##                     Mean   :36.92                                        
##                     3rd Qu.:43.00                                        
##                     Max.   :60.00                                        
##  Distancia_Casa     Educación     Campo_Educación    Satisfacción_Ambiental
##  Min.   : 1.000   Min.   :1.000   Length:1470        Min.   :1.000         
##  1st Qu.: 2.000   1st Qu.:2.000   Class :character   1st Qu.:2.000         
##  Median : 7.000   Median :3.000   Mode  :character   Median :3.000         
##  Mean   : 9.193   Mean   :2.913                      Mean   :2.722         
##  3rd Qu.:14.000   3rd Qu.:4.000                      3rd Qu.:4.000         
##  Max.   :29.000   Max.   :5.000                      Max.   :4.000         
##     Genero             Cargo           Satisfación_Laboral Estado_Civil      
##  Length:1470        Length:1470        Min.   :1.000       Length:1470       
##  Class :character   Class :character   1st Qu.:2.000       Class :character  
##  Mode  :character   Mode  :character   Median :3.000       Mode  :character  
##                                        Mean   :2.729                         
##                                        3rd Qu.:4.000                         
##                                        Max.   :4.000                         
##  Ingreso_Mensual Trabajos_Anteriores Horas_Extra       
##  Min.   : 1009   Min.   :0.000       Length:1470       
##  1st Qu.: 2911   1st Qu.:1.000       Class :character  
##  Median : 4919   Median :2.000       Mode  :character  
##  Mean   : 6503   Mean   :2.693                         
##  3rd Qu.: 8379   3rd Qu.:4.000                         
##  Max.   :19999   Max.   :9.000                         
##  Porcentaje_aumento_salarial Rendimiento_Laboral Años_Experiencia
##  Min.   :11.00               Min.   :3.000       Min.   : 0.00   
##  1st Qu.:12.00               1st Qu.:3.000       1st Qu.: 6.00   
##  Median :14.00               Median :3.000       Median :10.00   
##  Mean   :15.21               Mean   :3.154       Mean   :11.28   
##  3rd Qu.:18.00               3rd Qu.:3.000       3rd Qu.:15.00   
##  Max.   :25.00               Max.   :4.000       Max.   :40.00   
##  Capacitaciones  Equilibrio_Trabajo_Vida   Antigüedad     Antigüedad_Cargo
##  Min.   :0.000   Min.   :1.000           Min.   : 0.000   Min.   : 0.000  
##  1st Qu.:2.000   1st Qu.:2.000           1st Qu.: 3.000   1st Qu.: 2.000  
##  Median :3.000   Median :3.000           Median : 5.000   Median : 3.000  
##  Mean   :2.799   Mean   :2.761           Mean   : 7.008   Mean   : 4.229  
##  3rd Qu.:3.000   3rd Qu.:3.000           3rd Qu.: 9.000   3rd Qu.: 7.000  
##  Max.   :6.000   Max.   :4.000           Max.   :40.000   Max.   :18.000  
##  Años_ultima_promoción Años_acargo_con_mismo_jefe
##  Min.   : 0.000        Min.   : 0.000            
##  1st Qu.: 0.000        1st Qu.: 2.000            
##  Median : 1.000        Median : 3.000            
##  Mean   : 2.188        Mean   : 4.123            
##  3rd Qu.: 3.000        3rd Qu.: 7.000            
##  Max.   :15.000        Max.   :17.000

A continuación, realizaremos un estudio de las variables cuantitativas.

par(mfrow = c(1, 3))

hist(rotacion$Edad, main = "Histograma de Edad", xlab = "Edad", col = "#FF5733")
hist(rotacion$Satisfación_Laboral, main = "Histograma de Satisfación Laboral", xlab = "Satisfación Laboral", col ="#FFC300")
hist(rotacion$Antigüedad_Cargo, main = "Histograma de Antigüedad en el Cargo", xlab = "Antigüedad en el Cargo", col ="#900C3F")

De igual manera, tambien podemos obtener los graficos de bigotes de estas tres variables:

boxplot(rotacion$Edad, main = "Edad", ylab = "Edad", col = "#FF5733")

  boxplot(rotacion$Satisfación_Laboral, main = "Satisfación Laboral", ylab = "Satisfación Laboral", col = "#FFC300")

boxplot(rotacion$Antigüedad_Cargo, main = "Antigüedad en el Cargo", ylab = "Antigüedad en el Cargo", col = "#900C3F")

De acuerdo a los graficos obtenidos anteriormente, podemos observar que el promedio de edad de los empleados de esta compañia esta en 36 años, la satisfación laboral de la mayor parte de ellos esta sobre 3, y la mayor cantidad de empleados son relativamente nuevos en la compañia.

De igual manera, por medio de histogramas haremos una exploración de las variables categoricas seleccionadas anteriormente.

par(mfrow = c(1, 3))
barplot(table(rotacion$Campo_Educación), main = "Histograma de Campo de Educación", col = "#FF5733", las = 2)

barplot(table(rotacion$`Viaje de Negocios`), main = "Histograma de Viaje de Negocios", col = "#FFC300",las = 2)

barplot(table(rotacion$Horas_Extra), main = "Histograma de Horas Extra", xlab = "Horas Extra", col = "#900C3F")

De las variables categoricas seleccionadas podemos observar que la mayor cantidad de posiciones de la compañia estan distribuidas entre personal formado en ciencias y en salud, asi como tambien se puede observar que mas de dos terceras partes de los empleados no han tenido que trabajar horas extras.

3. Análisis bivariado

Realiza un análisis de bivariado en donde la variable respuesta sea rotacion 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.

Inicialmente realizaremos las validaciones de la edad según la rotación, donde según nuestra hipotesis a mayor edad es mas improbable que un empleado se retire de su cargo.

library(ggplot2)

ggplot(rotacion, aes(x = Rotación, y = Edad, fill = Rotación)) +
  geom_boxplot() +
  labs(title = "Rotación según la Edad",
       x = "Rotación",
       y = "Edad") +
  scale_fill_manual(values = c("Si" = "#FF5733", "No" = "#FFC300"))

Del gráfico anterior, podemos observar que nuestra hipotesis se cumple, es decir, la gente que rota tiene una media de edad cercana a los 32 años, mientras aquellos empleados que no cambian de trabajo tienen una media de edad sobre los 36 años.

ggplot(rotacion, aes(x = Rotación, y = Satisfación_Laboral, fill = Rotación)) +
  geom_boxplot() +
  labs(title = "Rotación según la Satisfación Laboral",
       x = "Rotación",
       y = "Satisfación Laboral") +
  scale_fill_manual(values = c("Si" = "#40E0D0", "No" = "#006A89"))

Del gráfico anterior se deduce claramente que los empleados que rotaron en la empresa presentaban niveles de satisfacción laboral notablemente bajos. Esta situación posiblemente los impulsó a buscar activamente nuevas oportunidades laborales.

ggplot(rotacion, aes(x = Rotación, y = Antigüedad_Cargo, fill = Rotación)) +
  geom_boxplot() +
  labs(title = "Rotación según la Antigüedad en el Cargo",
       x = "Rotación",
       y = "Antigüedad en el Cargo") +
  scale_fill_manual(values = c("Si" = "#49E900", "No" = "#900C3F"))

De este gráfico resulta interesante observar que, en ambos casos, la mediana es de aproximadamente 2 años y medio. Sin embargo, es evidente que los empleados que llevan más tiempo en la empresa muestran un mayor apego a ella.

Prueba de Hipotesis

Para llevar a cabo una evaluación de las variables determinantes, vamor a realizar una evaluación del p-value de las distintas relaciones. Para ello, creamos tablas de relación con la rotación:

var_edad = table(rotacion$Rotación,rotacion$Edad)
var_Satisfación_Laboral = table(rotacion$Rotación,rotacion$Satisfación_Laboral)
var_Antigüedad_Cargo = table(rotacion$Rotación,rotacion$Antigüedad_Cargo)
var_Campo_Educación = table(rotacion$Rotación,rotacion$Campo_Educación)
var_viajes = table(rotacion$Rotación,rotacion$`Viaje de Negocios`)
var_Horas_Extra = table(rotacion$Rotación,rotacion$Horas_Extra)

Chi-Cuadrado

#Relación Rotación-Edad
chisq.test (x=var_edad)
## Warning in chisq.test(x = var_edad): Chi-squared approximation may be incorrect
## 
##  Pearson's Chi-squared test
## 
## data:  var_edad
## X-squared = 119.41, df = 42, p-value = 2.38e-09
#Relación Satisfación Laboral
chisq.test (x=var_Satisfación_Laboral)
## 
##  Pearson's Chi-squared test
## 
## data:  var_Satisfación_Laboral
## X-squared = 17.505, df = 3, p-value = 0.0005563
#Relación Antiguedad Cargo
chisq.test (x=var_Antigüedad_Cargo)
## Warning in chisq.test(x = var_Antigüedad_Cargo): Chi-squared approximation may
## be incorrect
## 
##  Pearson's Chi-squared test
## 
## data:  var_Antigüedad_Cargo
## X-squared = 64.301, df = 18, p-value = 4.056e-07
#Relación Campo Educación
chisq.test (x=var_Campo_Educación)
## Warning in chisq.test(x = var_Campo_Educación): Chi-squared approximation may
## be incorrect
## 
##  Pearson's Chi-squared test
## 
## data:  var_Campo_Educación
## X-squared = 16.025, df = 5, p-value = 0.006774
#Relación Viajes
chisq.test (x=var_viajes)
## 
##  Pearson's Chi-squared test
## 
## data:  var_viajes
## X-squared = 24.182, df = 2, p-value = 5.609e-06
#Relación Horas Extra
chisq.test (x=var_Horas_Extra)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  var_Horas_Extra
## X-squared = 87.564, df = 1, p-value < 2.2e-16

Comúnmente, se utiliza un nivel de significancia de 0.05 (o 5%). Si el valor de p obtenido en la prueba chi-cuadrado es menor que este nivel de significancia, se considera que hay evidencia suficiente para rechazar la hipótesis nula de independencia entre las variables y concluir que hay una relación significativa entre ellas.

En este orden de ideas, podemos decir que todas las variables definidas en nuestra hipotesis tienen la dependencia planteada.

4. Estimación del modelo

Realiza la estimación de un modelo de regresión logístico en el cual la variable respuesta es rotacion (y=1 es si rotación, y=0 es no rotación) y las covariables las 6 seleccionadas en el punto 1. Interprete los coeficientes del modelo y la significancia de los parámetros.

Para llevar a cabo la estimación de nuestro modelo, realizamos una partición en los datos de forma aleatoria donde 70% sea un set para entrenar el modelo y 30% para prueba.

Para ello inicialmente realizamos una copia de nuestro dataset, y posteriormente con este dataset copiado dividimos nuestros datos en una muestra de entrenamiento y otro de test con el uso del comando createDataPartition.

rotacion_cop=rotacion 
#Se aplica as.factor para representar variables categóricas 
#de una manera que R puede entender y utilizar adecuadamente en modelos estadísticos.
rotacion_cop$Rotación <- as.factor(rotacion$Rotación)

# Semilla para reproducir los mismos resultados
set.seed(100)  

# Generamos un vector de índices aleatorios del mismo tamaño que el 
# número de filas en los datos
indices <- sample(1:nrow(rotacion_cop))

# Calculamos el número de filas que se usarán para el entrenamiento (70%)
n_train <- ceiling(0.7 * nrow(rotacion_cop))

# Seleccionamos las primeras n_train filas para el conjunto de entrenamiento
rota_train <- rotacion_cop[indices[1:n_train], ]

# Datos para el conjunto de prueba
rota_test <- rotacion_cop[indices[-(1:n_train)], ]

A continuación, estimaremos un modelo logistico con la muestra del 70%.

model_rota_train = glm(Rotación~Edad+Satisfación_Laboral+Edad+Antigüedad_Cargo+
        Horas_Extra+Campo_Educación+`Viaje de Negocios` ,data = rota_train,family = "binomial")
summary(model_rota_train)
## 
## Call:
## glm(formula = Rotación ~ Edad + Satisfación_Laboral + Edad + 
##     Antigüedad_Cargo + Horas_Extra + Campo_Educación + `Viaje de Negocios`, 
##     family = "binomial", data = rota_train)
## 
## Coefficients:
##                              Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                   1.46887    0.50960   2.882 0.003947 ** 
## Edad                         -0.05343    0.01145  -4.665 3.09e-06 ***
## Satisfación_Laboral          -0.28932    0.08514  -3.398 0.000678 ***
## Antigüedad_Cargo             -0.16685    0.03465  -4.815 1.47e-06 ***
## Horas_ExtraSi                 1.57784    0.19684   8.016 1.10e-15 ***
## Campo_EducaciónHumanidades    1.02771    0.68460   1.501 0.133306    
## Campo_EducaciónMercadeo       0.24562    0.32047   0.766 0.443415    
## Campo_EducaciónOtra          -0.54998    0.45997  -1.196 0.231820    
## Campo_EducaciónSalud         -0.26520    0.23570  -1.125 0.260525    
## Campo_EducaciónTecnicos       0.72079    0.30933   2.330 0.019797 *  
## `Viaje de Negocios`No_Viaja  -1.23086    0.43571  -2.825 0.004729 ** 
## `Viaje de Negocios`Raramente -0.72097    0.22532  -3.200 0.001376 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 879.08  on 1028  degrees of freedom
## Residual deviance: 717.64  on 1017  degrees of freedom
## AIC: 741.64
## 
## Number of Fisher Scoring iterations: 5

Para interpretar el modelo obtendremos los valores Odds Ratio (OR) a partir del valor Estimate:

OR <- exp(estimate)

Para las horas extra tendremos por ejemplo que

Horas_ExtraSi: OR = exp(1.57784) ≈ 4.843

Esto indica que los empleados que trabajan horas extra tienen aproximadamente 4.843 veces mayores odds de rotación en comparación con aquellos que no trabajan horas extra

De esta forma, para el campo educación tendremos:

Campo_EducaciónHumanidades: OR = exp(1.02771) ≈ 2.793

Campo_EducaciónMercadeo: OR = exp(0.24562) ≈ 1.278

Campo_EducaciónOtra: OR = exp(-0.54998) ≈ 0.577

Campo_EducaciónSalud: OR = exp(-0.26520) ≈ 0.767

Campo_EducaciónTecnicos: OR = exp(0.72079) ≈ 2.056

unique(rotacion$Campo_Educación)
## [1] "Ciencias"    "Otra"        "Salud"       "Mercadeo"    "Tecnicos"   
## [6] "Humanidades"

Donde podemos observar que aquellas posiciones con nivel educativo en Educación Humanidades tienen aproximadamente 2.8 mayores OR de rotación en comparación con los aquellos trabajadores formados en ciencias y esta probabilidad es mas del doble que aquellos empleados con formación en mercadeo.

De igual forma, para las varuables numericas tenemos:

Edad: OR = exp(-0.05343) ≈ 0.948

Satisfación_Laboral: OR = exp(-0.28932) ≈ 0.748

Antigüedad_Cargo: OR = exp(-0.16685) ≈ 0.846

La interpretación de los resultados revela cómo diversas variables afectan las probabilidades de rotación de los empleados. Se observa que, por cada año adicional de edad, la probabilidad de rotación disminuye en aproximadamente un 5%, lo que sugiere que los empleados más jóvenes enfrentan mayores probabilidades de rotación en comparación con sus colegas mayores. Además, se destaca que un aumento en la satisfacción laboral, medido en una escala específica, se relaciona con una disminución del 25% en las probabilidades de rotación. Por último, cada año adicional de antigüedad en el cargo se asocia con una reducción del 15% en las probabilidades de rotación, indicando que los empleados con mayor experiencia en sus roles tienden a tener menores probabilidades de rotación en comparación con aquellos con menos tiempo en sus cargos.

5. Evaluación

Evaluar el poder predictivo del modelo con base en la curva ROC y el AUC. De esta forma, vamos a realizar una evauación del modelo de regresión logística (model_rota_train) sobre un conjunto de datos de prueba (rota_test).

El umbral de clasificación utilizado aquí es 0.2, lo que significa que cualquier probabilidad predicha mayor que 0.2 se clasificará como 1, de lo contrario, se clasificará como 0. La función table() devuelve una tabla de contingencia con las frecuencias de observaciones reales y predichas.

pp1= predict.glm(model_rota_train, newdata = rota_test, type = "response")

resp = table(rota_test$Rotación, ifelse(pp1 >0.3, 1, 0), dnn = c("observaciones", "predicciones"))
resp
##              predicciones
## observaciones   0   1
##            No 330  31
##            Si  48  32

Predicción a Partir del Modelo de Test

prediccion= predict(model_rota_train,list( Edad=rotacion_cop$Edad, Satisfación_Laboral=rotacion_cop$Satisfación_Laboral, Genero = rotacion_cop$Genero, Horas_Extra = rotacion_cop$Horas_Extra, Campo_Educación = rotacion_cop$Campo_Educación, `Viaje de Negocios` = rotacion_cop$`Viaje de Negocios`, Antigüedad_Cargo = rotacion_cop$Antigüedad_Cargo  ),type = "response")

GRÁFICA ROC

La curva ROC (Receiver Operating Characteristic) es una herramienta gráfica que representa la relación entre la tasa de verdaderos positivos (Sensibilidad) y la tasa de falsos positivos (1 - Especificidad) para diferentes umbrales de clasificación. En un gráfico ROC, la Sensibilidad se representa en el eje y (vertical) y la Especificidad en el eje x (horizontal).

El área bajo la curva ROC (ROC AUC) es una medida de la capacidad predictiva global del modelo. Cuanto más se acerque el ROC AUC a 1, mejor será el modelo para distinguir entre clases positivas y negativas. Un modelo con ROC AUC igual a 0.5 se considera que no tiene capacidad de discriminación (como lanzar una moneda), mientras que un modelo con ROC AUC igual a 1 se considera perfecto.

prediccion= predict(model_rota_train,list( Edad=rotacion_cop$Edad, Satisfación_Laboral=rotacion_cop$Satisfación_Laboral, Genero = rotacion_cop$Genero, Horas_Extra = rotacion_cop$Horas_Extra, Campo_Educación = rotacion_cop$Campo_Educación, `Viaje de Negocios` = rotacion_cop$`Viaje de Negocios`, Antigüedad_Cargo = rotacion_cop$Antigüedad_Cargo  ),type = "response")
#install.packages("pROC")
library(pROC)
## Type 'citation("pROC")' for a citation.
## 
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
## 
##     cov, smooth, var
ROC_plot= roc(rotacion_cop$Rotación~prediccion, percent = T, ci=T)
## Setting levels: control = No, case = Si
## Setting direction: controls < cases
plot(ROC_plot,print.auc=T,print.thres = "best",col="red"
         ,xlab = "Specificity", ylab = "Sensitivity")

Nuestro modelo nos brinda un ROC AUC del 77.2%, lo que sugiere que el modelo es capaz de distinguir entre las clases positivas y negativas mejor que un clasificador aleatorio (que tendría un ROC AUC de 50%). Esto indica que el modelo tiene cierto poder predictivo y capacidad de discriminación.

6. Predicciones

Realiza una predicción la probabilidad de que un individuo (hipotético) rote y defina un corte para decidir si se debe intervenir a este empleado o no (posible estrategia para motivar al empleado).

Vamos a realizar una comparación cambiando los parametros de hora extra.

#Empleado trabajando con horas extra
predict(model_rota_train,list(Edad=35,Satisfación_Laboral=3,Antigüedad_Cargo=2,Horas_Extra="Si",Campo_Educación="Ciencias",`Viaje de Negocios`="Raramente"))
##          1 
## -0.7458364
#Empleado trabajando sin horas extra
predict(model_rota_train,list(Edad=35,Satisfación_Laboral=3,Antigüedad_Cargo=2,Horas_Extra="No",Campo_Educación="Ciencias",`Viaje de Negocios`="Raramente"))
##         1 
## -2.323675

Para interpretar estos resultados en términos de probabilidades, podemos aplicar la función exponencial (exp) a estos valores. Esto transformará las log-odds en probabilidades, de esta forma tendremos:

Empleado trabajando con horas extra:

La probabilidad de rotación sería exp(-0.7458364) ≈ 0.474, lo que sugiere una probabilidad del 47.4% de rotación para este empleado específico.

Empleado trabajando sin horas extra:

La probabilidad de rotación sería exp(-2.323675) ≈ 0.097, lo que sugiere una probabilidad del 9.7% de rotación para este empleado específico.

Se puede notar que simplemente el hecho de que este empleado en particular deje de trabajar horas extra reduce su probabilidad de abandonar el puesto del 47.4% al 9.7%, lo que disminuye el riesgo de dejar la empresa en aproximadamente cinco veces.

7. Conclusiones

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

Basándonos en los hallazgos de este informe, podemos concluir que para reducir efectivamente la probabilidad de rotación en los cargos, es fundamental evitar que los empleados trabajen horas extras. Además, si se busca minimizar la rotación en roles cruciales, sería preferible seleccionar candidatos de mayor edad y ofrecer incentivos por la antigüedad en la empresa, ya que cada año de antigüedad se correlaciona con una disminución del 9% en la rotación. Por último, observamos que la profesión del empleado puede influir significativamente en estos valores, con diferencias que pueden llegar a ser hasta el doble entre campos como ciencias y humanidades. Por lo tanto, sería prudente estudiar detenidamente las preferencias y retroalimentación de los empleados en cada área para desarrollar estrategias específicas dirigidas a abordar los desafíos únicos de cada departamento.