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.
Seleccione 3 variables categóricas (distintas de rotación) y 3 variables cuantitativas, que se consideren estén relacionadas con la rotación.
# Cargar archivo de datos
library(paqueteMODELOS)
data('rotacion')
# Ver encabezado / primeras filas
head(rotacion)
## # A tibble: 6 × 24
## Rotación Edad `Viaje de Negocios` Departamento Distancia_Casa Educación
## <chr> <dbl> <chr> <chr> <dbl> <dbl>
## 1 Si 41 Raramente Ventas 1 2
## 2 No 49 Frecuentemente IyD 8 1
## 3 Si 37 Raramente IyD 2 2
## 4 No 33 Frecuentemente IyD 3 4
## 5 No 27 Raramente IyD 2 1
## 6 No 32 Frecuentemente IyD 2 2
## # ℹ 18 more variables: Campo_Educación <chr>, Satisfacción_Ambiental <dbl>,
## # Genero <chr>, Cargo <chr>, Satisfación_Laboral <dbl>, Estado_Civil <chr>,
## # Ingreso_Mensual <dbl>, Trabajos_Anteriores <dbl>, Horas_Extra <chr>,
## # Porcentaje_aumento_salarial <dbl>, Rendimiento_Laboral <dbl>,
## # Años_Experiencia <dbl>, Capacitaciones <dbl>,
## # Equilibrio_Trabajo_Vida <dbl>, Antigüedad <dbl>, Antigüedad_Cargo <dbl>,
## # Años_ultima_promoción <dbl>, Años_acargo_con_mismo_jefe <dbl>
# Ver últimas filas
tail(rotacion)
## # A tibble: 6 × 24
## Rotación Edad `Viaje de Negocios` Departamento Distancia_Casa Educación
## <chr> <dbl> <chr> <chr> <dbl> <dbl>
## 1 No 26 Raramente Ventas 5 3
## 2 No 36 Frecuentemente IyD 23 2
## 3 No 39 Raramente IyD 6 1
## 4 No 27 Raramente IyD 4 3
## 5 No 49 Frecuentemente Ventas 2 3
## 6 No 34 Raramente IyD 8 3
## # ℹ 18 more variables: Campo_Educación <chr>, Satisfacción_Ambiental <dbl>,
## # Genero <chr>, Cargo <chr>, Satisfación_Laboral <dbl>, Estado_Civil <chr>,
## # Ingreso_Mensual <dbl>, Trabajos_Anteriores <dbl>, Horas_Extra <chr>,
## # Porcentaje_aumento_salarial <dbl>, Rendimiento_Laboral <dbl>,
## # Años_Experiencia <dbl>, Capacitaciones <dbl>,
## # Equilibrio_Trabajo_Vida <dbl>, Antigüedad <dbl>, Antigüedad_Cargo <dbl>,
## # Años_ultima_promoción <dbl>, Años_acargo_con_mismo_jefe <dbl>
# Dataframe datos rotacion
rotacion_df = as.data.frame(rotacion)
# Estructura datos
str(rotacion)
## tibble [1,470 × 24] (S3: tbl_df/tbl/data.frame)
## $ Rotación : chr [1:1470] "Si" "No" "Si" "No" ...
## $ Edad : num [1:1470] 41 49 37 33 27 32 59 30 38 36 ...
## $ Viaje de Negocios : chr [1:1470] "Raramente" "Frecuentemente" "Raramente" "Frecuentemente" ...
## $ Departamento : chr [1:1470] "Ventas" "IyD" "IyD" "IyD" ...
## $ Distancia_Casa : num [1:1470] 1 8 2 3 2 2 3 24 23 27 ...
## $ Educación : num [1:1470] 2 1 2 4 1 2 3 1 3 3 ...
## $ Campo_Educación : chr [1:1470] "Ciencias" "Ciencias" "Otra" "Ciencias" ...
## $ Satisfacción_Ambiental : num [1:1470] 2 3 4 4 1 4 3 4 4 3 ...
## $ Genero : chr [1:1470] "F" "M" "M" "F" ...
## $ Cargo : chr [1:1470] "Ejecutivo_Ventas" "Investigador_Cientifico" "Tecnico_Laboratorio" "Investigador_Cientifico" ...
## $ Satisfación_Laboral : num [1:1470] 4 2 3 3 2 4 1 3 3 3 ...
## $ Estado_Civil : chr [1:1470] "Soltero" "Casado" "Soltero" "Casado" ...
## $ Ingreso_Mensual : num [1:1470] 5993 5130 2090 2909 3468 ...
## $ Trabajos_Anteriores : num [1:1470] 8 1 6 1 9 0 4 1 0 6 ...
## $ Horas_Extra : chr [1:1470] "Si" "No" "Si" "Si" ...
## $ Porcentaje_aumento_salarial: num [1:1470] 11 23 15 11 12 13 20 22 21 13 ...
## $ Rendimiento_Laboral : num [1:1470] 3 4 3 3 3 3 4 4 4 3 ...
## $ Años_Experiencia : num [1:1470] 8 10 7 8 6 8 12 1 10 17 ...
## $ Capacitaciones : num [1:1470] 0 3 3 3 3 2 3 2 2 3 ...
## $ Equilibrio_Trabajo_Vida : num [1:1470] 1 3 3 3 3 2 2 3 3 2 ...
## $ Antigüedad : num [1:1470] 6 10 0 8 2 7 1 1 9 7 ...
## $ Antigüedad_Cargo : num [1:1470] 4 7 0 7 2 7 0 0 7 7 ...
## $ Años_ultima_promoción : num [1:1470] 0 1 0 3 2 3 0 0 1 7 ...
## $ Años_acargo_con_mismo_jefe : num [1:1470] 5 7 0 0 2 6 0 0 8 7 ...
Nota: Debes justificar porque estas variables están relacionadas y que tipo de relación se espera entre ellas (Hipótesis).
| Variable | Tipo | Relación esperada |
|---|---|---|
0. Rotación |
chr | Variable objetivo. |
1. Genero |
chr | Por determinar si las mujeres rotan menos que los hombres. |
2. Satisfación_Laboral |
num | Entre mayor satisfacción laboral, se espera menor rotación. |
3. Estado_Civil |
chr | Se espera mayor rotación en las personas solteras que en las casadas. |
4. Ingreso_Mensual |
num | Entre menor ingreso mensual, se espera mayor rotación. |
5. Horas_Extra |
chr | Entre mayor horas extra (i.e. trabajo), se espera mayor rotación. |
6. Antigüedad |
num | Entre mayor antigüedad, se espera menor rotación. |
Realiza un análisis univariado (caracterización) de la información
contenida en la base de datos rotacion.
# Resumen datos
summary(rotacion_df)
## 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
# Cantidad de NaN / nulls por variable
colSums(is.na(rotacion_df))
## Rotación Edad
## 0 0
## Viaje de Negocios Departamento
## 0 0
## Distancia_Casa Educación
## 0 0
## Campo_Educación Satisfacción_Ambiental
## 0 0
## Genero Cargo
## 0 0
## Satisfación_Laboral Estado_Civil
## 0 0
## Ingreso_Mensual Trabajos_Anteriores
## 0 0
## Horas_Extra Porcentaje_aumento_salarial
## 0 0
## Rendimiento_Laboral Años_Experiencia
## 0 0
## Capacitaciones Equilibrio_Trabajo_Vida
## 0 0
## Antigüedad Antigüedad_Cargo
## 0 0
## Años_ultima_promoción Años_acargo_con_mismo_jefe
## 0 0
Se procede a analizar las variables categóricas:
# Selección variables categóricas (character / string)
rotacion_df_chr = rotacion_df %>%
select(where(is.character))
# Identificación valores únicos variables categóricas
rotacion_df_chr_unq = lapply(rotacion_df_chr, unique)
# Valores únicos por variable
for (col in names(rotacion_df_chr_unq)) {
cat('Valores únicos', col, ':', paste(rotacion_df_chr_unq[[col]], collapse = ', '), '\n')
}
## Valores únicos Rotación : Si, No
## Valores únicos Viaje de Negocios : Raramente, Frecuentemente, No_Viaja
## Valores únicos Departamento : Ventas, IyD, RH
## Valores únicos Campo_Educación : Ciencias, Otra, Salud, Mercadeo, Tecnicos, Humanidades
## Valores únicos Genero : F, M
## Valores únicos Cargo : Ejecutivo_Ventas, Investigador_Cientifico, Tecnico_Laboratorio, Director_Manofactura, Representante_Salud, Gerente, Representante_Ventas, Director_Investigación, Recursos_Humanos
## Valores únicos Estado_Civil : Soltero, Casado, Divorciado
## Valores únicos Horas_Extra : Si, No
# Barras / tortas para cada variable categórica
par(mfrow = c(2, 2))
for (col in names(rotacion_df_chr)) {
barplot(table(rotacion_df_chr[[col]]), main = col)
pie(table(rotacion_df_chr[[col]]), main = col)
}
Luego se procede la generación de gráficos descriptivos para las variables numéricas del dataframe:
# Selección variables numéricas (numeric / double)
rotacion_df_num = rotacion_df %>%
select(where(is.numeric))
# Histogramas / diagramas caja para cada variable numérica
par(mfrow = c(2, 2))
for (col in names(rotacion_df_num)) {
hist(rotacion_df_num[[col]], main = col, xlab = col)
boxplot(rotacion_df_num[[col]], main = col, ylab = col)
}
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
hipótesis planteada en el punto 1.
# Variables categóricas / chr seleccionadas
rotacion_df_chr_sel = c('Genero', 'Estado_Civil', 'Horas_Extra')
# Variables cuantitativas / num seleccionadas
rotacion_df_num_sel = c('Satisfación_Laboral', 'Ingreso_Mensual', 'Antigüedad')
# Crear un nuevo dataframe con las variables seleccionadas
rotacion_df_sel = rotacion %>%
select('Rotación', all_of(rotacion_df_chr_sel), all_of(rotacion_df_num_sel))
# Rotación como factor
rotacion_df_sel$Rotación <- factor(rotacion_df_sel$Rotación)
# Primeras filas dataframe
kable(head(rotacion_df_sel))
| Rotación | Genero | Estado_Civil | Horas_Extra | Satisfación_Laboral | Ingreso_Mensual | Antigüedad |
|---|---|---|---|---|---|---|
| Si | F | Soltero | Si | 4 | 5993 | 6 |
| No | M | Casado | No | 2 | 5130 | 10 |
| Si | M | Soltero | Si | 3 | 2090 | 0 |
| No | F | Casado | Si | 3 | 2909 | 8 |
| No | M | Casado | No | 2 | 3468 | 2 |
| No | M | Soltero | No | 4 | 3068 | 7 |
# Boxplot Rotación vs Género
ggplot(data = rotacion_df_sel, aes(x = Genero, fill = Rotación)) +
geom_bar()
# Boxplot Rotación vs Estado Civil
ggplot(data = rotacion_df_sel, aes(x = Estado_Civil, fill = Rotación)) +
geom_bar()
# Boxplot Rotación vs Extras
ggplot(data = rotacion_df_sel, aes(x = Horas_Extra, fill = Rotación)) +
geom_bar()
# Boxplot Rotación vs Satisfacción
ggplot(data = rotacion_df_sel, aes(x = Rotación, y = Satisfación_Laboral, fill = Rotación)) +
geom_boxplot()
# Boxplot Rotación vs Ingreso
ggplot(data = rotacion_df_sel, aes(x = Rotación, y = Ingreso_Mensual, fill = Rotación)) +
geom_boxplot()
# Boxplot Rotación vs Antigüedad
ggplot(data = rotacion_df_sel, aes(x = Rotación, y = Antigüedad, fill = Rotación)) +
geom_boxplot()
Las gráficas anteriores muestran que las hipótesis / relaciones esperadas parecen cumplirse para las variables seleccionadas: - Los hombres, solteros y personas con horas extras rotan más que las otras categorías. - Las personas que rotan presentan menor satisfacción laboral, ingresos mensuales y antigüedad.
# Mutación variable "Rotación" como binaria
rotacion_df_sel_bin = rotacion_df_sel %>%
mutate(Rotación = as.numeric(rotacion_df_sel$Rotación == 'Si')) %>%
mutate(Genero = as.numeric(rotacion_df_sel$Genero == 'M')) %>%
mutate(Estado_Civil = as.factor(rotacion_df_sel$Estado_Civil)) %>%
mutate(Horas_Extra = as.numeric(rotacion_df_sel$Horas_Extra == 'Si'))
kable(head(rotacion_df_sel_bin))
| Rotación | Genero | Estado_Civil | Horas_Extra | Satisfación_Laboral | Ingreso_Mensual | Antigüedad |
|---|---|---|---|---|---|---|
| 1 | 0 | Soltero | 1 | 4 | 5993 | 6 |
| 0 | 1 | Casado | 0 | 2 | 5130 | 10 |
| 1 | 1 | Soltero | 1 | 3 | 2090 | 0 |
| 0 | 0 | Casado | 1 | 3 | 2909 | 8 |
| 0 | 1 | Casado | 0 | 2 | 3468 | 2 |
| 0 | 1 | Soltero | 0 | 4 | 3068 | 7 |
# Matriz dispersión / scatterplot entre variables
ggpairs(rotacion_df_sel_bin)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
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.
# Modelo de regresión logístico para Rotación binario
rotacion_gmod = glm(Rotación ~ ., data = rotacion_df_sel_bin, family = 'binomial') # Se obtiene exactamente lo mismo usando data = rotacion_df_sel
# Mostrar un resumen del modelo
summary(rotacion_gmod)
##
## Call:
## glm(formula = Rotación ~ ., family = "binomial", data = rotacion_df_sel_bin)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.004e+00 2.774e-01 -3.621 0.000293 ***
## Genero 2.896e-01 1.601e-01 1.808 0.070574 .
## Estado_CivilDivorciado -3.431e-01 2.295e-01 -1.495 0.134958
## Estado_CivilSoltero 9.074e-01 1.698e-01 5.346 9.01e-08 ***
## Horas_Extra 1.511e+00 1.581e-01 9.559 < 2e-16 ***
## Satisfación_Laboral -3.206e-01 6.885e-02 -4.657 3.20e-06 ***
## Ingreso_Mensual -1.045e-04 2.462e-05 -4.247 2.16e-05 ***
## Antigüedad -4.100e-02 1.811e-02 -2.265 0.023531 *
## ---
## 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: 1095.6 on 1462 degrees of freedom
## AIC: 1111.6
##
## Number of Fisher Scoring iterations: 5
Respecto a los resultamos del modelo glm, se puede observar lo siguiente:
El coeficiente para la variable Genero es de
aproximadamente 0.29. Esto significa que, manteniendo todas las demás
variables constantes, los hombres (género masculino / M) tienen una
mayor probabilidad de rotación en comparación con las mujeres. De todos
modos al contar con p-value de 0.0706, se considera que no es
significativo al nivel alpha / significancia del 0.05.
El coeficiente para “Estado_CivilSoltero” es de aproximadamente 0.91. como se suponía las personas solteras tienen una mayor probabilidad de rotación en comparación con las personas que tienen otro estado civil. Este coeficiente es significativo con un valor p mucho menor que 0.05.
El coeficiente para Horas_Extra es de 1.51. Por lo
que las personas que trabajan horas extras tienen una mayor probabilidad
de rotación en comparación con las que no trabajan extras. Este
coeficiente es muy significativo (p-value < 2e-16).
El coeficiente para Satisfacción_Laboral es -0.32.
Esto significa que un aumento en la satisfacción laboral está asociado
con una menor probabilidad de rotación. Este coeficiente es
significativo (p-value de 3.20e-06 < 0.05).
El coeficiente para Ingreso_Mensual es de
-1.045e-04. Por lo que un aumento en el ingreso mensual está asociado
con una ligera disminución en la probabilidad de rotación. Este
coeficiente es significativo (p-value de 2.16e-05 < 0.05), pero la
magnitud del efecto es pequeña (-0.0001).
El coeficiente para Antigüedad es de -0.041. Esto
indica que un aumento en la antigüedad está asociado con una ligera
disminución en la probabilidad de rotación. Este coeficiente es
significativo (p-value de 0.023, ligeramente menor que 0.05), pero al
igual que el ingreso, el efecto es pequeño.
Evaluar el poder predictivo del modelo con base en la curva ROC y el AUC.
# Calcular probabilidades modelo glm Rotación
rotacion_df_sel_bin$Prob = predict(rotacion_gmod, type = 'response')
kable(head(rotacion_df_sel_bin))
| Rotación | Genero | Estado_Civil | Horas_Extra | Satisfación_Laboral | Ingreso_Mensual | Antigüedad | Prob |
|---|---|---|---|---|---|---|---|
| 1 | 0 | Soltero | 1 | 4 | 5993 | 6 | 0.3227809 |
| 0 | 1 | Casado | 0 | 2 | 5130 | 10 | 0.0909139 |
| 1 | 1 | Soltero | 1 | 3 | 2090 | 0 | 0.6279140 |
| 0 | 0 | Casado | 1 | 3 | 2909 | 8 | 0.2521113 |
| 0 | 1 | Casado | 0 | 2 | 3468 | 2 | 0.1417619 |
| 0 | 1 | Soltero | 0 | 4 | 3068 | 7 | 0.1547539 |
# Calcular curva ROC modelo glm Rotación
rotacion_gmod_roc = roc(rotacion_df_sel_bin$Rotación, rotacion_df_sel_bin$Prob)
# Calcular AUC modelo glm Rotación
rotacion_gmod_auc = round(auc(rotacion_gmod_roc, levels =c(0,1), direction = '<'), 4)
rotacion_gmod_auc
## [1] 0.7755
Como puede observarse, un valor de AUC de 0.7755 indica que el modelo tiene un rendimiento razonable para predecir la rotación.
# pROC ggroc / curva ROC modelo glm Rotación
ggroc(rotacion_gmod_roc, colour = 'purple', size=1) +
ggtitle(paste0('Curva ROC ', '(AUC = ', rotacion_gmod_auc, ')'))+
xlab('Especificidad')+
ylab('Sensibilidad')
Para complementar se obtiene la matriz de confusión con
caret:
# Calcular las predicciones del modelo glm Rotación
rotacion_df_sel_bin$Predict = ifelse(rotacion_df_sel_bin$Prob > 0.5, 1, 0) # 'Si' = 1 y 'No' = 0
kable(head(rotacion_df_sel_bin))
| Rotación | Genero | Estado_Civil | Horas_Extra | Satisfación_Laboral | Ingreso_Mensual | Antigüedad | Prob | Predict |
|---|---|---|---|---|---|---|---|---|
| 1 | 0 | Soltero | 1 | 4 | 5993 | 6 | 0.3227809 | 0 |
| 0 | 1 | Casado | 0 | 2 | 5130 | 10 | 0.0909139 | 0 |
| 1 | 1 | Soltero | 1 | 3 | 2090 | 0 | 0.6279140 | 1 |
| 0 | 0 | Casado | 1 | 3 | 2909 | 8 | 0.2521113 | 0 |
| 0 | 1 | Casado | 0 | 2 | 3468 | 2 | 0.1417619 | 0 |
| 0 | 1 | Soltero | 0 | 4 | 3068 | 7 | 0.1547539 | 0 |
# calcular matriz confusión modelo glm Rotación
rotacion_confu_matrix = confusionMatrix(data = as.factor(rotacion_df_sel_bin$Predict),
reference = as.factor(rotacion_df_sel_bin$Rotación))
# Matriz confusión modelo glm Rotación
print(rotacion_confu_matrix)
## Confusion Matrix and Statistics
##
## Reference
## Prediction 0 1
## 0 1214 192
## 1 19 45
##
## Accuracy : 0.8565
## 95% CI : (0.8375, 0.874)
## No Information Rate : 0.8388
## P-Value [Acc > NIR] : 0.03378
##
## Kappa : 0.2474
##
## Mcnemar's Test P-Value : < 2e-16
##
## Sensitivity : 0.9846
## Specificity : 0.1899
## Pos Pred Value : 0.8634
## Neg Pred Value : 0.7031
## Prevalence : 0.8388
## Detection Rate : 0.8259
## Detection Prevalence : 0.9565
## Balanced Accuracy : 0.5872
##
## 'Positive' Class : 0
##
Lo anterior nos muestra que la exactitud (accuracy) del modelo es de 85.65%.
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).
# Dataframe persona / individuo hipotético
individuo_x = data.frame(
Genero = 1, # 'M' = 1
Estado_Civil = 'Casado',
Horas_Extra = 1, # 'Si'= 1
Satisfación_Laboral = 2,
Ingreso_Mensual = 9000,
Antigüedad = 11
)
# Predicción probabilidad rotación Individuo X
rotacion_x = predict(rotacion_gmod, newdata = individuo_x, type = 'response')
# Probabilidad obtenida
print(rotacion_x)
## 1
## 0.2249603
Según el modelo este “Individuo X”, tiene una probabilidad de aproximadamente 22.5% de rotar, lo cual se podría considerar dentro de lo “normal” y manejable. A juicio del autor, se deberían categorizar como críticos y tomar medidas (p.ej. trabajo remoto, pago estudios, viajes, bonificaciones, otorgamiento de reconocimientos, etc.) para los empleados que sean valiosos y/o tengan un alto desempeño en la organización.
En las conclusiones adicione una discusió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).
Con los datos de rotaciones analizados y al modelo de regresión logística aplicado, se puede observar lo siguiente:
Horas_Extra,
Satisfacción_Laboral e Ingreso_Mensual.