A continuación se revisará un caso sobre la rotación de empleados.
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.
## 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, …
Seleccione 3 variables categóricas (distintas de rotación) y 3 variables cuantitativas, que se consideren estén relacionadas con la rotación. Nota: Debes justificar porque estas variables están relacionadas y que tipo de relación se espera entre ellas (Hipótesis).
Respuesta:
Edad: puede influir en la rotación porque empleados más jóvenes podrían estar en una fase de exploración de su carrera y, por lo tanto, inclinarse a cambiar de trabajo en busca de nuevas oportunidades o experiencias. Los empleados mayores podrían buscar estabilidad o estar menos dispuestos a cambiar por mantenerse en su zona de confort o por estar cercanos a la jubilación.Hipótesis: Que las personas más jovenes tienen mayor posibilidad de rotación que los mayores.
Ingreso mensual: Los empleados que consideran que su compensación no es adecuada, podrían buscar otro lugar para cambiar de posición dentro de la organización, especialmente si perciben que otras posiciones ofrecen mejor remuneración por responsabilidades similares.Hipótesis: empleados con menor ingreso mensual tienen mayor posibilidad de rotación que aquellos con mayor ingreso.
Antigüedad en el trabajo: podría estar inversamente relacionada con la rotación, puesto que los empleados con más tiempo en la empresa pueden tener más inversiones en forma de beneficios acumulados, conocimiento institucional o lealtad a la organización. Hipótesis: Los empleados con menor antigüedad tienen menor rotación que los empleados con mayor antigüedad
Horas extra: Se espera que las horas extra se relacionen con la rotación ya que las personas podrían desgastarse mas al trabajar horas extra y descuidan aspectos personales. La hipótesis es que las personas que trabajan horas extra tienen mayor posibilidad de rotar que las que no trabajan extra.
Estado Civil: los trabajadores con compromisos familiares pueden valorar la estabilidad y la seguridad laboral y, por lo tanto, podrían ser menos propensos a la rotación. Hipótesis: los trabajadores casados tienen menor probabilidad de rotación que los empleados solteros o divorciados.
Viaje de Negocios: al viajar frecuentemente, los trabajadores pueden experimentar un mayor estrés y una menor satisfacción con el equilibrio entre la vida laboral y personal, lo que podría aumentar la probabilidad de rotación. Hipótesis: Los trabajadores que viajan frecuentemente tienen mayor probabilidad de rotación que aquellos que no viajan o que viajan raramente.
Realiza un análisis univariado (caracterización) de la información contenida en la base de datos rotacion.
Respuesta:
# Se confirma si hay datos faltantes:
library(mice)
grafico <- md.pattern(rotacion, rotate.names = TRUE)## /\ /\
## { `---' }
## { O O }
## ==> V <== No need for mice. This data set is completely observed.
## \ \|/ /
## `-----'
Con el gráfico anterior se confirma que no hay datos faltantes en el dataset.
Se continúa con las estadísticas descriptivas:
## Rotación Edad Viaje de Negocios Departamento
## Length:1470 Min. :18.00 Length:1470 Length:1470
## Class :character 1st Qu.:30.00 Class :character Class :character
## Mode :character Median :36.00 Mode :character Mode :character
## Mean :36.92
## 3rd Qu.:43.00
## Max. :60.00
## Distancia_Casa Educación Campo_Educación Satisfacción_Ambiental
## Min. : 1.000 Min. :1.000 Length:1470 Min. :1.000
## 1st Qu.: 2.000 1st Qu.:2.000 Class :character 1st Qu.:2.000
## Median : 7.000 Median :3.000 Mode :character Median :3.000
## Mean : 9.193 Mean :2.913 Mean :2.722
## 3rd Qu.:14.000 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :29.000 Max. :5.000 Max. :4.000
## Genero Cargo Satisfación_Laboral Estado_Civil
## Length:1470 Length:1470 Min. :1.000 Length:1470
## Class :character Class :character 1st Qu.:2.000 Class :character
## Mode :character Mode :character Median :3.000 Mode :character
## Mean :2.729
## 3rd Qu.:4.000
## Max. :4.000
## Ingreso_Mensual Trabajos_Anteriores Horas_Extra
## Min. : 1009 Min. :0.000 Length:1470
## 1st Qu.: 2911 1st Qu.:1.000 Class :character
## Median : 4919 Median :2.000 Mode :character
## Mean : 6503 Mean :2.693
## 3rd Qu.: 8379 3rd Qu.:4.000
## Max. :19999 Max. :9.000
## Porcentaje_aumento_salarial Rendimiento_Laboral Años_Experiencia
## Min. :11.00 Min. :3.000 Min. : 0.00
## 1st Qu.:12.00 1st Qu.:3.000 1st Qu.: 6.00
## Median :14.00 Median :3.000 Median :10.00
## Mean :15.21 Mean :3.154 Mean :11.28
## 3rd Qu.:18.00 3rd Qu.:3.000 3rd Qu.:15.00
## Max. :25.00 Max. :4.000 Max. :40.00
## Capacitaciones Equilibrio_Trabajo_Vida Antigüedad Antigüedad_Cargo
## Min. :0.000 Min. :1.000 Min. : 0.000 Min. : 0.000
## 1st Qu.:2.000 1st Qu.:2.000 1st Qu.: 3.000 1st Qu.: 2.000
## Median :3.000 Median :3.000 Median : 5.000 Median : 3.000
## Mean :2.799 Mean :2.761 Mean : 7.008 Mean : 4.229
## 3rd Qu.:3.000 3rd Qu.:3.000 3rd Qu.: 9.000 3rd Qu.: 7.000
## Max. :6.000 Max. :4.000 Max. :40.000 Max. :18.000
## Años_ultima_promoción Años_acargo_con_mismo_jefe
## Min. : 0.000 Min. : 0.000
## 1st Qu.: 0.000 1st Qu.: 2.000
## Median : 1.000 Median : 3.000
## Mean : 2.188 Mean : 4.123
## 3rd Qu.: 3.000 3rd Qu.: 7.000
## Max. :15.000 Max. :17.000
Gráficos de variables seleccionadas en la hipótesis:
par(mfrow = c(1, 3))
hist(rotacion$Edad, main = "Histograma de Edad", xlab = "Edad", col = "#13B3C1")
hist(rotacion$Ingreso_Mensual, main = "Histograma de Ingreso Mensual", xlab = "Ingreso mensual", col ="#FE3F75")
hist(rotacion$Antigüedad, main = "Histograma de Antigüedad", xlab = "Antigüedad", col ="#66ADA4")Para identificar visualmente si existen valores extremos en estas variables, se realiza un boxplot:
par(mfrow = c(1, 3))
boxplot(rotacion$Edad, main = "Edad de trabajadores", col = "#13B3C1")
boxplot(rotacion$Ingreso_Mensual, main = "Ingreso Mensual", col = "#FE3F75")
boxplot(rotacion$Antigüedad, main = "Antigüedad", col = "#66ADA4")La variable edad va desde los 18 hasta los 60 años con un promedio de 36,9 y una mediana de 26 años. Un 25% de ellos tiene menos de 30 años y otro 25% tiene entre 43 y 60 años. No se observa una distribución normal, se identifica un pequeño sesgo a la derecha.No tiene valores extremos.
El Ingreso mensual varía entre 1.009 y 19.999 con media de 6503 y mediana de 4919. No se observa una distribución normal. Esta variable tiene outliers superiores.
La variable antiguedad va desde 0 hasta 40 años,la antigüedad promedio es de 5 años y la mediana de 5 años. El 25% tiene menos de 3 años de antiguedad y otro 25% tiene entre 9 y 40 años. Esta variable tiene valores extremos superiores.
En relación con las demás variables, se encuentra:
La distancia a la casa va desde 1 hasta 29, el promedio de distancia es de 9 KM, el 25% de los empleados viven entre 14 y 29 (km?) de distancia
El % de aumento salarial va desde 11 hasta 25%, el promedio es de 15%.
En relación con los años de experiencia, van desde 0 hasta 40 años, el promedio de trabajadores cuenta con 11 años de experiencia, la mitad de los trabajadores tiene más de 10 años de experiencia.
La antiguedad en el cargo varía entre 0 y 18 años, el promedio de los trabajadores tiene una antigüedad de 4,2 años. La mitad de los trabajadores tiene menos de 5 años de antigüedad en su cargo.
La cantidad de capacitaciones recibidas va desde 0 hasta 6 en el periodo de tiempo evaluado. En promedio se brindan 2,7 capacitaciones en dicho periodo.
El 25% de los trabajadores lleva 0 años desde su última promoción, el mayor tiempo desde la última promoción es de 15 años. El 50% ha sido promovido hace más de un año.
Con el mismo jefe han estado desde 0 hasta 17 años, el promedio de trabajadores lleva más de 4 años y el 50% lleva menos de 3 años.
Resultado esperado: Rotación
## Frequencies
## rotacion$Rotación
## Type: Character
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## ----------- ------ --------- -------------- --------- --------------
## No 1233 83.88 83.88 83.88 83.88
## Si 237 16.12 100.00 16.12 100.00
## <NA> 0 0.00 100.00
## Total 1470 100.00 100.00 100.00 100.00
rot <- table(rotacion$Rotación)
posiciones_barras <- barplot(rot,
main = "Rotación",
xlab = "Índice",
ylab = "Rotación",
col = "skyblue",
border = "darkblue")
valores_rotacion <- as.numeric(rot)
text(x = posiciones_barras,
y = valores_rotacion + max(valores_rotacion) * 0.01,
labels = valores_rotacion,
pos = 3,
cex = 0.9)El 83% de los trabajadores no tiene rotación con un total de 1233 trabajadores, el 16,1% Si rota (n=237)
Viaje de negocios:
library(flextable)
viajen <- table(rotacion$`Viaje de Negocios`)# número de casos por categoría
porcentajes <- prop.table(viajen) * 100 # porcentajes
tabulacion <- data.frame(
Viaje_de_Negocios = names(viajen),
Total = as.integer(viajen),
Porcentaje = sprintf("%.2f%%", round(porcentajes, 2)) # Formateamos los porcentajes como texto
)
tabulacion <- tabulacion[order(-tabulacion$Total), ]# Ordenar la tabla por Total
ft <- flextable(tabulacion)
ft <- align(ft, align = "center", part = "all") # Centra todo el texto
ft <- bg(ft, part = "header", bg = "#4F81BD") # Fondo del encabezado
ft <- color(ft, part = "header", color = "white") # Color del texto en el encabezado
ftViaje_de_Negocios | Total | Porcentaje |
|---|---|---|
Raramente | 1,043 | 70.95% |
Frecuentemente | 277 | 18.84% |
No_Viaja | 150 | 10.20% |
Gráfica de barras:
library(plotly)
turquesa_paleta <- colorRampPalette(c("#40E0D0", "#86BEDA", "#006A89"))(length(viajen))
p <- plot_ly(x = names(viajen), y = porcentajes, type = 'bar',
marker = list(color = turquesa_paleta),
text = ~viajen,
textposition = 'outside',
hoverinfo = 'text',
texttemplate = '%{text}') %>%
layout(title = 'Distribución de Viaje de Negocios',
xaxis = list(title = 'Categoría'),
yaxis = list(title = 'Porcentaje'))
pEl 71% de los empleados viaja raramente (n=1043). El 19% viaja frecuentemente (n=277) y el 10% restante no viaja.
Horas Extra:
horas <- table(rotacion$Horas_Extra)
porcentajes <- prop.table(horas) * 100 # porcentajes
horase <- data.frame(
Horas_Extra = names(horas),
Total = as.integer(horas),
Porcentaje = sprintf("%.2f%%", round(porcentajes, 2))
)
horase <- horase[order(-horase$Total), ]# Ordenar la tabla por Total
hr <- flextable(horase)
hr <- align(hr, align = "center", part = "all")
hr <- bg(hr, part = "header", bg = "#4F81BD")
hr <- color(hr, part = "header", color = "white")
hrHoras_Extra | Total | Porcentaje |
|---|---|---|
No | 1,054 | 71.70% |
Si | 416 | 28.30% |
el 71,7% de los empleados no trabajan horas extra (n= 1054), el 28.5% restante sí.
Estado civil:
civil <- table(rotacion$Estado_Civil)
porcentajes <- prop.table(civil) * 100 # porcentajes
ecivil <- data.frame(
Estado_Civil = names(civil),
Total = as.integer(civil),
Porcentaje = sprintf("%.2f%%", round(porcentajes, 2))
)
ecivil <- ecivil[order(-ecivil$Total), ]# Ordenar la tabla por Total
ec <- flextable(ecivil)
ec <- align(ec, align = "center", part = "all")
ec <- bg(ec, part = "header", bg = "#4F81BD")
ec <- color(ec, part = "header", color = "white")
ecEstado_Civil | Total | Porcentaje |
|---|---|---|
Casado | 673 | 45.78% |
Soltero | 470 | 31.97% |
Divorciado | 327 | 22.24% |
El 45.7% de los empleados son casados (n=673), el 32% es soltero (n= 470) y el 22% restante es divorciado.
Se exploran los resultados de las demás variables con tablas de frecuencias:
# Resultados de Departamento: EL 65.3% de los empleados estan en IyD, el 30.3% en ventas y el 4,2% restante en RH
freq (rotacion$Departamento)## Frequencies
## rotacion$Departamento
## Type: Character
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## ------------ ------ --------- -------------- --------- --------------
## IyD 961 65.37 65.37 65.37 65.37
## RH 63 4.29 69.66 4.29 69.66
## Ventas 446 30.34 100.00 30.34 100.00
## <NA> 0 0.00 100.00
## Total 1470 100.00 100.00 100.00 100.00
# Resultados de Educación (1=primaria, 2=secundaria, 3=técnico/tecnólogo 4=pregrado y 5=posgrado): En los tres resultados mas frecuentes se encuentra que el 38% tiene estudios de técnico/tecnólogo y el 27% de pregrado y el 19% de secundaria.
freq(rotacion$Educación)## Frequencies
## rotacion$Educación
## Type: Numeric
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## ----------- ------ --------- -------------- --------- --------------
## 1 170 11.56 11.56 11.56 11.56
## 2 282 19.18 30.75 19.18 30.75
## 3 572 38.91 69.66 38.91 69.66
## 4 398 27.07 96.73 27.07 96.73
## 5 48 3.27 100.00 3.27 100.00
## <NA> 0 0.00 100.00
## Total 1470 100.00 100.00 100.00 100.00
# Resultados de Campo de educación: En los tres m'as frecuentes se observa que el 41% se relaciona con el campo de ciencias, el 31% con el de la salud y el 10.8% en mercadeo.
freq(rotacion$Campo_Educación)## Frequencies
## rotacion$Campo_Educación
## Type: Character
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## ----------------- ------ --------- -------------- --------- --------------
## Ciencias 606 41.22 41.22 41.22 41.22
## Humanidades 27 1.84 43.06 1.84 43.06
## Mercadeo 159 10.82 53.88 10.82 53.88
## Otra 82 5.58 59.46 5.58 59.46
## Salud 464 31.56 91.02 31.56 91.02
## Tecnicos 132 8.98 100.00 8.98 100.00
## <NA> 0 0.00 100.00
## Total 1470 100.00 100.00 100.00 100.00
# Resultados de Satisfacción ambiental (1=Muy insatisfecho, 2=insatisfecho, 3=satisfecho y 4=Muy insatisfecho): Los niveles de satisfaccion 3 y 4 se clasificaron cada uno en el 30% de los empleados.
freq(rotacion$Satisfacción_Ambiental)## Frequencies
## rotacion$Satisfacción_Ambiental
## Type: Numeric
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## ----------- ------ --------- -------------- --------- --------------
## 1 284 19.32 19.32 19.32 19.32
## 2 287 19.52 38.84 19.52 38.84
## 3 453 30.82 69.66 30.82 69.66
## 4 446 30.34 100.00 30.34 100.00
## <NA> 0 0.00 100.00
## Total 1470 100.00 100.00 100.00 100.00
## Frequencies
## rotacion$Genero
## Type: Character
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## ----------- ------ --------- -------------- --------- --------------
## F 588 40.00 40.00 40.00 40.00
## M 882 60.00 100.00 60.00 100.00
## <NA> 0 0.00 100.00
## Total 1470 100.00 100.00 100.00 100.00
# Resultados de Cargo: El cargo con mayor frecuencia de empleados es ejecutivo de ventas con el 22,1% (n=326) seguido de investigador cientifico con 19.8% (n=292)
freq(rotacion$Cargo)## Frequencies
## rotacion$Cargo
## Type: Character
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## ----------------------------- ------ --------- -------------- --------- --------------
## Director_Investigación 80 5.44 5.44 5.44 5.44
## Director_Manofactura 145 9.86 15.31 9.86 15.31
## Ejecutivo_Ventas 326 22.18 37.48 22.18 37.48
## Gerente 102 6.94 44.42 6.94 44.42
## Investigador_Cientifico 292 19.86 64.29 19.86 64.29
## Recursos_Humanos 52 3.54 67.82 3.54 67.82
## Representante_Salud 131 8.91 76.73 8.91 76.73
## Representante_Ventas 83 5.65 82.38 5.65 82.38
## Tecnico_Laboratorio 259 17.62 100.00 17.62 100.00
## <NA> 0 0.00 100.00
## Total 1470 100.00 100.00 100.00 100.00
# Resultados de Satisfacción laboral (1=Muy insatisfecho, 2=insatisfecho, 3=satisfecho y 4=Muy insatisfecho):
freq(rotacion$Satisfación_Laboral)## Frequencies
## rotacion$Satisfación_Laboral
## Type: Numeric
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## ----------- ------ --------- -------------- --------- --------------
## 1 289 19.66 19.66 19.66 19.66
## 2 280 19.05 38.71 19.05 38.71
## 3 442 30.07 68.78 30.07 68.78
## 4 459 31.22 100.00 31.22 100.00
## <NA> 0 0.00 100.00
## Total 1470 100.00 100.00 100.00 100.00
# Resultados de Rendimiento laboral (1= bajo, 2=medio, 3=alto, 4=Muy alto): Todos los empleados tienen rendimiento entre alto y muy alto
freq(rotacion$Rendimiento_Laboral)## Frequencies
## rotacion$Rendimiento_Laboral
## Type: Numeric
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## ----------- ------ --------- -------------- --------- --------------
## 3 1244 84.63 84.63 84.63 84.63
## 4 226 15.37 100.00 15.37 100.00
## <NA> 0 0.00 100.00
## Total 1470 100.00 100.00 100.00 100.00
# Resultado de Equilibrio trabajo - vida (1=Muy bajo, 2=bajo, 3=Medio, 4=alto): La mayor proporción de empleados se consideran muy insatisfechos con el 31% (n= 459) seguido de satisfecho con el 30% (n=442)
freq(rotacion$Equilibrio_Trabajo_Vida)## Frequencies
## rotacion$Equilibrio_Trabajo_Vida
## Type: Numeric
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## ----------- ------ --------- -------------- --------- --------------
## 1 80 5.44 5.44 5.44 5.44
## 2 344 23.40 28.84 23.40 28.84
## 3 893 60.75 89.59 60.75 89.59
## 4 153 10.41 100.00 10.41 100.00
## <NA> 0 0.00 100.00
## Total 1470 100.00 100.00 100.00 100.00
Realiza un análisis de bivariado en donde la variable respuesta sea rotacion codificada de la siguiente manera (y=1 es si rotación, y=0 es no rotación). Con base en estos resultados identifique cuales son las variables determinantes de la rotación e interpretar el signo del coeficiente estimado. Compare estos resultados con la hipotesis planteada en el punto 1.
Respuesta:
Se realiza un análisis bivariado con las variables seleccionadas en el numeral 1 y la variable respuesta (rotación):
Edad y Rotación:
library(ggplot2)
ggplot(rotacion, aes(x = Rotación, y = Edad, fill= Rotación)) +
geom_boxplot() +
labs(title = "Distribución de Edad según Rotación",
x = "Rotación",
y = "Edad") +
scale_fill_manual(values = c("Si" = "#40E0D0", "No" = "#006A89"))El gráfico muestra que hay una edad menor en el grupo que presenta rotación con algunos valores extremos, impresiona que son diferentes las distribuciones de edad en ambos grupos.
Para determinar si la edad es estadísticamente diferente en los grupos de rotación, se puede realizar una prueba estadística, dado que no calculamos la normalidad, utilizamos Wilcoxon
##
## Wilcoxon rank sum test with continuity correction
##
## data: Edad by Rotación
## W = 185366, p-value = 5.281e-11
## alternative hypothesis: true location shift is not equal to 0
Con el resultado de p-value = 5.281e-11 podemos concluir que hay una diferencia estadísticamente significativa en las edades entre los dos grupos de “Rotación”
Rotación e Ingreso mensual:
ggplot(rotacion, aes(x = Rotación, y = Ingreso_Mensual, fill = Rotación)) +
geom_boxplot() +
labs(title = "Distribución de Ingreso Mensual según Rotación",
x = "Rotación",
y = "Ingreso Mensual") +
scale_fill_manual(values = c("Si" = "#40E0D0", "No" = "#006A89"))Al observar la gráfica, se identifica que las personas con rotación, tienen un ingreso mensual menor que aquellos que no rotan. Aplicamos la prueba de Wilcoxon para identificar si estos dos grupos son estadísticamente diferentes. En ambos grupos hay valores extremos superiores de ingreso.
##
## Wilcoxon rank sum test with continuity correction
##
## data: Ingreso_Mensual by Rotación
## W = 191601, p-value = 2.951e-14
## alternative hypothesis: true location shift is not equal to 0
Con el resultado estadístico obtenido, se confirma que sí hay diferencias significativas en el ingreso mensual de los trabajadores que no rotan y los que sí rotan.
Antigüedad en el trabajo y Rotación:
ggplot(rotacion, aes(x = Rotación, y = Antigüedad, fill = Rotación)) +
geom_boxplot() +
labs(title = "Distribución de Antigüedad según Rotación",
x = "Rotación",
y = "Antigüedad") +
scale_fill_manual(values = c("Si" = "#40E0D0", "No" = "#006A89"))Igual que con las variables anteriores, se observan diferencias en Antigüedad entre los trabajadores que rotan y los que no rotan, identificando rotación en el grupo con menor Antigüedad.En ambos grupos se identifican valores extremos.
##
## Wilcoxon rank sum test with continuity correction
##
## data: Antigüedad by Rotación
## W = 189639, p-value = 2.916e-13
## alternative hypothesis: true location shift is not equal to 0
Con el resultado estadístico obtenido, se confirma que sí hay diferencias significativas en la antigüedad de los trabajadores que no rotan y los que sí rotan.
Horas extra y Rotación:
ggplot(data = rotacion, aes(x = Rotación, fill = `Horas_Extra`)) +
geom_bar(position = "dodge") +
labs(title = "Rotación y Horas Extra",
x = "Rotación",
y = "Frecuencia",
fill = "Horas Extra")En el grupo que no tiene rotación, hay mayor frecuencia de trabajadores que no realizan horas extra. En el grupo que sí tiene rotación, hay más trabajadores que sí realizaron horas extra. Se puede confirmar esto en una tabla de 2X2 y confirmar si ay diferencia estadística con la prueba de chi2
##
## No Si
## No 944 289
## Si 110 127
Dado que se cumple el supuesto requerido para aplicar la prueba de Chi2 de esperar al menos 5 observaciones en el 80% de las celdas de la tabla de contingencia, se procede a aplicar la prueba:
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: Hor
## X-squared = 87.564, df = 1, p-value < 2.2e-16
El Chi2 se utiliza para determinar si hay una asociación significativa entre dos variables categóricas. El p-value < 2.2e-16 indica que hay evidencia estadística suficiente para rechazar la hipótesis nula de que no hay asociación entre las variables “Rotación” y “Horas Extra”. Esto sugiere que existe una asociación significativa entre si un empleado realiza horas extra y si experimenta rotación.
Estado civil y Rotación:
ggplot(data = rotacion, aes(x = Rotación, fill = `Estado_Civil`)) +
geom_bar(position = "dodge") +
labs(title = "Rotación y Estado Civil",
x = "Rotación",
y = "Frecuencia",
fill = "Estado Civil")En el grupo de no rotación, la mayor frecuencia de empleados se encuentra en el grupo de casados y en segundo lugar de solteros. En el grupo que sí presenta rotación, hay una mayor frecuencia de empleados solteros y en segundo lugar los casados. están invertidos en relación con el grupo de no rotación. El grupo de divorciados es el tercero en ambos grupos.
##
## Casado Divorciado Soltero
## No 589 294 350
## Si 84 33 120
Se cumple el supuesto de frecuencia en cada celda de la tabla de contingencia, se procede a calcular el Chi2:
##
## Pearson's Chi-squared test
##
## data: Ecv
## X-squared = 46.164, df = 2, p-value = 9.456e-11
El valor p muy bajo permite rechazar la hipótesis nula, que sostiene que no hay asociación entre las variables “Rotación” y “Estado Civil”. Esto significa que hay evidencia estadística suficiente para afirmar que existe una relación significativa entre estas variables. Esto no se puede confirmar como causalidad.
Viaje de Negocios y Rotación:
ggplot(data = rotacion, aes(x = Rotación, fill = `Viaje de Negocios`)) +
geom_bar(position = "dodge") +
labs(title = "Rotación y Viaje de negocios",
x = "Rotación",
y = "Frecuencia",
fill = "Viaje de Negocios")Al observar la gráfica, se identifica un comportamiento similar de viaje de negocios en el grupo que presenta rotación y el grupo que no rota. La mayoría de empleados en cada grupo raramente viaja, seguido del grupo que viaja frecuentemente y por último el grupo que no viaja.
##
## Frecuentemente No_Viaja Raramente
## No 208 138 887
## Si 69 12 156
La tabla de contingencia de 3x2 confirma lo explicado a través del gráfico. All cumplir el supuesto de frecuencia en cada celda, se calcula el Chi2.
##
## Pearson's Chi-squared test
##
## data: Vj
## X-squared = 24.182, df = 2, p-value = 5.609e-06
Con el resultado del p, se concluye que las diferencias identificadas en los grupos de rotación no son debidas al azar. Sí hay una diferencia estadísticamente significativa en ambos grupos.
Realice una partición en los datos de forma aleatoria donde 70% sea un set para entrenar el modelo y 30% para prueba. Estime un modelo logístico con la muestra del 70%. Muestre los resultados.
Respuesta:
Para realizar la partición de los datos para entrenar el modelo, primero se define un nuevo dataframe solo con las variables seleccionadas previamente.
df <- rotacion[c("Edad", "Ingreso_Mensual", "Antigüedad",
"Estado_Civil", "Horas_Extra",
"Viaje de Negocios", "Rotación")]
head(df)Se transforman las variables categóricas a numéricas:
Se recodifican las variables categóricas Estado civil, Horas Extra y Viaje de negocios. Dado que no tienen un orden jerárquico, se recodifican Estado Civil y Viaje de negocios como variables dummies:
# Recodificar "Estado_Civil" a variables dummy
estado_civil_dummies <- model.matrix(~ Estado_Civil - 1, data = df)
# Unir las nuevas variables dummy al dataframe original (asegúrate de no incluir la variable original para evitar multicolinealidad)
df <- cbind(df, estado_civil_dummies)# Recodificar "Viaje de Negocios" a variables dummy
Viaje_dummies <- model.matrix(~ `Viaje de Negocios` - 1, data = df)
# Unir las nuevas variables dummy al dataframe original
df <- cbind(df, Viaje_dummies)
# Eliminar las variables categóricas originales
df <- df[, !(names(df) %in% c("Estado_Civil", "Viaje de Negocios"))]## 'data.frame': 1470 obs. of 11 variables:
## $ Edad : num 41 49 37 33 27 32 59 30 38 36 ...
## $ Ingreso_Mensual : num 5993 5130 2090 2909 3468 ...
## $ Antigüedad : num 6 10 0 8 2 7 1 1 9 7 ...
## $ Horas_Extra : num 1 0 1 1 0 0 1 0 0 0 ...
## $ Rotación : chr "Si" "No" "Si" "No" ...
## $ Estado_CivilCasado : num 0 1 0 1 1 0 1 0 0 1 ...
## $ Estado_CivilDivorciado : num 0 0 0 0 0 0 0 1 0 0 ...
## $ Estado_CivilSoltero : num 1 0 1 0 0 1 0 0 1 0 ...
## $ `Viaje de Negocios`Frecuentemente: num 0 1 0 1 0 1 0 0 1 0 ...
## $ `Viaje de Negocios`No_Viaja : num 0 0 0 0 0 0 0 0 0 0 ...
## $ `Viaje de Negocios`Raramente : num 1 0 1 0 1 0 1 1 0 1 ...
Dado que utilizamos la librería caret, se mantiene la variable respuesta como Si y No y no se reemplaza por 1 y 0.
library(caret)
set.seed(123)
particion <- createDataPartition(y = df$Rotación, p = 0.7, list = FALSE) # list = FALSE hace que la función devuelva un vector de índices en lugar de una lista
# Crear los conjuntos de datos de entrenamiento y prueba:
train <- df[particion, ]
test <- df[-particion, ]# Se valida que los resultados en las categorías de respuesta hayan quedado asignadas en los diferentes conjuntos de datos:
table(df$Rotación) # Revisar en el conjunto de datos completo##
## No Si
## 1233 237
##
## No Si
## 864 166
##
## No Si
## 369 71
trainControl <- trainControl(method = "cv", number = 10) # Se incluye validación cruzada y 10 iteraciones
# Entrenar el modelo de regresión logística
modelo_logistico <- train(Rotación ~ ., data = train,
method = "glm",
family = "binomial",
trControl = trainControl)
# Mostrar el resultado del entrenamiento
print(modelo_logistico)## Generalized Linear Model
##
## 1030 samples
## 10 predictor
## 2 classes: 'No', 'Si'
##
## No pre-processing
## Resampling: Cross-Validated (10 fold)
## Summary of sample sizes: 927, 928, 928, 927, 927, 927, ...
## Resampling results:
##
## Accuracy Kappa
## 0.8494994 0.2177855
El modelo predijo correctamente la categoría de “Rotación” en aproximadamente el 84.9% de los casos a través de la validación cruzada.
El coeficiente Kappa es una medida que compara la exactitud observada con la exactitud que se esperaría por azar, ajustando por el desequilibrio en la distribución de las clases. Un valor de Kappa de aproximadamente 0.21 sugiere una concordancia moderada.
##
## Call:
## NULL
##
## Coefficients: (2 not defined because of singularities)
## Estimate Std. Error
## (Intercept) -1.373e-01 3.987e-01
## Edad -2.256e-02 1.226e-02
## Ingreso_Mensual -6.806e-05 3.156e-05
## Antigüedad -5.454e-02 2.269e-02
## Horas_Extra 1.413e+00 1.902e-01
## Estado_CivilCasado -1.047e+00 2.099e-01
## Estado_CivilDivorciado -9.924e-01 2.591e-01
## Estado_CivilSoltero NA NA
## `\\`\\\\\\`Viaje de Negocios\\\\\\`Frecuentemente\\`` 7.714e-01 2.151e-01
## `\\`\\\\\\`Viaje de Negocios\\\\\\`No_Viaja\\`` -1.144e+00 4.519e-01
## `\\`\\\\\\`Viaje de Negocios\\\\\\`Raramente\\`` NA NA
## z value Pr(>|z|)
## (Intercept) -0.344 0.730677
## Edad -1.840 0.065828 .
## Ingreso_Mensual -2.156 0.031059 *
## Antigüedad -2.404 0.016215 *
## Horas_Extra 7.426 1.12e-13 ***
## Estado_CivilCasado -4.988 6.11e-07 ***
## Estado_CivilDivorciado -3.830 0.000128 ***
## Estado_CivilSoltero NA NA
## `\\`\\\\\\`Viaje de Negocios\\\\\\`Frecuentemente\\`` 3.586 0.000336 ***
## `\\`\\\\\\`Viaje de Negocios\\\\\\`No_Viaja\\`` -2.532 0.011329 *
## `\\`\\\\\\`Viaje de Negocios\\\\\\`Raramente\\`` NA NA
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 909.69 on 1029 degrees of freedom
## Residual deviance: 756.90 on 1021 degrees of freedom
## AIC: 774.9
##
## Number of Fisher Scoring iterations: 5
El resultado arrojado muestra que para todas las variables calculadas hay una significancia estadística que indica asociación con la variable respuesta:
Edad: p-valor de 0.065. Es ligeramente superior al nivel de significancia
Ingreso_Mensual: p-valor de 0.031059 (*).
Antigüedad: -valor de 0.016215 (*).
Horas_Extra: p-valor muy pequeño (1.12e-13, marcado con ***), indicando una fuerte relación con la variable de respuesta.
Estado_CivilCasado: También muy significativo con un p-valor de 6.11e-07 (***).
Estado_CivilDivorciado: p-valor de 0.000128 (***).
Viaje de Negocios ‘Frecuentemente’: p-valor de 0.000336 (***).
Viaje de Negocios ‘No Viaja’: p-valor de 0.011329 (*).
Las variables de referencia no tienen cálculo de valor P.
En relación con el AIC (Criterio de Información de Akaike): Proporciona una medida de la calidad del modelo. Se obtuvo 774.9 En general, se prefieren los modelos con valores AIC más bajos.
Ahora se obtienen los coeficientes para interpretar mejor el modelo:
modelo_final <- modelo_logistico$finalModel
coeficientes <- coef(modelo_final)
ORs <- exp(coeficientes)
library(tidyverse)
# Crear un tibble con los coeficientes y los ORs
tabla_ORs_tibble <- tibble(
Variable = names(coeficientes),
Coeficiente = coeficientes,
Odds_Ratio = ORs
)
tabla_ORs <- data.frame(
Variable = names(coeficientes),
Coeficiente = coeficientes,
Odds_Ratio = ORs
)
errores_estandar <- sqrt(diag(vcov(modelo_final)))# Obtener los errores estándar de los coeficientes
# Definir el nivel de confianza, 95%
nivel_confianza <- 0.95
z <- qnorm((1 + nivel_confianza) / 2) # Valor z para el nivel de confianza deseado
# Calcular los límites del intervalo de confianza en el espacio logarítmico
limite_inferior_log <- coeficientes - z * errores_estandar
limite_superior_log <- coeficientes + z * errores_estandar
# Exponenciar los límites para obtener los IC en el espacio de los ORs
limite_inferior_or <- exp(limite_inferior_log)
limite_superior_or <- exp(limite_superior_log)
# Añadir los IC al tibble
tabla_ORs_tibble <- tabla_ORs_tibble %>%
mutate(
IC_Inferior = limite_inferior_or,
IC_Superior = limite_superior_or
)
# O, para trabajar con data.frame
tabla_ORs$IC_Inferior <- limite_inferior_or
tabla_ORs$IC_Superior <- limite_superior_or
# Crear tabla
ft <- flextable(tabla_ORs)
ft <- ft %>%
color(part = "body", color = "blue", i = ~ Odds_Ratio > 1) %>%
bold(part = "header") %>%
autofit()
ftVariable | Coeficiente | Odds_Ratio | IC_Inferior | IC_Superior |
|---|---|---|---|---|
(Intercept) | -0.1372564932 | 0.8717466 | 0.3990077 | 1.9045800 |
Edad | -0.0225604631 | 0.9776921 | 0.9544718 | 1.0014773 |
Ingreso_Mensual | -0.0000680596 | 0.9999319 | 0.9998701 | 0.9999938 |
Antigüedad | -0.0545427932 | 0.9469180 | 0.9057333 | 0.9899754 |
Horas_Extra | 1.4125977626 | 4.1066096 | 2.8284885 | 5.9622806 |
Estado_CivilCasado | -1.0470050360 | 0.3509874 | 0.2326011 | 0.5296283 |
Estado_CivilDivorciado | -0.9923960763 | 0.3706874 | 0.2230900 | 0.6159359 |
Estado_CivilSoltero | ||||
`\`\\\`Viaje de Negocios\\\`Frecuentemente\`` | 0.7713576052 | 2.1627004 | 1.4186833 | 3.2969112 |
`\`\\\`Viaje de Negocios\\\`No_Viaja\`` | -1.1444230202 | 0.3184076 | 0.1313149 | 0.7720628 |
`\`\\\`Viaje de Negocios\\\`Raramente\`` |
Interpretación de los OR:
Los ORs varían de 0 a infinito, donde:
Un OR = 1 indica que las odds de un evento son iguales en ambos grupos comparados.
Un OR mayor que 1 indica un aumento en las odds de un evento en el grupo de interés en comparación con el grupo de referencia.
Un OR menor que 1 indica una disminución en las odds de un evento en el grupo de interés en comparación con el grupo de referencia.
Intervalos de confianza: Cuando los intervalos de confianza de un Odds Ratio no incluyen el valor 1, esto indica que el efecto estimado (en este caso, la relación entre la variable predictora y la oportunidad de la variable de respuesta) es estadísticamente significativo al nivel de confianza establecido (comúnmente el 95%). Los Intervalos de confianza generados en la tabla presentan los valores en los que el OR puede variar con una confianza del 95%.
Dada la aclaración anterior, los resultados del modelo significan:
Nota: Los siguientes resultados presentados para cada variable son independientes del efecto de las demás covariables incluidas en el modelo.
Intercepto: Un OR de 0.87 para el intercepto no se interpreta de la misma manera que para otras variables. Este valor básicamente ajusta el modelo y no tiene una interpretación práctica directa sin el contexto de otras variables.
Edad: Un OR de 0.97 indica que por cada año adicional en la edad, la oportunidad de rotación disminuye en un 2.2% aproximadamente, manteniendo constantes las otras variables.El intervalo de confianza para este OR (0.9544718 a 1.0014773) cruza el valor 1, lo cual es consistente con el p-valor de 0.065. Un OR de 1 implicaría que la “Edad” no tiene efecto sobre la variable de respuesta, y dado que el intervalo de confianza incluye este valor, esto refuerza la idea de que no podemos estar seguros de la existencia de una asociación significativa entre la “Edad” y la rotación de los empleados.
Ingreso_Mensual: Un OR de 0.99 sugiere que por cada unidad incrementada en el ingreso mensual, la oportunidad de rotación disminuye muy ligeramente, prácticamente permaneciendo constantes.El intervalo de confianza está muy cerca del 1, lo que genera la inquietud si en realidad el ingreso mensual influye en la rotación.
Antigüedad: Un OR de 0.94 significa que por cada año adicional de antigüedad en la empresa, las oportunidades de rotación disminuyen en aproximadamente un 5.3%. A medida que las personas acumulan más tiempo en su puesto actual, se vuelven menos propensas a dejar su trabajo cada año. Ambos límites del intervalo de confianza son menores que 1, esto indica una asociación negativa significativa entre la antigüedad y la rotación de empleados.
Horas_Extra: Hacer horas extra aumenta la oportunidad de rotación 4.1 veces en comparación con aquellos que no realizan horas extra, lo que sugiere un fuerte efecto de las horas extra sobre la probabilidad de rotación.Ambos límites del intervalo de confianza son mayores que 1, esto sugiere que la variable predictora tiene una asociación positiva significativa con la oportunidad de ocurrencia de rotación.
Estado_CivilCasado/Divorciado: La oportunidad de rotación en los empleados casados es 0.35 veces la oportunidad de rotar que los solteros, estar casado reduce las odds de rotación en aproximadamente un 65% y la oportunidad de rotación de los divorciados es 0.37 veces la oportunidad de rotar que los solteros. Es decir, que estar casado o divorciado disminuye la oportunidad de rotar de puesto de trabajo en comparación con los solteros.Tanto para casados como divorciados, ambos límites del intervalo de confianza son menores que 1, esto indica una asociación negativa significativa entre la estar casado o divorciado y la rotación de empleados.
Viaje de Negocios: La oportunidad de rotar de aquellos empleados que viajan frecuentemente es 2.16 veces la oportunidad de rotar de los que viajan raramente, es decir que quienes viajan frecuentemente tienen más del doble de la oportunidad de rotar comparado con quienes viajan raramente. Ambos límites del intervalo de confianza son mayores que 1, esto sugiere que la variable predictora tiene una asociación positiva significativa con la oportunidad de ocurrencia de rotación. La oportunidad de rotar de aquellos empleados que No viajan es 0.31 veces la oportunidad de rotar de los que viajan raramente, No viajar por negocios reduce las odds de rotación en aproximadamente un 68% en comparación con los que viajan raramente.Ambos límites del intervalo de confianza son menores que 1, esto indica una asociación negativa significativa entre no viajar y la rotación de empleados.
Evaluar el poder predictivo del modelo con base en la curva ROC y el AUC en el set de datos de prueba.
Respuesta:
# Usando el modelo final para predecir las probabilidades en el conjunto de datos de prueba:
probabilidades_predichas <- predict(modelo_logistico, newdata = test, type = "prob")
# Cargar el paquete pROC
library(pROC)
# Calcular la curva ROC usando las probabilidades de la clase de interés y las etiquetas verdaderas
roc_resultado <- roc(test$Rotación, probabilidades_predichas[, "Si"])
# Calcular el AUC
auc_resultado <- auc(roc_resultado)
print(auc_resultado)## Area under the curve: 0.7563
# Graficar la curva ROC
plot(roc_resultado, main = "Curva ROC", col = "#1f77b4")
abline(a = 0, b = 1, lty = 2, col = "red") Resultado del AUC
En términos generales, un AUC:
Entre 0.5 y 0.7 se considera bajo.
Entre 0.7 y 0.9 se considera aceptable a excelente.
Mayor que 0.9 se considera sobresaliente.
Un AUC de 0.75 significa que hay aproximadamente un 75.63% de probabilidad de que el modelo clasifique correctamente un par aleatorio de observaciones, una de la clase positiva y otra de la clase negativa.Este modelo tiene una capacidad aceptable para distinguir entre los empleados que rotarán y los que no.
Curva ROC
La curva ROC es una representación gráfica de los valores de la tasa de falsos positivos (TFP o FPR) o 1-especificidad y en el eje de las ordenadas la tasa de verdaderos positivos (TVP o TPR) o también llamada sensibilidad, para diferentes valores del umbral de clasificación.
El área comprendida entre la curva ROC y la diagonal del cuadrado (AUC = 0.75), indica un buen ajuste del modelo de predicción.
Adicionalmente, se calcula la matriz de confusión para evaluar la capacidad de clasificación del modelo con el conjunto de prueba:
clases_predichas <- ifelse(probabilidades_predichas[, "Si"] > 0.5, "Si", "No")
test$Rotación <- factor(test$Rotación, levels = c("No", "Si"))
clases_predichas <- factor(clases_predichas, levels = c("No", "Si"))# Convertir las clasificaciones predichas en un factor con los mismos niveles
# Usar confusionMatrix de caret
library(caret)
matriz_confusion <- confusionMatrix(clases_predichas, test$Rotación)
print(matriz_confusion)## Confusion Matrix and Statistics
##
## Reference
## Prediction No Si
## No 359 60
## Si 10 11
##
## Accuracy : 0.8409
## 95% CI : (0.8033, 0.8738)
## No Information Rate : 0.8386
## P-Value [Acc > NIR] : 0.48
##
## Kappa : 0.1786
##
## Mcnemar's Test P-Value : 4.724e-09
##
## Sensitivity : 0.9729
## Specificity : 0.1549
## Pos Pred Value : 0.8568
## Neg Pred Value : 0.5238
## Prevalence : 0.8386
## Detection Rate : 0.8159
## Detection Prevalence : 0.9523
## Balanced Accuracy : 0.5639
##
## 'Positive' Class : No
##
Matriz de Confusión:
Negativos: El modelo predijo 359 casos correctamente como “No” (Verdaderos Negativos) y 10 casos incorrectamente como “Sí” (Falsos Positivos).
Positivos: El modelo predijo 11 casos correctamente como “Sí” (Verdaderos Positivos) y 60 casos incorrectamente como “No” (Falsos Negativos).
Estadísticas:
Accuracy: El 84.09% de todas las predicciones fueron correctas. El intervalo de confianza del 95% para la exactitud está entre 80.33% y 87.38%, lo que indica el rango en el que se espera que se encuentre la exactitud verdadera del modelo.
P-Value [Acc > NIR]: Con un p-valor de 0.48, no hay evidencia estadística suficiente para afirmar que la exactitud del modelo es mejor que la que se obtendría si simplemente se eligiera siempre la clase más frecuente.
Kappa: El valor de Kappa es 0.1786, lo que indica una concordancia mínima entre las predicciones y los valores reales, más allá del azar.
Sensibilidad: El 97.29% de los casos “No” reales fueron correctamente identificados por el modelo. Es una medida de la capacidad del modelo para detectar la clase “No”.A mayor sensibilidad menos falsos negativos, pero pueden aumentar los falsos positivos.
Especificidad: Solo el 15.49% de los casos “Sí” reales fueron correctamente identificados, lo que indica que el modelo tiene dificultades para detectar correctamente la clase “Sí”.
Pos Pred Value (Valor Predictivo Positivo): El 85.68% de las predicciones de “No” fueron correctas.
Neg Pred Value (Valor Predictivo Negativo): Mide la proporción de casos negativos reales (VN) en relación con el total de predicciones negativas correctas (VN + FN). El 52.38% de las predicciones de “Sí” fueron correctas, lo que es bastante bajo y sugiere que muchas predicciones de “Sí” eran realmente “No”.
Prevalencia: Indica que el 83.86% de las observaciones reales en el conjunto de datos de prueba son de la clase “No”.
Detection Rate: La tasa a la que el modelo detecta la clase “No” es 81.59%.
Detection Prevalence: El 95.23% de las predicciones del modelo fueron “No”.
Balanced Accuracy: La exactitud equilibrada es 56.39%, lo que refleja el promedio de la sensibilidad y la especificidad. Dado que la especificidad es muy baja, este valor también es relativamente bajo, lo que indica un desempeño no balanceado entre las clases.
En las conclusiones adicione una discución sobre cuál sería la estrategia para disminuir la rotación en la empresa (con base en las variables que resultaron significativas en el punto 3).
Respuesta:
El modelo realizado con el conjunto de prueba tiene una alta sensibilidad pero una especificidad muy baja, lo que significa que es muy bueno detectando la clase “No” pero no tanto detectando la clase “Sí”. Esto podría estar relacionado con el desbalance de las clases respuesta. Para mejorar esto, puede ser útil explorar estrategias para manejar el desequilibrio de clases, mejorar la característica o la selección de modelos, o aplicar técnicas de ponderación para mejorar la capacidad del modelo para detectar la clase “Sí”.
Entre las variables propuestas inicialmente, aunque en los análisis descriptivos iniciales se perciba diferencia en los grupos, no hay una validez estadística suficiente para establecer que el aumento en la edad de los trabajadores o el aumento en el ingreso influya en la rotación de los empleados.
Variables como trabajar horas extra o realizar viajes de negocios frecuentemente, se relacionan con una mayor oportunidad de rotación en los empleados.
Variables que incluyen en la menor rotación de empleados: El incremento en antigüedad, estado civil casado, divorciado (comparado con los solteros) o no realizar viaje de negocios (comparado con viajar raramente).
Si se desea bajar la rotación de los empleados en la empresa, se recomienda continuar estrategias de atracción del personal para aumentar la antigüedad laboral, disminuir la necesidad de trabajar horas extra, evaluar con detenimiento la necesidad de realización de viajes de negocio, de manera que se en lo posible, no se realicen; fomentar y apoyar la vida familiar de los empleados, dado que conformar o haber conformado una familia disminuye la rotación.