library(devtools) # solo la primera vez
library(paqueteMET)
data("rotacion")

Introducción

Problema: Rotación de cargo 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.

Selección de variables

Se proceden a seleccionar 3 variables categóricas (distintas de rotación) y 3 variables cuantitativas, con la finalidad de entender y comprender los atributos que tienen mayor influencia en la rotación de un empleo.

colnames(rotacion)
##  [1] "Rotación"                    "Edad"                       
##  [3] "Viaje de Negocios"           "Departamento"               
##  [5] "Distancia_Casa"              "Educación"                  
##  [7] "Campo_Educación"             "Satisfacción_Ambiental"     
##  [9] "Genero"                      "Cargo"                      
## [11] "Satisfación_Laboral"         "Estado_Civil"               
## [13] "Ingreso_Mensual"             "Trabajos_Anteriores"        
## [15] "Horas_Extra"                 "Porcentaje_aumento_salarial"
## [17] "Rendimiento_Laboral"         "Años_Experiencia"           
## [19] "Capacitaciones"              "Equilibrio_Trabajo_Vida"    
## [21] "Antigüedad"                  "Antigüedad_Cargo"           
## [23] "Años_ultima_promoción"       "Años_acargo_con_mismo_jefe"

Variables categóricas

Campo Educación: Comúnmente en las organizaciones la rotación de los empleos depende de su nivel profesional, es decir, sí es un técnico o tecnólogo puede estar sujeto a una rotación frecuente que un profesional que se encargue de un área específica con una mayor responsabilidad.

Cargo: En una empresa influye de manera directa las labores desarrollados con la rotación de cargo, entre más específico sea un cargo de acuerdo a nivel profesional y su responsabilidad será menos probable que tenga se genere una rotación.

Estado civil: Es probable que una empresa genere más rotación de cargo en profesionales o técnicos que no tengan obligaciones familiares directas, en cambio los empleados solteros tienden a estar más disponibles para rotaciones.

Variables Cuantitativas

Años experiencia: Los años de experiencia en un mismo cargo determinan que muy pocos empleados podrían desarrollar las labores de personas que llevan una trayectoría más larga, lo que dificulta llevar a cabo rotaciones.

Antigüedad_cargo: La variable de años de experiencia y antigüedad en el cargo se relacionan directamente y entre más años de experiencia y antigüedad se tenga en el cargo, la rotación de estos cargos será más dificil de ejcutarse.

Ingreso Mensual: El ingreso mensual es una variable que puede llegar a determinar si un cargo presenta rotación o no y depende también de la labor a desempeñar.

Hipótesis de las variables:

A continuación se presenta el nuevo dataframe con las variables cualitativas y cuantitativas que se eligieron para determinar la probabilidad de que un empleado haga un rotación en la empresa.

rotacion_selec <- rotacion[,c("Rotación", "Campo_Educación", "Estado_Civil","Cargo", "Años_Experiencia", "Ingreso_Mensual", "Antigüedad_Cargo" )]
rotacion_selec<-as.data.frame(rotacion_selec)

Cantidad de datos faltantes

Se procede a la verificación de datos faltantes en el nuevo dataframe de las variables cuantitativas y cualitativas.

NAs<-colSums(is.na(rotacion_selec))
as.data.frame(NAs)

Como se puede observar en la tabla anterior, no existen datos faltantes es el nuevo dataframe con las variables cualitativas y cuantitativas seleccionadas para la propuesta.

Análisis univariado

Ahora se ejecuta un análisis univariado (caracterización) de la información contenida en la base de datos rotacion seleccionada. En primer lugar se realiza con las variables categóricas y finalmente con las cuantitativas.

Variables Categóricas

Campo Educación

Para la variable campo de educación, se verifica sus atributos

table(rotacion$Campo_Educación)
## 
##    Ciencias Humanidades    Mercadeo        Otra       Salud    Tecnicos 
##         606          27         159          82         464         132

Se tienen 606 personas profesionales en ciencias, 27 en humanidades, 159 en Mercadeo, 464 en Salud, 132 técnicos y 82 en otras profesiones.

library(ggplot2)
C_Edu <- ggplot(rotacion, aes(x = Campo_Educación)) + 
    geom_bar(fill = "#76D7C4", color = "black", aes(y = ..count..)) +
    geom_text(aes(y = ..count.., label = scales::percent(..count../sum(..count..))), stat="count", position = position_dodge(0.9), vjust = -0.5) +
    labs(title = "Gráfico de distribución de Campos de Educación", x = "Carreras", y = "Frecuencia") + 
    theme_minimal() +
    theme(axis.text.x = element_text(angle = 45, hjust = 1),
          plot.title = element_text(hjust = 0.5))

print(C_Edu)

En el gráfico de distribución de campos de educación, los profesionales en ciencias representan un 41.2% de la empresa, humanidades el 1.8%, Mercadeo 10.8%, salud el 31.6%, técnicos 9% y otras profesiones el 5.6%. Cerca del 42% de los empleados de la empresa tienen profesiones a fines al campo de Ciencias.

Cargo

Para la variable de cargo, se verifican sus atributos

table(rotacion$Cargo)
## 
##  Director_Investigación    Director_Manofactura        Ejecutivo_Ventas 
##                      80                     145                     326 
##                 Gerente Investigador_Cientifico        Recursos_Humanos 
##                     102                     292                      52 
##     Representante_Salud    Representante_Ventas     Tecnico_Laboratorio 
##                     131                      83                     259

Se encuentran 80 personas en el cargo de director de investigación, director de manofactura 145 empleados, ejecutivo de ventas 326, gerentes 102, investigadores científicos 292, recursos humanos 52, técnicos de laboratorio 259, representantes de salud 131 y de ventas 83

library(ggplot2)
Cargo <- ggplot(rotacion, aes(x = Cargo)) + 
    geom_bar(fill = "#F16292", color = "black", aes(y = ..count..)) +
    geom_text(aes(y = ..count.., label = scales::percent(..count../sum(..count..))), stat="count", position = position_dodge(0.9), vjust = -0.5) +
    labs(title = "Gráfico de distribución de Cargos", x = "Cargos", y = "Frecuencia") + 
    theme_minimal() +
    theme(axis.text.x = element_text(angle = 45, hjust = 1),
          plot.title = element_text(hjust = 0.5))

print(Cargo)

En el gráfico de distribución de cargos, los profesionales que desarrollan el cargo de ejecutivos de ventas es representado con un 22.18%, y este es el cargo más recurrente en la organización con un total de 326 personas. Caso contrario ocurre con los profesionales de recursos humano que representan un 3.54% es decir 52 personas.

Estado Civil

Para la variable de Estado Civil, se verifican sus atributos

table(rotacion$Estado_Civil)
## 
##     Casado Divorciado    Soltero 
##        673        327        470

Como se puede observar, la mayoría de los empleados se encuentran en un estado civil de Casado con 673 personas.

library(ggplot2)
Est_civil <- ggplot(rotacion, aes(x = Estado_Civil)) + 
    geom_bar(fill = "#ED5220", color = "black", aes(y = ..count..)) +
    geom_text(aes(y = ..count.., label = scales::percent(..count../sum(..count..))), stat="count", position = position_dodge(0.9), vjust = -0.5) +
    labs(title = "Gráfico de distribución de Estado Civil", x = "Estado Civil", y = "Frecuencia") + 
    theme_minimal() +
    theme(axis.text.x = element_text(angle = 45, hjust = 1),
          plot.title = element_text(hjust = 0.5))

print(Est_civil)

En el gráfico de distribución de estado civil, los profesionales que estan casada representan un 45.8%, y este es el estado civil más recurrente en la organización con un total de 673 personas. Caso contrario ocurre con los profesionales que estan divorciados que representan un 22.2% es decir 327 personas.

Variables Cuantitativas

Años_Experiencia

Para la variable de Años de Experiencia, se verifican sus atributos

Obtenemos la información básica de la variable

library(dplyr)
resumen <- rotacion %>% 
          summarise(
            Media = mean(Años_Experiencia),
            Mediana = median(Años_Experiencia),
            Desv_Estandar = sd(Años_Experiencia),
            Minimo = min(Años_Experiencia),
            Maximo = max(Años_Experiencia)
          )
print(resumen)
## # A tibble: 1 × 5
##   Media Mediana Desv_Estandar Minimo Maximo
##   <dbl>   <dbl>         <dbl>  <dbl>  <dbl>
## 1  11.3      10          7.78      0     40
median_val_hist <- median(rotacion$Años_Experiencia)
mean_val_hist <- mean(rotacion$Años_Experiencia)
library(ggplot2)

p_años <- ggplot(rotacion, aes(x = Años_Experiencia)) + 
    geom_histogram(aes(y = ..density..), fill = "#FFB6C1", color = "black", alpha = 0.7) + 
    geom_density(alpha = 0.2, fill = "#006400") +
    geom_vline(aes(xintercept = median_val_hist), color = "blue", linetype = "dashed", size = 0.5) + 
    geom_vline(aes(xintercept = mean_val_hist), color = "red", linetype = "dashed", size = 0.5) +
    labs(title = "Histograma para Años de Experiencia", x = "Años de Experiencia", y = "Densidad") +
    annotate("text", x = mean_val_hist + 2, y = 0.02, label = "Media", color = "red") + 
    annotate("text", x = median_val_hist - 2, y = 0.02, label = "Mediana", color = "blue") + 
    theme_minimal()
print(p_años)

Está gráfica muestra el comportamiento de la variable de años de experiencia, en donde la media es de 11.27 años y con una mediana 10 años. En este rango es donde se encuentran la mayoría de los registros y los años de experiencia se encuentran entre 0 a 40 años.

Antigüedad_Cargo

Obtenemos la información básica de la variable

library(dplyr)
resumen <- rotacion %>% 
          summarise(
            Media = mean(Antigüedad_Cargo),
            Mediana = median(Antigüedad_Cargo),
            Desv_Estandar = sd(Antigüedad_Cargo),
            Minimo = min(Antigüedad_Cargo),
            Maximo = max(Antigüedad_Cargo)
          )
print(resumen)
## # A tibble: 1 × 5
##   Media Mediana Desv_Estandar Minimo Maximo
##   <dbl>   <dbl>         <dbl>  <dbl>  <dbl>
## 1  4.23       3          3.62      0     18
median_val_hist <- median(rotacion_selec$Antigüedad_Cargo)
mean_val_hist <- mean(rotacion_selec$Antigüedad_Cargo)
library(ggplot2)

p_años2 <- ggplot(rotacion, aes(x = Antigüedad_Cargo)) + 
    geom_histogram(aes(y = ..density..), fill = "#FFB6C1", color = "black", alpha = 0.7) + 
    geom_density(alpha = 0.2, fill = "#006400") +
    geom_vline(aes(xintercept = median_val_hist), color = "blue", linetype = "dashed", size = 0.5) + 
    geom_vline(aes(xintercept = mean_val_hist), color = "red", linetype = "dashed", size = 0.5) +
    labs(title = "Histograma para Antigüedad en el Cargo", x = "Antigüedad", y = "Densidad") +
    annotate("text", x = mean_val_hist + 2, y = 0.02, label = "Media", color = "red") + 
    annotate("text", x = median_val_hist - 2, y = 0.02, label = "Mediana", color = "blue") + 
    theme_minimal()
print(p_años2)

Está gráfica muestra el comportamiento de la variable de , en donde la media es de Antigüedad de Cargo es de 4.23 años y con una mediana 3 años. En esta gráfico los datos se encuentran más dispersos porque hay más variabilidad entre ellos desde 0 años de antigüedad hasta 18 años.

Ingreso Mensual

Obtenemos la información básica de la variable

library(dplyr)
resumen <- rotacion %>% 
          summarise(
            Media = mean(Ingreso_Mensual),
            Mediana = median(Ingreso_Mensual),
            Desv_Estandar = sd(Ingreso_Mensual),
            Minimo = min(Ingreso_Mensual),
            Maximo = max(Ingreso_Mensual)
          )
print(resumen)
## # A tibble: 1 × 5
##   Media Mediana Desv_Estandar Minimo Maximo
##   <dbl>   <dbl>         <dbl>  <dbl>  <dbl>
## 1 6503.    4919         4708.   1009  19999
tabla_frecuencia <- as.data.frame(table(rotacion_selec$Ingreso_Mensual))
names(tabla_frecuencia) <- c("Ingreso_Mensual", "Cantidad")
head(tabla_frecuencia, 5)

En el análisis de esta variable, la mayoría de los datos ingresados de los salarios para cada cargo son únicos, es decir la mayoría de los empleados tienen ingresos mensuales diferentes que depende de horas extras o de ventas adicionales que sean incentivos económicos para los empleados y puedan cambiar mensualmente sus ingresos.

Análisis bivariado

Realiza un análisis 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.

Codificamos la variables asignando los 1 y 0.

rotacion_selec$y<-ifelse(rotacion_selec$Rotación=="Si",1,0)

Seguidamente, se ejecuta el modelo logístico para determinar la probabilidad de que un empleado rote o no de su cargo.

Modelos logísticos

Ahora procedemos a realizar el modelo para cada una de las variables seleccionadas.

Campo Educación

modelo_CEduc <- glm(y ~ Campo_Educación, data = rotacion_selec, family = binomial)
round(summary(modelo_CEduc)$coefficients,2)
##                            Estimate Std. Error z value Pr(>|z|)
## (Intercept)                   -1.76       0.11  -15.33     0.00
## Campo_EducaciónHumanidades     0.71       0.45    1.56     0.12
## Campo_EducaciónMercadeo        0.49       0.22    2.22     0.03
## Campo_EducaciónOtra           -0.11       0.34   -0.31     0.76
## Campo_EducaciónSalud          -0.09       0.18   -0.51     0.61
## Campo_EducaciónTecnicos        0.62       0.23    2.66     0.01

El campo educación según los resultados obtenidos si influyen en la rotación del personal y la variable que mas influye es para los profesionales en Humanidades, Mercadeo y en los técnicos.

Estado Civil

modelo_EstCivil <- glm(y ~ Estado_Civil, data = rotacion_selec, family = binomial)
round(summary(modelo_EstCivil)$coefficients,2)
##                        Estimate Std. Error z value Pr(>|z|)
## (Intercept)               -1.95       0.12  -16.70     0.00
## Estado_CivilDivorciado    -0.24       0.22   -1.10     0.27
## Estado_CivilSoltero        0.88       0.16    5.57     0.00

El estado civil según los resultados obtenidos si influyen en la rotación del personal y la variable que mas influye es estar Soltero la cual esta 0,88 por encima de la variable de referencia que en este caso es Casado.

Cargo

modelo_Cargo <- glm(y ~ Cargo, data = rotacion_selec, family = binomial)
round(summary(modelo_Cargo)$coefficients,2)
##                              Estimate Std. Error z value Pr(>|z|)
## (Intercept)                     -3.66       0.72   -5.12     0.00
## CargoDirector_Manofactura        1.06       0.79    1.35     0.18
## CargoEjecutivo_Ventas            2.11       0.73    2.89     0.00
## CargoGerente                     0.70       0.85    0.82     0.41
## CargoInvestigador_Cientifico     2.01       0.73    2.74     0.01
## CargoRecursos_Humanos            2.46       0.79    3.12     0.00
## CargoRepresentante_Salud         1.06       0.80    1.33     0.18
## CargoRepresentante_Ventas        3.25       0.75    4.33     0.00
## CargoTecnico_Laboratorio         2.51       0.73    3.43     0.00

La variable cargo si influye significativamente en la rotación y cargos como (como Ejecutivo de Ventas, Investigador Científico, Recursos Humanos, Representante de Ventas y Técnico de Laboratorio) tienen unos valores significativos

Años_Experiencia

modelo_AñosExp <- glm(y ~ Años_Experiencia, data = rotacion_selec, family = binomial)
round(summary(modelo_AñosExp)$coefficients,2)
##                  Estimate Std. Error z value Pr(>|z|)
## (Intercept)         -0.88       0.13   -6.93        0
## Años_Experiencia    -0.08       0.01   -6.39        0

Para la variable años de experiencia, el valor de -0.08 indica que entre más años de experiencia se adquieran menor es la posibilidad de rotar.

Ingreso_Mensual

modelo_Ingr <- glm(y ~ Ingreso_Mensual, data = rotacion_selec, family = binomial)
round(summary(modelo_Ingr)$coefficients,2)
##                 Estimate Std. Error z value Pr(>|z|)
## (Intercept)        -0.93       0.13   -7.19        0
## Ingreso_Mensual     0.00       0.00   -5.88        0

Se puede decir que entre mayor sea el aumento del ingreso mensual hay una posibilidad de hacer rotación, esto puede suceder más en los cargos que tienen horas extras o incentivos por ventas.

Antiguedad_Cargo

modelo_AntCargo<- glm(y ~ Antigüedad_Cargo, data = rotacion_selec, family = binomial)
round(summary(modelo_AntCargo)$coefficients,2)
##                  Estimate Std. Error z value Pr(>|z|)
## (Intercept)         -1.12       0.10  -10.77        0
## Antigüedad_Cargo    -0.15       0.02   -6.03        0

Para la variable años de experiencia, el valor de -0.15 indica que entre más años de Antigüedad se tengan en la empresa menor es la posibilidad de hacer rotación.

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.

modelo_logistico <- glm(y ~ Campo_Educación + Estado_Civil + Cargo + Años_Experiencia + Ingreso_Mensual + Antigüedad_Cargo , data = rotacion_selec, family = binomial)
summary(modelo_logistico)
## 
## Call:
## glm(formula = y ~ Campo_Educación + Estado_Civil + Cargo + Años_Experiencia + 
##     Ingreso_Mensual + Antigüedad_Cargo, family = binomial, data = rotacion_selec)
## 
## Coefficients:
##                                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                  -3.847e+00  1.004e+00  -3.833 0.000127 ***
## Campo_EducaciónHumanidades    9.677e-01  6.253e-01   1.548 0.121694    
## Campo_EducaciónMercadeo       3.604e-01  2.703e-01   1.333 0.182412    
## Campo_EducaciónOtra          -1.347e-01  3.590e-01  -0.375 0.707483    
## Campo_EducaciónSalud         -5.686e-02  1.868e-01  -0.304 0.760872    
## Campo_EducaciónTecnicos       6.118e-01  2.516e-01   2.432 0.015035 *  
## Estado_CivilDivorciado       -2.053e-01  2.246e-01  -0.914 0.360538    
## Estado_CivilSoltero           8.120e-01  1.661e-01   4.890 1.01e-06 ***
## CargoDirector_Manofactura     1.202e+00  8.808e-01   1.364 0.172495    
## CargoEjecutivo_Ventas         2.107e+00  8.459e-01   2.491 0.012742 *  
## CargoGerente                  5.613e-01  8.633e-01   0.650 0.515581    
## CargoInvestigador_Cientifico  2.055e+00  9.275e-01   2.216 0.026705 *  
## CargoRecursos_Humanos         2.246e+00  9.951e-01   2.257 0.023986 *  
## CargoRepresentante_Salud      1.209e+00  8.865e-01   1.363 0.172803    
## CargoRepresentante_Ventas     3.007e+00  9.568e-01   3.143 0.001673 ** 
## CargoTecnico_Laboratorio      2.642e+00  9.243e-01   2.858 0.004262 ** 
## Años_Experiencia             -2.037e-02  1.817e-02  -1.121 0.262210    
## Ingreso_Mensual               5.688e-05  5.017e-05   1.134 0.256903    
## Antigüedad_Cargo             -9.624e-02  2.863e-02  -3.361 0.000775 ***
## ---
## 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: 1145.6  on 1451  degrees of freedom
## AIC: 1183.6
## 
## Number of Fisher Scoring iterations: 6

Estar soltero, en comparación con estar casado, aumenta el log-odds de la respuesta en 0.8166, este efecto es estadísticamente significativo, lo que sugiere que los empleados solteros tienen una mayor probabilidad de rotación en comparación con los empleados casados.

Igualmente sucede con los empleados que tienen una menos años de permanencia en la empresa, estos tienen más probabilidades de hacer rotación. Adicionalmente, ser representante de ventas o técnico de laboratorio tiene más posibilidades de rotar ya sea porque son cargos nuevos y no hay mucha antigüedad en el cargo.

Evaluación

Evaluar el poder predictivo del modelo con base en la curva ROC y el AUC.

Ahora, se hacen las predicciones probabilísticas para el modelo

Obtenemos las predicciones probabilísticas del modelo modelo_logistico para la variable de rotación.

pred_probabilidades <- predict(modelo_logistico, type = "response")

Se realiza el calculo de la Curva ROC, usando la función roc del paquete pROC para calcular esta curva

library(pROC)
curva_roc <- roc(rotacion_selec$y, pred_probabilidades)

Curva de ROC

plot(curva_roc, main="Curva ROC", col="purple", lwd=2)
abline(h=0, v=1, col="gray")

auc(curva_roc)
## Area under the curve: 0.7363

Sí el resultado de la Curva ROC fuera un AUC = 0.5: El modelo no tiene capacidad de discriminación para distinguir entre la clase positiva y la clase negativa. Es decir, el modelo no es mejor que una elección aleatoria.

Sí esta entre 0.5 < AUC < 1: El modelo tiene capacidad de discriminación. Cuanto más cerca esté el valor de AUC de 1, mejor será el modelo.

Y sí el AUC = 1: El modelo tiene una capacidad de discriminación perfecta. Es capaz de distinguir perfectamente entre la clase positiva y la clase negativa sin errores

El resultado de la Curva ROC para el modelo de regresión es de 0.7363, se puede concluir que el modelo desarrollado tiene una capacidad aceptable para predecir resultados.

Evaluación del desempeño

La evaluación del modelo se hará usando la librería Caret, es una herramienta versátil que facilita el entrenamiento, la evaluación y la comparación de modelos de aprendizaje automático ya sean modelos de clasificación o de regresión.

require(caret)
modelo_ev=train(Rotación~Campo_Educación + Estado_Civil + Cargo + Años_Experiencia + 
    Ingreso_Mensual + Antigüedad_Cargo,data=rotacion_selec,method="glm",family="binomial",metric="Accuracy",trControl = trainControl(method = "cv",number = 20))

modelo_ev
## Generalized Linear Model 
## 
## 1470 samples
##    6 predictor
##    2 classes: 'No', 'Si' 
## 
## No pre-processing
## Resampling: Cross-Validated (20 fold) 
## Summary of sample sizes: 1396, 1396, 1397, 1397, 1396, 1396, ... 
## Resampling results:
## 
##   Accuracy   Kappa    
##   0.8448877  0.1047503

La librería Caret permite hacer una evaluación del rendimiento del modelo utilizando validación cruzada.

El Número de muestras que se utilizo para el rendimiento fue en este caso de 1470), a su vez se usaron 6 variables predictoras, tres cuantitativas (Campo_Educación + Estado_Civil + Cargo) y tres categóricas (Años_Experiencia + Ingreso_Mensual + Antigüedad_Cargo) y con su variable de respuesta rotación ‘Si’ y ‘No’

En el muestreo o Resampling, se usó el método de validación cruzada con 20 pliegues (20 fold), que es una técnica común para evaluar el rendimiento de un modelo al dividir los datos en subconjuntos de entrenamiento.

En cuánto, a la Precisión (Accuracy) es la proporción de predicciones correctas sobre el total de predicciones realizadas por el modelo. En este caso, la precisión es aproximadamente 0.8428, lo que significa que el modelo clasificó correctamente alrededor del 84.28% de las observaciones.

El Índice Kappa, ajusta la precisión por la posibilidad de que la clasificación correcta se deba al azar. Un kappa de 1 indica una concordancia perfecta entre las predicciones y los resultados reales, mientras que un kappa de 0 indica que la concordancia es similar a la que podría esperarse al azar.

En este caso, el índice kappa es de 0.0945, lo que sugiere que hay un baja coincidencia entre las predicciones del modelo y los resultados reales, ajustado por la concordancia al azar.

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).

Para esto, se definen los valores de cada variable para una realizar la hipótesis de la probabilidad de que un empleado haga rotación o no la haga, como se muestra en los siguientes ejemplos:

Ejemplo 1

empleado_1 <- data.frame(
  `Campo_Educación` = "Ciencias", 
  `Cargo` = "Investigador_Cientifico",  # Trabaja como ejecutivo de ventas
  `Estado_Civil` = "Soltero",  # Es un hombre soltero
  `Ingreso_Mensual` = 1009,  # tiene ingresos de 7500
  `Años_Experiencia` = 8,   # Vive a 5 kilometros del lugar de trabajo
  `Antigüedad_Cargo` = 4   # Tiene 26 años
)

Se procede a realizar la predicción del modelo

prediccion1 <- predict(modelo_logistico, newdata = empleado_1, type = "response")
print(prediccion1)
##        1 
## 0.186896

El resultado de la predicción de acuerdo al modelo logístico, indica que el empleado siendo un investigador cientifico con 8 años de experiencia y 4 años de antigüedad en el cargo, tiene una probabilidad de 18.68% de rotar, es decir las probabilidades son bajas de que en su cargo exista una rotación.

Ejemplo 2

empleado_2 <- data.frame(
  `Campo_Educación` = "Humanidades", 
  `Cargo` = "Recursos_Humanos",  # Trabaja como ejecutivo de ventas
  `Estado_Civil` = "Soltero",  # Es un hombre soltero
  `Ingreso_Mensual` = 3000,  # tiene ingresos de 7500
  `Años_Experiencia` = 1,   # Vive a 5 kilometros del lugar de trabajo
  `Antigüedad_Cargo` = 0   # Tiene 26 años
)

Se procede a realizar la predicción del modelo

prediccion2 <- predict(modelo_logistico, newdata = empleado_2, type = "response")
print(prediccion2)
##         1 
## 0.5815768

El resultado de la predicción de acuerdo al modelo logístico, indica que el empleado de recursos humanos con 1 año de experiencia y 0 años de antigüedad en el cargo, tiene una probabilidad de 58.16% de rotar, es decir las probabilidades son altas de que en su cargo exista una rotación. En relación con el empleado anterior, se puede deducir que entre más años de experiencia y antigüedad en el cargo tengan los empleados es menos probable que hagan rotación.

Ejemplo 3

empleado_3 <- data.frame(
  `Campo_Educación` = "Mercadeo", 
  `Cargo` = "Representante_Ventas",  # Trabaja como ejecutivo de ventas
  `Estado_Civil` = "Soltero",  # Es un hombre soltero
  `Ingreso_Mensual` = 2500,  # tiene ingresos de 7500
  `Años_Experiencia` = 1,   # Vive a 5 kilometros del lugar de trabajo
  `Antigüedad_Cargo` = 0   # Tiene 26 años
)

Se procede a realizar la predicción del modelo

prediccion3 <- predict(modelo_logistico, newdata = empleado_3, type = "response")
print(prediccion3)
##         1 
## 0.6116368

El resultado de la predicción de acuerdo al modelo logístico, indica que el empleado de mercadeo y representante en ventas con 1 año de experiencia y 0 años de antigüedad en el cargo, tiene una probabilidad de 61.16% de rotar, es decir las probabilidades son altas de que en su cargo exista una rotación.

Conclusiones

El resultado de la Curva ROC para el modelo de regresión logístico implementado para dar la probailidad de que exista una rotación entre los empleados de la compañia eses de 0.7363, se puede concluir que el modelo desarrollado tiene una capacidad aceptable para predecir resultados, con un accuracy de 0.8428% lo que significa que el modelo clasificó correctamente alrededor del 84.28% de las observaciones.

En resumen, el modelo parece tener una precisión relativamente alta, pero el bajo valor de kappa sugiere que la precisión podría ser debida en parte al azar. Es importante considerar otras métricas de evaluación del modelo para obtener una comprensión completa de su rendimiento.

Finalmente, se concluye que entre más años de experiencia y antigüedad en el cargo tengan los empleados es menos probable que hagan rotación, pero si es el caso contrario y el cargo es de representante de ventas o técnicos de laboratorio y tienen un estado civil soltero es muy probable que hagan rotación.