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.
Los datos son obtenidos de la librería paqueteMETODOS de R y, analizados a través de la misma herramienta haciendo uso de diferentes paquetes que permiten realizar un análisis estadístico de acuerdo a la siguiente metodología.
library(paqueteMODELOS)
data("rotacion")
head(rotacion)
## # A tibble: 6 × 24
## Rotación Edad `Viaje de Negocios` Departamento Distancia_Casa Educación
## <chr> <dbl> <chr> <chr> <dbl> <dbl>
## 1 Si 41 Raramente Ventas 1 2
## 2 No 49 Frecuentemente IyD 8 1
## 3 Si 37 Raramente IyD 2 2
## 4 No 33 Frecuentemente IyD 3 4
## 5 No 27 Raramente IyD 2 1
## 6 No 32 Frecuentemente IyD 2 2
## # ℹ 18 more variables: Campo_Educación <chr>, Satisfacción_Ambiental <dbl>,
## # Genero <chr>, Cargo <chr>, Satisfación_Laboral <dbl>, Estado_Civil <chr>,
## # Ingreso_Mensual <dbl>, Trabajos_Anteriores <dbl>, Horas_Extra <chr>,
## # Porcentaje_aumento_salarial <dbl>, Rendimiento_Laboral <dbl>,
## # Años_Experiencia <dbl>, Capacitaciones <dbl>,
## # Equilibrio_Trabajo_Vida <dbl>, Antigüedad <dbl>, Antigüedad_Cargo <dbl>,
## # Años_ultima_promoción <dbl>, Años_acargo_con_mismo_jefe <dbl>
dim(rotacion)
## [1] 1470 24
colnames(rotacion) <- gsub(" ", "_", colnames(rotacion))
Se consultan los datos faltantes, encontrando que ninguna variable tiene valores nulos.
colSums(is.na(rotacion)) %>% as.data.frame()
## .
## Rotación 0
## Edad 0
## Viaje_de_Negocios 0
## Departamento 0
## Distancia_Casa 0
## Educación 0
## Campo_Educación 0
## Satisfacción_Ambiental 0
## Genero 0
## Cargo 0
## Satisfación_Laboral 0
## Estado_Civil 0
## Ingreso_Mensual 0
## Trabajos_Anteriores 0
## Horas_Extra 0
## Porcentaje_aumento_salarial 0
## Rendimiento_Laboral 0
## Años_Experiencia 0
## Capacitaciones 0
## Equilibrio_Trabajo_Vida 0
## Antigüedad 0
## Antigüedad_Cargo 0
## Años_ultima_promoción 0
## Años_acargo_con_mismo_jefe 0
summary(rotacion)
## 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
A continuación se describen los pasos que la gerencia ha propuesto para el análisis:
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).
Se consultan los tipos de variables.
str(rotacion)
## tibble [1,470 × 24] (S3: tbl_df/tbl/data.frame)
## $ Rotación : chr [1:1470] "Si" "No" "Si" "No" ...
## $ Edad : num [1:1470] 41 49 37 33 27 32 59 30 38 36 ...
## $ Viaje_de_Negocios : chr [1:1470] "Raramente" "Frecuentemente" "Raramente" "Frecuentemente" ...
## $ Departamento : chr [1:1470] "Ventas" "IyD" "IyD" "IyD" ...
## $ Distancia_Casa : num [1:1470] 1 8 2 3 2 2 3 24 23 27 ...
## $ Educación : num [1:1470] 2 1 2 4 1 2 3 1 3 3 ...
## $ Campo_Educación : chr [1:1470] "Ciencias" "Ciencias" "Otra" "Ciencias" ...
## $ Satisfacción_Ambiental : num [1:1470] 2 3 4 4 1 4 3 4 4 3 ...
## $ Genero : chr [1:1470] "F" "M" "M" "F" ...
## $ Cargo : chr [1:1470] "Ejecutivo_Ventas" "Investigador_Cientifico" "Tecnico_Laboratorio" "Investigador_Cientifico" ...
## $ Satisfación_Laboral : num [1:1470] 4 2 3 3 2 4 1 3 3 3 ...
## $ Estado_Civil : chr [1:1470] "Soltero" "Casado" "Soltero" "Casado" ...
## $ Ingreso_Mensual : num [1:1470] 5993 5130 2090 2909 3468 ...
## $ Trabajos_Anteriores : num [1:1470] 8 1 6 1 9 0 4 1 0 6 ...
## $ Horas_Extra : chr [1:1470] "Si" "No" "Si" "Si" ...
## $ Porcentaje_aumento_salarial: num [1:1470] 11 23 15 11 12 13 20 22 21 13 ...
## $ Rendimiento_Laboral : num [1:1470] 3 4 3 3 3 3 4 4 4 3 ...
## $ Años_Experiencia : num [1:1470] 8 10 7 8 6 8 12 1 10 17 ...
## $ Capacitaciones : num [1:1470] 0 3 3 3 3 2 3 2 2 3 ...
## $ Equilibrio_Trabajo_Vida : num [1:1470] 1 3 3 3 3 2 2 3 3 2 ...
## $ Antigüedad : num [1:1470] 6 10 0 8 2 7 1 1 9 7 ...
## $ Antigüedad_Cargo : num [1:1470] 4 7 0 7 2 7 0 0 7 7 ...
## $ Años_ultima_promoción : num [1:1470] 0 1 0 3 2 3 0 0 1 7 ...
## $ Años_acargo_con_mismo_jefe : num [1:1470] 5 7 0 0 2 6 0 0 8 7 ...
Se espera que las personas que viajan frecuentemente roten con mayor frecuencia. \(H_0\): No existe asociación entre la rotación y el Viaje de negocios.
Se espera que las personas solteras roten más que quienes están casados, ya que están más abiertos a los cambios y a asumir retos laborales. \(H_0\): No existe asociación entre la rotación y el estado civil.
Se espera que las personas que realizan horas extras tienen mayor posibilidad de rotar. \(H_0\): No existe asociación entre la rotación y el horas extras.
Se espera que las personas más jovenes tengan mayor rotación, ya que sus salarios pueden ser inferiores. \(H_0\): No existe asociación entre la rotación y la edad.
Se espera que las personas con menor ingreso mensual tengan mayor rotación, ya que siempre está abierto a una mejor remuneración. \(H_0\): No existe asociación entre la rotación y el ingreso mensual.
Se espera que las personas con mayor experiencia laboral rote menos, ya que pueden buscar estabilidad en un solo lugar. \(H_0\): No existe asociación entre la rotación y los años de experiencia.
Realiza un análisis univariado (caracterización) de la
información contenida en la base de datos
rotacion.
Nota: Los indicadores o gráficos se usan dependiendo del tipo de variable (cuantitativas o cualitativas).
Incluir interpretaciones de la variable rotacion.
Se crean dos subgrupos segmentados por la variable “Rotación”.
rotacion_Si <- subset(rotacion, Rotación == "Si")
rotacion_No <- subset(rotacion, Rotación == "No")
Se evidencia que la mayoría de trabajadores raramente viajan.
table(rotacion$Viaje_de_Negocios, rotacion$Rotación)
##
## No Si
## Frecuentemente 208 69
## No_Viaja 138 12
## Raramente 887 156
barplot(table(rotacion$Viaje_de_Negocios),, main = "Frecuencia de viajes de negocios de los trabajadores",
col = c("cadetblue", "#AB82FF", "yellow3"))
chisq.test(table(rotacion$Rotación, rotacion$Viaje_de_Negocios))
##
## Pearson's Chi-squared test
##
## data: table(rotacion$Rotación, rotacion$Viaje_de_Negocios)
## X-squared = 24.182, df = 2, p-value = 5.609e-06
A partir de evaluar dicho \(p-value\) con un nivel de significancia (\(α=0.05\)), se rechaza \(H_0\), es decir, que el cargo está relacionado con la rotación.
Se evidencia que las personas solteras tienen mayor rotación que quienes están divorciadas o casadas.
table(rotacion$Estado_Civil, rotacion$Rotación)
##
## No Si
## Casado 589 84
## Divorciado 294 33
## Soltero 350 120
count_estado_civil <- table(rotacion$Estado_Civil)
etiquetas_estado_civil <- paste0(count_estado_civil, "=", round(100*count_estado_civil/sum(count_estado_civil), 1), "%")
colores <- c("pink","lightblue","lightgreen")
pie(count_estado_civil, labels=etiquetas_estado_civil, col=colores, main = "Estado civil de los trabajadores")
legend("right", legend=c("Casado","Divorciado","Soltero"), fill=colores)
chisq.test(table(rotacion$Rotación, rotacion$Estado_Civil))
##
## Pearson's Chi-squared test
##
## data: table(rotacion$Rotación, rotacion$Estado_Civil)
## X-squared = 46.164, df = 2, p-value = 9.456e-11
A partir de evaluar dicho \(p-value\) con un nivel de significancia (\(α=0.05\)), se rechaza \(H_0\), es decir, que el estado civil está relacionado con la rotación.
Se evidencia que no muchos trabajadores realizan horas extras.
table(rotacion$Horas_Extra, rotacion$Rotación)
##
## No Si
## No 944 110
## Si 289 127
count_horas_extras <- table(rotacion$Horas_Extra)
etiquetas_horas_extras <- paste0(count_horas_extras, "=", round(100*count_horas_extras/sum(count_horas_extras), 1), "%")
colores <- c("aquamarine1","#FFB90F")
pie(count_horas_extras, labels=etiquetas_horas_extras, col=colores, main = "Horas extras de los trabajadores")
legend("right", legend=c("No","Si"), fill=colores)
chisq.test(table(rotacion$Rotación, rotacion$Estado_Civil))
##
## Pearson's Chi-squared test
##
## data: table(rotacion$Rotación, rotacion$Estado_Civil)
## X-squared = 46.164, df = 2, p-value = 9.456e-11
A partir de evaluar dicho \(p-value\) con un nivel de significancia (\(α=0.05\)), se rechaza \(H_0\), es decir, que la realización de horas extras están relacionadas con la rotación.
Se evidencia que las personas con edades entre 25 y 35 tienen mayor rotación.
par(mfrow = c(1,3))
hist(rotacion$Edad, main="Total", xlab="Edad", ylab="No. de trabajadores", ylim=c(0,400), col = "lightgreen")
hist(rotacion_No$Edad, main="Trabajadores que no rotan", xlab="Edad", ylab="No. de trabajadores", ylim=c(0,400), col = "orange")
hist(rotacion_Si$Edad, main="Trabajadores que rotan", xlab="Edad", ylab="No. de trabajadores", ylim=c(0,400), col = "yellow")
summarytools::descr(rotacion$Edad)
## Descriptive Statistics
## rotacion$Edad
## N: 1470
##
## Edad
## ----------------- ---------
## Mean 36.92
## Std.Dev 9.14
## Min 18.00
## Q1 30.00
## Median 36.00
## Q3 43.00
## Max 60.00
## MAD 8.90
## IQR 13.00
## CV 0.25
## Skewness 0.41
## SE.Skewness 0.06
## Kurtosis -0.41
## N.Valid 1470.00
## Pct.Valid 100.00
Se evidencia que a medida que aumenta el ingreso mensual, disminuye la rotación.
par(mfrow = c(1,3))
hist(rotacion$Ingreso_Mensual, main="Total", xlab="Ingreso mensual", ylab="No. de trabajadores", ylim=c(0,550), col = "lightgreen")
hist(rotacion_No$Ingreso_Mensual, main="Trabajadores que no rotan", xlab="Ingreso mensual", ylab="No. de trabajadores", ylim=c(0,550), col = "orange")
hist(rotacion_Si$Ingreso_Mensual, main="Trabajadores que rotan", xlab="Ingreso mensual", ylab="No. de trabajadores", ylim=c(0,550), col = "yellow")
summarytools::descr(rotacion$Ingreso_Mensual)
## Descriptive Statistics
## rotacion$Ingreso_Mensual
## N: 1470
##
## Ingreso_Mensual
## ----------------- -----------------
## Mean 6502.93
## Std.Dev 4707.96
## Min 1009.00
## Q1 2911.00
## Median 4919.00
## Q3 8380.00
## Max 19999.00
## MAD 3260.24
## IQR 5468.00
## CV 0.72
## Skewness 1.37
## SE.Skewness 0.06
## Kurtosis 0.99
## N.Valid 1470.00
## Pct.Valid 100.00
Se evidencia que las personas con menos años de experiencia tienen mayor rotación.
par(mfrow = c(1,3))
hist(rotacion$Años_Experiencia, main="Total", xlab="Años de experiencia", ylab="No. de trabajadores", ylim=c(0,650), col = "lightgreen")
hist(rotacion_No$Años_Experiencia, main="Trabajadores que no rotan", xlab="Años de experiencia", ylab="No. de trabajadores", ylim=c(0,650), col = "orange")
hist(rotacion_Si$Años_Experiencia, main="Trabajadores que rotan", xlab="Años de experiencia", ylab="No. de trabajadores", ylim=c(0,650), col = "yellow")
summarytools::descr(rotacion$Años_Experiencia)
## Descriptive Statistics
## rotacion$Años_Experiencia
## N: 1470
##
## Años_Experiencia
## ----------------- ------------------
## Mean 11.28
## Std.Dev 7.78
## Min 0.00
## Q1 6.00
## Median 10.00
## Q3 15.00
## Max 40.00
## MAD 5.93
## IQR 9.00
## CV 0.69
## Skewness 1.11
## SE.Skewness 0.06
## Kurtosis 0.91
## N.Valid 1470.00
## Pct.Valid 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 hipótesis planteada en el
punto 4.2.
Se realiza la codificación para la variable “Rotación”, 0=No, 1=Si.
rotacion$Rotación <- factor(ifelse(rotacion$Rotación == "Si", 1, 0))
head(rotacion$Rotación)
## [1] 1 0 1 0 0 0
## Levels: 0 1
require(CGPfunctions)
## Cargando paquete requerido: CGPfunctions
## Warning: package 'CGPfunctions' was built under R version 4.4.3
PlotXTabs2(rotacion,Viaje_de_Negocios, Rotación,plottype = "percent", palette = "Accent") + theme(axis.text.x = element_text(angle = 0, hjust = 1))
Se confirma la hipotesis de que las personas que viajan frecuentemente (\(25\%\)) rotan frente a aquellos que viajan ocasionalmente (\(15\%\)) y los que no viajan (\(8\%\)).
require(CGPfunctions)
PlotXTabs2(rotacion,Estado_Civil, Rotación,plottype = "percent", palette = "Accent") + theme(axis.text.x = element_text(angle = 0, hjust = 1))
Se confirma la hipotesis de que las personas solteras rotan más que las personas casadas y divorciadas.
require(CGPfunctions)
PlotXTabs2(rotacion,Horas_Extra, Rotación,plottype = "percent", palette = "Accent") + theme(axis.text.x = element_text(angle = 0, hjust = 1))
Se evidencia que el \(31\%\) de las personas que realizan horas extras, han rotado.
require(plotly)
## Cargando paquete requerido: plotly
## Warning: package 'plotly' was built under R version 4.4.3
##
## Adjuntando el paquete: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
P_Edad=ggplot(rotacion,aes(x=Rotación,y=Edad,fill=Rotación))+geom_boxplot()+theme_bw()
ggplotly(P_Edad)
require(plotly)
P_IMes=ggplot(rotacion,aes(x=Rotación,y=Ingreso_Mensual,fill=Rotación))+geom_boxplot()+theme_bw()
ggplotly(P_IMes)
require(plotly)
P_AExp=ggplot(rotacion,aes(x=Rotación,y=Años_Experiencia,fill=Rotación))+geom_boxplot()+theme_bw()
ggplotly(P_AExp)
Realiza la estimación de un modelo de regresión logístico en
el cual la variable respuesta es rotacion
(\(y=1\) es si rotación, \(y=0\) es no rotación) y las covariables las
6 seleccionadas en el punto 4.1. Interprete los coeficientes del modelo
y la significancia de los parámetros.
Se define el dataframe de interés que contiene las variables seleccionadas.
rotacion_2 = rotacion[,c(1,2,3,12,13,15,18)]
head(rotacion_2,3)
## # A tibble: 3 × 7
## Rotación Edad Viaje_de_Negocios Estado_Civil Ingreso_Mensual Horas_Extra
## <fct> <dbl> <chr> <chr> <dbl> <chr>
## 1 1 41 Raramente Soltero 5993 Si
## 2 0 49 Frecuentemente Casado 5130 No
## 3 1 37 Raramente Soltero 2090 Si
## # ℹ 1 more variable: Años_Experiencia <dbl>
table(rotacion_2$Rotación)
##
## 0 1
## 1233 237
Se define el modelo de regresión logístico cuya respuesta es Rotación.
modelo_logit = glm(rotacion_2$Rotación ~ Edad +
Ingreso_Mensual +
Años_Experiencia+
Viaje_de_Negocios +
Estado_Civil +
Horas_Extra,
data = rotacion_2,
family = "binomial")
summary(modelo_logit)
##
## Call:
## glm(formula = rotacion_2$Rotación ~ Edad + Ingreso_Mensual +
## Años_Experiencia + Viaje_de_Negocios + Estado_Civil + Horas_Extra,
## family = "binomial", data = rotacion_2)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -5.145e-01 3.937e-01 -1.307 0.191228
## Edad -2.016e-02 1.161e-02 -1.736 0.082620 .
## Ingreso_Mensual -6.393e-05 3.139e-05 -2.037 0.041692 *
## Años_Experiencia -3.441e-02 2.040e-02 -1.687 0.091680 .
## Viaje_de_NegociosNo_Viaja -1.303e+00 3.500e-01 -3.722 0.000198 ***
## Viaje_de_NegociosRaramente -6.245e-01 1.798e-01 -3.473 0.000514 ***
## Estado_CivilDivorciado -2.727e-01 2.286e-01 -1.193 0.232909
## Estado_CivilSoltero 8.303e-01 1.703e-01 4.874 1.09e-06 ***
## Horas_ExtraSi 1.457e+00 1.572e-01 9.269 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1298.6 on 1469 degrees of freedom
## Residual deviance: 1095.0 on 1461 degrees of freedom
## AIC: 1113
##
## Number of Fisher Scoring iterations: 5
Se observa que las variables
“Viaje de NegociosNo_Viaja”,
“Viaje de NegociosRaramente”, “Estado_CivilSoltero” y
“Horas_ExtraSi” son significativas para el modelo y logran brindar una
explicación de la variable respuesta rotación. Mientras que la variable
“Estado_CivilDivorciado” no brindan valor dentro del modelo.
exp(modelo_logit$coefficients)
## (Intercept) Edad
## 0.5977989 0.9800423
## Ingreso_Mensual Años_Experiencia
## 0.9999361 0.9661752
## Viaje_de_NegociosNo_Viaja Viaje_de_NegociosRaramente
## 0.2718085 0.5355300
## Estado_CivilDivorciado Estado_CivilSoltero
## 0.7613387 2.2939841
## Horas_ExtraSi
## 4.2924062
– Edad (0.9800): A mayor edad, menor probabilidad de rotación. Por cada año más de edad se reduce ligeramente la probabilidad de que el trabajador renuncie. Se puede deducir que los trabajadores más jóvenes suelen cambiar más de trabajo.
– Años de experiencia (0.9662): Más experiencia, menor probabilidad de rotación. Por cada año de experiencia, la probabilidad de rotación disminuye. Se puede deducir que los trabajadores más experimentados pueden sentirse más estables en la empresa.
– No viaja por negocios (0.2718) y Viaja raramente (0.5355): Menos viajes, menor rotación. Los trabajadores que no viajan tienen menor probabilidad de renunciar en comparación con los que viajan frecuentemente. Se puede deducir que quienes viajan raramente también tienen menor rotación, pero no tanto como los que no viajan.
– Estado_Civil Soltero (2.2939): Los trabajadores solteros tienen mayor probabilidad de rotar. Esto puede debersse a que tienen menos compromisos familiares y mayor flexibilidad para cambiar de empleo.
– Horas_Extra Si (4.2924): Los trabajadores que hacen horas extra tienen una probabilidad 4 veces mayor de rotar. Esto puede indicar que una alta carga de trabajo puede causar rotación.
– Ingreso mensual (0.9999): El salario no es el principal motivo de rotación.
Evaluar el poder predictivo del modelo con base en la curva ROC y el AUC.
pred1 = predict.glm(modelo_logit,newdata = rotacion_2, type="response")
boxplot(pred1)
ypred = ifelse(pred1 >0.4,1,0)
yobser = rotacion_2$Rotación
matrizc = table(yobser,ypred)
matrizc
## ypred
## yobser 0 1
## 0 1188 45
## 1 171 66
sum(diag(matrizc))/sum(matrizc)
## [1] 0.8530612
library(ROCR)
## Warning: package 'ROCR' was built under R version 4.4.3
pred = ROCR::prediction(pred1,rotacion_2$Rotación)
perf = performance(pred,"tpr","fpr")
plot(perf)
abline(a=0,b=1,col="red")
grid()
#AUC: Area bajo la curva
AUClog1=performance(pred, measure = "auc")@y.values[[1]]
cat("AUC:", AUClog1,"n")
## AUC: 0.7658587 n
Un AUC de \(0.77\) significa que, si se toma aleatoriamente un trabajador que rota y otro que no, el modelo predice correctamente quién es quién el 76.6% de las veces. Es decir que el modelo tiene una buena capacidad predictiva.
Realiza una predicción la probabilidad de que un individuo (hipotético) rote y defina un corte para decidir si se debe intervenir a este empleado o no (posible estrategia para motivar al empleado).
(predict(modelo_logit,list(
Edad=30,
Ingreso_Mensual=993,
Años_Experiencia=2,
Viaje_de_Negocios ="Frecuentemente",
Estado_Civil= "Soltero",
Horas_Extra="Si")
,type = "response"))*100
## 1
## 73.79895
(predict(modelo_logit,list(
Edad=30,
Ingreso_Mensual=1993,
Años_Experiencia=2,
Viaje_de_Negocios ="No_Viaja",
Estado_Civil= "Soltero",
Horas_Extra="No")
,type = "response"))*100
## 1
## 14.33313
En las conclusiones adicione una discusió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 4.3).
Para disminuir la rotación de sus trabajadores, la empresa puede considerar disminuir la carga laboral, dar incentivos por viajes de negocios frecuentes, evitar viajes innecesarios, brindar beneficios como plan carrera al personal joven y soltero, realizar encuestas de satisfacción, dar reconocimientos.