Informe Regresión Generalizada Múltiple

CASO ROTACIÓN

MAESTRÍA EN CIENCIA DE DATOS UNIVERSIDAD JAVERIANA DE CALI

MÉTODOS ESTADÍSTICOS PARA LA TOMA DE DECISIONES

Carolina Galindres Bernal, Adrian Rodriguez Amaya


SELECCIÓN DE VARIABLES

Para el desarrollo de la presente simulación utilizaremos los datos relacionados con la rotación del personal de una compañía con base en algunas varibles definidas, a saber:

## 'data.frame':    1470 obs. of  24 variables:
##  $ Rotación                   : Factor w/ 2 levels "No","Si": 2 1 2 1 1 1 1 1 1 1 ...
##  $ Edad                       : num  41 49 37 33 27 32 59 30 38 36 ...
##  $ Viaje.de.Negocios          : Factor w/ 3 levels "Frecuentemente",..: 3 1 3 1 3 1 3 3 1 3 ...
##  $ Departamento               : Factor w/ 3 levels "IyD","RH","Ventas": 3 1 1 1 1 1 1 1 1 1 ...
##  $ Distancia_Casa             : num  1 8 2 3 2 2 3 24 23 27 ...
##  $ Educación                  : Factor w/ 5 levels "1","2","3","4",..: 2 1 2 4 1 2 3 1 3 3 ...
##  $ Campo_Educación            : Factor w/ 6 levels "Ciencias","Humanidades",..: 1 1 4 1 5 1 5 1 1 5 ...
##  $ Satisfacción_Ambiental     : Factor w/ 4 levels "1","2","3","4": 2 3 4 4 1 4 3 4 4 3 ...
##  $ Genero                     : chr  "F" "M" "M" "F" ...
##  $ Cargo                      : chr  "Ejecutivo_Ventas" "Investigador_Cientifico" "Tecnico_Laboratorio" "Investigador_Cientifico" ...
##  $ Satisfación_Laboral        : num  4 2 3 3 2 4 1 3 3 3 ...
##  $ Estado_Civil               : Factor w/ 3 levels "Casado","Divorciado",..: 3 1 3 1 1 3 1 2 3 1 ...
##  $ Ingreso_Mensual            : num  5993 5130 2090 2909 3468 ...
##  $ Trabajos_Anteriores        : num  8 1 6 1 9 0 4 1 0 6 ...
##  $ Horas_Extra                : Factor w/ 2 levels "No","Si": 2 1 2 2 1 1 2 1 1 1 ...
##  $ Porcentaje_aumento_salarial: num  11 23 15 11 12 13 20 22 21 13 ...
##  $ Rendimiento_Laboral        : Factor w/ 2 levels "3","4": 1 2 1 1 1 1 2 2 2 1 ...
##  $ Años_Experiencia           : num  8 10 7 8 6 8 12 1 10 17 ...
##  $ Capacitaciones             : num  0 3 3 3 3 2 3 2 2 3 ...
##  $ Equilibrio_Trabajo_Vida    : num  1 3 3 3 3 2 2 3 3 2 ...
##  $ Antigüedad                 : num  6 10 0 8 2 7 1 1 9 7 ...
##  $ Antigüedad_Cargo           : num  4 7 0 7 2 7 0 0 7 7 ...
##  $ Años_ultima_promoción      : num  0 1 0 3 2 3 0 0 1 7 ...
##  $ Años_acargo_con_mismo_jefe : num  5 7 0 0 2 6 0 0 8 7 ...

Como punto de partida, se seleccionarán tres variables categóricas y tres variables cuantitativas; a partir de estas variables, estableceremos algunas hipótesis que evaluaremos en el desarrollo de la presente simulación. Las varibles seleccionadas son: Viaje de Negocios, Estado Civil,Departamento,Ingreso Mensual,Edad, y Años de Experiencia.


DEFINICIÓN DE HIPÓTESIS

  1. Se espera que el personal que realice viajes de negocios con mayor frecuencia, tienda a rotar.

  2. Se espera que las personas con estado civil ‘soltero’ roten más que las personas con estado civil casadas.

  3. Se espera que las personas en el departamento de ventas roten más que las de recursos humanos e investigación y desarrollo.

  4. Se espera que las personas con mayor ingreso mensual tiendan a rotar menos que las de menor ingreso mensual.

  5. Se espera que las personas más jóvenes roten más que las personas con mayor edad.

  6. Se espera que los trabajadores con mayor antigüedad roten menos que los que ingresaron recientemente a la empresa.


ANÁLISIS UNIVARIADO

Ahora, realizaremos un análisis univariado de las variables seleccionadas para observar su comportamiento.


De acuerdo con los gráficos de análisis univariado de las variables cualitativas podemos observar que para la variable viajes de negocios la mayor parte del personal viaja raramente, mientras que los que viajan con mayor frecuencia son un número menor. Por otra parte, para la variable estado civil observamos que la mayor parte de los trabajadores tienen estado civil casado y soltero, siendo la primera la de mayor representación en el dataset. Para la variable departamento, se aprecia que la mayor parte de personal pertenecen al área de investigación y desarrollo, seguido por el departamento de ventas y con muy poco volumen de trabajadores el departamento de recursos humanos.

Los gráficos del análisis univariado para variables cuantitativas nos ilustran que para el caso de la variable Ingreso Mensual la mayor parte del personal gana menos de 5 millones aproximadamente. El rango de edad de los trabajadores oscila entre 45 y 28 aproximadamente y la mayor parte del personal cuenta con experiencia menor a 10 años.


ANÁLISIS BIVARIADO

En este punto, realizaremos un análisis bivariado de las variables seleccionadas para observar su comportamiento con respecto a la rotación.


A partir de las gráficas de análisis bivariado de variables categóricas, para el caso de la variable Viaje de Negocios evidenciamos que las personas que viajan frecuentemente tienen mayor probabilidad de rotar ~25%, mientras que los trabajadores que no viajan rotan menos en un ~8%. Ahora, para el caso del Estado Civil observamos que los trabajadores solteros tienden a rotar con una proporción del ~26%, mientras que los divorciados manejan un porcentaje de aproximadamente 10%. Con respecto a la variable Departamento, el personal de recursos humanos y ventas rotan casi en la misma proporción, ~20%; el departamento de investigación y desarrollo tiende a rotar en un ~14%.

Con respecto al análisis bivariado de las variables cuantitativas, observamos que las personas que manejan menores ingresos tienden a rotar, a diferencia de los trabajadores que tienen sueldos superiores. También evidenciamos que, la edad también se encuentra relacionada con la rotación, en el sentido que los más jóvenes tienden a rotar más que los de mayor edad. Finalmente, los años de experiencia del personal con menor número tienden a rotar más que las personas más experimentadas dentro de la empresa.


MODELO DE REGRESIÓN LOGÍSTICO

En este punto realizaremos la construcción del modelo de regresión logístico a partir de las variables seleccionadas.

modelo_glm = glm(data = data, 
                 formula = Rotación ~ Viaje.de.Negocios + Estado_Civil + Departamento + Ingreso_Mensual + Edad + Años_Experiencia,
                 family = 'binomial')

summary(modelo_glm)
## 
## Call:
## glm(formula = Rotación ~ Viaje.de.Negocios + Estado_Civil + 
##     Departamento + Ingreso_Mensual + Edad + Años_Experiencia, 
##     family = "binomial", data = data)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -1.2178  -0.6217  -0.4740  -0.2807   2.8565  
## 
## Coefficients:
##                              Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                -2.539e-01  3.814e-01  -0.666 0.505566    
## Viaje.de.NegociosNo_Viaja  -1.367e+00  3.403e-01  -4.016 5.92e-05 ***
## Viaje.de.NegociosRaramente -6.171e-01  1.721e-01  -3.586 0.000336 ***
## Estado_CivilDivorciado     -2.032e-01  2.227e-01  -0.913 0.361416    
## Estado_CivilSoltero         7.829e-01  1.639e-01   4.775 1.79e-06 ***
## DepartamentoRH              5.423e-01  3.502e-01   1.549 0.121494    
## DepartamentoVentas          5.531e-01  1.612e-01   3.430 0.000603 ***
## Ingreso_Mensual            -8.142e-05  3.167e-05  -2.571 0.010132 *  
## Edad                       -1.793e-02  1.127e-02  -1.590 0.111735    
## Años_Experiencia           -2.454e-02  1.994e-02  -1.230 0.218518    
## ---
## 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: 1169.6  on 1460  degrees of freedom
## AIC: 1189.6
## 
## Number of Fisher Scoring iterations: 5

De acuerdo con los resultados del modelo, podemos evidenciar que las variables más significativas son: Viaje.de.NegociosNo_Viaja, Viaje.de.NegociosRaramente, Estado_CivilSoltero, DepartamentoVentas y Ingreso_Mensual. Podemos destacar que la variable que más disminuye la probabilidad de rotación, es la de ingreso mensual al igual que Viaje.de.NegociosRaramente. Por el contrario, la variable Estado_CivilSoltero es la que más aumenta la probabilidad de rotación, seguida de DepartamentoVentas.

Ahora, con el modelo calculado procedemos a comparar las varianzas entre las medias de los grupos de las variables del modelo. Para ello utilizaremos el análisis ANOVA:
anova(modelo_glm, test = "Chisq")
## Analysis of Deviance Table
## 
## Model: binomial, link: logit
## 
## Response: Rotación
## 
## Terms added sequentially (first to last)
## 
## 
##                   Df Deviance Resid. Df Resid. Dev  Pr(>Chi)    
## NULL                               1469     1298.6              
## Viaje.de.Negocios  2   23.760      1467     1274.8 6.927e-06 ***
## Estado_Civil       2   43.016      1465     1231.8 4.562e-10 ***
## Departamento       2   10.581      1463     1221.2  0.005039 ** 
## Ingreso_Mensual    1   43.125      1462     1178.1 5.136e-11 ***
## Edad               1    6.989      1461     1171.1  0.008203 ** 
## Años_Experiencia   1    1.538      1460     1169.6  0.214921    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

A partir de los resultados de análisis ANOVA, podemos identificar que la mayoría de las variables son significativas, con excepción de Años_Experiencia. Se debe evaluar si esta última se puede eliminar del modelo de regresión logístico.

Complementamos el análisis anterior con el análisis de factores de inflación de la varianza VIF; así:
vif(modelo_glm)
##                       GVIF Df GVIF^(1/(2*Df))
## Viaje.de.Negocios 1.004343  2        1.001084
## Estado_Civil      1.021394  2        1.005306
## Departamento      1.064078  2        1.015648
## Ingreso_Mensual   1.955567  1        1.398416
## Edad              1.626312  1        1.275269
## Años_Experiencia  2.568182  1        1.602555

Podemos confirmar que la variable Años_Experiencia es que la refleja mayor varianza de inflación, sin embargo, se encuentra dentro de los valores aceptados.


CURVA ROC Y AUC

Ahora evaluaremos el poder predictivo del modelo calculado, para tal fin debemos identificar la bondad del modelo.

predicciones = ifelse(modelo_glm$fitted.values > 0.2, yes = 1, no = 0)
matriz_confusion = table(modelo_glm$model$Rotación, predicciones,
                         dnn = c('observaciones', 'predicciones'))

matriz_confusion
##              predicciones
## observaciones   0   1
##            No 930 303
##            Si 103 134
mosaic(matriz_confusion, shade = TRUE, colorize = TRUE,
       gp = gpar(fill = matrix(c('#b5ead7', '#fbb4ae', '#fbb4ae', '#b5ead7'), 2, 2)))

sum(diag(matriz_confusion))/sum(matriz_confusion)
## [1] 0.7238095

Conforme a los resultados podemos identificar que de 1233 observaciones identificó 930 observaciones que efectivamente correspondían a la no rotación del personal, mientras que 303 de ellas fueron falsos negativos. Por otra parte, identificó que de las 237 observaciones 134 de ellas eran efectivamente positivas indicando la rotación del personal, pero con 103 falsos positivos.

En general podemos estimar una bondad del ajuste del modelo de regresión logístico de aproximadamente 72% entre el conjunto de datos observados.

Ahora, realizaremos un análisis ROC con la finalidad de identificar la proporción de verdaderos positivos frente a la proporción de falsos positivos según varía el umbral de discriminación. Así:

## 
## Call:
## roc.default(response = data$Rotación, predictor = modelo_glm$fitted.values,     percent = TRUE, plot = TRUE, legacy.axes = TRUE, xlab = "Falsos Positivos [%]",     ylab = "Verdaderos Positivos [%]", col = "#ff9aa2", lwd = 4,     print.auc = TRUE, print.thres = "best")
## 
## Data: modelo_glm$fitted.values in 1233 controls (data$Rotación No) < 237 cases (data$Rotación Si).
## Area under the curve: 71.8%

Como podemos observar en la gráfica anterior, el punto óptimo más cercano a una sensibilidad igual al 100% y especificidad igual al 100% corresponde a un valor de 0.2. Este, fue el valor que se seleccionó como threshold para evaluar la matriz de confusión en el punto anterior. También es posible identificar que el área debajo de la curva refleja la bondad del test para discriminar el personal que rota o no dentro de la empresa, este valor corresponde a 71.8%, muy aproximado al valor calculado anteriormente con ~72%.


PRUEBA DE PREDICCÓN DEL MODELO

A partir de todos los análisis anteriormente realizados frente a los resultados del modelo y análisis ROC, evaluaremos un caso en particular con algunas características de un trabajador hipotético. Para tal fin se plantea un trabajador que viaja frecuentemente, soltero, del departamento de ventas, con ingresos mensuales de 3 millones, edad de 30 años y con 6 años de experiencia.

newdata = data.frame(
  Viaje.de.Negocios = 'Frecuentemente',
  Estado_Civil = 'Soltero',
  Departamento = 'Ventas',
  Ingreso_Mensual = 3000,
  Edad = 30,
  Años_Experiencia = 6)

predict(object = modelo_glm, newdata = newdata, type = 'response')
##         1 
## 0.5381013

De acuerdo con estas características, es posible estimar que esta persona tenga una probabilidad de rotación de alrededor de 53%.


CONCLUSIONES

A continuación, detallaremos algunas recomendaciones a partir de los datos de rotación y las variables seleccionadas:




*** Fin del documento ***