Actividad 3 - Rotación de cargo
#Cargamos los datos y paquetes adicionales necesarios
#install.packages("tidyverse")
#install.packages("corrplot")
#install.packages("leaflet")
#install.packages("mapview")
#install.packages("table1")
#install.packages("leaflet.extras")
#install.packages("base")
#install.packages("zoo")
#install.packages("factoextra")
#install.packages("missForest")
#install.packages("plotly")
#install.packages("ggpubr")
#install.packages("corrplot")
library(tidyverse)
## Warning: package 'ggplot2' was built under R version 4.3.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.0 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.3.3
## corrplot 0.92 loaded
library(leaflet)
library(leaflet.extras)
library(base)
library(zoo)
##
## Attaching package: 'zoo'
##
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(missForest)
library(plotly)
##
## Attaching package: '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
library(ggpubr)
library(knitr)
library(dplyr)
library(corrplot)
## Carga de datos
# install.packages("devtools") # solo la primera vez
# devtools::install_github("dgonxalex80/paqueteMODELOS", force =TRUE)
library(paqueteMODELOS)
## Loading required package: boot
## Loading required package: broom
## Loading required package: GGally
## Warning: package 'GGally' was built under R version 4.3.3
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
## Loading required package: gridExtra
##
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
##
## combine
## Loading required package: summarytools
##
## Attaching package: 'summarytools'
## The following object is masked from 'package:tibble':
##
## view
data("rotacion")
#Data
library(paqueteMODELOS)
library(dplyr)
data("rotacion")
glimpse(rotacion)
## Rows: 1,470
## Columns: 24
## $ Rotación <chr> "Si", "No", "Si", "No", "No", "No", "No", …
## $ Edad <dbl> 41, 49, 37, 33, 27, 32, 59, 30, 38, 36, 35…
## $ `Viaje de Negocios` <chr> "Raramente", "Frecuentemente", "Raramente"…
## $ Departamento <chr> "Ventas", "IyD", "IyD", "IyD", "IyD", "IyD…
## $ Distancia_Casa <dbl> 1, 8, 2, 3, 2, 2, 3, 24, 23, 27, 16, 15, 2…
## $ Educación <dbl> 2, 1, 2, 4, 1, 2, 3, 1, 3, 3, 3, 2, 1, 2, …
## $ Campo_Educación <chr> "Ciencias", "Ciencias", "Otra", "Ciencias"…
## $ Satisfacción_Ambiental <dbl> 2, 3, 4, 4, 1, 4, 3, 4, 4, 3, 1, 4, 1, 2, …
## $ Genero <chr> "F", "M", "M", "F", "M", "M", "F", "M", "M…
## $ Cargo <chr> "Ejecutivo_Ventas", "Investigador_Cientifi…
## $ Satisfación_Laboral <dbl> 4, 2, 3, 3, 2, 4, 1, 3, 3, 3, 2, 3, 3, 4, …
## $ Estado_Civil <chr> "Soltero", "Casado", "Soltero", "Casado", …
## $ Ingreso_Mensual <dbl> 5993, 5130, 2090, 2909, 3468, 3068, 2670, …
## $ Trabajos_Anteriores <dbl> 8, 1, 6, 1, 9, 0, 4, 1, 0, 6, 0, 0, 1, 0, …
## $ Horas_Extra <chr> "Si", "No", "Si", "Si", "No", "No", "Si", …
## $ Porcentaje_aumento_salarial <dbl> 11, 23, 15, 11, 12, 13, 20, 22, 21, 13, 13…
## $ Rendimiento_Laboral <dbl> 3, 4, 3, 3, 3, 3, 4, 4, 4, 3, 3, 3, 3, 3, …
## $ Años_Experiencia <dbl> 8, 10, 7, 8, 6, 8, 12, 1, 10, 17, 6, 10, 5…
## $ Capacitaciones <dbl> 0, 3, 3, 3, 3, 2, 3, 2, 2, 3, 5, 3, 1, 2, …
## $ Equilibrio_Trabajo_Vida <dbl> 1, 3, 3, 3, 3, 2, 2, 3, 3, 2, 3, 3, 2, 3, …
## $ Antigüedad <dbl> 6, 10, 0, 8, 2, 7, 1, 1, 9, 7, 5, 9, 5, 2,…
## $ Antigüedad_Cargo <dbl> 4, 7, 0, 7, 2, 7, 0, 0, 7, 7, 4, 5, 2, 2, …
## $ Años_ultima_promoción <dbl> 0, 1, 0, 3, 2, 3, 0, 0, 1, 7, 0, 0, 4, 1, …
## $ Años_acargo_con_mismo_jefe <dbl> 5, 7, 0, 0, 2, 6, 0, 0, 8, 7, 3, 8, 3, 2, …
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>
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 ...
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.
1. Selección de variables
Seleccione 3 variables categóricas (distintas de rotación) y 3
variables cuantitativas, que se consideren estén relacionadas con la
rotación.
Variables Categóricas Elegidas:
- Campo Educación: Ya que el empleado querrá crecer
en la empresa y cambiar de cargo a medida que estudia y evoluciona
académicamente.
- Cargo: Ya que es el punto de partida para querer
rotar, posiblemente por el nivel que represente el cargo en el que esté
actualmente.
Variables Cuantitavivas Elegidas:
- Educación: Va ligado al campo educación en al que
pertenece el empleado.
- Edad: A medida que el empleado va creciendo en
años, también querrá ir creciendo en experiencias diferentes y cargos
más retadores y de mayor retribución y responsabilidad.
- Rendimiento Laboral: Creo que a medida que el
empleado tiene mayor rendimiento laboral, con el tiempo querrá tener
algún movimiento en cargo y querrá rotar de su trabajo actual.
2. Análisis Univariado
# Muestra un resumen estadístico de las variables numéricas en el dataset.
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
#Histograma de distribución de la Edad
ggplot(rotacion, aes(x = Edad)) +
geom_histogram(bins = 30)

Observamos que la mayoría de empleados tiene entre 25 y 45 años,
pero se ven picos significativos con empleados de 30 y 32 años mas o
menos.
#Gráfico de barras para la Rotación
ggplot(rotacion, aes(x = Rotación)) +
geom_bar()

La gran mayoría de empleados no ha rotado, está bastante
desbalanceada la base con respecto a la variable rotación.
#Gráfico de barras para Departamento
ggplot(rotacion, aes(x = Departamento)) +
geom_bar()

La mayoría de empleados (casi 1.000) son del departamento de
Investigación y Desarrollo, seguido de Ventas (Casi 500) y finalmente de
Recursos Humanos con menos de 50.
#Gráfico de barras para el campo en que se educó el empleado
ggplot(rotacion, aes(x = Campo_Educación)) +
geom_bar()

Observamos que el área de estudio con más empleados son las Ciencias
con un poco más de 600, seguido de Salud con cerca de 500.
#Histograma de distribución de la Educación
ggplot(rotacion, aes(x = Educación)) +
geom_histogram(bins = 30)

Asumiendo que el número corresponde al grado obtenido por el
empleado, siendo 1 primaria, 2 secundaria, 3 profesional y así
sucesivamente, observamos que la mayoría de empleados tienen grado
Profesional, pero también se observa una cantidad significativa con
estudios se secundaria y primaria y otros incluso con grados superiores
que podrían ser los que mayor deseo de rotación tengan.
#Gráfico de barras para el campo el Género
ggplot(rotacion, aes(x = Genero)) +
geom_bar()

En la compañía existen más Hombres (M) que Mujeres (F).
#Gráfico de barras para el campo de cargo
ggplot(rotacion, aes(x = Cargo)) +
geom_bar() +
labs(x = "Cargo") +
theme(axis.text.x = element_text(angle = 90, hjust = 1))

Los cargos con mayor número de personal son Ejecutivo de Ventas,
Investigador Científico y Técnico de Laboratorio.
#Histograma de distribución de la Satisfacción Laboral
ggplot(rotacion, aes(x = Satisfación_Laboral)) +
geom_histogram(bins = 30)

Hay un gran número de empleados con baja satisfacción laboral,
aunque impera los mayores a 3, no es despreciable la cantidad de
empleados que tienen Satisfacción 2 e incluso 1.
#Histograma de distribución de los salarios
ggplot(rotacion, aes(x = Ingreso_Mensual)) +
geom_histogram(bins = 30)

Evidenciamos que la gran mayoría de los empleados recibe ingresos
mensuales menores a $7.000, siendo el pico más alto alrededor de los
$2.500, como hipótesis, entre más bajo el rango salarial, quizás más
alto sea la intención de rotar de puesto de trabajo.
#Gráfico de barras para el campo de Horas Extra
ggplot(rotacion, aes(x = Horas_Extra)) +
geom_bar() +
labs(x = "Horas Extra") +
theme(axis.text.x = element_text(angle = 0, hjust = 1))

Observamos que hay empleados con bastantes años de experiencia
(Hasta 40 años), pero la gran mayoría de ellos está por debajo del
umbral de los 10 años, siendo este dato el más común.
#Histograma de distribución de los años de Antigüedad
ggplot(rotacion, aes(x = Antigüedad)) +
geom_histogram(bins = 30)

cor(rotacion$Años_Experiencia, rotacion$Antigüedad)
## [1] 0.6281332
La antigüedad está muy relacionada con los años de experiencia, la
gráfica es muy similar, observamos que gran parte de los empleados tiene
menos de 10 años de antigüedad en la empresa, y la mayoría tiene menos
de 5 (El mayor número es un año).
#Histograma de distribución de los años de Antigüedad en el cargo actual
ggplot(rotacion, aes(x = Antigüedad_Cargo)) +
geom_histogram(bins = 30)

Vemos que la frecuencia más alta en antigüedades en cargos actuales
está en los dos años, cero años y siete años respectivamente.
# Calcula la matriz de correlación.
cor_matrix <- cor(rotacion[, c("Educación", "Satisfación_Laboral", "Ingreso_Mensual", "Rendimiento_Laboral", "Años_Experiencia", "Antigüedad", "Antigüedad_Cargo")])
# Crea el mapa de calor.
corrplot(cor_matrix, method = "color", addCoef.col = TRUE)

ggplot(data = rotacion, aes(x = Antigüedad, y = Ingreso_Mensual)) +
geom_point(color = "blue", size = 3) +
geom_smooth(method = "lm") +
labs(x = "Antigüedad", y = "Ingresos mensuales") +
ggtitle("Relación entre antigüedad e ingresos mensuales")
## `geom_smooth()` using formula = 'y ~ x'

ggplot(data = rotacion, aes(x = Años_Experiencia, y = Ingreso_Mensual)) +
geom_point(color = "black", size = 3) +
geom_smooth(method = "lm") +
labs(x = "Experiencia", y = "Ingresos mensuales") +
ggtitle("Relación entre años de experiencia e Ingresos")
## `geom_smooth()` using formula = 'y ~ x'

cor(rotacion$Años_Experiencia, rotacion$Ingreso_Mensual)
## [1] 0.7728932
Observamos que existe una relación muy directa entre la experiencia
y la remuneración mensual recibida por el empleado.
3. Análisis Bivariado
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 2.
Modelo de Regresión Logística
model_bivariado <- glm(Rotación ~ ., data = rotacion, family = "binomial")
#Resultados del modelo
summary(model_bivariado)
##
## Call:
## glm(formula = Rotación ~ ., family = "binomial", data = rotacion)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 2.613e-01 1.600e+00 0.163 0.870276
## Edad -3.655e-02 1.328e-02 -2.753 0.005899 **
## `Viaje de Negocios`No_Viaja -1.763e+00 3.958e-01 -4.454 8.44e-06 ***
## `Viaje de Negocios`Raramente -8.215e-01 2.062e-01 -3.984 6.78e-05 ***
## DepartamentoRH -1.292e+01 3.780e+02 -0.034 0.972728
## DepartamentoVentas 1.231e-01 1.023e+00 0.120 0.904238
## Distancia_Casa 4.250e-02 1.046e-02 4.063 4.85e-05 ***
## Educación -1.149e-02 8.552e-02 -0.134 0.893169
## Campo_EducaciónHumanidades 8.342e-01 7.860e-01 1.061 0.288527
## Campo_EducaciónMercadeo 3.823e-01 3.178e-01 1.203 0.229009
## Campo_EducaciónOtra 5.979e-02 4.024e-01 0.149 0.881890
## Campo_EducaciónSalud -1.136e-01 2.121e-01 -0.536 0.592226
## Campo_EducaciónTecnicos 9.281e-01 2.970e-01 3.125 0.001779 **
## Satisfacción_Ambiental -4.424e-01 8.119e-02 -5.449 5.05e-08 ***
## GeneroM 3.248e-01 1.795e-01 1.809 0.070386 .
## CargoDirector_Manofactura 1.269e+00 9.710e-01 1.307 0.191293
## CargoEjecutivo_Ventas 1.989e+00 1.390e+00 1.431 0.152359
## CargoGerente 1.247e+00 1.032e+00 1.208 0.227061
## CargoInvestigador_Cientifico 1.643e+00 1.021e+00 1.609 0.107544
## CargoRecursos_Humanos 1.519e+01 3.780e+02 0.040 0.967950
## CargoRepresentante_Salud 1.037e+00 9.640e-01 1.076 0.282059
## CargoRepresentante_Ventas 2.962e+00 1.482e+00 1.998 0.045682 *
## CargoTecnico_Laboratorio 2.587e+00 1.018e+00 2.541 0.011041 *
## Satisfación_Laboral -4.048e-01 7.925e-02 -5.109 3.24e-07 ***
## Estado_CivilDivorciado -3.973e-01 2.530e-01 -1.570 0.116313
## Estado_CivilSoltero 1.033e+00 1.941e-01 5.323 1.02e-07 ***
## Ingreso_Mensual -9.588e-07 5.854e-05 -0.016 0.986932
## Trabajos_Anteriores 1.756e-01 3.746e-02 4.688 2.76e-06 ***
## Horas_ExtraSi 1.872e+00 1.869e-01 10.014 < 2e-16 ***
## Porcentaje_aumento_salarial -2.302e-02 3.805e-02 -0.605 0.545193
## Rendimiento_Laboral 1.702e-01 3.889e-01 0.438 0.661621
## Años_Experiencia -5.408e-02 2.782e-02 -1.944 0.051874 .
## Capacitaciones -1.828e-01 7.125e-02 -2.566 0.010301 *
## Equilibrio_Trabajo_Vida -3.654e-01 1.207e-01 -3.027 0.002470 **
## Antigüedad 9.630e-02 3.750e-02 2.568 0.010220 *
## Antigüedad_Cargo -1.414e-01 4.386e-02 -3.224 0.001264 **
## Años_ultima_promoción 1.787e-01 4.112e-02 4.345 1.39e-05 ***
## Años_acargo_con_mismo_jefe -1.563e-01 4.599e-02 -3.399 0.000677 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1298.58 on 1469 degrees of freedom
## Residual deviance: 893.23 on 1432 degrees of freedom
## AIC: 969.23
##
## Number of Fisher Scoring iterations: 14
Interpretamos el Coeficiente de Regresión:
Edad: Un aumento de un año en la edad se asocia con
una disminución de la probabilidad de rotación de 0.3339 unidades.
Viaje de Negocios:
- No viaja: Comparado con “Viaja Frecuentemente”, la probabilidad de
rotación es menor en 1.7629 unidades.
- Raramente: Comparado con “Viaja Frecuentemente”, la probabilidad
de rotación es menor en 0.8215 unidades.
Departamento:
-RH: No se observa una relación significativa con la rotación.
-Ventas: No se observa una relación significativa con la
rotación.
Distancia_Casa: Un aumento de una unidad en la
distancia a la casa se asocia con un aumento de la probabilidad de
rotación de 0.3445 unidades.
Educación: No se observa una relación significativa
con la rotación.
Campo_Educación:
- Tecnicos: Un aumento en esta variable se asocia con un aumento en
la probabilidad de rotación de 0.9281 unidades.
Interpretamos la Significancia:
Interpretamos el coeficiente: Algunos ejemplos de acuerdo al signo
del coeficiente.
- Positivo: A mayor valor de la variable
independiente, mayor probabilidad de rotación.
- Negativo: A mayor valor de la variable
independiente, menor probabilidad de rotación.
- Edad: A mayor edad, menor probabilidad de
rotación.
- Distancia_Casa: A mayor distancia a la casa,
mayor probabilidad de rotación.
4. Estimación del modelo
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 1.
Interprete los coeficientes del modelo y la significancia de los
parámetros.
# Cargamos las librerias necesarias para el modelo de regresión logística.
#install.packages("Matrix")
library(glmnet)
## Loading required package: Matrix
## Warning: package 'Matrix' was built under R version 4.3.3
##
## Attaching package: 'Matrix'
## The following objects are masked from 'package:tidyr':
##
## expand, pack, unpack
## Loaded glmnet 4.1-8
Teniendo en cuenta que para el punto anterior se convirtieron las
variables categóricas en factores, para este punto solo debemos dividir
el set en entrenamiento y prueba, crear el modelo y evaluarlo.
# Creamos una copia del dataset original sin la variable Viajes
rotacion_sin_viaje <- subset(rotacion, select = -`Viaje de Negocios`)
#Divide los datos en entrenamiento y prueba:
set.seed(123)
train_index <- sample(1:nrow(rotacion_sin_viaje), 0.8 * nrow(rotacion_sin_viaje))
test_index <- setdiff(1:nrow(rotacion_sin_viaje), train_index)
train <- rotacion_sin_viaje[train_index, ]
test <- rotacion_sin_viaje[test_index, ]
# Creamos el modelo
model_6variables <- glm(Rotación ~ Campo_Educación + Cargo + Horas_Extra + Educación + Edad + Rendimiento_Laboral, data = train, family = "binomial")
summary(model_6variables)
##
## Call:
## glm(formula = Rotación ~ Campo_Educación + Cargo + Horas_Extra +
## Educación + Edad + Rendimiento_Laboral, family = "binomial",
## data = train)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.494417 1.159720 -2.151 0.03149 *
## Campo_EducaciónHumanidades 1.127976 0.755132 1.494 0.13524
## Campo_EducaciónMercadeo 0.580813 0.322271 1.802 0.07151 .
## Campo_EducaciónOtra -0.118597 0.401430 -0.295 0.76766
## Campo_EducaciónSalud -0.021275 0.213687 -0.100 0.92069
## Campo_EducaciónTecnicos 0.800597 0.289751 2.763 0.00573 **
## CargoDirector_Manofactura 0.871505 0.807240 1.080 0.28032
## CargoEjecutivo_Ventas 1.455417 0.767163 1.897 0.05781 .
## CargoGerente 0.535322 0.904265 0.592 0.55385
## CargoInvestigador_Cientifico 1.357846 0.761274 1.784 0.07448 .
## CargoRecursos_Humanos 1.696757 0.935879 1.813 0.06983 .
## CargoRepresentante_Salud 0.871969 0.822156 1.061 0.28888
## CargoRepresentante_Ventas 2.609731 0.794753 3.284 0.00102 **
## CargoTecnico_Laboratorio 2.198752 0.758876 2.897 0.00376 **
## Horas_ExtraSi 1.489125 0.179882 8.278 < 2e-16 ***
## Educación 0.070841 0.087825 0.807 0.41988
## Edad -0.045694 0.011522 -3.966 7.32e-05 ***
## Rendimiento_Laboral 0.003364 0.243692 0.014 0.98899
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1036.88 on 1175 degrees of freedom
## Residual deviance: 870.19 on 1158 degrees of freedom
## AIC: 906.19
##
## Number of Fisher Scoring iterations: 6
Interpretamos los coeficientes y la significancia de los
parámetros.
Coeficientes de regresión:
Observamos que en el Campo Educación casi todas las
variables no son significativas, excepto Técnicos (Tecnicos: Un aumento
en esta variable se asocia con un aumento en la probabilidad de rotación
de 0.8006 unidades, y es significativo (p-valor = 0.0057).)
para la variable Cargo, la mayoría de variables no son
significativas, excepto las siguientes:
- Representante_Ventas: Un aumento en esta variable se asocia con un
aumento en la probabilidad de rotación de 2.6097 unidades, y es
significativo (p-valor = 0.0010).
- Tecnico_Laboratorio: Un aumento en esta variable se asocia con un
aumento en la probabilidad de rotación de 2.1988 unidades, y es
significativo (p-valor = 0.0038).
Educación no es significativo.
Edad: Un aumento de un año en la edad se asocia con una
disminución en la probabilidad de rotación de 0.4175 unidades, y es
significativo (p-valor = 7.32e-05).
Rendimiento Laboral no es significativo.
Significancia:
Las variables con un valor p menor a 0.05 se consideran
significativas. En este caso, las variables significativas son:
- Campo_Educación (Tecnicos)
- Cargo (Representante_Ventas, Tecnico_Laboratorio)
- Edad
Solamente cuatro de las seis variables elegidas en el Punto 1
son significativas para el modelo
5. Evaluación
Evaluar el poder predictivo del modelo con base en la curva ROC y el
AUC.
# Debemos calcular las probabilidades de rotación
probs <- predict(model_6variables, train, type = "response")
# Crear la curva ROC y calcular el AUC
library(pROC)
## Type 'citation("pROC")' for a citation.
##
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
roc <- roc(train$Rotación, probs)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
auc <- auc(roc)
# Visualizar la curva ROC
plot(roc, print.auc = TRUE)

Interpretación:
- Curva ROC: Se observa que la curva se encuentra
por encima de la línea diagonal, lo que indica que el modelo tiene un
buen poder predictivo.
- AUC: Teniendo en cuenta que el valor nos da
0.766, se puede concluir que el modelo tiene un buen poder predictivo
(medio-alto), es mucho mejor que el azar (ya que es mayor a 0.5)
6. Predicciones
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).
# Creamos la información del empleado a predecir
empleado_df_2 <- data.frame(
Edad = 22,
#`Viaje de Negocios` = "Frecuentemente",
Departamento = "IyD",
Distancia_Casa = 15,
Educación = 1,
Campo_Educación = "Tecnicos",
Satisfacción_Ambiental = 3,
Genero = "M",
Cargo = "Tecnico_Laboratorio",
Satisfación_Laboral = 3,
Estado_Civil = "Soltero",
Ingreso_Mensual = 3894,
Trabajos_Anteriores = 5,
Horas_Extra = "No",
Porcentaje_aumento_salarial = 16,
Rendimiento_Laboral = 3,
Años_Experiencia = 4,
Capacitaciones = 3,
Equilibrio_Trabajo_Vida = 3,
Antigüedad = 2,
Antigüedad_Cargo = 2,
Años_ultima_promoción = 1,
Años_acargo_con_mismo_jefe = 2
)
# Convertimos en factor los campos categóricos
#empleado_df_2$`Viaje de Negocios` <- factor(empleado_df_2$`Viaje de Negocios`)
empleado_df_2$Departamento <- factor(empleado_df_2$Departamento)
empleado_df_2$Campo_Educación <- factor(empleado_df_2$Campo_Educación)
empleado_df_2$Genero <- factor(empleado_df_2$Genero)
empleado_df_2$Cargo <- factor(empleado_df_2$Cargo)
empleado_df_2$Estado_Civil <- factor(empleado_df_2$Estado_Civil)
empleado_df_2$Horas_Extra <- factor(empleado_df_2$Horas_Extra)
# Realizamos la predicción
probs_empleado <- predict(model_6variables, empleado_df_2, type = "response")
cat("La probabilidad de rotación para el empleado es:", probs_empleado)
## La probabilidad de rotación para el empleado es: 0.3966576
Observamos que la probabilidad de rotación del empleado es bastante
baja, por lo que se concluye que el empleado predicho no rotará de su
puesto/empleo.
7. Conclusiones
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).
Estrategias y Conclusiones
Revisando los resultados de los estadísticos del modelo inicial
(Punto 3) podemos observar los siguientes puntos clave para formular una
estrategia de reducción de la rotación:
Factores que aumentan la probabilidad de rotación:
- Edad: Los empleados más jóvenes tienen una mayor
tendencia a rotar.
- Viajes de negocios: Viajar con frecuencia,
especialmente “Raramente”, aumenta la probabilidad de rotación.
- Distancia al trabajo: Una mayor distancia al
lugar de trabajo aumenta la probabilidad de rotación.
- Satisfacción ambiental: Una menor satisfacción
con el ambiente laboral aumenta la probabilidad de rotación.
- Cargo: Ciertos cargos, como
“Tecnico_Laboratorio”, “Representante_Ventas” y “CargoGerente”, tienen
mayor riesgo de rotación.
- Satisfacción laboral: Una menor satisfacción con
el trabajo aumenta la probabilidad de rotación.
- Capacitaciones: La falta de capacitaciones puede
aumentar la probabilidad de rotación.
- Equilibrio trabajo-vida: Un desequilibrio entre
el trabajo y la vida personal aumenta la probabilidad de rotación.
- Antigüedad en el cargo: Una menor antigüedad en
el cargo aumenta la probabilidad de rotación.
- Años a cargo con el mismo jefe: Un menor tiempo a
cargo con el mismo jefe aumenta la probabilidad de rotación.
El resto de las variables no tienen un impacto significativo en
la rotación.
Estrategias para disminuir la rotación:
- Implementar programas de desarrollo profesional y
capacitación
- Mejorar el equilibrio entre el trabajo y la vida personal
- Promover un ambiente laboral positivo
- Reducir la carga de trabajo y el estrés
- Mejorar la comunicación y el feedback
- Ofrecer oportunidades de crecimiento dentro de la empresa
- Recompensar y reconocer el buen desempeño
Conclusiones:
- La rotación de personal es un problema complejo que tiene diversos
factores causales.
- Es fundamental analizar las estadísticas y resultados del modelo
para identificar los factores específicos que impactan la rotación en la
empresa.
- Implementar una estrategia integral que combine diferentes medidas
puede ayudar a reducir la rotación y mejorar la retención del
talento.
- Se pueden realizar entrevistas de salida a los empleados que rotan
para obtener información valiosa sobre sus motivos de partida.