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.
Departamento
Estado_Civil
Campo_Educación
Edad
Ingreso_Mensual
Años_Experiencia
ggplot(rotacion, aes(x = Campo_Educación)) +
geom_bar(fill = "steelblue") +
ggtitle("Distribución de la Variable Campo de Educación") +
xlab("Campo de Educación") +
ylab("Frecuencia")
La mayoría de los empleados tienen formación en el campo de las Ciencias y de la Salud, mientras que las áreas como Humanidades y “Otras” están menos representadas. Esto podría indicar una mayor demanda o preferencia en la organización por empleados con formación científica o sanitaria. Además, empleados con ciertas formaciones podrían tener distintas oportunidades de desarrollo, lo cual podría influir en su probabilidad de rotación
ggplot(rotacion, aes(x = Departamento)) +
geom_bar(fill = "darkorange") +
ggtitle("Distribución por Departamento") +
xlab("Departamento") +
ylab("Frecuencia")
La mayoría de los empleados pertenecen al departamento de Investigación y Desarrollo (I+D), seguido por el departamento de Ventas, mientras que Recursos Humanos (RH) tiene un número significativamente menor de empleados.
ggplot(rotacion, aes(x = Estado_Civil)) +
geom_bar(fill = "purple") +
ggtitle("Distribución por Estado Civil") +
xlab("Estado Civil") +
ylab("Frecuencia")
Los empleados casados constituyen la mayor parte de la muestra, seguidos por los solteros y los divorciados. Esto podría ser un indicador de cómo las responsabilidades familiares afectan la estabilidad laboral y la probabilidad de rotación.
ggplot(rotacion, aes(x = Edad)) +
geom_histogram(binwidth = 5, fill = "skyblue", color = "black") +
ggtitle("Distribución de la Edad") +
xlab("Edad") +
ylab("Frecuencia")
summary(rotacion$Edad)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 18.00 30.00 36.00 36.92 43.00 60.00
La mayoría de los empleados se encuentran entre los 30 y 40 años de edad. Hay menos empleados en los extremos de la distribución (menores de 20 y mayores de 50 años). Esto podría indicar que la empresa tiene una base de empleados predominantemente en la fase media de su carrera profesional.
ggplot(rotacion, aes(x = Ingreso_Mensual)) +
geom_histogram(binwidth = 5000, fill = "forestgreen", color = "black") +
ggtitle("Distribución del Ingreso Mensual") +
xlab("Ingreso Mensual") +
ylab("Frecuencia")
summary(rotacion$Ingreso_Mensual) # Resumen estadístico
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1009 2911 4919 6503 8379 19999
La mayoría de los empleados tienen ingresos mensuales entre 0 y 5,000, mientras que una minoría tiene salarios superiores a 10,000. Esto podría tener un impacto directo en la rotación, ya que los empleados con salarios más bajos podrían buscar mejores oportunidades.
ggplot(rotacion, aes(x = Años_Experiencia)) +
geom_histogram(binwidth = 2, fill = "tomato", color = "black") +
ggtitle("Distribución de Años de Experiencia") +
xlab("Años de Experiencia") +
ylab("Frecuencia")
summary(rotacion$Años_Experiencia) # Resumen estadístico
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 6.00 10.00 11.28 15.00 40.00
La mayoría de los empleados tienen menos de 10 años de experiencia, con un pico en aquellos que tienen entre 5 y 10 años. Hay una disminución notable en la cantidad de empleados con experiencia superior a los 20 años, lo cual podría reflejar una relación inversa entre la experiencia y la rotación (empleados más experimentados podrían preferir estabilidad).
2.7 Rotación
ggplot(rotacion, aes(x = Rotación)) +
geom_bar(fill = "steelblue") +
ggtitle("Distribución de la Variable Campo de Educación") +
xlab("Rotación") +
ylab("Frecuencia")
La mayoría de los empleados no rotaron, ya que hay un desbalance evidente entre “No” y “Sí”. La rotación no es un fenómeno muy común en la empresa y en un modelo de regresión logística, se debe considerar el desbalance para evitar que el modelo esté sesgado hacia la clase mayoritaria.
Aplicamos una transformación a la variable rotación de tal forma que 1 corresponda a los usuarios que rotaron y 0 a los que no.
# Convertir la variable Rotacion a 0 (No) y 1 (Sí)
rotacion$Rotación_binary <- ifelse(rotacion$Rotación == "Si", 1, 0)
Para estas variables se utilizarán tablas de contingencia y pruebas Chi-cuadrado.
rotacion$Departamento <- as.factor(rotacion$Departamento)
rotacion$Estado_Civil <- as.factor(rotacion$Estado_Civil)
rotacion$Campo_Educación <- as.factor(rotacion$Campo_Educación)
rotacion$Rotación <- as.factor(rotacion$Rotación)
# Calcular los porcentajes
data_dept <- rotacion %>%
group_by(Departamento, Rotación) %>%
summarise(count = n(), .groups = "drop") %>%
mutate(percentage = count / sum(count) * 100)
# Crear el gráfico con ggplot2
ggplot(data_dept, aes(x = Departamento, y = count, fill = Rotación)) +
geom_bar(stat = "identity", position = position_stack()) +
geom_text(aes(label = paste0(round(percentage, 1), "%")),
position = position_stack(vjust = 0.5),
size = 3, color = "white") +
ggtitle("Distribución de la Rotación por Departamento (Porcentajes)") +
xlab("Departamento") +
ylab("Cantidad de Empleados") +
labs(fill = "Rotación") +
theme_minimal()
# Tabla de contingencia
tabla_departamento <- table(rotacion$Departamento, rotacion$Rotación)
# Prueba chi-cuadrado para evaluar la relación entre Departamento y Rotacion
chisq_test_departamento <- chisq.test(tabla_departamento)
print(chisq_test_departamento)
##
## Pearson's Chi-squared test
##
## data: tabla_departamento
## X-squared = 10.796, df = 2, p-value = 0.004526
La hipótesis planteada sigue vigente, ya que los resultados indican una diferencia significativa en la rotación según el departamento, sugiriendo que las condiciones laborales o la presión pueden variar entre departamentos y afectar la decisión de rotar.
# Calcular los porcentajes
data_estado_civil <- rotacion %>%
group_by(Estado_Civil, Rotación) %>%
summarise(count = n(), .groups = "drop") %>%
mutate(percentage = count / sum(count) * 100)
# Crear el gráfico con ggplot2
ggplot(data_estado_civil, aes(x = Estado_Civil, y = count, fill = Rotación)) +
geom_bar(stat = "identity", position = position_stack()) +
geom_text(aes(label = paste0(round(percentage, 1), "%")),
position = position_stack(vjust = 0.5),
size = 3, color = "white") +
ggtitle("Distribución de la Rotación por Estado Civil (Porcentajes)") +
xlab("Estado Civil") +
ylab("Cantidad de Empleados") +
labs(fill = "Rotación") +
theme_minimal()
# Tabla de contingencia
tabla_estado_civil <- table(rotacion$Estado_Civil, rotacion$Rotación)
# Prueba chi-cuadrado para evaluar la relación entre Estado_Civil y Rotacion
chisq_test_estado_civil <- chisq.test(tabla_estado_civil)
print(chisq_test_estado_civil)
##
## Pearson's Chi-squared test
##
## data: tabla_estado_civil
## X-squared = 46.164, df = 2, p-value = 9.456e-11
La hipótesis sigue vigente, ya que los solteros parecen tener una mayor probabilidad de rotar, lo cual puede estar relacionado con menos responsabilidades familiares y una mayor disposición a explorar nuevas oportunidades laborales.
# Calcular los porcentajes
data_campo_educacion <- rotacion %>%
group_by(Campo_Educación, Rotación) %>%
summarise(count = n(), .groups = "drop") %>%
mutate(percentage = count / sum(count) * 100)
# Crear el gráfico con ggplot2
ggplot(data_campo_educacion, aes(x = Campo_Educación, y = count, fill = Rotación)) +
geom_bar(stat = "identity", position = position_stack()) +
geom_text(aes(label = paste0(round(percentage, 1), "%")),
position = position_stack(vjust = 0.5),
size = 3, color = "white") +
ggtitle("Distribución de la Rotación por Campo de Educación (Porcentajes)") +
xlab("Campo de Educación") +
ylab("Cantidad de Empleados") +
labs(fill = "Rotación") +
theme_minimal()
# Tabla de contingencia
tabla_campo_educacion <- table(rotacion$Campo_Educación, rotacion$Rotación)
# Prueba chi-cuadrado para evaluar la relación entre Campo_Educación y Rotacion
chisq_test_campo_educacion <- chisq.test(tabla_campo_educacion)
print(chisq_test_campo_educacion)
##
## Pearson's Chi-squared test
##
## data: tabla_campo_educacion
## X-squared = 16.025, df = 5, p-value = 0.006774
La hipótesis sigue vigente, parcialmente. La formación académica parece tener un impacto en la rotación, ya que ciertas áreas, como Ciencias y Salud, muestran una mayor tendencia a rotar. Esto podría estar relacionado con el tipo de oportunidades de desarrollo disponibles dentro de la empresa o con expectativas personales de crecimiento.
## Edad y Rotacion
ggplot(rotacion, aes(x = Rotación, y = Edad, fill = Rotación)) +
geom_boxplot() +
ggtitle("Boxplot de Edad según Rotacion") +
xlab("Rotación") +
ylab("Edad")
# Comparar medias de Edad entre grupos de Rotacion
t.test(Edad ~ Rotación, data = rotacion)
##
## Welch Two Sample t-test
##
## data: Edad by Rotación
## t = 5.8291, df = 316.94, p-value = 1.371e-08
## alternative hypothesis: true difference in means between group No and group Si is not equal to 0
## 95 percent confidence interval:
## 2.619728 5.289170
## sample estimates:
## mean in group No mean in group Si
## 37.56204 33.60759
La hipótesis sigue vigente. Los empleados más jóvenes parecen tener una mayor tendencia a rotar, lo cual está alineado con la idea de que los jóvenes tienen una mayor disposición a asumir riesgos y buscar nuevas oportunidades.
## Ingreso_Mensual y Rotación
ggplot(rotacion, aes(x = Rotación, y = Ingreso_Mensual, fill = Rotación)) +
geom_boxplot() +
ggtitle("Boxplot de Ingreso Mensual según Rotación") +
xlab("Rotación") +
ylab("Ingreso Mensual")
# Comparar medias de Ingreso Mensual entre grupos de Rotacion
t.test(Ingreso_Mensual ~ Rotación, data = rotacion)
##
## Welch Two Sample t-test
##
## data: Ingreso_Mensual by Rotación
## t = 7.4826, df = 412.74, p-value = 4.434e-13
## alternative hypothesis: true difference in means between group No and group Si is not equal to 0
## 95 percent confidence interval:
## 1508.244 2583.050
## sample estimates:
## mean in group No mean in group Si
## 6832.740 4787.093
La hipótesis sigue vigente. Los empleados con menores ingresos son más propensos a rotar, lo cual podría estar motivado por la búsqueda de mejores condiciones económicas.
ggplot(rotacion, aes(x = Rotación, y = Años_Experiencia, fill = Rotación)) +
geom_boxplot() +
ggtitle("Boxplot de Años de Experiencia según Rotación") +
xlab("Rotación") +
ylab("Años de Experiencia")
# Comparar medias de Años de Experiencia entre grupos de Rotación
t.test(Años_Experiencia ~ Rotación, data = rotacion)
##
## Welch Two Sample t-test
##
## data: Años_Experiencia by Rotación
## t = 7.0192, df = 350.88, p-value = 1.16e-11
## alternative hypothesis: true difference in means between group No and group Si is not equal to 0
## 95 percent confidence interval:
## 2.604401 4.632019
## sample estimates:
## mean in group No mean in group Si
## 11.862936 8.244726
La hipótesis sigue vigente. Los empleados con menos años de experiencia son más propensos a rotar, lo cual sugiere que aquellos con menos experiencia pueden estar más motivados para buscar nuevas oportunidades que les permitan desarrollarse y adquirir más habilidades.
# Convertir la variable Rotacion a numérica (si es necesario)
rotacion$Rotación_binary <- as.numeric(as.character(rotacion$Rotación_binary))
# Ajustar el modelo de regresión logística
modelo_logistico <- glm(Rotación_binary ~ Departamento + Estado_Civil + Campo_Educación + Edad + Ingreso_Mensual + Años_Experiencia,
data = rotacion,
family = binomial)
# Resumen del modelo
summary(modelo_logistico)
##
## Call:
## glm(formula = Rotación_binary ~ Departamento + Estado_Civil +
## Campo_Educación + Edad + Ingreso_Mensual + Años_Experiencia,
## family = binomial, data = rotacion)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -8.272e-01 3.747e-01 -2.208 0.02728 *
## DepartamentoRH 1.510e-02 5.119e-01 0.030 0.97646
## DepartamentoVentas 4.281e-01 1.859e-01 2.303 0.02130 *
## Estado_CivilDivorciado -2.166e-01 2.221e-01 -0.975 0.32938
## Estado_CivilSoltero 8.121e-01 1.639e-01 4.955 7.23e-07 ***
## Campo_EducaciónHumanidades 1.140e+00 6.881e-01 1.656 0.09769 .
## Campo_EducaciónMercadeo 3.510e-01 2.665e-01 1.317 0.18790
## Campo_EducaciónOtra -1.604e-01 3.547e-01 -0.452 0.65118
## Campo_EducaciónSalud -8.656e-02 1.845e-01 -0.469 0.63893
## Campo_EducaciónTecnicos 5.541e-01 2.449e-01 2.263 0.02363 *
## Edad -1.801e-02 1.123e-02 -1.605 0.10859
## Ingreso_Mensual -8.574e-05 3.158e-05 -2.715 0.00663 **
## Años_Experiencia -2.188e-02 1.988e-02 -1.101 0.27091
## ---
## 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: 1181.1 on 1457 degrees of freedom
## AIC: 1207.1
##
## Number of Fisher Scoring iterations: 5
Los coeficientes del modelo y sus significancias indican cómo cada variable afecta la probabilidad de rotación. A continuación se hace un desglose de cada variable y su impacto.
Intercepto:
Coeficiente: -8.272e-01.
p-valor = 0.02728 (menor a 0.05): El intercepto es significativo, lo que nos da una idea de la probabilidad base de rotación cuando todas las demás variables son iguales a cero.
Departamento:
RH (DepartamentoRH):
Ventas (DepartamentoVentas):
Estado Civil:
Divorciado (Estado_CivilDivorciado):
Soltero (Estado_CivilSoltero):
Campo de Educación:
Humanidades (Campo_EducaciónHumanidades):
Mercadeo (Campo_EducaciónMercadeo):
Otra (Campo_EducaciónOtra):
Salud (Campo_EducaciónSalud):
Técnicos (Campo_EducaciónTecnicos):
Edad:
Ingreso Mensual:
Años de Experiencia:
Para evaluar el poder predictivo del modelo de regresión logística, se utiliza curva ROC (Receiver Operating Characteristic) y calcular el AUC (Área Bajo la Curva).
# Generar probabilidades predichas usando el modelo
probabilidades <- predict(modelo_logistico, type = "response")
# Crear objeto ROC
roc_obj <- roc(rotacion$Rotación_binary, probabilidades)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
# Mostrar AUC
auc_value <- auc(roc_obj)
print(auc_value)
## Area under the curve: 0.7048
El AUC obtenido es 0.7048, lo cual indica que el modelo tiene una capacidad razonable para distinguir entre empleados que rotarán y los que no.
# Graficar la curva ROC
plot(roc_obj, col = "blue", main = "Curva ROC para el Modelo de Rotación")
En este caso, la curva se encuentra alejada de la línea diagonal, lo cual significa que el modelo tiene una capacidad superior al azar para clasificar correctamente a los empleados según su probabilidad de rotación.
Características del empleado:
Departamento: Ventas
Estado Civil: Soltero
Campo de Educación: Técnicos
Edad: 35 años
Ingreso Mensual: 5000
Años de Experiencia: 5
empleado_hipotetico <- data.frame(
Departamento = factor("Ventas", levels = levels(rotacion$Departamento)),
Estado_Civil = factor("Soltero", levels = levels(rotacion$Estado_Civil)),
Campo_Educación = factor("Tecnicos", levels = levels(rotacion$Campo_Educación)),
Edad = 35,
Ingreso_Mensual = 5000,
Años_Experiencia = 5
)
# Calcular la probabilidad de rotación usando el modelo
probabilidad_rotacion <- predict(modelo_logistico, newdata = empleado_hipotetico, type = "response")
print(probabilidad_rotacion)
## 1
## 0.4498214
Si la probabilidad predicha es mayor a 0.5, podríamos concluir que el empleado tiene una alta probabilidad de rotar, y se recomendaría una intervención para motivarlo y evitar la rotación.
En este caso la probabilidad de rotación fue de 0.44 que indica que el empleado no tiene una alta propensión a rotar, de acuerdo con el modelo. Aunque esta probabilidad está cerca de 0.5, sigue siendo menor, lo cual significa que no es urgente una intervención según el punto de corte establecido.
Decisión: No es necesario aplicar medidas específicas para evitar la rotación en este momento. Sin embargo, dado que la probabilidad no está muy lejos del punto de corte de 0.5, sería conveniente realizar un seguimiento al empleado para asegurarse de que no aumente su predisposición a rotar. De igual manera, de manera preventiva se pueden tomar acciones como de reconocimiento por su aporte a la empresa, capacitaciones para que pueda avanzar en su carrera e incluso revaluar su salario, esto con el fin de que la probabilidad de rotación se aleje del punto de corte que requeriría una intervención inmediata.
El análisis realizado muestra que la rotación de empleados en la empresa está significativamente influenciada por ciertos factores relacionados con el departamento, el estado civil, el campo de educación, y el ingreso mensual. Específicamente:
Los empleados del departamento de Ventas presentan una mayor probabilidad de rotar.
Los empleados solteros tienen una mayor tendencia a buscar nuevas oportunidades en comparación con los empleados casados que podrían preferir la estabilidad laboral, lo cual incrementa la probabilidad de rotación.
Los empleados con formación técnica también muestran una mayor propensión a rotar.
Los empleados con menores ingresos mensuales tienen una mayor probabilidad de rotar, lo cual sugiere que los factores económicos juegan un papel importante en la decisión de permanecer en la empresa.
Incentivar a los Empleados con Formación Técnica: Ofrecer programas de capacitación que les permitan adquirir nuevas competencias y habilidades para avanzar en su carrera dentro de la empresa con planes de fidelización mediante el financiamiento parcial o total de dichos programas.
Ajuste de Ingresos y Beneficios para Empleados con Bajos Salarios: Revisar las políticas salariales y asegurar que los empleados reciban compensaciones adecuadas y competitivas en comparación con el mercado. También se podría proporcionar incentivos basados en el desempeño para compensar cualquier disparidad salarial y motivar a los empleados a permanecer en la empresa.
Mejorar las Condiciones y Oportunidades en el Departamento de Ventas: Enfocar los puntos mencionados anteriormente pero con mayor énfasis al departamento de ventas e incluir incentivos a los empleados que cumplen con los objetivos de ventas para mantener su motivación en la empresa.