Christian Daniel Escobar
Anduquia
Vladimir Fabian Rivas Cortes
Luis Carlos Ruiz Ramos
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.
Se hace el reconocimiento inicial de los tados, para conocer más acerca de su estructura y de esta manera poder proponer alternativas que permitan solucionar el problema.
skim(rotacion)
| Name | rotacion |
| Number of rows | 1470 |
| Number of columns | 24 |
| _______________________ | |
| Column type frequency: | |
| character | 8 |
| numeric | 16 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| Rotación | 0 | 1 | 2 | 2 | 0 | 2 | 0 |
| Viaje de Negocios | 0 | 1 | 8 | 14 | 0 | 3 | 0 |
| Departamento | 0 | 1 | 2 | 6 | 0 | 3 | 0 |
| Campo_Educación | 0 | 1 | 4 | 11 | 0 | 6 | 0 |
| Genero | 0 | 1 | 1 | 1 | 0 | 2 | 0 |
| Cargo | 0 | 1 | 7 | 23 | 0 | 9 | 0 |
| Estado_Civil | 0 | 1 | 6 | 10 | 0 | 3 | 0 |
| Horas_Extra | 0 | 1 | 2 | 2 | 0 | 2 | 0 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| Edad | 0 | 1 | 36.92 | 9.14 | 18 | 30 | 36 | 43 | 60 | ▂▇▇▃▂ |
| Distancia_Casa | 0 | 1 | 9.19 | 8.11 | 1 | 2 | 7 | 14 | 29 | ▇▅▂▂▂ |
| Educación | 0 | 1 | 2.91 | 1.02 | 1 | 2 | 3 | 4 | 5 | ▂▃▇▆▁ |
| Satisfacción_Ambiental | 0 | 1 | 2.72 | 1.09 | 1 | 2 | 3 | 4 | 4 | ▅▅▁▇▇ |
| Satisfación_Laboral | 0 | 1 | 2.73 | 1.10 | 1 | 2 | 3 | 4 | 4 | ▅▅▁▇▇ |
| Ingreso_Mensual | 0 | 1 | 6502.93 | 4707.96 | 1009 | 2911 | 4919 | 8379 | 19999 | ▇▅▂▁▂ |
| Trabajos_Anteriores | 0 | 1 | 2.69 | 2.50 | 0 | 1 | 2 | 4 | 9 | ▇▃▂▂▁ |
| Porcentaje_aumento_salarial | 0 | 1 | 15.21 | 3.66 | 11 | 12 | 14 | 18 | 25 | ▇▅▃▂▁ |
| Rendimiento_Laboral | 0 | 1 | 3.15 | 0.36 | 3 | 3 | 3 | 3 | 4 | ▇▁▁▁▂ |
| Años_Experiencia | 0 | 1 | 11.28 | 7.78 | 0 | 6 | 10 | 15 | 40 | ▇▇▂▁▁ |
| Capacitaciones | 0 | 1 | 2.80 | 1.29 | 0 | 2 | 3 | 3 | 6 | ▂▇▇▂▃ |
| Equilibrio_Trabajo_Vida | 0 | 1 | 2.76 | 0.71 | 1 | 2 | 3 | 3 | 4 | ▁▃▁▇▂ |
| Antigüedad | 0 | 1 | 7.01 | 6.13 | 0 | 3 | 5 | 9 | 40 | ▇▂▁▁▁ |
| Antigüedad_Cargo | 0 | 1 | 4.23 | 3.62 | 0 | 2 | 3 | 7 | 18 | ▇▃▂▁▁ |
| Años_ultima_promoción | 0 | 1 | 2.19 | 3.22 | 0 | 0 | 1 | 3 | 15 | ▇▁▁▁▁ |
| Años_acargo_con_mismo_jefe | 0 | 1 | 4.12 | 3.57 | 0 | 2 | 3 | 7 | 17 | ▇▂▅▁▁ |
Se observa que la base de datos no presenta datos faltantes y está compuesta por 1.470 filas y 24 variables, de las cuales 8 son categóricas (incluyendo la variable objetivo que es Rotación) y 16 cuantitativas. En las variables categóricas se encuentra que cada una tiene entre 2 y 9 categorías únicas. Por su parte las variables numéricas tienden a presentar concentración en valores bajos, con excepción de algunas como Años_Experiencia e Ingreso_Mensual que presentan valores atípicos debido a la dispersión de sus datos.
En consecuencia, como la data está completa, no se requieren realizar ajustes iniciales para el desarrollo del trabajo.
Se procede a explorar la distribución de las variables categóricas:
rotacion_categ = rotacion %>%
select(where(is.character))
par(mfrow = c(2, 2))
fill_color <- "lightblue"
for (col in names(rotacion_categ)) {
barplot(table(rotacion_categ[[col]]),
main = col,
col = fill_color)
}
De las variables categóricas anteriores, de forma simplificada se puede observar que:
Rotación: la categoría, muestra un conteo significativamente mayor, indicando que la mayoría de las personas en el conjunto de datos no cambian de trabajo con frecuencia.
Viaje de negocio, se obtiene que la mayoría de las personas viajan raramente por negocios.
Departamento: el número de personas en Investigación y Desarrollo es mucho mayor comparado con Recursos Humanos y Ventas.
Campo educación: Ciencias y Salud tienen una representación similar, que son mayores que los otros campos.
Género: se observa una mayor cantidad de individuos masculinos en comparación con los femeninos.
Cargo: algunos cargos tienen una mayor representación que otros, lo que sugiere una mayor prevalencia de ciertos roles dentro del conjunto de datos.
Estado Civil: se concentra una mayor cantidad de individuos como casados, seguido de los solteros.
Horas Extras: la cantidad de personas que no realizan horas extra es significativamente mayor que aquellas que sí las realizan.
Se procede a explorar la distribución de las variables cuantitativas:
rotacion_cuanti = rotacion %>%
select(where(is.numeric))
par(mfrow = c(2, 2))
fill_color <- "#FFA07A"
for (col in names(rotacion_cuanti)) {
hist(rotacion_cuanti[[col]],
main = col,
xlab = col,
col = fill_color)
}
De las variables cuantitativas anteriores, de forma simplificada se puede observar que:
Edad: la mayoría de los empleados están en el rango de 30 a 40 años.
Distancia: la mayoría de los empleados viven relativamente cerca del trabajo, con una gran concentración a 10 km.
Educación: predomina el nivel técnico/tecnólogo.
Satisfacción Ambiental y laboral: existe una distribución variada, sin una preferencia dominante.
Ingreso Mensual: la mayoría de los empleados tienen un ingreso mensual inferior a 10.000 USD.
Trabajos Anteriores: la mayoría de los individuos han tenido pocos trabajos anteriores, concentrándose en 1 y 2.
Porcentaje de aumento salarial: la mayoría de los aumentos salariales están por debajo del 16%.
Rendimiento Laboral: Los empleados tienden a tener un rendimiento de alto a muy alto.
Años Experiencia: La mayoría de los individuos tienen menos de 10 años de experiencia.
Capacitaciones: Hay una concentración moderada en tener 2 y 3 capacitaciones.
Equilibrio Trabajo de Vida: La mayoría califica su equilibrio trabajo de vida con una puntuación media.
Antigüedad y Antigüedad cargo: La mayoría de los empleados tienen una antigüedad menor a 10 años en la empresa y menor a 5 años en el cargo.
Años ultima promoción: La mayoría de los empleados han sido promovidos recientemente.
Años acargo con mismo jefe: La mayoría han estado con el mismo jefe por los últimos 5 años.
Variables Categóricas
Campo_Educación: En el campo de la educación, las oportunidades laborales y la rotación de personal dependen del área de estudio, dado que está ligada a las habilidades que el mercado necesita. Por tanto, las personas que se forman en áreas con alta demanda tienen más posibilidades de cambiar de trabajo, gracias a la movilidad que les da su formación específica, salvo que dependa de otros factores como el salario.
Hipotésis: La realización de estudios en campos con alta demanda laboral, podría estar asociado con una mayor probabilidad de rotación debido a más oportunidades en el mercado laboral. Esto se basa en la idea de que las personas con una formación en determinadas áreas tienen más movilidad laboral, dado que son más atractivas para los empleadores.
Genero: El género es un factor que puede influir en las decisiones de rotación debido a desigualdades persistentes en el mercado laboral. Las diferencias en el acceso a oportunidades, el crecimiento profesional y las brechas salariales entre hombres y mujeres pueden ser determinantes en la toma de decisiones para cambiar de trabajo. Además, las responsabilidades familiares también suelen recaer de manera desigual, afectando las decisiones laborales.
Hipotésis: Las oportunidades de crecimiento laboral en función del género pueden aumentar la rotación. Si las mujeres enfrentan más barreras o reciben menor compensación que sus pares masculinos, podrían buscar alternativas laborales en busca de equidad o mejores oportunidades.
Estado_Civil: El estado civil puede afectar las decisiones laborales debido a las responsabilidades familiares. Las personas casadas o con hijos pueden buscar estabilidad laboral y evitar riesgos, como la rotación, para asegurar ingresos y beneficios constantes. En cambio, las personas solteras pueden ser más flexibles y dispuestas a asumir el riesgo de cambiar de trabajo en busca de mejores oportunidades.
Hipotésis: Las personas casadas podrían tener menor probabilidad de rotación debido a mayores responsabilidades familiares. La estabilidad laboral es a menudo más valorada cuando se tienen dependientes, lo que podría reducir la movilidad laboral. Asimismo, las personas solteras podrían ser las de mayor probabilidad de rotación.
Las anteriores variables cualitativas serán evaluadas mediante pruebas chi cuadrado, para determinar si existe independencia entre ellas.
Campo Educación y Género
tabla_contingencia1 <- table(rotacion$Campo_Educación, rotacion$Genero)
print(tabla_contingencia1)
##
## F M
## Ciencias 240 366
## Humanidades 8 19
## Mercadeo 69 90
## Otra 29 53
## Salud 190 274
## Tecnicos 52 80
prueba_chi1 <- chisq.test(tabla_contingencia1)
print(prueba_chi1)
##
## Pearson's Chi-squared test
##
## data: tabla_contingencia1
## X-squared = 2.9414, df = 5, p-value = 0.709
En este caso, como el valor p es mayor a 0.05 (p = 0.709), no hay evidencia estadística significativa para rechazar la hipótesis nula, lo que sugiere que Campo_Educación y Genero son independientes.
Género y Estado Civil
tabla_contingencia2 <- table(rotacion$Genero, rotacion$Estado_Civil)
print(tabla_contingencia2)
##
## Casado Divorciado Soltero
## F 272 117 199
## M 401 210 271
prueba_chi2 <- chisq.test(tabla_contingencia2)
print(prueba_chi2)
##
## Pearson's Chi-squared test
##
## data: tabla_contingencia2
## X-squared = 3.5478, df = 2, p-value = 0.1697
En este caso, como el valor p es mayor a 0.05 (p = 0.1697), no hay evidencia estadística significativa para rechazar la hipótesis nula, lo que sugiere que Genero y Estado_Civil son independientes.
Campo Educación y Estado Civil
tabla_contingencia3 <- table(rotacion$Campo_Educación, rotacion$Estado_Civil)
print(tabla_contingencia3)
##
## Casado Divorciado Soltero
## Ciencias 271 134 201
## Humanidades 18 7 2
## Mercadeo 77 34 48
## Otra 36 19 27
## Salud 210 107 147
## Tecnicos 61 26 45
prueba_chi3 <- chisq.test(tabla_contingencia3)
print(prueba_chi3)
##
## Pearson's Chi-squared test
##
## data: tabla_contingencia3
## X-squared = 9.5851, df = 10, p-value = 0.4776
En este caso, como el valor p es mayor a 0.05 (p = 0.4776), no hay evidencia estadística significativa para rechazar la hipótesis nula, lo que sugiere que Campo_Educación y Estado_Civil son independientes.
Se observa entonces que las variables cualitativas seleccionadas son independientes entre ellas, lo que elimina la preocupación por la multicolinealidad. Ahora, esto no significa que no puedan estar asociadas con la variable de respuesta, que es la rotación, por lo que más adelante se evaluará esta relación.
Variables Cuantitativas
Edad: La edad es un factor determinante en la rotación, ya que las personas más jóvenes suelen estar en una fase de búsqueda de crecimiento profesional y nuevas experiencias. En contraste, los empleados mayores tienden a valorar la estabilidad y tienen más probabilidad de mantenerse en sus puestos, especialmente si han acumulado antigüedad en la empresa o están cerca de la jubilación.
Hipotésis: Se espera una relación inversa entre la edad y la rotación, ya que los empleados más jóvenes tienden a cambiar de trabajo con más frecuencia. Los jóvenes suelen tener más facilidad para adaptarse a nuevas posiciones y están en una etapa de exploración profesional, lo que fomenta la movilidad laboral.
Ingreso_Mensual: El salario es un factor clave en la retención de empleados. Los trabajadores que reciben salarios más altos tienden a estar más satisfechos con su trabajo y, por lo tanto, son menos propensos a buscar otras oportunidades. Además, las ofertas salariales más bajas pueden generar insatisfacción, lo que lleva a los empleados a considerar cambios de empleo en busca de una mejor compensación.
Hipotésis: Se espera una relación inversa entre el salario y la rotación, donde salarios más altos se asocian con menor probabilidad de rotación. Los empleados que sienten que están siendo bien compensados son menos propensos a buscar otras oportunidades laborales.
Trabajos_Anteriores: El historial de empleos anteriores puede ser un indicador de la tendencia de una persona a cambiar de trabajo con frecuencia. Aquellos con múltiples trabajos en su historial pueden ser más propensos a la rotación, ya que han demostrado flexibilidad y disposición para moverse entre empleadores. Este comportamiento puede ser resultado de insatisfacción laboral, búsqueda de mejores condiciones o una mayor orientación a la movilidad.
Hipotésis: Se espera una relación directa entre la cantidad de trabajos anteriores y la rotación, es decir, a mayor cantidad de trabajos previos, mayor será la probabilidad de rotación. Un historial de cambios frecuentes puede reflejar un patrón de búsqueda de mejores oportunidades o insatisfacción constante.
Las anteriores variables cuantitativas serán evaluadas mediante el coeficiente de correlación de Pearson, para determinar si existe relación lineal entre ellas.
selected_columns <- c("Edad", "Distancia_Casa", "Educación", "Satisfacción_Ambiental", "Satisfación_Laboral", "Ingreso_Mensual", "Trabajos_Anteriores", "Porcentaje_aumento_salarial", "Rendimiento_Laboral", "Años_Experiencia", "Capacitaciones", "Equilibrio_Trabajo_Vida", "Antigüedad", "Antigüedad_Cargo", "Años_ultima_promoción", "Años_acargo_con_mismo_jefe")
numerical_data <- rotacion[, selected_columns]
correlation_matrix <- cor(numerical_data, use = "complete.obs")
corrplot(correlation_matrix, method = "color", col = colorRampPalette(c("red", "white", "blue"))(200),
tl.cex = 0.7, tl.col = "black", number.cex = 0.5, addCoef.col = "black", cl.cex = 0.7,
title = "Matriz de Correlación", mar = c(0,0,1,0))
redundant_pairs <- data.frame(A = character(), B = character(), Correlation = double())
threshold <- 0.85
for (i in 1:(ncol(correlation_matrix)-1)) {
for (j in (i+1):ncol(correlation_matrix)) {
if (abs(correlation_matrix[i, j]) > threshold) {
redundant_pairs <- rbind(redundant_pairs, data.frame(A = colnames(correlation_matrix)[i],
B = colnames(correlation_matrix)[j],
Correlation = correlation_matrix[i, j]))
}
}
}
if (nrow(redundant_pairs) > 0) {
for (i in 1:nrow(redundant_pairs)) {
cat(sprintf("Par de atributos redundantes: %s y %s con correlación de %.2f\n",
redundant_pairs$A[i], redundant_pairs$B[i], redundant_pairs$Correlation[i]))
}
} else {
cat("No se evidencian atributos redundantes a través del método de correlación.\n")
}
## No se evidencian atributos redundantes a través del método de correlación.
Se encuentra que en general, ninguna de las variables cuantitativas se encuentran fuertemente correlacionadas entre sí.
datos_cor <- data.frame(rotacion$Edad, rotacion$Ingreso_Mensual, rotacion$Trabajos_Anteriores)
cor(datos_cor, method = "pearson")
## rotacion.Edad rotacion.Ingreso_Mensual
## rotacion.Edad 1.0000000 0.4977532
## rotacion.Ingreso_Mensual 0.4977532 1.0000000
## rotacion.Trabajos_Anteriores 0.2996552 0.1495152
## rotacion.Trabajos_Anteriores
## rotacion.Edad 0.2996552
## rotacion.Ingreso_Mensual 0.1495152
## rotacion.Trabajos_Anteriores 1.0000000
Por otra parte, la correlación entre Edad e Ingreso_Mensual indica que existe cierta relación, pero no es una relación extremadamente fuerte. En consecuencia se podría indicar que a mayor edad hay cierta tendencia a tener un ingreso mensual más alto, aunque no se trata de una relación perfectamente lineal.
Asimismo, para el par de variables Edad y Trabajos_Anteriores existe una relación positiva, pero muy baja, lo que sugiere que ambas variables no están fuertemente relacionadas.
Finalmente, la correlación entre Ingreso_Mensual y Trabajos_Anteriores indica que prácticamente no hay una relación significativa entre ellas. Esta correlación cercana a cero sugiere que estas variables son casi independientes entre sí.
En vista de lo anterior, no se establecen señales claras de multicolinealidad significativa entre las tres variables cuantitativas seleccionadas, además, resulta probable que existan interacciones entre ellas, de manera que puedan aportar en la explicación de la rotación.
Variables Cualitativas:
g1 = ggplot(rotacion, aes(x = Campo_Educación)) +
geom_bar(fill = "#0F8FA5") +
geom_text(aes(label = scales::percent(..count.. / sum(..count..))),
stat = 'count',
vjust = -0.5, color = "black",
size = 3.5) +
labs(title = "Educación",
x = "Campo Educación",
y = "Cantidad") +
theme_gray()
g2 = ggplot(rotacion, aes(x = Genero)) +
geom_bar(fill = "#00EE00") +
geom_text(aes(label = scales::percent(..count.. / sum(..count..))),
stat = 'count',
vjust = -0.5, color = "black",
size = 3.5) +
labs(title = "Género",
x = "Género",
y = "Cantidad") +
theme_gray()
g3 = ggplot(rotacion, aes(x = Estado_Civil)) +
geom_bar(fill = "orange") +
geom_text(aes(label = scales::percent(..count.. / sum(..count..))),
stat = 'count',
vjust = -0.5, color = "black",
size = 3.5) +
labs(title = "Estado Civil",
x = "Estado Civil",
y = "Cantidad") +
theme_gray()
ggarrange(g1, g2, g3, ncol = 1, nrow = 1)
## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(count)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## $`1`
##
## $`2`
##
## $`3`
##
## attr(,"class")
## [1] "list" "ggarrange"
El gráfico 1 muestra la distribución de empleados por campo educativo, donde las áreas de Ciencias y Salud tienen la mayor cantidad de empleados. Lo anterior indica que la empresa depende en gran medida de trabajadores con especialización científica, lo que podría generar menores tasas de rotación en estos campos si los empleados perciben estabilidad y oportunidades de crecimiento. Sin embargo, en áreas como Humanidades y Mercadeo, donde la representación es significativamente menor, probablemente haya una mayor tendencia a la rotación debido a la falta de oportunidades, aunque también depende de la necesidad de recurso humano de la empresa. El área de Técnicos muestra una clase balanceada, lo que sugiere una demanda continua por habilidades técnicas, posiblemente con una rotación moderada si existen oportunidades de desarrollo en la compañía.
Por el lado del Género, en el gráfico 2 se observa un desbalance, dado que hay muchos más hombres que mujeres, por lo que se podría hacer referencia a la presencia de sesgos al momento de la contratación o retención del personal. En las empresas en donde se presenta un desequilibrio considerable en la concentración de género, las personas de la clase de proporción inferior podrían no sentirse satisfechas, por lo que pondrían en duda su continuidad, optando por buscar nuevas oportunidades.
Por su parte, en el gráfico 3 de Estado Civil, se encuentra que los casados son el grupo más grande, por lo que se esperaría presenten mayor estabilidad laboral. El segundo grupo son los solteros, mientras que los divorciados constituyen el grupo más pequeño. Los solteros podrían ser más propensos a explorar nuevas oportunidades de laborales, lo que puede resultar en una rotación más alta en comparación con los casados, quienes tienden a buscar mayor estabilidad.
Variables Cuantitativas:
median_edad <- median(rotacion$Edad)
mean_edad <- mean(rotacion$Edad)
g4 = ggplot(rotacion, aes(x = Edad)) +
geom_histogram(aes(y = ..density..), fill = "#0F8FA5", color = "black", alpha = 0.7) +
geom_density(alpha = 0.2, fill = "#00FF7F") +
geom_vline(aes(xintercept = median_edad), color = "#00008B", linetype = "dashed", size = 0.5) +
geom_vline(aes(xintercept = mean_edad), color = "#CD0000", linetype = "dashed", size = 0.5) +
geom_density(alpha = 0.2, fill = "#FA8072") +
labs(title = "Histograma de Edad", x = "Edad", y = "Densidad") +
annotate("text", x = mean_edad + 2, y = 0.02, label = "Media", color = "#CD0000") +
annotate("text", x = median_edad - 2, y = 0.02, label = "Mediana", color = "#00008B") +
theme_gray()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
median_ingreso <- median(rotacion$Ingreso_Mensual)
mean_ingreso <- mean(rotacion$Ingreso_Mensual)
g5 = ggplot(rotacion, aes(x = Ingreso_Mensual)) +
geom_histogram(aes(y = ..density..), fill = "#FA8072", color = "black", alpha = 0.7) +
geom_density(alpha = 0.2, fill = "#00FF7F") +
geom_vline(aes(xintercept = median_ingreso), color = "#00008B", linetype = "dashed", size = 0.5) +
geom_vline(aes(xintercept = mean_ingreso), color = "#CD0000", linetype = "dashed", size = 0.5) +
geom_density(alpha = 0.2, fill = "#0F8FA5") +
labs(title = "Histograma de Ingreso Mensual", x = "Ingreso Mensual", y = "Densidad") +
annotate("text", x = mean_ingreso + 1000, y = 0.00002, label = "Media", color = "#CD0000") +
annotate("text", x = median_ingreso - 1000, y = 0.00002, label = "Mediana", color = "#00008B") +
theme_gray()
median_ta <- median(rotacion$Trabajos_Anteriores)
mean_ta <- mean(rotacion$Trabajos_Anteriores)
g6 = ggplot(rotacion, aes(x = Trabajos_Anteriores)) +
geom_histogram(aes(y = ..density..), fill = "#FFD700", color = "black", alpha = 0.7) +
geom_density(fill = "#00FF7F", alpha = 0.5) +
geom_vline(aes(xintercept = median_ta), color = "#00008B", linetype = "dashed", size = 0.5) +
geom_vline(aes(xintercept = mean_ta), color = "#CD0000", linetype = "dashed", size = 0.5) +
labs(title = "Distribución de Trabajos Anteriores",
x = "Trabajos Anteriores",
y = "Densidad") +
annotate("text", x = mean_ta + 0.5, y = 0.05, label = "Media", color = "#CD0000") +
annotate("text", x = median_ta - 0.5, y = 0.05, label = "Mediana", color = "#00008B") +
theme_gray()
ggarrange(g4, g5, g6, ncol = 1, nrow = 1)
## `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`.
## $`1`
##
## $`2`
##
## $`3`
##
## attr(,"class")
## [1] "list" "ggarrange"
El gráfico 1 de Edad, indica que la mayoría de los empleados están en un rango de entre 30 y 40 años, lo cual genera importantes implicaciones en términos de rotación de personal, dado que es un rango de edad en el que los trabajadores buscan estabilidad laboral y oportunidades de desarrollo profesional. Ahora bien, los trabajadores más jóvenes con edades entre 18 y 29 años podrían estar más inclinados a cambiar de trabajo en búsqueda de nuevas oportunidades o de mejoras en condiciones salariales, lo que podría aumentar la rotación en este grupo, mientras que los empleados con mayor edad que están más cerca de cumplir con las condiciones de jubilación, suelen pensar en estabilidad de largo plazo, por lo que apostarían más por la permanencia en el trabajo.
El gráfico 2 de Ingresos Mensuales, muestra que la mitad de los trabajadores tienen ingresos menores a USD 5.000, reflejando además una mayor dispersión de ingresos, por lo que hay brechas significativas en la asignación de ingresos. Así, los trabajadores con ingresos más bajos podrían pensar en buscar nuevas opciones de empleo con mejores condiciones salariales, mientras que aquellos empleados que tienen niveles salariales más altos buscarían permanecer en la empresa, dado que el ingreso sería uno de sus mayores incentivos para la estabilidad laboral.
Finalmente, el gráfico 3 de Trabajos Anteriores, indica que la mitad de los trabajadores han tenido 2 trabajos anteriores, resaltando que hay trabajadores que van desde sin experiencia en trabajos previos o una significativa experiencia por tener 9 trabajos previos. En consecuencia, aquellos trabajadores con pocos trabajos anteriores pueden estar buscando mayor estabilidad y podrían estar menos inclinados a cambiar de empleo rápidamente, mientras que aquellos con múltiples trabajos previos pueden haber desarrollado una tendencia hacia una mayor rotación.
Variables Cualitativas:
rotacion$Rotación <- ifelse(rotacion$Rotación == "Si", 1, 0)
# Tabla de contingencia de Campo_Educación vs Rotación
tabla1 <- table(rotacion$Campo_Educación, rotacion$Rotación)
# Convertir a data frame con proporciones
df_tabla1 <- as.data.frame(prop.table(tabla1, 1)) # Porcentajes por fila
# Cambiar nombres de las columnas de la tabla de datos
colnames(df_tabla1) <- c("Campo_Educación", "Rotación", "Porcentaje")
# Crear gráfico con etiquetas de porcentaje
g7 <- ggplot(df_tabla1, aes(x = Campo_Educación, y = Porcentaje, fill = as.factor(Rotación))) +
geom_bar(stat = "identity", position = "dodge") +
scale_y_continuous(labels = scales::percent) +
scale_fill_manual(values = c("0" = "#54FF9F", "1" = "#FFA07A"),
labels = c("0" = "No Rotación", "1" = "Sí Rotación")) +
geom_text(aes(label = scales::percent(Porcentaje)),
position = position_dodge(width = 0.8), vjust = -0.5) + # Etiquetas encima
labs(x = "Campo de Educación", y = "Porcentaje", fill = "Rotación") +
theme_minimal()
# Mostrar gráfico
print(g7)
Aunque los campos de Ciencias y Salud exhiben una alta estabilidad laboral, siendo las áreas con menor rotación, los campos de Humanidades y Técnicos muestran una tendencia ligeramente más alta hacia la rotación laboral. Sin embargo, la tendencia general revela que la mayoría de los individuos en todos los campos educativos no han experimentado cambios significativos de trabajo, con tasas de rotación que no superan el 26% en ninguno de los campos. Esto respalda la hipótesis inicial de que los campos de Ciencias y Salud, que presumiblemente ofertan un mayor número de puestos de trabajo, son más estables. No obstante, dado que la proporción de rotación es relativamente baja en todos los campos, se podría inferir que la rotación laboral no depende estrictamente del campo de educación en general.
# Tabla de contingencia de Genero vs Rotación
tabla2 <- table(rotacion$Genero, rotacion$Rotación)
# Convertir a data frame con proporciones
df_tabla2 <- as.data.frame(prop.table(tabla2, 1)) # Porcentajes por fila
# Cambiar nombres de las columnas de la tabla de datos
colnames(df_tabla2) <- c("Genero", "Rotación", "Porcentaje")
# Crear gráfico con etiquetas de porcentaje
g8 <- ggplot(df_tabla2, aes(x = Genero, y = Porcentaje, fill = as.factor(Rotación))) +
geom_bar(stat = "identity", position = "dodge") +
scale_y_continuous(labels = scales::percent) +
scale_fill_manual(values = c("0" = "#54FF9F", "1" = "#FFA07A"),
labels = c("0" = "No Rotación", "1" = "Sí Rotación")) +
geom_text(aes(label = scales::percent(Porcentaje)),
position = position_dodge(width = 0.8), vjust = -0.5) + # Etiquetas encima
labs(x = "Genero", y = "Porcentaje", fill = "Rotación") +
theme_minimal()
# Mostrar gráfico
print(g8)
Los datos reflejan que el grupo masculino tiene una mayor proporción de rotación (17%) en comparación con el grupo femenino (15%). Esto contraviene la hipótesis inicial que postulaba que las mujeres tendrían una mayor tasa de rotación debido a posibles limitaciones en la carrera o discriminación salarial. Este resultado indica que es necesario explorar más a fondo las causas subyacentes de la rotación y reconsiderar las suposiciones iniciales sobre las dinámicas de género en el lugar de trabajo.
# Tabla de contingencia de Estado_Civil vs Rotación
tabla3 <- table(rotacion$Estado_Civil, rotacion$Rotación)
# Convertir a data frame con proporciones
df_tabla3 <- as.data.frame(prop.table(tabla3, 1)) # Porcentajes por fila
# Cambiar nombres de las columnas de la tabla de datos
colnames(df_tabla3) <- c("Estado_Civil", "Rotación", "Porcentaje")
# Crear gráfico con etiquetas de porcentaje
g9 <- ggplot(df_tabla3, aes(x = Estado_Civil, y = Porcentaje, fill = as.factor(Rotación))) +
geom_bar(stat = "identity", position = "dodge") +
scale_y_continuous(labels = scales::percent) +
scale_fill_manual(values = c("0" = "#54FF9F", "1" = "#FFA07A"),
labels = c("0" = "No Rotación", "1" = "Sí Rotación")) +
geom_text(aes(label = scales::percent(Porcentaje)),
position = position_dodge(width = 0.8), vjust = -0.5) + # Etiquetas encima
labs(x = "Estado_Civil", y = "Porcentaje", fill = "Rotación") +
theme_minimal()
# Mostrar gráfico
print(g9)
Se establece que los Solteros presentan el mayor porcentaje de rotación, con un 26% de la muestra. Así mismo, se observa que las personas casadas rotan ligeramente más que las divorciadas, por una diferencia de alrededor de dos puntos porcentuales. Sin embargo, también es posible concluir que las personas divorciadas, con un menor porcentaje de rotación (10%), son las más estables en los cargos. En consecuencia, se satisface la hipotesis inicial en donde se esperaba que los Solteros presentaran mayor propensión a la rotación.
Variables Cuantitativas:
# Crear un boxplot de Edad vs Rotación
g10_boxplot <- ggplot(rotacion, aes(x = as.factor(Rotación), y = Edad, fill = as.factor(Rotación))) +
geom_boxplot() +
scale_fill_manual(values = c("0" = "#87CEFF", "1" = "#FF3030"),
labels = c("0" = "No Rotación", "1" = "Sí Rotación"))+
theme_minimal()
# Mostrar gráfico
print(g10_boxplot)
El análisis de los datos revela que los trabajadores con edades entre los 29 y 39 años son los que presentan la mayor posibilidad de rotación. En este sentido se resalta que la mitad de las personas que rotan tienen edad inferior a 32 años. Esta tendencia confirma la hipótesis inicial de que las personas más jóvenes son las que más buscan cambiar de cargo. Esto podría estar relacionado con factores como la búsqueda de nuevas oportunidades, el deseo de crecimiento profesional o la exploración de diferentes áreas laborales. Por su parte, también se corrobora que los trabajadores mayores suelen mostrar más estabilidad en sus puestos, lo que sugiere que la edad juega un papel importante en la propensión a la rotación laboral.
# Crear un boxplot de Ingreso_Mensual vs Rotación
g11_boxplot <- ggplot(rotacion, aes(x = as.factor(Rotación), y = Ingreso_Mensual, fill = as.factor(Rotación))) +
geom_boxplot() +
scale_fill_manual(values = c("0" = "#87CEFF", "1" = "#FF3030"),
labels = c("0" = "No Rotación", "1" = "Sí Rotación"))+
theme_minimal()
# Mostrar gráfico
print(g11_boxplot)
Se encuentra que los trabajadores con ingresos más bajos son los que más tienden a rotar, especialmente cuando tienen ingresos entre 2.000 y 6.000 USD. La mediana de los ingresos mensuales de las personas que rotan se ubica en 2.000 USD. Cabe resaltar que por el contrario, a medida que aumenta el ingreso, también se afirma la estabilidad laboral. Así, al validar la hipótesis inicial, se comprueba que los trabajadores con menores ingresos tienen una mayor propensión a cambiar de empleo buscando un mejor reconocimiento económico.
# Crear un histograma de Trabajos_Anteriores, separado por Rotación
g12_histogram <- ggplot(rotacion, aes(x = Trabajos_Anteriores, fill = as.factor(Rotación))) +
geom_histogram(position = "dodge", binwidth = 1, color = "black") +
scale_fill_manual(values = c("0" = "#87CEFF", "1" = "#FF3030"),
labels = c("0" = "No Rotación", "1" = "Sí Rotación"))+
theme_minimal()
# Mostrar gráfico
print(g12_histogram)
Se analiza que que los trabajadores sin experiencia previa son los que menos rotan, pero una vez que comienzan a acumular experiencia en diferentes trabajos, su propensión a rotar parece estabilizarse independientemente del número de empleos anteriores que hayan tenido. En consecuencia, se reafirma que cuando el trabajador no tiene o ha tenido poca experiencia laboral previa, tiende a permanecer más tiempo en el actual cargo, buscando adquirir experiencia, lo que genera estabilidad.
Teniendo en cuenta las variable seleccionadas, antes de correr el modelo se realiza un análisis de independencia entre par de variables, mediante el Chi-squared test.
pareja1 = table(rotacion$Rotación, rotacion$Campo_Educación)
pareja2 = table(rotacion$Rotación, rotacion$Genero)
pareja3 = table(rotacion$Rotación, rotacion$Estado_Civil)
pareja4 = table(rotacion$Rotación, rotacion$Edad)
pareja5 = table(rotacion$Rotación, rotacion$Ingreso_Mensual)
pareja6 = table(rotacion$Rotación, rotacion$Trabajos_Anteriores)
Rotación y Campo Educación
chisq.test(x=pareja1)
## Warning in chisq.test(x = pareja1): Chi-squared approximation may be incorrect
##
## Pearson's Chi-squared test
##
## data: pareja1
## X-squared = 16.025, df = 5, p-value = 0.006774
Rotación y Género
chisq.test(x=pareja2)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: pareja2
## X-squared = 1.117, df = 1, p-value = 0.2906
Rotación y Estado Civil
chisq.test(x=pareja3)
##
## Pearson's Chi-squared test
##
## data: pareja3
## X-squared = 46.164, df = 2, p-value = 9.456e-11
Rotación y Edad
chisq.test(x=pareja4)
## Warning in chisq.test(x = pareja4): Chi-squared approximation may be incorrect
##
## Pearson's Chi-squared test
##
## data: pareja4
## X-squared = 119.41, df = 42, p-value = 2.38e-09
Rotación e Ingreso Mensual
chisq.test(x=pareja5)
## Warning in chisq.test(x = pareja5): Chi-squared approximation may be incorrect
##
## Pearson's Chi-squared test
##
## data: pareja5
## X-squared = 1319, df = 1348, p-value = 0.7086
Rotación y Trabajos Anteriores
chisq.test(x=pareja6)
##
## Pearson's Chi-squared test
##
## data: pareja6
## X-squared = 25.744, df = 9, p-value = 0.002249
Partiendo del test de independencia entre par de variables tanto cualitativas como cuantitativas en función de la variable objetivo de la rotación, se encuentra que el valor p es menor que el nivel de significancia del 0.05 para cuatro de las seis variables seleccionadas. Las únicas relaciones que muestran evidencia estadísticamente significativa para no rechazar la hipótesis nula son las de Rotación Vs Género y Rotación Vs Ingreso Mensual, cuyos valores p son superiores al alpha del 5%, lo que indica que estos dos pares de variables no presentan asociación estadística, es decir, son independientes. De todas formas se ejecutará el modelo con la inclusión de las seis variables, puesto que si bien estadísticamente la rotación para la muestra seleccionada no estaría relacionada con el Ingreso Mensual ni con el Género, en la práctica si tiende a suceder, esperando que a mayor ingreso la estabilidad mejore y por tanto la rotación disminuya, y por el lado del género se observan brechas salariales para determinados cargos. En consecuencia, estas variables podrían ser buenos predictores de la rotación laboral.
Los datos del modelo se distribuyen en 70% entrenamiento y 30% prueba.
set.seed(123)
trainIndex <- createDataPartition(y = rotacion$Rotación, p = 0.7, list = FALSE)
trainData <- rotacion[trainIndex, ]
testData <- rotacion[-trainIndex, ]
# Datos de entrenamiento
dim(trainData)
## [1] 1029 24
# Datos de prueba
dim(testData)
## [1] 441 24
model_train = glm(Rotación~Campo_Educación+Genero+Estado_Civil+Edad+Ingreso_Mensual+Trabajos_Anteriores,data = trainData,family = "binomial")
summary(model_train)
##
## Call:
## glm(formula = Rotación ~ Campo_Educación + Genero + Estado_Civil +
## Edad + Ingreso_Mensual + Trabajos_Anteriores, family = "binomial",
## data = trainData)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -4.817e-02 4.560e-01 -0.106 0.915863
## Campo_EducaciónHumanidades 1.576e+00 5.803e-01 2.716 0.006609 **
## Campo_EducaciónMercadeo 7.657e-01 3.033e-01 2.525 0.011582 *
## Campo_EducaciónOtra 2.737e-03 4.060e-01 0.007 0.994621
## Campo_EducaciónSalud -8.481e-02 2.271e-01 -0.373 0.708851
## Campo_EducaciónTecnicos 6.509e-01 2.912e-01 2.235 0.025415 *
## GeneroM -3.388e-02 1.882e-01 -0.180 0.857153
## Estado_CivilDivorciado -3.652e-01 2.815e-01 -1.297 0.194571
## Estado_CivilSoltero 8.190e-01 1.996e-01 4.102 4.1e-05 ***
## Edad -4.798e-02 1.310e-02 -3.662 0.000250 ***
## Ingreso_Mensual -1.068e-04 3.156e-05 -3.383 0.000717 ***
## Trabajos_Anteriores 9.257e-02 3.690e-02 2.509 0.012122 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 896.03 on 1028 degrees of freedom
## Residual deviance: 786.14 on 1017 degrees of freedom
## AIC: 810.14
##
## Number of Fisher Scoring iterations: 5
Sobre los coeficientes del modelo se puede apreciar que:
- Campo Educación:
Humanidades tiene un coeficiente de 1.576, lo que sugiere que estar en este campo aumenta significativamente la probabilidad de rotación. El valor P muestra significancia estadística par aun alpha < 0.01
Mercadeo cuenta con coeficiente de 0.7657, también aumenta la probabilidad de rotación de forma significativa. El valor P muestra significancia estadística para un alpha < 0.05
Otra y Salud no arrojaron significancia estadística para ningún valor de alpha.
Técnicos con un coeficiente de 0.6509, también incrementa la probabilidad de rotación de manera significativa. El valor P muestra significancia estadística par aun alpha < 0.05
El Género al igual que el Estado Civil Divorciado no resultaron ser un predictor de rotación. Tampoco mostraron significancia estadística para ningún valor de alpha.
El Estado Civil Soltero también aumenta la probabilidad de rotación. Su valor P es estadísticamente significativo para cualquier nivel de alpha. En otras palabras, la relación entre los Solteros y la rotación es sólida y confiable en términos estadísticos, y es poco probable que sea producto del azar.
La edad por su parte, al igual que el Ingreso Mensual, son estadísticamente significativas para cualquier valor de alpha, sin embargo, un incremento en cualquiera de estas variables produce una disminución en la probabilidad de rotación, puesto que sus coeficientes fueron negativos.
La experiencia por trabajos anteriores también aumenta la probabilidad de rotación. Su valor P es menor al alpha de 0.05, por lo que es estadísticamente significativo.
En general, variables como el campo de educación (Humanidades, Mercadeo, Técnicos), el estado civil (Soltero), la edad, el ingreso mensual y el número de trabajos anteriores influyen significativamente en la probabilidad de rotación laboral.
En cuanto a rendimiento del modelo, se ajusta bien, dado que la desviación residual es significativamente menor que la desviación nula, y el AIC es bajo para un modelo de este tipo:
La desviación nula mide la diferencia entre los datos observados y un modelo sin variables explicativas, es decir, solo con el intercepto. En este caso el modelo si alcanza a explicar la variación de los datos. El resultado fue 896.03
La desviación residual mide la diferencia entre los datos observados y el modelo que incluye todas las variables explicativas seleccionadas. En este caso al incluir las variables independientes, el error disminuye en comparación con el modelo nulo. El resultado fue 786.14
El Criterio de Información de Akaike - AIC, evalúa la calidad del modelo, penalizando modelos con más variables explicativas. Por tanto, un AIC más bajo indica un mejor equilibrio entre la precisión del ajuste y la simplicidad del modelo. En este caso el resultado fue 810.14
A continuación, se grafican las variables cuantitativas más significativas del modelo en función de la probabilidad de rotación.
Edad:
# Predecir las probabilidades con el modelo ajustado
trainData$predicted_prob <- predict(model_train, newdata = trainData, type = "response")
# Crear el gráfico de la probabilidad predicha vs Edad
ggplot(trainData, aes(x = Edad, y = predicted_prob)) +
geom_point(alpha = 0.5) + # Gráfico de dispersión
stat_smooth(method = "glm", method.args = list(family = "binomial"), se = FALSE, color = "red") +
labs(title = "Regresión Logística: Probabilidad de Rotación vs Edad",
x = "Edad",
y = "Probabilidad de Rotación") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
En la variable edad, se comprueba que a medida que aumenta, la probabilidad de rotación disminuye.
Ingreso Mensual:
# Crear el gráfico de la probabilidad predicha vs Ingreso Mensual
ggplot(trainData, aes(x = Ingreso_Mensual, y = predicted_prob)) +
geom_point(alpha = 0.5) + # Gráfico de dispersión
stat_smooth(method = "glm", method.args = list(family = "binomial"), se = FALSE, color = "blue") +
labs(title = "Regresión Logística: Probabilidad de Rotación vs Ingreso Mensual",
x = "Ingreso Mensual",
y = "Probabilidad de Rotación") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
En la variable Ingreso Mensual, se comprueba que a medida que aumenta, la probabilidad de rotación disminuye.
Trabajos Anteriores:
# Calcular la probabilidad promedio predicha por cada nivel de Trabajos_Anteriores
df_summary <- trainData %>%
group_by(Trabajos_Anteriores) %>%
summarise(probabilidad_media = mean(predicted_prob))
# Crear el gráfico de barras
ggplot(df_summary, aes(x = factor(Trabajos_Anteriores), y = probabilidad_media)) +
geom_bar(stat = "identity", fill = "lightgreen", color = "black") + # Gráfico de barras
labs(title = "Regresión Logística: Probabilidad Media de Rotación vs Trabajos Anteriores",
x = "Trabajos Anteriores",
y = "Probabilidad Media de Rotación") +
theme_minimal()
En la variable Trabajos Anteriores, se comprueba que a medida que aumenta, la probabilidad de rotación aumenta.
Ahora bien, uno de los supuestos claves del modelo de regresión logística es la ausencia de multicolinealidad. Para verificarlo se realiza la prueba del factor de inflación de varianza.
vif(model_train)
## GVIF Df GVIF^(1/(2*Df))
## Campo_Educación 1.068159 5 1.006615
## Genero 1.017151 1 1.008539
## Estado_Civil 1.042899 2 1.010556
## Edad 1.394953 1 1.181081
## Ingreso_Mensual 1.262150 1 1.123454
## Trabajos_Anteriores 1.129732 1 1.062888
Se observa que en todas las variables explicativas el VIF es menor a 5, lo que indica que no hay problemas de multicolinealidad, en otras palabras, los coeficientes del modelo no deberían estar inflados debido a la correlación entre las variables independientes.
Posteriormente se calculan las razones de probabilidad para cada variable.
exp(model_train$coefficients)
## (Intercept) Campo_EducaciónHumanidades
## 0.9529720 4.8360841
## Campo_EducaciónMercadeo Campo_EducaciónOtra
## 2.1504173 1.0027411
## Campo_EducaciónSalud Campo_EducaciónTecnicos
## 0.9186896 1.9172868
## GeneroM Estado_CivilDivorciado
## 0.9666874 0.6940868
## Estado_CivilSoltero Edad
## 2.2681351 0.9531543
## Ingreso_Mensual Trabajos_Anteriores
## 0.9998932 1.0969915
De lo anterior se puede indicar que:
Por cada unidad que aumenta la variable Campo Educación Mercadeo, las probabilidades de que ocurra el evento de rotación se incrementan en 2.15 veces. En otras palabras, una persona que se en encuentra en este campo de educación tiene 2.15 veces más probabilidades de rotar. Asimismo, si pertenece al campo de Humanidades, tendrá 4.83 veces más probabilidades de rotar. Por su parte, si el campo de educación es Técnicos, la probabilidad de rotar aumenta a 1.91 veces.
Por cada unidad que aumenta la variable Estado Civil Soltero, las probabilidades de rotación se incrementan en 2.26 veces. Es decir, una persona soltera tiene 2.26 veces más probabilidades de generar rotación.
Ingreso_Mensual: El odds ratio de 0.9999 indica que a medida que el ingreso mensual aumenta, la probabilidad de rotación disminuye ligeramente.
Edad: Cada año adicional de edad reduce la probabilidad de rotación (odds ratio de 0.9532).
Por cada unidad que aumenta la variable Trabajos Anteriores, las probabilidades de que se produzca rotación aumentan en 1.09 veces, lo que significa que una persona con experiencia previa en otros trabajos tiene 1.09 veces más probabilidades de rotar. En otras palabras, el odds ratio de 1.097 sugiere que con cada trabajo adicional que una persona ha tenido, la probabilidad de rotación aumenta en un 9.7%.
Se procede a diseñar la curca ROC y a estimar el AUC:
predicciones <- predict(model_train, newdata = rotacion, type = "response")
roc <- roc(response = rotacion$Rotación, predictor = predicciones)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
auc <- auc(roc)
plot(roc, main = "Curva ROC del Modelo de Rotación",
xlab = "Specificity - Tasa de Falsos Positivos", ylab = " Sensitivity - Tasa de Verdaderos Positivos",
col = "blue", lwd = 2, type = "l")
grid()
legend("bottomright", legend = paste("AUC =", round(auc, 4)),
col = "blue", pch = 16, bty = "n", cex = 1.2)
El valor de AUC de 0.7053 indica que el modelo supera significativamente el rendimiento de un modelo aleatorio, dado que el indicador es mayor a 0.5. Ahora, si bien el resultado no muestra que el modelo sea perfecto, sí tiene un rendimiento razonable para predecir la rotación de trabajo, dado que tiene capacidad para discriminar mayoritariamente entre las clases positivas y negativas, manteniendo una alta tasa de verdaderos positivos, mientras se mantiene una baja tasa de falsos positivos en general, en otras palabras, el modelo es apto para identificar a los empleados que tienen una clara probabilidad de rotación de aquellos que no la tienen.
**Se procede a obtener valores aleatorios para caracterizar al individuo*
set.seed(123)
random_string <- function(n) {
paste0(sample(letters, n, replace = TRUE), collapse = "")
}
Campo_Educación_h <- c("Ciencias", "Humanidades", "Mercadeo", "Otra", "Salud", "Tecnicos")
Genero_h <- c("F", "M")
Estado_Civil_h <- c("Casado", "Divorciado", "Soltero")
Edad_a <- sample(18:60, 1)
Ingreso_Mensual_a <- sample(1009:19999, 1)
Trabajos_Anteriores_a <- sample(0:9, 1)
Campo_Educación_a <- sample(Campo_Educación_h, 1)
Genero_a <- sample(Genero_h, 1)
Estado_Civil_a <- sample(Estado_Civil_h, 1)
datos_aleatorios <- data.frame(
"Campo Educación" = Campo_Educación_a,
"Género" = Genero_a,
"Estado Civil" = Estado_Civil_a,
"Edad" = Edad_a,
"Ingreso Mensual" = Ingreso_Mensual_a,
"Trabajos Anteriores" = Trabajos_Anteriores_a
)
print(datos_aleatorios)
## Campo.Educación Género Estado.Civil Edad Ingreso.Mensual Trabajos.Anteriores
## 1 Tecnicos F Divorciado 48 19903 2
Ahora se calcula la probabilidad de rotación y se define el punto de corte en > 0.5:
individuo_a = data.frame(Campo_Educación = Campo_Educación_a,
Genero = Genero_a,
Estado_Civil = Estado_Civil_a,
Edad = Edad_a,
Ingreso_Mensual = Ingreso_Mensual_a,
Trabajos_Anteriores = Trabajos_Anteriores_a)
rotacion_a = predict(model_train, newdata = individuo_a, type = 'response')
cat("La probabilidad de rotación de un empleado con las características anteriores es de: ", rotacion_a)
## La probabilidad de rotación de un empleado con las características anteriores es de: 0.01789679
corte_intervenir <- ifelse(rotacion_a > 0.5, "Requiere Intervención", "No Requiere Intervención")
cat(" Dada la probabilidad de rotación anterior, se concluye que el empleado: ", corte_intervenir)
## Dada la probabilidad de rotación anterior, se concluye que el empleado: No Requiere Intervención
Una vez ejecutado el modelo de regresión logística para la rotación y teniendo en cuenta las características de un empleado aleatorio, se encuentra que la probabilidad de rotar es del 0.017, lo que significa que es muy poco probable que el empleado deje su puesto de trabajo actual.
Lo anterior se presenta porque las variables predictoras significativas incluidas en el modelo, como la edad y el ingreso mensual, muestran una relación positiva con la retención de los empleados. Adicional, las demás variables como estado civil divorciado indica una preferencia por no rotar. Así las estadísticas sugieren que el empleado aleatorio se encuentra en una situación laboral estable, con factores que disminuyen la probabilidad de rotación.
Ahora, si bien la probabilidad de rotar es baja, no es nula. Por tanto, pensando en estrategias de retención, se puede sugerir incentivar al empleado mediante políticas de talento humano que apoyen el bienestar y crecimiento socioeconómico, dado que se debe considerar que la experiencia en trabajos anteriores presenta un relación positiva con la rotación, y en el caso del empleado, apenas tiene 2 trabajos previos como experiencia laboral, por lo que probablemente la propensión a rotar cambie con el tiempo.
Para fomentar la retención del talento humano, permitiendo mejorar los indicadores de rotación, se recomienda la implementación de las siguientes estrategias:
La educación en Humanidades está positivamente asociada con la rotación, con un coeficiente positivo, lo que sugiere que aquellos trabajadores en este campo son más propensos a rotar. Situación similar ocurre con el campo de educación Mercadeo y Técnicos con un coeficiente positivos y aunque menores que en el campo de Humanidades. En consecuencia, se sugiere desarrollar planes de capacitación profesional, para que los empleados puean ubicarse en mejores campos dentro de la empresa, lo que les permitirá mejorar sus beneficios y así obtener una mayor estabilidad.
El género no es un factor determinante en la rotación laboral, y cualquier pequeña diferencia observada en la rotación entre hombres y mujeres podría atribuirse al azar más que a una influencia sistemática del género. De todas formas es relevante que se tengan políticas de equidad salarial y ascensos justos, para que se fomente la inclusión y satisfacción laboral. Esto contribuye más a la estabilidad laboral.
Los solteros desarrollan una asociación positiva con la rotación, en comparación con los otros estados civiles. Por tanto, resulta necesario establecer políticas que puedan abordar sus necesidades y preferencias, como por ejemplo, darles reconocimiento dentro de la organización, a través de la oportunidad de liderar proyectos o tener mayores responsabilidades, de manera que se sientan más valorados y desafiados. Así mismo, por lo general, los empleados solteros suelen estar más enfocados en avanzar en sus carreras, por lo que Ofrecerles planes de desarrollo, capacitaciones y oportunidades de crecimiento dentro de la empresa, puede ser un incentivo considerable para que opten por la permanencia.
La edad está negativamente asociada con la rotación, en otras palabras, cada año adicional en la edad del empleado está asociado con una disminución en la probabilidad de rotación. Así, se deben desarrollar programas de retención de empleados por grupos etarios, partiendo del grupo de empleados jóvenes en donde se debe fomentar el desarrollo de habilidades, pasando al grupo de mediana edad, en donde se deben crear espacios para que tengan un equilibrio entre trabajo y familia, y pasando al grupo de empleados más experimentados, quienes podrían tener acompañamiento en planes de pensión y retiro laboral o preparación para la vejez.
El ingreso mensual también está negativamente asociado con la rotación, por lo que sugiere que un aumento en una unidad de variable implica una menor probabilidad de rotación. Por tanto, se recomienda realizar un estudio salarial que abarque la formación académica, experiencia, aptitudes y actitudes de cara al cargo y sus funciones, para ajustar los salarios. Adicional, se pueden implementar programas de incentivos con salario emocional, lo cual es bien visto por los empleados, todo asociado al cumplimiento de objetivos. De esta manera, se puede aumentar la productividad mientras que se realiza retención de personal.
En los trabajos anteriores un mayor número de trabajos previos está positivamente asociado con la rotación, lo que podría indicar una tendencia a cambiar de trabajo con más frecuencia entre los empleados con experiencia previa. En consecuencia es aconsejable conocer los factores que generaron el cambio de trabajo en esta población, de manera que se pueda mejorar el entorno laboral y a la vez se les motive para evitar que sigan realizando cambio de trabajo. Para esto, se puede apoyar con la realización de entrevistas al momento de contratar y durante los primeros meses para entender las razones detrás de los cambios frecuentes de trabajo.
En términos generales, se recomienda la creación de un plan de desarrollo y estabilidad que permita retener el talento humano. Esto se puede realizar a través de la personalización de la experiencia laboral, el ambiente y clima de trabajo, promoviendo el crecimiento, reconocimiento y salarios justos, especialmente en los cargos con mayores propensión a la rotación.