Selección de Variables Categóricas.
Departamento: Se anticipa que algunos departamentos presenten una mayor rotación de empleados en comparación con otros.
Satisfacción Laboral: Se espera que a medida que disminuye la satisfacción laboral, la tasa de rotación aumente.
Estado Civil: Las personas solteras tienden a cambiar de trabajo con mayor facilidad; por lo tanto, se esperaría que esta categoría presente una tasa de rotación más alta.
Selección de Variables Cuantitativas.
Ingreso Mensual: Existe una relación inversa entre los ingresos mensuales y la tasa de rotación: a mayores ingresos, menor es la tasa de rotación.
Antigüedad en el Cargo: Los empleados con mayor antigüedad suelen tener un mayor sentido de pertenencia, lo que se traduce en tasas de rotación más bajas.
Edad: A medida que aumenta la edad, es razonable esperar una mayor estabilidad laboral, por lo que anticipamos una menor tasa de rotación en grupos de mayor edad.
rotaciondf = rotacion %>%
select(Departamento, Satisfación_Laboral, Estado_Civil, Edad, Ingreso_Mensual,
Antigüedad_Cargo, Rotación)
kable(sample_n(rotaciondf,10), "html") %>%
kable_styling("striped", full_width = FALSE) %>%
row_spec(0, bold = TRUE) | Departamento | Satisfación_Laboral | Estado_Civil | Edad | Ingreso_Mensual | Antigüedad_Cargo | Rotación |
|---|---|---|---|---|---|---|
| Ventas | 4 | Soltero | 36 | 4502 | 7 | No |
| Ventas | 4 | Casado | 35 | 5204 | 8 | No |
| Ventas | 3 | Casado | 31 | 8346 | 2 | No |
| IyD | 3 | Soltero | 32 | 4998 | 7 | No |
| IyD | 2 | Divorciado | 55 | 13577 | 9 | No |
| IyD | 2 | Divorciado | 50 | 19144 | 4 | No |
| IyD | 3 | Divorciado | 27 | 2566 | 1 | No |
| IyD | 3 | Divorciado | 43 | 5257 | 7 | No |
| Ventas | 3 | Soltero | 35 | 4859 | 4 | No |
| Ventas | 3 | Divorciado | 29 | 8620 | 7 | No |
kable(sapply(rotaciondf[, c("Edad", "Ingreso_Mensual", "Antigüedad_Cargo")],
summary) , "html", caption = "Resumen de variables numéricas") %>%
kable_styling("striped", full_width = FALSE) %>%
row_spec(0, bold = TRUE) | Edad | Ingreso_Mensual | Antigüedad_Cargo | |
|---|---|---|---|
| Min. | 18.00000 | 1009.000 | 0.000000 |
| 1st Qu. | 30.00000 | 2911.000 | 2.000000 |
| Median | 36.00000 | 4919.000 | 3.000000 |
| Mean | 36.92449 | 6502.931 | 4.229252 |
| 3rd Qu. | 43.00000 | 8379.000 | 7.000000 |
| Max. | 60.00000 | 19999.000 | 18.000000 |
frecuencia_dep <- rotaciondf %>%
group_by(Departamento) %>%
summarise(Frecuencia = n())
frecuencia_SL <- rotaciondf %>%
group_by(Satisfación_Laboral) %>%
summarise(Frecuencia = n())
frecuencia_EC <- rotaciondf %>%
group_by(Estado_Civil) %>%
summarise(Frecuencia = n())
kable(frecuencia_dep , "html", caption = "Resumen por Departamento") %>%
kable_styling("striped", full_width = FALSE) %>%
row_spec(0, bold = TRUE)| Departamento | Frecuencia |
|---|---|
| IyD | 961 |
| RH | 63 |
| Ventas | 446 |
kable(frecuencia_SL , "html", caption = "Resumen por Satisfacción Laboral") %>%
kable_styling("striped", full_width = FALSE) %>%
row_spec(0, bold = TRUE)| Satisfación_Laboral | Frecuencia |
|---|---|
| 1 | 289 |
| 2 | 280 |
| 3 | 442 |
| 4 | 459 |
kable(frecuencia_EC , "html", caption = "Resumen por Estado civil") %>%
kable_styling("striped", full_width = FALSE) %>%
row_spec(0, bold = TRUE)| Estado_Civil | Frecuencia |
|---|---|
| Casado | 673 |
| Divorciado | 327 |
| Soltero | 470 |
g1=ggplot(rotaciondf,aes(x=Departamento))+geom_bar(fill = "cyan3")+theme_bw()
g2=ggplot(rotaciondf,aes(x=Satisfación_Laboral))+geom_bar(fill = "cyan3")+theme_bw()
g3=ggplot(rotaciondf,aes(x=Estado_Civil))+geom_bar(fill = "cyan3")+theme_bw()
g4=ggplot(rotaciondf,aes(x=Edad))+geom_histogram(fill = "cyan3")+theme_bw()
g5=ggplot(rotaciondf,aes(x=Ingreso_Mensual))+geom_histogram(fill = "cyan3")+theme_bw()
g6=ggplot(rotaciondf,aes(x=Antigüedad_Cargo))+geom_histogram(fill = "cyan3")+theme_bw()
ggarrange(g1, g2, g3, g4, g5, g6,labels = c("A", "B","C","D","E","F"),ncol = 2, nrow = 1) Departamento: El departamento con el mayor número de empleados es IyD, que cuenta con un total de 961 colaboradores. En contraste, el departamento con el menor número de empleados es HR, con solo 63. Por otro lado, el departamento de ventas tiene 446 empleados.
Satisfacción Laboral: La mayoría de los empleados clasifican su satisfacción laboral en los niveles 3 y 4, obteniendo 442 calificaciones de “satisfecho” y 459 de “muy satisfecho”, respectivamente. En cambio, un menor número de empleados se posiciona en los niveles 1 y 2, con 289 clasificaciones de “muy insatisfecho” y 280 de “insatisfecho”.
Estado Civil: En cuanto al estado civil, la empresa presenta un mayor número de empleados casados (673), seguidos por los solteros (470) y, en menor cantidad, los divorciados (327).
Edad: La mayoría de los empleados se encuentra en el rango de edad de 25 a 45 años. El empleado más joven tiene 18 años y el de mayor edad con 60 años.
Salario: El salario promedio es de aproximadamente 5 millones. La mayoría de los salarios se sitúan entre 1 millón y 7 millones, con un salario mínimo de 1 millón y un máximo de 20 millones.
Antigüedad en el cargo: La mayoría de los empleados tiene una antigüedad en su cargo que oscila entre 0 y 7 años, con una media de 4.2 años y un valor máximo de 18 años.
library(vcd)
rotaciondf$Rotación <- factor(ifelse(rotacion$Rotación == "Si", 1, 0))
tabla_Departamento_Rotacion = table(rotaciondf$Departamento,rotaciondf$Rotación)
tasa_rotacion <- rotaciondf %>%
group_by(Departamento, Rotación) %>%
summarise(Count = n()) %>%
ungroup()
# Calcular porcentajes
tasa_rotacion <- tasa_rotacion %>%
group_by(Departamento) %>%
mutate(Proporción = Count / sum(Count)) # Calcula la proporción
ggplot(tasa_rotacion, aes(x = Departamento, y = Proporción, fill = factor(Rotación))) +
geom_bar(stat = "identity", position = "fill") +
geom_text(aes(label = scales::percent(Proporción)), position = position_fill(vjust = 0.5) ) + # Añadir etiquetas
labs(title = "Distribución de Rotación por Departamento",
x = "Departamento",
y = "Proporción",
fill = "Rotación") +
scale_y_continuous(labels = scales::percent) +
theme_minimal()colores <- c("lightblue", "lightgreen", "lightcoral", "lightsalmon")
# gráfico de mosaico
mosaic(~ Departamento + factor(Rotación), data = rotaciondf,
main = "Gráfico de Mosaico: Rotación por Departamento",
gp = gpar(fill = colores),
labeling = labeling_values)modelo_departamento_nuevo <- glm(Rotación ~ Departamento, family = binomial, data = rotaciondf)
summary(modelo_departamento_nuevo)
Call:
glm(formula = Rotación ~ Departamento, family = binomial, data = rotaciondf)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.82866 0.09342 -19.576 < 0.0000000000000002 ***
DepartamentoRH 0.38175 0.33417 1.142 0.25330
DepartamentoVentas 0.48116 0.14974 3.213 0.00131 **
---
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: 1288.1 on 1467 degrees of freedom
AIC: 1294.1
Number of Fisher Scoring iterations: 4
Observamos que el departamento de ventas presenta la mayor proporción de rotación, seguido por el de Recursos Humanos. Por otro lado, el departamento con la menor rotación es Investigación y Desarrollo. Se observa que existe una relación significativa entre el área en la que trabajan los empleados y la rotación. Los resultados del modelo indican que en Ventas se tiene un coeficiente positivo (0.48116), lo que sugiere que los empleados en este departamento tienen una mayor probabilidad de rotación en comparación con aquellos en IyD, que es el grupo de referencia, y el p-value asociado (0.00131) confirma que esta diferencia es estadísticamente relevante. En contraste, RH presenta un coeficiente positivo (0.38175), pero su p-value (0.25330) indica que la relación con la rotación no es significativa. Entonces, es a destacar que el Departamento de Ventas influye notablemente en la rotación, mientras que no se observa un efecto significativo en Recursos Humanos. Los resultados obtenidos confirman la hipótesis de “Se anticipa que algunos departamentos presenten una mayor rotación de empleados en comparación con otros”.
tabla_Satisfaccion_Rotacion = table(rotaciondf$Satisfación_Laboral,rotaciondf$Rotación)
tasa_rotacion <- rotaciondf %>%
group_by(Satisfación_Laboral, Rotación) %>%
summarise(Count = n()) %>%
ungroup()
# Calcular porcentajes
tasa_rotacion <- tasa_rotacion %>%
group_by(Satisfación_Laboral) %>%
mutate(Proporción = Count / sum(Count)) # Calcula la proporción
ggplot(tasa_rotacion, aes(x = Satisfación_Laboral, y = Proporción, fill = factor(Rotación))) +
geom_bar(stat = "identity", position = "fill") +
geom_text(aes(label = scales::percent(Proporción)), position = position_fill(vjust = 0.5) ) + # Añadir etiquetas
labs(title = "Distribución de Rotación por Satisfación Laboral",
x = "Satisfación Laboral",
y = "Proporción",
fill = "Rotación") +
scale_y_continuous(labels = scales::percent) +
theme_minimal()colores <- c("lightblue", "lightgreen", "lightcoral", "lightsalmon")
#gráfico de mosaico
mosaic(~ Satisfación_Laboral + factor(Rotación), data = rotaciondf,
main = "Gráfico de Mosaico: Rotación por Satisfacción Laboral",
gp = gpar(fill = colores),
labeling = labeling_values)modelo_Satisfación_Laboral <- glm(Rotación ~ Satisfación_Laboral, family = binomial, data = rotaciondf)
summary(modelo_Satisfación_Laboral)
Call:
glm(formula = Rotación ~ Satisfación_Laboral, family = binomial,
data = rotaciondf)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.9903 0.1757 -5.635 0.0000000175 ***
Satisfación_Laboral -0.2510 0.0637 -3.940 0.0000815786 ***
---
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: 1283.1 on 1468 degrees of freedom
AIC: 1287.1
Number of Fisher Scoring iterations: 4
Se observa que a menor satisfacción laboral, mayor es la tasa de rotación. Los resultados del modelo muestran un coeficiente negativo para la Satisfacción Laboral (-0.2510), lo que indica que a medida que aumenta la satisfacción, la probabilidad de rotación disminuye. Este efecto es respaldado por un p-value muy bajo, lo que sugiere que la Satisfacción Laboral es un determinante estadísticamente significativo de la rotación. Estos resultados confirman la hipótesis planteada de “Se espera que a medida que disminuye la satisfacción laboral, la tasa de rotación aumente”.
tabla_Estcivil_Rotacion = table(rotaciondf$Estado_Civil,rotaciondf$Rotación)
tasa_rotacion <- rotaciondf %>%
group_by(Estado_Civil, Rotación) %>%
summarise(Count = n()) %>%
ungroup()
# Calcular porcentajes
tasa_rotacion <- tasa_rotacion %>%
group_by(Estado_Civil) %>%
mutate(Proporción = Count / sum(Count)) # Calcula la proporción
ggplot(tasa_rotacion, aes(x = Estado_Civil, y = Proporción, fill = factor(Rotación))) +
geom_bar(stat = "identity", position = "fill") +
geom_text(aes(label = scales::percent(Proporción)), position = position_fill(vjust = 0.5) ) + # Añadir etiquetas
labs(title = "Distribución de Rotación por Estado Civil",
x = "Estado Civil",
y = "Proporción",
fill = "Rotación") +
scale_y_continuous(labels = scales::percent) +
theme_minimal()colores <- c("lightblue", "lightgreen", "lightcoral", "lightsalmon")
# gráfico de mosaico
mosaic(~ Estado_Civil + factor(Rotación), data = rotaciondf,
main = "Gráfico de Mosaico: Rotación por Estado Civil",
gp = gpar(fill = colores),
labeling = labeling_values)modelo_Estado_Civil <- glm(Rotación ~ Estado_Civil, family = binomial, data = rotaciondf)
summary(modelo_Estado_Civil)
Call:
glm(formula = Rotación ~ Estado_Civil, family = binomial, data = rotaciondf)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.9476 0.1166 -16.699 < 0.0000000000000002 ***
Estado_CivilDivorciado -0.2395 0.2175 -1.101 0.271
Estado_CivilSoltero 0.8772 0.1575 5.571 0.0000000254 ***
---
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: 1254.6 on 1467 degrees of freedom
AIC: 1260.6
Number of Fisher Scoring iterations: 4
Los solteros presentan una tasa de rotación más alta en comparación con los casados y divorciados. Los resultados del modelo muestran que, en comparación con el grupo de referencia (Casado), el Estado Civil Soltero presenta un coeficiente positivo (0.8772), lo que sugiere que los empleados solteros tienen una mayor probabilidad de rotación, con un p-value muy bajo, indicando que esta relación es estadísticamente significativa. En contraste, el coeficiente para el Estado Civil Divorciado (-0.2395) no es significativo (p-value = 0.271), lo que sugiere que no hay una relación clara entre este estado civil y la rotación. Lo anterior confirma la hipotesis de “Las personas solteras tienden a cambiar de trabajo con mayor facilidad”.
p <- plot_ly(rotaciondf, y = ~Ingreso_Mensual, color = ~factor(Rotación),
type = "box",
boxpoints = "all",
pointpos = 0,
colors = c("blue", "orange")) %>%
layout(title = "Box Plot de Ingreso Mensual según Rotación",
yaxis = list(title = "Ingreso Mensual"),
xaxis = list(title = "Rotación (1 = Sí, 0 = No)"))
pmodelo_rotacion_Ingreso <- glm(Rotación ~ Ingreso_Mensual , data = rotaciondf, family = binomial)
summary(modelo_rotacion_Ingreso)
Call:
glm(formula = Rotación ~ Ingreso_Mensual, family = binomial,
data = rotaciondf)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.92910875 0.12920214 -7.191 0.000000000000643 ***
Ingreso_Mensual -0.00012710 0.00002162 -5.879 0.000000004119147 ***
---
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: 1253.1 on 1468 degrees of freedom
AIC: 1257.1
Number of Fisher Scoring iterations: 5
A menor salario mensual mayor la tasa de rotación. Podemos observar en el gráfico que a menor salario mensual, mayor es la tasa de rotación. Además, los resultados del modelo muestran que el Ingreso Mensual es una variable determinante significativa en la rotación, ya que el p-value es menor que 0.001. El coeficiente negativo indica que, a medida que el ingreso mensual aumenta, la probabilidad de rotación disminuye. La hipotesis de “Existe una relación inversa entre los ingresos mensuales y la tasa de rotación: a mayores ingresos, menor es la tasa de rotación” con los resultados obtenidos, se confirma.
graficoAntigüedad =ggplot(rotaciondf,aes(x=Rotación,y= Antigüedad_Cargo,fill=Rotación))+geom_boxplot()+theme_bw()
graficoAntigüedadp <- plot_ly(rotaciondf, x = ~Antigüedad_Cargo, color = ~factor(Rotación),
type = "histogram", opacity = 0.6) %>%
layout(barmode = "overlay",
title = "Histograma de Antigüedad Cargo según Rotación",
xaxis = list(title = "Antigüedad Cargo"),
yaxis = list(title = "Frecuencia"))
pmodelo_rotacion_Antiguedad <- glm(Rotación ~ Antigüedad_Cargo , data = rotaciondf, family = binomial)
summary(modelo_rotacion_Antiguedad)
Call:
glm(formula = Rotación ~ Antigüedad_Cargo, family = binomial,
data = rotaciondf)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.11841 0.10380 -10.775 < 0.0000000000000002 ***
Antigüedad_Cargo -0.14628 0.02424 -6.033 0.00000000161 ***
---
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: 1255.9 on 1468 degrees of freedom
AIC: 1259.9
Number of Fisher Scoring iterations: 5
A menor antigüedad en el empleo, mayor es la tasa de rotación. El gráfico sugiere que a mayor antigüedad en el cargo, menor es la tasa de rotación. Los resultados del modelo muestran que la Antigüedad en el Cargo es una variable determinante significativa en la rotación, con un p-value menor que 0.001. El coeficiente negativo (-0.14628) indica que, a medida que aumenta la antigüedad de los empleados en su puesto, la probabilidad de rotación disminuye. Lo anterior confirma que “Los empleados con mayor antigüedad suelen tener un mayor sentido de pertenencia, lo que se traduce en tasas de rotación más bajas”
graficoedad =ggplot(rotaciondf,aes(x=Rotación,y=Edad,fill=Rotación))+
geom_boxplot()+theme_bw()
graficoedadp <- plot_ly(rotaciondf, x = ~Edad, color = ~factor(Rotación),
type = "histogram", opacity = 0.6) %>%
layout(barmode = "overlay",
title = "Histograma de Edad según Rotación",
xaxis = list(title = "Edad"),
yaxis = list(title = "Frecuencia"))
pmodelo_rotacion_Edad <- glm(Rotación ~ Edad , data = rotaciondf, family = binomial)
summary(modelo_rotacion_Edad)
Call:
glm(formula = Rotación ~ Edad, family = binomial, data = rotaciondf)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.20637 0.30597 0.674 0.5
Edad -0.05225 0.00870 -6.006 0.0000000019 ***
---
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: 1259.1 on 1468 degrees of freedom
AIC: 1263.1
Number of Fisher Scoring iterations: 4
Se evidencia que a menor edad, mayor es la tasa de rotación. El gráfico muestra que a medida que aumenta la edad, la tasa de rotación disminuye. Los resultados del modelo indican que la Edad es una variable determinante significativa en la rotación, con un p-value menor que 0.001. El coeficiente negativo (-0.05225) sugiere que, a medida que la edad de los empleados aumenta, la probabilidad de rotación disminuye. Se confirma que “A medida que aumenta la edad, es razonable esperar una mayor estabilidad laboral, por lo que anticipamos una menor tasa de rotación en grupos de mayor edad”.
Luego de realizar la división aleatoria de los datos en conjunto de entrenamiento y conjunto de prueba, se genera el modelo de regresión logística con nuevas variables dicotómicas creadas a partir de las variables categóricas.
# Selección de columnas
rotacion_6 <- select(rotacion, Rotación, Departamento, Satisfación_Laboral,
Estado_Civil,Ingreso_Mensual, Antigüedad_Cargo, Edad)
rotacion_6$Rotación=as.numeric(rotacion_6$Rotación=="Si")
# División de datos de entrenamiento y prueba
set.seed(123)
split <- sample.split(rotacion_6$Rotación, SplitRatio=0.7)
train_data <- subset(rotacion_6, split==TRUE)
test_data <- subset(rotacion_6, split==FALSE)
# Modelo
modelo_glm <- glm(Rotación ~ as.factor(Departamento) + as.factor(Satisfación_Laboral) + as.factor(Estado_Civil)
+ Ingreso_Mensual + Antigüedad_Cargo + Edad, data = train_data, family = binomial(link = "logit"))
summary(modelo_glm)
Call:
glm(formula = Rotación ~ as.factor(Departamento) + as.factor(Satisfación_Laboral) +
as.factor(Estado_Civil) + Ingreso_Mensual + Antigüedad_Cargo +
Edad, family = binomial(link = "logit"), data = train_data)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.53153405 0.42974329 -1.237 0.21614
as.factor(Departamento)RH 0.11391948 0.47151388 0.242 0.80909
as.factor(Departamento)Ventas 0.80368019 0.19199547 4.186 0.0000284 ***
as.factor(Satisfación_Laboral)2 -0.38717382 0.27316406 -1.417 0.15638
as.factor(Satisfación_Laboral)3 -0.36360741 0.24027264 -1.513 0.13020
as.factor(Satisfación_Laboral)4 -1.08175962 0.26633006 -4.062 0.0000487 ***
as.factor(Estado_Civil)Divorciado -0.31053018 0.26888231 -1.155 0.24813
as.factor(Estado_Civil)Soltero 0.81703784 0.19859788 4.114 0.0000389 ***
Ingreso_Mensual -0.00009667 0.00003114 -3.104 0.00191 **
Antigüedad_Cargo -0.10137729 0.03188877 -3.179 0.00148 **
Edad -0.00750788 0.01112659 -0.675 0.49982
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 909.34 on 1028 degrees of freedom
Residual deviance: 802.28 on 1018 degrees of freedom
AIC: 824.28
Number of Fisher Scoring iterations: 5
Interpretación de los coeficientes.
odds_ratios <- exp(coef(modelo_glm))
tabla_odds_ratios <- data.frame(
Variable = names(odds_ratios),
Odds_Ratio = odds_ratios
)
kable(select(tabla_odds_ratios,Odds_Ratio), "html", caption = "Razón de probabilidad") %>%
kable_styling("striped", full_width = FALSE) %>%
row_spec(0, bold = TRUE)| Odds_Ratio | |
|---|---|
| (Intercept) | 0.5877027 |
| as.factor(Departamento)RH | 1.1206619 |
| as.factor(Departamento)Ventas | 2.2337464 |
| as.factor(Satisfación_Laboral)2 | 0.6789731 |
| as.factor(Satisfación_Laboral)3 | 0.6951641 |
| as.factor(Satisfación_Laboral)4 | 0.3389985 |
| as.factor(Estado_Civil)Divorciado | 0.7330582 |
| as.factor(Estado_Civil)Soltero | 2.2637842 |
| Ingreso_Mensual | 0.9999033 |
| Antigüedad_Cargo | 0.9035920 |
| Edad | 0.9925202 |
Intercepto: Coeficiente igual a -0.5315. No es estadísticamente significativo. Es el valor de la función logit cuando las variables predictoras son cero.
Departamento - RH: Coeficiente igual a 0.1139. No es estadísticamente significativo. El valor del Odds-Ratio es 1.12, lo que significa que ser parte del Departamento RH tiene 1.12 veces más probabilidades de rotación en comparación a ser parte del Departamento IyD.
Departamento - Ventas: Coeficiente igual a 0.8036. Es estadísticamente significativo. El valor del Odds-Ratio es 2.23, lo que significa que ser parte del Departamento de Ventas tiene 2.23 veces más probabilidades de rotación en comparación a ser parte del Departamento IyD.
Satisfación Laboral - 2: Coeficiente igual a -0.3871. No es estadísticamente significativo. Con un valor Odds-Ratio igual a 0.68 se concluye que en este nivel de satisfacción laboral hay un 32% menos de probabilidades de rotación. Se tiene un Odds-Ratio menor a 1 debido a que el coeficiente es negativo, lo que significa que un aumento en esta variable reducirá las probabilidades de que ocurra el evento de rotación.
Satisfación Laboral - 3: Coeficiente igual a -0.3636. No es estadísticamente significativo. Odds-Ratio igual a 0.7 que significa que en este nivel de satisfacción laboral hay un 30% menos de probabilidades de que ocurra el evento de rotación.
Satisfación Laboral - 4: Coeficiente igual a -1.0817. Es estadísticamente significativo. Odds-Ratio igual a 0.34 que significa que en este nivel de satisfacción laboral hay un 66% menos de probabilidades de que ocurra el evento de rotación. Esto tiene sentido debido a que este nivel de satisfacción laboral puede generar estabilidad en el empleado.
Estado Civil - Divorciado: Coeficiente igual a -0.3105. No es estadísticamente significativo. Con un Odds-Ratio de 0.73 que indica que las personas Divorciadas tienen un 27% menos de probabilidades de rotación en comparación a las personas Casadas.
Estado Civil - Soltero: Coeficiente igual a 0.817. Es estadísticamente significativo. Con un Odds-Ratio de 2.26 que indica que las personas Solteras tienen 2.26 veces más probabilidades de rotación en comparación a las personas Casadas.
Ingreso Mensual: Coeficiente igual a -0.000096. Es estadísticamente significativo. Con un coeficiente aproximadamente de cero y con un Odds-Ratio aproximadamente igual a uno, se concluye que esta variable no afecta la probabilidad de rotación de una persona.
Antigüedad en el Cargo: Coeficiente igual a -0.1013. Es estadísticamente significativo. El valor del Odds-Ratio es 0.9, lo que significa que por cada unidad de incremento en la variable la probabilidad de que ocurra la rotación son un 10% menores.
Edad: Coeficiente igual a -0.0075. No es estadísticamente significativo. Con un coeficiente aproximadamente de cero y con un Odds-Ratio aproximadamente igual a uno, se concluye que esta variable no afecta la probabilidad de rotación de una persona.
Procedemos a realizar la evaluación del modelo haciendo predicciones con el conjunto de datos de prueba.
predicciones_prob <- predict(modelo_glm, test_data, type = "response")
predicciones_bool <- ifelse(predicciones_prob > 0.5, 1, 0)
roc_curve <- roc(test_data$Rotación, predicciones_prob)
plot(roc_curve, col = "blue", lwd = 2, main = "Curva ROC")
abline(a = 0, b = 1, col = "red", lty = 2)
text(0.6, 0.4, paste("AUC =", round(auc(roc_curve), 2)), col = "black")
grid()La curva ROC muestra la relación entre la tasa de verdaderos positivos (Sensibilidad) y la tasa de falsos positivos (Especificidad). En este caso la curva no está muy cerca al punto (0, 1), por lo que la clasificación no es excelente y el modelo tendrá limitaciones para clasificar los datos. El área bajo la curva AUC tiene un valor de 0.7, lo cual puede ser aceptable en la clasificación aunque presentará problemas distinguiendo clases. El valor de 0.7 significa que el modelo tiene un 70% de probabilidad de clasificar correctamente un caso positivo que un caso negativo.
rendimiento <- data.frame(observados=test_data$Rotación,predicciones=predicciones_bool)
total <- nrow(rendimiento)
VP<-sum(rendimiento$observados==1 & rendimiento$predicciones==1)
VN<-sum(rendimiento$observados==0 & rendimiento$predicciones==0)
FP<-sum(rendimiento$observados==0 & rendimiento$predicciones==1)
FN<-sum(rendimiento$observados==1 & rendimiento$predicciones==0)
exactitud = (VP+VN)/total
error_rate = (FP+FN)/total
sensibilidad = VP/(VP+FN)
especificidad = VN/(VN+FP)
presicion = VP/(VP+FP)
vpn = VN/(VN+FN)
indicadores <- data.frame(
Indicador = c("Exactitud", "Tasa de Error", "Sensibilidad", "Especificidad", "Precisión", "Valor predicción negativo"),
Valor = c(exactitud, error_rate, sensibilidad, especificidad, presicion, vpn)
)
kable(indicadores, "html", caption = "Indicadores") %>%
kable_styling("striped", full_width = FALSE) %>%
row_spec(0, bold = TRUE)| Indicador | Valor |
|---|---|
| Exactitud | 0.8435374 |
| Tasa de Error | 0.1564626 |
| Sensibilidad | 0.0563380 |
| Especificidad | 0.9945946 |
| Precisión | 0.6666667 |
| Valor predicción negativo | 0.8459770 |
El modelo presenta un alto valor de especificidad, que significa que el modelo tiene una alta capacidad para identificar correctamente los casos negativos. En el contexto de caso de estudio, este no es un valor que realmente convenga debido a que se intenta determinar los casos positivos para rotación. Es posible que esto esté sucediendo a causa del desbalance en la clase a predecir.
Incrementar el Salario Mensual: La relación inversa entre el salario y la rotación sugiere que aumentar la compensación puede ser una estrategia efectiva. Evaluar y ajustar los paquetes salariales para asegurarse de que sean competitivos en el mercado podría contribuir a reducir la rotación, especialmente en departamentos donde se presenta un mayor porcentaje de rotación, como el de ventas.
Fomentar la Antigüedad y el Sentido de Pertenencia: Para contrarrestar la alta rotación entre empleados más jóvenes o con menor antigüedad, se podrían implementar programas de mentoría y desarrollo profesional que promuevan el crecimiento dentro de la empresa. Al ofrecer planes de carrera claros y oportunidades de avance, se puede aumentar el sentido de pertenencia y la lealtad hacia la organización.
Apoyar a Empleados Solteros: Dado que los empleados solteros tienden a rotar más, se podrían considerar iniciativas que promuevan la inclusión y la integración social dentro del ambiente laboral.
Estrategias en el departamento de Ventas: Debido a que los empleados que hacen parte del departamento de ventas tienen 2.23 veces más probabilidades de rotación con respecto al departamento IyD, se podrían sugerir planes de bonificaciones o compensaciones por ventas realizadas que afiances el compromiso con el rol y con la empresa.