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, …
Se seleccionaron las siguientres variables categóricas:
Para las variables categóricas se seleccionaron:
# Variable categórica: Departamento
rotacion %>% ggplot(aes(x=Departamento)) + geom_bar() + theme_minimal() + labs(title="Distribución de Empleados por Departamento")
# Variable categórica: Horas Extra
rotacion %>% ggplot(aes(x=Horas_Extra)) + geom_bar() + theme_minimal() + labs(title="Distribución de Empleados por Horas Extra")
## Variable categórica: Estado_Civil
rotacion %>% ggplot(aes(x=Estado_Civil)) + geom_bar() + theme_minimal() + labs(title="Distribución de Empleados por Estado Civil")
# Variable cuantitativa: Edad
rotacion %>% ggplot(aes(x=Edad)) + geom_histogram(bins=30) + theme_minimal() + labs(title="Distribución de la Edad de los Empleados")
## Variable categórica: Satisfacción Laboral
rotacion %>% ggplot(aes(x=Satisfación_Laboral)) + geom_bar() + theme_minimal() + labs(title="Distribución Satisfacción Laboral de los Empleados")
# Variable cuantitativa: Antiguedad en el cargo
rotacion %>% ggplot(aes(x=Antigüedad_Cargo)) + geom_bar() + theme_minimal() + labs(title="Distribución Antiguedad en el Cargo Actual")
# Convertir la variable rotación a numérica
rotacion$Rotación <- ifelse(rotacion$Rotación == "Si", 1, 0)
###Variables categóricas
g1 = PlotXTabs2(rotacion,`Departamento`, Rotación , plottype = "percent")
g2 = PlotXTabs2(rotacion, Horas_Extra, Rotación , plottype = "percent")
g3 = PlotXTabs2(rotacion, Estado_Civil, Rotación , plottype = "percent")
###Variables cuantitativas
g4 = ggplot(rotacion,aes(x=Rotación,y= Edad,fill=Rotación))+geom_boxplot()+theme_gray()
g5 = PlotXTabs2(rotacion, Satisfación_Laboral, Rotación , plottype = "percent")
g6 = ggplot(rotacion,aes(x=Rotación,y= Antigüedad_Cargo,fill=Rotación))+geom_boxplot()+theme_gray()
# Rotacion ~ Departamento
g1
Se observa que la rotación de empleados varía según el departamento al que pertenecen:
Se valida la hipótesis donde los empleados en áreas como IyD tiene menor probailidad de rotación con respecto al área de ventas debido al mayor estrés que se puede manejar en dicha área.
# Rotacion ~ Horas Extra
g2
Se valida la hipótesis de que para los empleados que realizan horas extra tienen mayor probabilidades de rotación con respecto a los que no (31% vs 10%) realizan horas extra.
# Rotacion ~ Estado civil
g3
Se valida la hipótesis de que aquellos empleados que son solteros tienen mayores probabilidades de rotación con respecto a los divorciados y los casados.
# Rotacion ~ Edad
ggplotly(g4)
## Warning: Continuous x aesthetic
## ℹ did you forget `aes(group = ...)`?
## Warning: The following aesthetics were dropped during statistical transformation: fill
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
## the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
## variable into a factor?
Se valida la hipótesis de que los empleados más jovenes son los que mas rotaron (mediana de 32 años) en comparación con los empleados que no rotaron (mediana 36 años).
# Rotacion ~ Satisfacción laboral
g5
Se valida la hipótesis para los empleados con bajos niveles de satisfacción tienen más probabilidades de rotación con respecto a los de más alto nivel de satisfacción.
# Rotacion ~ Antiguedad en el cargo
ggplotly(g6)
## Warning: Continuous x aesthetic
## ℹ did you forget `aes(group = ...)`?
## Warning: The following aesthetics were dropped during statistical transformation: fill
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
## the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
## variable into a factor?
Se valida la hipótesis de que los empleados con menor tiempo de antigudad tienen mayor rotación.
# Preparar los datos para el modelo
datos_modelo <- model.matrix(Rotación ~ Departamento + Estado_Civil + Horas_Extra + Edad + Satisfación_Laboral + Antigüedad_Cargo, data=rotacion)[,-1]
rotacion <- rotacion$Rotación
# Ajustar el modelo de regresión logística
modelo <- glm(rotacion ~ ., data=as.data.frame(datos_modelo), family=binomial)
summary(modelo)
##
## Call:
## glm(formula = rotacion ~ ., family = binomial, data = as.data.frame(datos_modelo))
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.8693 -0.5689 -0.3955 -0.2404 3.1254
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.119459 0.391561 0.305 0.760301
## DepartamentoRH 0.611790 0.358157 1.708 0.087606 .
## DepartamentoVentas 0.561205 0.165616 3.389 0.000703 ***
## Estado_CivilDivorciado -0.354693 0.231111 -1.535 0.124850
## Estado_CivilSoltero 0.816245 0.171842 4.750 2.03e-06 ***
## Horas_ExtraSi 1.518710 0.160118 9.485 < 2e-16 ***
## Edad -0.041991 0.009183 -4.573 4.82e-06 ***
## Satisfación_Laboral -0.330189 0.069712 -4.736 2.17e-06 ***
## Antigüedad_Cargo -0.123958 0.026291 -4.715 2.42e-06 ***
## ---
## 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: 1077.0 on 1461 degrees of freedom
## AIC: 1095
##
## Number of Fisher Scoring iterations: 5
Los resultados del modelo de logistico son los siguientes:
Intercepto (Intercept): El coeficiente estimado es de 0.119, con un error estándar de 0.392 y un valor z de 0.305. La p-value asociada es de 0.760, lo que indica que no hay una diferencia significativa en la probabilidad de rotación entre las categorías de referencia y las demás variables cuando todas las demás variables se mantienen constantes.
DepartamentoRH: El coeficiente estimado es de 0.612, con un error estándar de 0.358 y un valor z de 1.708. La p-value asociada es de 0.088, lo que sugiere que existe una tendencia hacia una asociación significativa entre pertenecer al departamento de Recursos Humanos (RH) y la probabilidad de rotación.
DepartamentoVentas: El coeficiente estimado es de 0.561, con un error estándar de 0.166 y un valor z de 3.389. La p-value asociada es <0.001, lo que indica una asociación significativa entre pertenecer al departamento de Ventas y la probabilidad de rotación.
Estado Civil (Divorciado): El coeficiente estimado es de -0.355, con un error estándar de 0.231 y un valor z de -1.535. La p-value asociada es de 0.125, lo que sugiere que no hay una asociación significativa entre el estado civil de estar divorciado y la probabilidad de rotación.
Estado Civil (Soltero): El coeficiente estimado es de 0.816, con un error estándar de 0.172 y un valor z de 4.750. La p-value asociada es <0.001, indicando una asociación significativa entre el estado civil de ser soltero y la probabilidad de rotación.
Horas Extra (Sí): El coeficiente estimado es de 1.519, con un error estándar de 0.160 y un valor z de 9.485. La p-value asociada es <0.001, lo que indica una asociación significativa entre trabajar horas extras y la probabilidad de rotación.
Edad: El coeficiente estimado es de -0.042, con un error estándar de 0.009 y un valor z de -4.573. La p-value asociada es <0.001, lo que sugiere una asociación significativa inversa entre la edad y la probabilidad de rotación.
Satisfacción Laboral: El coeficiente estimado es de -0.330, con un error estándar de 0.070 y un valor z de -4.736. La p-value asociada es <0.001, indicando una asociación significativa inversa entre la satisfacción laboral y la probabilidad de rotación.
Antigüedad en el Cargo: El coeficiente estimado es de -0.124, con un error estándar de 0.026 y un valor z de -4.715. La p-value asociada es <0.001, lo que sugiere una asociación significativa inversa entre la antigüedad en el cargo y la probabilidad de rotación.
# Predicciones
predicciones <- predict(modelo, type="response")
# Calcular la curva ROC y el AUC
roc_obj <- roc(rotacion, predicciones)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
plot(roc_obj, main="Curva ROC para la Rotación de Empleados", col = "blue", lwd = 2)
auc <- auc(roc_obj)
cat("El AUC es:", auc)
## El AUC es: 0.7796223
El modelo muestra un AUC de 0.7796, lo que indica una capacidad razonable para distinguir entre casos positivos (rotación de empleados) y negativos (no rotación). Un AUC de 0.5 indica una predicción aleatoria, mientras que un valor más cercano a 1 sugiere una mejor capacidad de discriminación del modelo.
# nuevo empleado hipotético
nuevo_empleado <- data.frame(
Satisfación_Laboral = 3,
Edad = 33,
DepartamentoRH = 0,
DepartamentoVentas = 1,
Horas_ExtraSi = 0,
Estado_CivilSoltero = 0,
Estado_CivilDivorciado = 1,
Antigüedad_Cargo = 7
)
# Escalar los datos del individuo hipotético
nuevo_empleado_modelo <- predict(modelo, nuevo_empleado)
# Definir un corte, por ejemplo, 0.5
intervenir <- ifelse(nuevo_empleado_modelo > 0.5, "Intervenir", "No Intervenir")
intervenir
## 1
## "No Intervenir"
Basándonos en los resultados del modelo de regresión logística, podemos identificar las variables que tienen un impacto significativo en la probabilidad de rotación de empleados. Estas variables incluyen el departamento al que pertenece el empleado, el estado civil, si realiza horas extras regularmente, la edad, el nivel de satisfacción laboral y la antigüedad en el cargo actual.
Para disminuir la rotación en la empresa, se pueden implementar las siguientes estrategias:
Fomentar un ambiente laboral favorable en el departamento de Ventas: Dado que el departamento de Ventas muestra una asociación significativa con la rotación, se debe prestar especial atención a mejorar las condiciones laborales y reducir el estrés en este departamento.
Apoyar a los empleados solteros: Los empleados solteros tienen una probabilidad significativamente mayor de rotación. Para retener este segmento de la fuerza laboral, la empresa podría considerar políticas que apoyen el equilibrio entre el trabajo y la vida personal, así como beneficios adicionales que reconozcan las necesidades específicas de este grupo.
Monitorear y gestionar las horas extras: La realización de horas extras se relaciona con una mayor probabilidad de rotación. Es esencial revisar las cargas de trabajo y los procesos operativos para minimizar la necesidad de horas extras. Se deben establecer políticas que promuevan el equilibrio entre el trabajo y la vida personal, así como el reconocimiento y la compensación adecuada por el tiempo extra trabajado.
Brindar oportunidades de desarrollo profesional: La edad y la antigüedad en el cargo actual están inversamente relacionadas con la probabilidad de rotación. Para retener a los empleados más jóvenes y aquellos con menos tiempo en el cargo, la empresa puede ofrecer programas de desarrollo profesional, oportunidades de capacitación y proyectos desafiantes que promuevan el crecimiento y la satisfacción laboral.
Mejorar la satisfacción laboral: La satisfacción laboral está fuertemente asociada con la rotación. Es fundamental identificar las causas de insatisfacción y tomar medidas para abordarlas. Esto podría incluir mejorar la comunicación interna, reconocer y recompensar el desempeño sobresaliente, y promover un ambiente de trabajo inclusivo y colaborativo.