Dada la preocupante tasa de rotación de empleados en una organización, se ha iniciado un análisis exhaustivo para comprender y anticipar los factores que influyen en dicha rotación en diferentes cargos. Para ello, la organización ha recopilado datos históricos sobre los empleados, incluyendo variables como antigüedad, nivel de satisfacción, edad, cargo actual, entre otras. El objetivo principal es identificar patrones y tendencias que permitan anticipar la rotación de los empleados en sus cargos actuales, lo que proporcionará a la organización información valiosa para implementar estrategias efectivas de retención de talento.
Se visualiza el DataFrame completo a trabajar.
## 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, …
| Variables | Tipo de datos | Descipción |
|---|---|---|
| Edad | numerico | Edad del empleado |
| Ingresos mensuales | numerico | Salario mensual (USD) |
| Antigüedad | numerico | Años en la empresa |
| Horas extras | Caracter | Trabaja horas extra |
| Cargo | Caracter | Cargo actual |
| Campo educación | Caracter | Campo educativo |
Decidimos incluir la variable de edad en nuestro análisis basándonos en una lógica común que sugiere que las personas más jóvenes tienden a cambiar de trabajo con mayor frecuencia o a aspirar a puestos de trabajo de mayor nivel. Es posible que esta población más joven experimente una mayor rotación laboral en comparación con aquellas personas de edad más avanzada, de igual forma en nuestro dataframe incluimos la variable Ingresos mensuales debido a que las personas con menores ingresos buscan a aspirar a cargos mas importantes en la empresa o a buscar oportunidades laborales con un mejor salario.Por último, incorporamos la variable Antigüedad ya que consideramos que los empleados con mayor antigüedad son los más propensos a rotar entre los cargos, debido a su experiencia en la compañía.
En nuestro dataframe de análisis, hemos incluido la variable categórica de horas extras, ya que consideramos que es un factor fundamental que influye directamente en nuestra variable objetivo, Rotación. También hemos incorporado el Cargo actual, el cual es esencial y requiere un análisis más detallado para comprender su efecto sobre la variable objetivo. Por último, hemos seleccionado el campo de educación, ya que inferimos que los empleados con ciertas profesiones pueden tener una rotación diferente en comparación con profesionales de otros campos.
### Análisis univariado - Variables cuanlitativas.
for (col_name in colnames(rotacion)) {
col_type <- class(rotacion[[col_name]])
if(col_type =="character"){
datos_freq <- as.data.frame(table(rotacion[[col_name]]))
colnames(datos_freq)[1] <- col_name
datos_freq$Porcentaje <- datos_freq$Freq / sum(datos_freq$Freq) * 100
grafico <- ggplot(datos_freq, aes(x = "", y = Freq, fill = .data[[col_name]])) +
geom_bar(width = 1, stat = "identity") +
coord_polar("y", start=0) +
labs(title = paste0("Distribución de Campo de ",col_name), fill = "") +
geom_text(aes(label = paste(round(Porcentaje, 1), "%")), position = position_stack(vjust = 0.5), size = 4) +
theme_light() +
theme(legend.position='none')+
theme(axis.text = element_blank(),
axis.title = element_blank(),
legend.title = element_blank(),
legend.text = element_blank(),
plot.title = element_blank())
grafico2 <- ggplot(datos_freq, aes(x = " ", y=Freq,fill=.data[[col_name]]) ) +
geom_bar(width = 0.9, stat="identity",
position = position_dodge()
)+
labs(
x="",
y= "",
fill=col_name
) +
geom_text(aes(label=Freq), vjust=1.6, color="white",
position = position_dodge(0.9), size=4
)+
theme_light() +
theme(legend.position='top')+
facet_grid(~paste0("Frecuncia de ", col_name))
grid.arrange(grafico2,grafico, ncol=2)
}
if(col_type =="numeric"){
if(col_name=="Ingreso_Mensual"){bin<-1000}else{bin<-1}
grafico3<- ggplot(data = rotacion, aes(x = .data[[col_name]])) +
geom_histogram(binwidth = bin,fill = "#88CCEE", color = "black") +
labs(x = " ", y = "Frecuencia", title = paste0("Distribucion de ", col_name))
grafico4 <- ggplot(data = rotacion, aes(x = " ", y = .data[[col_name]], fill = .data[[col_name]])) +
geom_boxplot(fill = "#88CCEE") +
geom_jitter(color="red", size=0.4, alpha=0.9) +
labs(x = "")+
theme(legend.position = "none")
grid.arrange(grafico3,grafico4, ncol=2)
}
}
Rotación: La variable ‘Rotación’, que en este caso es nuestra variable objetivo, muestra, según nuestro primer gráfico, que la mayoría de las personas, con un 83.9%, no rotan en la compañía, mientras que la minoría que sí lo hace representa un 16.1% según los datos del DataFrame de rotación.
Edad: Al analizar nuestra variable de edad, notamos que la edad mínima registrada en la compañía es de 18 años, mientras que el empleado más longevo tiene 60 años. El promedio de edad de los empleados es de aproximadamente 36 años.
Ingresos Mensuales: Se observa que la mayoría de los empleados tienen un salario mensual que oscila entre los 1000 y los 5100 dólares. La mediana de ingresos mensuales se sitúa en 4919 dólares, lo que sugiere que la mitad de los empleados ganan más de este monto y la otra mitad gana menos.
Antigüedad: Notamos en el gráfico de Distribución de la Antigüedad que la mayoría de los empleados se encuentran en el rango de 0 a 10 años de antigüedad. La media de antigüedad es de 5 años, con un mínimo de 0 y un máximo de 40 años. Estos datos sugieren que la mayoría de los empleados no tienen una antigüedad muy prolongada en la empresa.
Horas Extra: Al analizar la distribución de las horas extras entre los empleados, se observa que la mayoría, equivalentes al 71.7% del total, no realizan horas extras, lo que representa a un total de 1054 empleados. Por otro lado, el 28.3% de los empleados, lo que equivale a 416 personas, sí realizan horas extras en su jornada laboral.
Cargo actual: El cargo de Ejecutivo de Ventas destaca como el más común, con un 22.2% de los empleados, lo que equivale a unos 326 empleados. Le sigue de cerca el puesto de Investigador Científico, con aproximadamente 292 empleados, representando el 19.9% de la fuerza laboral. En tercer lugar, se encuentran los Técnicos Laborales, con unos 259 empleados, constituyendo el 17.6% del total de empleados.
Campo de educación: Las personas educadas en campos de las ciencias conforman la mayoría de los datos, representando alrededor del 41.2% de los empleados, lo que equivale a 606 empleados. Les siguen de cerca los profesionales de la salud, que constituyen aproximadamente el 31.6% de los datos, con un número similar de empleados, alrededor de 316.
#rotacion$Rotación <- factor(rotacion$Rotación, levels = c("No", "Si"), labels = c(0, 1))
for (col_name in colnames(rotacion)) {
col_type <- class(rotacion[[col_name]])
if(col_type =="character"){
graficoCaracter <- PlotXTabs2(
data = rotacion,
y = Rotación,
x = names(rotacion[col_name]),
xlab = names(rotacion[col_name]),
ylab = NULL,
data.label = "both",
labels.legend = c("No","Si"),
label.fill.alpha = 0.25,
legend.title = "Rotación",
legend.position = "right",
title = paste0("Rotación de acuerdo con ",names(rotacion[col_name])),
palette = "Pastel1"
)+
theme(axis.text.x = element_text(angle = 45, hjust = 1))
print(graficoCaracter)
}
if(col_type =="numeric"){
rotabi <- ifelse(rotacion$Rotación == "Si", 1, 0)
GraficoBivariado <- ggplot(data=rotacion,aes(x=Rotación,y=.data[[col_name]], fill=Rotación))+
geom_boxplot(outlier.shape = NA)+
geom_jitter(width = 0.05)+
theme_bw()+
labs(
x=paste0("Cor ",names(rotacion[col_name])," ",round(cor(rotabi, rotacion[col_name]),3))
,y=paste0(names(rotacion[col_name])) ) +
theme(panel.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
print(GraficoBivariado)
}
}
Edad: el valor de -0.159 indica que hay una correlación negativa débil entre la variable “Rotación” y “edad”. Esto sugiere que, en general, a medida que la edad de los empleados aumenta, la rotación tiende a disminuir ligeramente, o viceversa, pero la relación no es muy fuerte.
Ingreso Mensaual: el valor de -0.160 esto significa que hay una tendencia, aunque no muy fuerte, de que a medida que aumenta el ingreso mensual de los empleados, la tasa de rotación tiende a disminuir ligeramente, o viceversa. En otras palabras, los empleados con ingresos mensuales más altos podrían tener una menor probabilidad de abandonar la empresa, o los empleados con ingresos mensuales más bajos podrían tener una mayor probabilidad de rotación.
antigüedad: el valor de -0.134 indica una correlación negativa débil entre estas dos variables. Esto sugiere que hay una tendencia, aunque no muy fuerte, de que a medida que la antigüedad de los empleados en la empresa aumenta, la tasa de rotación tiende a disminuir ligeramente, o viceversa.
rotacion$Horas_Extra_BI <- ifelse(rotacion$Horas_Extra == "Si", 1, 0)
ggpairs(rotacion, columns = c(25,26),aes(color = Rotación), alpha = 0.5)
rotacion <- dummy_cols(rotacion, select_columns = c("Cargo"))
ggpairs(rotacion, columns = c(25,27:30),aes(color = Rotación, alpha = 0.5))
ggpairs(rotacion, columns = c(25,31:35),aes(color = Rotación, alpha = 0.5))
Resaltamos los siguientes cargos destacados de la variable ‘cargo’:
Técnico Laboral: Una correlación de 0.098 sugiere una correlación positiva débil entre estas dos variables. Esto indica que puede existir una ligera tendencia de que los empleados con el cargo de “Técnico Laboral” tengan una probabilidad ligeramente mayor de rotación, pero la relación no es muy fuerte.
Representante de ventas: Una correlación de 0.157 esto indica que existe una tendencia moderada de que los empleados con el cargo de “Representante de Ventas” tengan una probabilidad moderadamente mayor de rotación en comparación con otros cargos. Sin embargo, la relación no es muy fuerte y puede estar influenciada por otros factores.
Director de investigación: Una correlación de -0.083 indica una correlación negativa débil entre estas dos variables. Esto sugiere que puede existir una leve tendencia de que los empleados con el cargo de “Director de Investigación” tengan una probabilidad ligeramente menor de rotación en comparación con otros cargos.
rotacion <- dummy_cols(rotacion, select_columns = c("Campo_Educación"))
ggpairs(rotacion, columns = c(25,36:39),aes(color = Rotación, alpha = 0.5))
ggpairs(rotacion, columns = c(25,39:41),aes(color = Rotación, alpha = 0.5))
Para mejorar la lectura del modelo convertiremos cada de unas de las variables categoricas a binarias 1 - 0.
RotacionModelo <- rotacion
names(RotacionModelo)[names(RotacionModelo) == 'Viaje de Negocios'] <- 'Viaje_de_Negocios'
names(RotacionModelo)[names(RotacionModelo) == 'Satisfación_Laboral'] <- 'Satisfacion_Laboral'
RotacionModelo$Rotación <- ifelse(RotacionModelo$Rotación == "Si", 1, 0)
RotacionModelo$Viaje_Negocios_Frecuente <- ifelse(RotacionModelo$Viaje_de_Negocios == "Frecuentemente", 1, 0)
RotacionModelo$Viaje_Negocios_NoViaja <- ifelse(RotacionModelo$Viaje_de_Negocios == "No_Viaja", 1, 0)
RotacionModelo$Viaje_Negocios_Raramente <- ifelse(RotacionModelo$Viaje_de_Negocios == "Raramente", 1, 0)
RotacionModelo <- subset(RotacionModelo, select = -Viaje_de_Negocios)
RotacionModelo$Dpto_IyD <- ifelse(RotacionModelo$Departamento == "IyD", 1, 0)
RotacionModelo$Dpto_RH <- ifelse(RotacionModelo$Departamento == "RH", 1, 0)
RotacionModelo$Dpto_Ventas <- ifelse(RotacionModelo$Departamento == "Ventas", 1, 0)
RotacionModelo <- subset(RotacionModelo, select = -Departamento)
RotacionModelo$CampoEd_Ciencias <- ifelse(RotacionModelo$Campo_Educación == "Ciencias", 1, 0)
RotacionModelo$CampoEd_Humanidades <- ifelse(RotacionModelo$Campo_Educación == "Humanidades", 1, 0)
RotacionModelo$CampoEd_Mercadeo <- ifelse(RotacionModelo$Campo_Educación == "Mercadeo", 1, 0)
RotacionModelo$CampoEd_Salud <- ifelse(RotacionModelo$Campo_Educación == "Salud", 1, 0)
RotacionModelo$CampoEd_Tecnicos <- ifelse(RotacionModelo$Campo_Educación == "Tecnicos", 1, 0)
RotacionModelo <- subset(RotacionModelo, select = -Campo_Educación)
RotacionModelo$Genero_bi <- ifelse(RotacionModelo$Genero == "M", 1, 0)
RotacionModelo <- subset(RotacionModelo, select = -Genero)
RotacionModelo$Cargo_Director_Investigación <- ifelse(RotacionModelo$Cargo == "Director_Investigación", 1, 0)
RotacionModelo$Cargo_Director_Manofactura <- ifelse(RotacionModelo$Cargo == "Director_Manofactura", 1, 0)
RotacionModelo$Cargo_Ejecutivo_Ventas <- ifelse(RotacionModelo$Cargo == "Ejecutivo_Ventas", 1, 0)
RotacionModelo$Cargo_Gerente <- ifelse(RotacionModelo$Cargo == "Gerente", 1, 0)
RotacionModelo$Cargo_Investigador_Cientifico <- ifelse(RotacionModelo$Cargo == "Investigador_Cientifico", 1, 0)
RotacionModelo$Cargo_Recursos_Humanos <- ifelse(RotacionModelo$Cargo == "Recursos_Humanos", 1, 0)
RotacionModelo$Cargo_Representante_Salud <- ifelse(RotacionModelo$Cargo == "Representante_Salud", 1, 0)
RotacionModelo$Cargo_Representante_Ventas <- ifelse(RotacionModelo$Cargo == "Representante_Ventas", 1, 0)
RotacionModelo$Cargo_Tecnico_Laboratorio <- ifelse(RotacionModelo$Cargo == "Tecnico_Laboratorio", 1, 0)
RotacionModelo <- subset(RotacionModelo, select = -Cargo)
RotacionModelo$Estado_Civil_Casado <- ifelse(RotacionModelo$Estado_Civil == "Casado", 1, 0)
RotacionModelo$Estado_Civil_Divorciado <- ifelse(RotacionModelo$Estado_Civil == "Divorciado", 1, 0)
RotacionModelo$Estado_Civil_Soltero <- ifelse(RotacionModelo$Estado_Civil == "Soltero", 1, 0)
RotacionModelo <- subset(RotacionModelo, select = -Estado_Civil)
RotacionModelo$Horas_Extra_bi <- ifelse(RotacionModelo$Horas_Extra == "Si", 1, 0)
RotacionModelo <- subset(RotacionModelo, select = -Horas_Extra)
options(scipen = 999)
modelo_glm <- glm(Rotación ~ Edad + Distancia_Casa + Ingreso_Mensual + Trabajos_Anteriores + Porcentaje_aumento_salarial + Años_Experiencia + Capacitaciones + Antigüedad + Antigüedad_Cargo + Años_ultima_promoción + Años_acargo_con_mismo_jefe + Viaje_Negocios_Frecuente + Viaje_Negocios_NoViaja + Dpto_IyD + Dpto_RH + Educación + CampoEd_Ciencias + CampoEd_Humanidades + CampoEd_Mercadeo + CampoEd_Salud + CampoEd_Tecnicos + Satisfacción_Ambiental + Genero_bi + Cargo_Director_Investigación + Cargo_Director_Manofactura + Cargo_Ejecutivo_Ventas + Cargo_Gerente + Cargo_Investigador_Cientifico + Cargo_Recursos_Humanos + Cargo_Representante_Salud + Cargo_Representante_Ventas + Satisfacion_Laboral + Estado_Civil_Casado + Estado_Civil_Divorciado + Horas_Extra_bi + Rendimiento_Laboral + Equilibrio_Trabajo_Vida, data = RotacionModelo, family = "binomial")
summary(modelo_glm)
##
## Call:
## glm(formula = Rotación ~ Edad + Distancia_Casa + Ingreso_Mensual +
## Trabajos_Anteriores + Porcentaje_aumento_salarial + Años_Experiencia +
## Capacitaciones + Antigüedad + Antigüedad_Cargo + Años_ultima_promoción +
## Años_acargo_con_mismo_jefe + Viaje_Negocios_Frecuente +
## Viaje_Negocios_NoViaja + Dpto_IyD + Dpto_RH + Educación +
## CampoEd_Ciencias + CampoEd_Humanidades + CampoEd_Mercadeo +
## CampoEd_Salud + CampoEd_Tecnicos + Satisfacción_Ambiental +
## Genero_bi + Cargo_Director_Investigación + Cargo_Director_Manofactura +
## Cargo_Ejecutivo_Ventas + Cargo_Gerente + Cargo_Investigador_Cientifico +
## Cargo_Recursos_Humanos + Cargo_Representante_Salud + Cargo_Representante_Ventas +
## Satisfacion_Laboral + Estado_Civil_Casado + Estado_Civil_Divorciado +
## Horas_Extra_bi + Rendimiento_Laboral + Equilibrio_Trabajo_Vida,
## family = "binomial", data = RotacionModelo)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.7938 -0.5091 -0.2716 -0.0994 3.4048
##
## Coefficients:
## Estimate Std. Error z value
## (Intercept) 3.2432078991 1.5879002950 2.042
## Edad -0.0365539900 0.0132762602 -2.753
## Distancia_Casa 0.0424979507 0.0104602114 4.063
## Ingreso_Mensual -0.0000009588 0.0000585421 -0.016
## Trabajos_Anteriores 0.1756117175 0.0374621553 4.688
## Porcentaje_aumento_salarial -0.0230214318 0.0380532437 -0.605
## Años_Experiencia -0.0540810559 0.0278169167 -1.944
## Capacitaciones -0.1828028412 0.0712523863 -2.566
## Antigüedad 0.0963034862 0.0374968346 2.568
## Antigüedad_Cargo -0.1414201807 0.0438629044 -3.224
## Años_ultima_promoción 0.1786631306 0.0411219220 4.345
## Años_acargo_con_mismo_jefe -0.1563025131 0.0459907641 -3.399
## Viaje_Negocios_Frecuente 0.8214570546 0.2061874452 3.984
## Viaje_Negocios_NoViaja -0.9414342549 0.3654387664 -2.576
## Dpto_IyD -0.1231267101 1.0234135368 -0.120
## Dpto_RH -13.0466285416 378.0234598471 -0.035
## Educación -0.0114853028 0.0855229000 -0.134
## CampoEd_Ciencias -0.0597863935 0.4024035606 -0.149
## CampoEd_Humanidades 0.7743988324 0.8445499827 0.917
## CampoEd_Mercadeo 0.3225204218 0.4753172482 0.679
## CampoEd_Salud -0.1733992883 0.4093905660 -0.424
## CampoEd_Tecnicos 0.8683546351 0.4565170486 1.902
## Satisfacción_Ambiental -0.4424230251 0.0811860473 -5.449
## Genero_bi 0.3248320727 0.1795229061 1.809
## Cargo_Director_Investigación -2.5871541851 1.0180074380 -2.541
## Cargo_Director_Manofactura -1.3182344827 0.4461853011 -2.954
## Cargo_Ejecutivo_Ventas -0.5983120436 1.0581252165 -0.565
## Cargo_Gerente -1.3403721700 0.9311674367 -1.439
## Cargo_Investigador_Cientifico -0.9439182077 0.2607219007 -3.620
## Cargo_Recursos_Humanos 12.6017271917 378.0233601675 0.033
## Cargo_Representante_Salud -1.5501263959 0.4670962763 -3.319
## Cargo_Representante_Ventas 0.3749646262 1.0703359477 0.350
## Satisfacion_Laboral -0.4048455666 0.0792460753 -5.109
## Estado_Civil_Casado -1.0333268372 0.1941161697 -5.323
## Estado_Civil_Divorciado -1.4305945247 0.2581758605 -5.541
## Horas_Extra_bi 1.8717339483 0.1869038348 10.014
## Rendimiento_Laboral 0.1702077107 0.3888900832 0.438
## Equilibrio_Trabajo_Vida -0.3654396982 0.1207257402 -3.027
## Pr(>|z|)
## (Intercept) 0.041107 *
## Edad 0.005899 **
## Distancia_Casa 0.0000484835 ***
## Ingreso_Mensual 0.986932
## Trabajos_Anteriores 0.0000027628 ***
## Porcentaje_aumento_salarial 0.545193
## Años_Experiencia 0.051874 .
## Capacitaciones 0.010301 *
## Antigüedad 0.010220 *
## Antigüedad_Cargo 0.001264 **
## Años_ultima_promoción 0.0000139455 ***
## Años_acargo_con_mismo_jefe 0.000677 ***
## Viaje_Negocios_Frecuente 0.0000677562 ***
## Viaje_Negocios_NoViaja 0.009990 **
## Dpto_IyD 0.904238
## Dpto_RH 0.972468
## Educación 0.893169
## CampoEd_Ciencias 0.881890
## CampoEd_Humanidades 0.359176
## CampoEd_Mercadeo 0.497431
## CampoEd_Salud 0.671891
## CampoEd_Tecnicos 0.057154 .
## Satisfacción_Ambiental 0.0000000505 ***
## Genero_bi 0.070386 .
## Cargo_Director_Investigación 0.011041 *
## Cargo_Director_Manofactura 0.003132 **
## Cargo_Ejecutivo_Ventas 0.571771
## Cargo_Gerente 0.150022
## Cargo_Investigador_Cientifico 0.000294 ***
## Cargo_Recursos_Humanos 0.973407
## Cargo_Representante_Salud 0.000905 ***
## Cargo_Representante_Ventas 0.726095
## Satisfacion_Laboral 0.0000003244 ***
## Estado_Civil_Casado 0.0000001019 ***
## Estado_Civil_Divorciado 0.0000000300 ***
## Horas_Extra_bi < 0.0000000000000002 ***
## Rendimiento_Laboral 0.661621
## Equilibrio_Trabajo_Vida 0.002470 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1298.58 on 1469 degrees of freedom
## Residual deviance: 893.23 on 1432 degrees of freedom
## AIC: 969.23
##
## Number of Fisher Scoring iterations: 14
Edad: Coeficiente negativo, implica que un aumento en la edad disminuye la probabilidad de la rotación de los empleados. Lo cual es acorde a la hipótesis del punto número 1.
Ingresos mensuales: un coeficiente extremadamente bajo no muy significativo
Antigüedad: Coeficiente positivo, asociacion positiva entre la variable rotacion y la variable de Antigüedad.
Horas extras binaria: los empledos que realiza horas extra aumentan en un 1.87 probabilidad de rotación.
Cargo_Director_Investigación: los directores de investigación tienen una log(odds) de rotación aproximadamente 2.59 veces mayor.
Cargo_Director_Manofactura: Con un coeficiente de 1.31, los directores de manufactura tienen una log(odds) de rotación aproximadamente 1.32 veces mayor en comparación con la categoría de referencia.
Cargo_Ejecutivo_Ventas: Un coeficiente de 0.59 indica que los ejecutivos de ventas tienen una log(odds) de rotación aproximadamente 0.60 veces mayor en comparación con la categoría de referencia.
Cargo_Gerente: Con un coeficiente de 1.34, los gerentes tienen una log(odds) de rotación aproximadamente 1.34 veces
Cargo_Investigador_Cientifico: El coeficiente de 0.9439182077 sugiere que los investigadores científicos tienen una log(odds) de rotación aproximadamente 0.94 veces mayor.
Cargo_Recursos_Humanos: Este coeficiente extremadamente alto (12.6) indica que ocupar el cargo de “Recursos Humanos” está fuertemente asociado con un aumento significativo en la log(odds) de rotación
Cargo_Representante_Salud: El coeficiente positivo (1.5) sugiere que ocupar el cargo de “Representante de Salud” está asociado con un aumento en la log(odds) de rotación
Cargo_Representante_Ventas: El coeficiente positivo (0.37) sugiere que ocupar el cargo de “Representante de Ventas” también está asociado con un aumento en la log(odds) de rotación
Campo educación: Los coeficientes en los
diferentes campos de educacion no hacen mucho peso, pero todas son
positivas.
Seleccionaremos solo las variables propuestas en el punto 1.
modelo_hipo <- glm(Rotación ~ Edad + Ingreso_Mensual + Antigüedad + Horas_Extra_bi + Cargo_Director_Investigación + Cargo_Director_Manofactura + Cargo_Ejecutivo_Ventas + Cargo_Gerente + Cargo_Investigador_Cientifico + Cargo_Recursos_Humanos + Cargo_Representante_Salud + Cargo_Representante_Ventas + CampoEd_Ciencias + CampoEd_Humanidades + CampoEd_Mercadeo + CampoEd_Salud + CampoEd_Tecnicos, data = RotacionModelo, family = "binomial")
summary(modelo_hipo)
##
## Call:
## glm(formula = Rotación ~ Edad + Ingreso_Mensual + Antigüedad +
## Horas_Extra_bi + Cargo_Director_Investigación + Cargo_Director_Manofactura +
## Cargo_Ejecutivo_Ventas + Cargo_Gerente + Cargo_Investigador_Cientifico +
## Cargo_Recursos_Humanos + Cargo_Representante_Salud + Cargo_Representante_Ventas +
## CampoEd_Ciencias + CampoEd_Humanidades + CampoEd_Mercadeo +
## CampoEd_Salud + CampoEd_Tecnicos, family = "binomial", data = RotacionModelo)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.5154 -0.5745 -0.4231 -0.2368 3.1819
##
## Coefficients:
## Estimate Std. Error z value
## (Intercept) -0.74332827 0.47921678 -1.551
## Edad -0.03300880 0.01024758 -3.221
## Ingreso_Mensual 0.00003999 0.00004705 0.850
## Antigüedad -0.03775877 0.01893123 -1.995
## Horas_Extra_bi 1.49678263 0.15865913 9.434
## Cargo_Director_Investigación -2.70432398 0.92057236 -2.938
## Cargo_Director_Manofactura -1.54350806 0.41029927 -3.762
## Cargo_Ejecutivo_Ventas -0.62481968 0.29005822 -2.154
## Cargo_Gerente -1.88609478 0.77181745 -2.444
## Cargo_Investigador_Cientifico -0.75479521 0.23117629 -3.265
## Cargo_Recursos_Humanos -0.37124470 0.49875737 -0.744
## Cargo_Representante_Salud -1.50470772 0.42700593 -3.524
## Cargo_Representante_Ventas 0.42276578 0.30114518 1.404
## CampoEd_Ciencias 0.29695608 0.36990035 0.803
## CampoEd_Humanidades 0.93372097 0.72107147 1.295
## CampoEd_Mercadeo 0.57751179 0.43256742 1.335
## CampoEd_Salud 0.20465196 0.37713644 0.543
## CampoEd_Tecnicos 0.91158831 0.41736447 2.184
## Pr(>|z|)
## (Intercept) 0.120870
## Edad 0.001277 **
## Ingreso_Mensual 0.395331
## Antigüedad 0.046095 *
## Horas_Extra_bi < 0.0000000000000002 ***
## Cargo_Director_Investigación 0.003307 **
## Cargo_Director_Manofactura 0.000169 ***
## Cargo_Ejecutivo_Ventas 0.031231 *
## Cargo_Gerente 0.014537 *
## Cargo_Investigador_Cientifico 0.001095 **
## Cargo_Recursos_Humanos 0.456671
## Cargo_Representante_Salud 0.000425 ***
## Cargo_Representante_Ventas 0.160360
## CampoEd_Ciencias 0.422090
## CampoEd_Humanidades 0.195352
## CampoEd_Mercadeo 0.181850
## CampoEd_Salud 0.587373
## CampoEd_Tecnicos 0.028951 *
## ---
## 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: 1093.4 on 1452 degrees of freedom
## AIC: 1129.4
##
## Number of Fisher Scoring iterations: 6
round(coef(modelo_hipo),4)
## (Intercept) Edad
## -0.7433 -0.0330
## Ingreso_Mensual Antigüedad
## 0.0000 -0.0378
## Horas_Extra_bi Cargo_Director_Investigación
## 1.4968 -2.7043
## Cargo_Director_Manofactura Cargo_Ejecutivo_Ventas
## -1.5435 -0.6248
## Cargo_Gerente Cargo_Investigador_Cientifico
## -1.8861 -0.7548
## Cargo_Recursos_Humanos Cargo_Representante_Salud
## -0.3712 -1.5047
## Cargo_Representante_Ventas CampoEd_Ciencias
## 0.4228 0.2970
## CampoEd_Humanidades CampoEd_Mercadeo
## 0.9337 0.5775
## CampoEd_Salud CampoEd_Tecnicos
## 0.2047 0.9116
exp(coef(modelo_hipo))
## (Intercept) Edad
## 0.47552859 0.96753004
## Ingreso_Mensual Antigüedad
## 1.00004000 0.96294520
## Horas_Extra_bi Cargo_Director_Investigación
## 4.46729298 0.06691554
## Cargo_Director_Manofactura Cargo_Ejecutivo_Ventas
## 0.21363036 0.53535796
## Cargo_Gerente Cargo_Investigador_Cientifico
## 0.15166293 0.47010688
## Cargo_Recursos_Humanos Cargo_Representante_Salud
## 0.68987511 0.22208219
## Cargo_Representante_Ventas CampoEd_Ciencias
## 1.52617679 1.34575619
## CampoEd_Humanidades CampoEd_Mercadeo
## 2.54395757 1.78159991
## CampoEd_Salud CampoEd_Tecnicos
## 1.22709791 2.48827154
Edad: a medida que aumenta la edad disminuye en un 0.97 la probabilidad de rotación.
Ingresos mensuales: un coeficiente de 1 para una variable independiente significa que un aumento de una unidad en esa variable resulta en un aumento de una unidad en la variable de rotación.
Antigüedad: En este caso, el coeficiente es menor que 1, lo que sugiere que un aumento en la antigüedad está asociado con una disminución en la probabilidad de rotación.
Horas Extras: Para los empleados que realizan horas extra, la log(odds) de rotación es aproximadamente 4.47 veces mayor en comparación con aquellos que no realizan horas extra, manteniendo constantes todas las demás variables en el modelo.
Entre todos los cargos destacamos los siguientes:
Cargo_Director_Investigación: El coeficiente (4.47) indica que los individuos que ocupan el cargo de “Director de Investigación” tienen una log(odds) de rotación aproximadamente 4.47 veces mayor en comparación con otros cargos.
Cargo_Representante_Ventas: El coeficiente (1.5 indica que los individuos que ocupan el cargo de “Cargo_Representante_Ventas” tienen una log(odds) de rotación aproximadamente 1.5 veces mayor en comparación con otros cargos.
CampoEd_Ciencias: Tienen un coeficiente de 1.34 un leve aumentos en el campo de educación de las ciencias.
CampoEd_Humanidades: Tienen un coeficiente de 2.5 tiene un aumento alto positivo en el campo de educación de humanidades.
CampoEd_Mercadeo: Tienen un coeficiente de 1.78 tiene un aumento positivo en el campo de educación de mercadeo.
CampoEd_Salud: Tienen un coeficiente de 1.22 tiene un aumento positivo en el campo de educación de Salud.
CampoEd_Tecnicos: Tienen un coeficiente de 2.48 tiene un aumento alto positivo en el campo de educación de Tecnicos.
Prediccion=predict(modelo_hipo,list(Ingreso_Mensual = RotacionModelo$Ingreso_Mensual,
Antigüedad=RotacionModelo$Antigüedad,
Edad=RotacionModelo$Edad,
Horas_Extra_bi=RotacionModelo$Horas_Extra_bi,
Cargo_Director_Investigación= RotacionModelo$Cargo_Director_Investigación,
Cargo_Director_Manofactura= RotacionModelo$Cargo_Director_Manofactura,
Cargo_Ejecutivo_Ventas= RotacionModelo$Cargo_Ejecutivo_Ventas,
Cargo_Gerente= RotacionModelo$Cargo_Gerente,
Cargo_Investigador_Cientifico= RotacionModelo$Cargo_Investigador_Cientifico,
Cargo_Recursos_Humanos = RotacionModelo$Cargo_Recursos_Humanos,
Cargo_Representante_Salud = RotacionModelo$Cargo_Representante_Salud,
Cargo_Representante_Ventas = RotacionModelo$Cargo_Representante_Ventas,
CampoEd_Ciencias = RotacionModelo$CampoEd_Ciencias,
CampoEd_Humanidades = RotacionModelo$CampoEd_Humanidades,
CampoEd_Mercadeo = RotacionModelo$CampoEd_Mercadeo,
CampoEd_Salud = RotacionModelo$CampoEd_Salud,
CampoEd_Tecnicos = RotacionModelo$CampoEd_Tecnicos), type = "response")
ROC_mod_rotacion <- roc(rotacion$Rotación~Prediccion, percent = T, ci=T)
## Setting levels: control = No, case = Si
## Setting direction: controls < cases
ROC_mod_rotacion
##
## Call:
## roc.formula(formula = rotacion$Rotación ~ Prediccion, percent = T, ci = T)
##
## Data: Prediccion in 1233 controls (rotacion$Rotación No) < 237 cases (rotacion$Rotación Si).
## Area under the curve: 76.97%
## 95% CI: 73.48%-80.46% (DeLong)
plot(ROC_mod_rotacion,
print.auc=T,
print.thres = "best",
col="#0058A6",
xlab = "Tasa de Falsos Positivos (1 - Especificidad)",
ylab = "Tasa de verdadesdos positivos (Sensibilidad)")
la curva ROC es de 0.735 (AUC), por lo que se considera que el modelo tiene un buen ajuste de predicción, el cual se podria mejorar quitando las variables con coeficientes bajos.
predict(modelo_hipo,
list(
Ingreso_Mensual = 2500,
Antigüedad= 2,
Edad=25,
Horas_Extra_bi=1,
Cargo_Director_Investigación= 1,
Cargo_Director_Manofactura= 0,
Cargo_Ejecutivo_Ventas= 0,
Cargo_Gerente= 0,
Cargo_Investigador_Cientifico= 0,
Cargo_Recursos_Humanos = 0,
Cargo_Representante_Salud = 0,
Cargo_Representante_Ventas = 0,
CampoEd_Ciencias = 0,
CampoEd_Humanidades = 1,
CampoEd_Mercadeo = 0,
CampoEd_Salud = 0,
CampoEd_Tecnicos = 0),
type = "response")
## 1
## 0.139686
La probalidad de que rote el empleado es de 14.95%, bastante bajo, pero al momento del empleado no hacer horas extra la posibilidad de rotación disminuira sustancialmente.
En conclusion nuestro modelo de predicción de rotación de empleados muestra una precisión de aproximadamente el 77%. Este resultado sugiere que el modelo es efectivo para identificar empleados con una alta probabilidad de dejar la empresa. Para abordar este problema, una estrategia recomendada es revisar y posiblemente reducir la carga laboral adicional de los empleados, específicamente eliminando las horas extras asignadas. Sin embargo, es crucial realizar una evaluación exhaustiva para asegurarse de que la eliminación de las horas extras no afecte negativamente la productividad y el cumplimiento de los objetivos de la empresa. Además, la empresa podría considerar implementar políticas de gestión del tiempo más efectivas, ofrecer incentivos alternativos o mejorar las condiciones laborales para fomentar la retención del talento y reducir la rotación de empleados a largo plazo. Es importante reconocer que abordar la rotación de empleados es un proceso multifacético que requiere un enfoque estratégico y medidas adaptadas a las necesidades específicas de la organización.