Rotación

library(readxl)
Rotacion <- read_excel("E:/Data Science/Estadistica/Mod3/Datos_Rotacion.xlsx")
head(Rotacion)
Rotación Edad Viaje de Negocios Departamento Distancia_Casa Educación Campo_Educación Satisfacción_Ambiental Genero Cargo Satisfación_Laboral Estado_Civil Ingreso_Mensual Trabajos_Anteriores Horas_Extra Porcentaje_aumento_salarial Rendimiento_Laboral Años_Experiencia Capacitaciones Equilibrio_Trabajo_Vida Antigüedad Antigüedad_Cargo Años_ultima_promoción Años_acargo_con_mismo_jefe
Si 41 Raramente Ventas 1 2 Ciencias 2 F Ejecutivo_Ventas 4 Soltero 5993 8 Si 11 3 8 0 1 6 4 0 5
No 49 Frecuentemente IyD 8 1 Ciencias 3 M Investigador_Cientifico 2 Casado 5130 1 No 23 4 10 3 3 10 7 1 7
Si 37 Raramente IyD 2 2 Otra 4 M Tecnico_Laboratorio 3 Soltero 2090 6 Si 15 3 7 3 3 0 0 0 0
No 33 Frecuentemente IyD 3 4 Ciencias 4 F Investigador_Cientifico 3 Casado 2909 1 Si 11 3 8 3 3 8 7 3 0
No 27 Raramente IyD 2 1 Salud 1 M Tecnico_Laboratorio 2 Casado 3468 9 No 12 3 6 3 3 2 2 2 2
No 32 Frecuentemente IyD 2 2 Ciencias 4 M Tecnico_Laboratorio 4 Soltero 3068 0 No 13 3 8 2 2 7 7 3 6
names(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"
  1. Seleccionar 3 variables categóricas (distintas de rotación) y 3 variables cuantitativas, que consideren estén relacionadas con la rotación. Nota: Justificar por que estas variables están relacionadas y que tipo de relación se espera (Hipótesis). Ejemplo: Se espera que las horas extra se relacionen con la rotación ya que las personas podrían desgastarse mas al trabajar horas extra y descuidan aspectos personales. La hipótesis es que las personas que trabajan horas extra tienen mayor posibilidad de rotar que las que no trabajan extra. (serian 6, una por variable).

VARIABLES CATEGORICAS

A. se espera que el Estado civil se relacione con la rotación puesto que las personas solteras podrian presentar menor temor a modificar su estabilidad laboral

H1: Las personas solteras tienen mayor posibilidad de rotar

B. se espera que el Departamento se relacione con la rotación puesto que algunos cargos demandan mas presion y nivel de estres

H2: Las personas en el departamento de ventas tienen mayor posibilidad de rotar

C. se espera que las Horas_Extra se relacionen con la rotación puesto que trabajar continuamente en horas extra afecta la disponibilidad de tiempo personal, familiar y de otras actividades de recreación

H3: las personas que trabajan horas extra tienen mayor posiblidad de rotar

VARIABLES CUANTITATIVAS

D. se espera que el ingreso mensual se relacione con la rotación puesto que un alto ingreso puede incidir en no tomar la decision de dejar un puesto y viceversa

H4:Las personas de menor ingreso mensual tienen mayor posibilidad de rotar

E. se espera que la Edad se relacione con la rotacion puesto que para una persona de mayor edad las ofertas de empleo se vuelven mas rigurosas lo cual puede desincentivar la rotacion

H5. las personas con menor edad tienen mayor posibilidad de rotar.

F. se espera que la Distancia_casa se relacione con la rotación puesto que a una persona que viva significativamente lejos del lugar de trabajao se inclinaria por cambiar de empleo a uno que le resulte mas cercano

H6: las personas con mayor distancia a su casa tienen mayor posibilidad de rotar

  1. Realizar un análisis univariado (caracterización). Nota: Los indicadores o gráficos se usan dependiendo del tipo de variable (cuanti o cuali). Incluir interpretaciones de la rotación.
#Ingreso
data.frame(Ingreso_promedio=mean(Rotacion$Ingreso_Mensual),Ingreso_mediana=median(Rotacion$Ingreso_Mensual),Ingreso_min=min(Rotacion$Ingreso_Mensual),Ingreso_max=max(Rotacion$Ingreso_Mensual))
Ingreso_promedio Ingreso_mediana Ingreso_min Ingreso_max
6502.931 4919 1009 19999
require(ggplot2)
require(ggpubr)
ggplot(Rotacion,aes(x=Ingreso_Mensual))+geom_histogram(bins=50)+theme_bw()

#Edad
data.frame(Edad_promedio=mean(Rotacion$Edad),Edad_mediana=median(Rotacion$Edad),Edad_min=min(Rotacion$Edad),Edad_max=max(Rotacion$Edad))
Edad_promedio Edad_mediana Edad_min Edad_max
36.92381 36 18 60
ggplot(Rotacion,aes(x=Edad))+geom_histogram(bins=20)+theme_bw()

#Distancia_Casa
data.frame(Distancia_Casa_promedio=mean(Rotacion$Distancia_Casa),Distancia_Casa_mediana=median(Rotacion$Distancia_Casa),Distancia_Casa_min=min(Rotacion$Distancia_Casa),Distancia_Casa_max=max(Rotacion$Distancia_Casa))
Distancia_Casa_promedio Distancia_Casa_mediana Distancia_Casa_min Distancia_Casa_max
9.192517 7 1 29
ggplot(Rotacion,aes(x=Distancia_Casa))+geom_histogram(bins=20)+theme_bw()

#Estado Civil
tabla1=prop.table(table(Rotacion$Estado_Civil))*100
lbls=paste(names(tabla1), "\n", round(tabla1),"%", sep="")
pie(tabla1, labels = lbls, main="Grafico\n (Estado Civil)")

#Departamento
tabla2=prop.table(table(Rotacion$Departamento))*100
lbls=paste(names(tabla2), "\n", round(tabla2),"%", sep="")
pie(tabla2, labels = lbls, main="Grafico\n (Departamento)")

#Horas Extra
tabla3=prop.table(table(Rotacion$Horas_Extra))*100
lbls=paste(names(tabla3), "\n", round(tabla3),"%", sep="")
pie(tabla3, labels = lbls, main="Grafico\n (Horas Extra)")

#Rotación
round(prop.table(table(Rotacion$Rotación))*100,digits=1)
## 
##   No   Si 
## 83.9 16.1
tabla4=prop.table(table(Rotacion$Rotación))*100
lbls=paste(names(tabla4), "\n", round(tabla4),"%", sep="")
pie(tabla3, labels = lbls, main="Grafico\n (Rotación)")

  1. Realizar un análisis de bivariado en donde la variable respuesta sea la rotación 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.
require(CGPfunctions)

#Estado Civil
tabla4=table(Rotacion$Estado_Civil,Rotacion$Rotación)
prop.table(tabla4,margin=1)*100
##             
##                    No       Si
##   Casado     87.51857 12.48143
##   Divorciado 89.90826 10.09174
##   Soltero    74.46809 25.53191
PlotXTabs2(Rotacion,Estado_Civil,Rotación,plottype = "percent")

#Departamento
tabla5=table(Rotacion$Departamento,Rotacion$Rotación)
prop.table(tabla5,margin=1)*100
##         
##                No       Si
##   IyD    86.16025 13.83975
##   RH     80.95238 19.04762
##   Ventas 79.37220 20.62780
PlotXTabs2(Rotacion,Departamento,Rotación,plottype = "percent")  

#Horas_Extra
tabla6=table(Rotacion$Horas_Extra,Rotacion$Rotación)
prop.table(tabla6,margin=1)*100
##     
##            No       Si
##   No 89.56357 10.43643
##   Si 69.47115 30.52885
PlotXTabs2(Rotacion,Horas_Extra,Rotación,plottype = "percent") 

#Ingreso
g1=ggplot(Rotacion,aes(x=Rotación, y=Ingreso_Mensual,fill=Rotación))+geom_boxplot()+theme_bw()
require(plotly)
ggplotly(g1)
tapply(Rotacion$Ingreso_Mensual,Rotacion$Rotación,mean,na.rm=TRUE)
##       No       Si 
## 6832.740 4787.093
#Edad
g2=ggplot(Rotacion,aes(x=Rotación, y=Edad,fill=Rotación))+geom_boxplot()+theme_bw()
ggplotly(g2)
tapply(Rotacion$Edad,Rotacion$Rotación,mean,na.rm=TRUE)
##       No       Si 
## 37.56123 33.60759
#Distancia_Casa
g3=ggplot(Rotacion,aes(x=Rotación, y=Distancia_Casa,fill=Rotación))+geom_boxplot()+theme_bw()
ggplotly(g3)
tapply(Rotacion$Distancia_Casa,Rotacion$Rotación,mean,na.rm=TRUE)
##        No        Si 
##  8.915653 10.632911

H1: Las personas solteras tienen mayor posibilidad de rotar: Los resultados del analisis bivariado involucrando la variable Estado Civil refuerzan la hipotesis planteada al tener un 26% de rotacion entre los solteros lo cual es significativamente superior frente a los casados y divorciados.

H2: Las personas en el departamento de ventas tienen mayor posibilidad de rotar: De acuerdo con los resultados se refuerza la hipotesis planteada al ser ventas el departamento que presenta la mayor rotación. frente al dpto de IyD (que presenta el doble de numero de empleados) el porcentaje de rotación es un 50% superior (14% vs 21% )

H3: las personas que trabajan hora extra tienen mayor posiblidad de rotar: Los resultados Refuerzan la hipotesis planteada pues la rotacion es de 31% entre quienes si trabajan horas extra vs 10% entre quienes no trabajan

H4:Las personas de menor ingreso mensual tienen mayor posibilidad de rotar: Los resultados refuerzan la hipotesis pues, De acuerdo con el analisis las personas que rotaron presentaron un promedio de ingresos significativamente menor a las que no rotaron (4787 vs 6832)

H5. las personas con menor edad tienen mayor posibilidad de rotar: los datos refuerzan la hiportesis puesto que quienes si rotan tienen una edad promedio de 33,6 años mientras que quienes no rotan su promedio de edad es de 37,6 años. entre un promedio de edad general de 36,9 años

H6: las personas con mayor distancia hasta su casa tienen mayor posibilidad de rotar: se refuerza la hipotesis puesto que las personas que rotaron se encuentran en promedio a 10,6 km de su casa, mientras que quiens no rotan se encuentra a 8,9 km

  1. Realizar la estimación de un modelo de regresión logistico en el cual la variable respuesta es rotación (y=1 es si rotación, y=0 es no rotación) y las covariables las 6 seleccionadas. Interprete los coeficientes del modelo y la significancia de los parametros.
Rotacion$Rotación=as.numeric(Rotacion$Rotación=="Si")
mod=glm(Rotación~Edad+Ingreso_Mensual+Distancia_Casa+Horas_Extra+Departamento+Estado_Civil,data=Rotacion,family = "binomial")
summary(mod)
## 
## Call:
## glm(formula = Rotación ~ Edad + Ingreso_Mensual + Distancia_Casa + 
##     Horas_Extra + Departamento + Estado_Civil, family = "binomial", 
##     data = Rotacion)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -1.5641  -0.5913  -0.4015  -0.2399   3.0078  
## 
## Coefficients:
##                          Estimate Std. Error z value Pr(>|z|)    
## (Intercept)            -1.405e+00  3.647e-01  -3.854 0.000116 ***
## Edad                   -2.742e-02  1.010e-02  -2.714 0.006654 ** 
## Ingreso_Mensual        -1.187e-04  2.666e-05  -4.453 8.46e-06 ***
## Distancia_Casa          3.129e-02  9.264e-03   3.378 0.000730 ***
## Horas_ExtraSi           1.499e+00  1.580e-01   9.488  < 2e-16 ***
## DepartamentoRH          6.898e-01  3.594e-01   1.919 0.054956 .  
## DepartamentoVentas      6.124e-01  1.671e-01   3.665 0.000247 ***
## Estado_CivilDivorciado -2.902e-01  2.295e-01  -1.264 0.206116    
## Estado_CivilSoltero     8.709e-01  1.709e-01   5.095 3.49e-07 ***
## ---
## 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: 1090.7  on 1461  degrees of freedom
## AIC: 1108.7
## 
## Number of Fisher Scoring iterations: 5

De acuerdo con el modelo se encuentra que las variables seleccionadas presentan una alta significancia, siendo las mas significativas: Ingreso_mensual, Horas_ExtraSI, Estado_CivilSoltero, seguido de Distancia_Casa, DepartamentoVentas y Edad

1-exp(mod$coefficients)
##            (Intercept)                   Edad        Ingreso_Mensual 
##           0.7547478945           0.0270436057           0.0001187305 
##         Distancia_Casa          Horas_ExtraSi         DepartamentoRH 
##          -0.0317881893          -3.4763482105          -0.9933267067 
##     DepartamentoVentas Estado_CivilDivorciado    Estado_CivilSoltero 
##          -0.8448504360           0.2519000504          -1.3890460781

se observa que el ingreso presenta baja probabilidad de producir cambios en la rotación mientas que Horas_ExtraSi, Estado_CivilSoltero y DepartamentoVentas tienen una alta probabilidad de producir cambios en la variable de rotación

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

    library(vcd)
    Predict1= predict.glm(mod, newdata = Rotacion, type = "response")
    Matriz_Resultado = table(Rotacion$Rotación, ifelse(Predict1 >0.2, 1, 0), dnn = c("observaciones", "predicciones"))
    Matriz_Resultado
    ##              predicciones
    ## observaciones   0   1
    ##             0 952 281
    ##             1  88 149
    mosaic(Matriz_Resultado, shade = TRUE, colorize = TRUE,
           gp = gpar(fill = matrix(c("green", "blue", "blue", "green"), 2, 2)))

    Se identifica entre los resultados 952 observaciones correspondientes a la no rotación y 281 falsos negativos (No rota y el resultado da que si), Entre las observaciones que efectivamente rotan se encontraron 149 observaciones y 88 falsos positivos (si rotan y la prediccion da como resultado que no)

    sum(diag(Matriz_Resultado))/sum(Matriz_Resultado)
    ## [1] 0.7489796

    El modelo propuesto es es capaz de clasificar correctamente el 74.9% de las observaciones al utilizar los datos de entrenamiento.

library(ROCR)
prediccion_rot= ROCR::prediction(Predict1,Rotacion$Rotación)
perf= performance(prediction.obj = prediccion_rot, "tpr", "fpr")
plot(perf)
abline(a=0, b=1, col="red")
grid()

AUClog= performance(prediccion_rot, measure = "auc")@y.values[[1]]
cat("AUC: ", AUClog, "n")
## AUC:  0.7670633 n

El modelo tiene una Area bajo la curva (AUC) de 0,707

  1. Predeccir la probabilidad de que un individuo (hipotetico) rote y defina un corte para decidir si se debe intervenir a este empleado o no (posible estrategia para motivar al empleado).
datapredict = data.frame(
  Departamento = 'Ventas',
  Estado_Civil = 'Soltero',
  Edad=25,
  Ingreso_Mensual = 1000,
  Distancia_Casa = 30,
  Horas_Extra='Si', check.names = FALSE)

#caracteristicas del trabajador
datapredict
Departamento Estado_Civil Edad Ingreso_Mensual Distancia_Casa Horas_Extra
Ventas Soltero 25 1000 30 Si
prob_rotacion=(predict(mod,list(Departamento = 'Ventas',Estado_Civil = 'Soltero',   Edad=25,   Ingreso_Mensual = 1000,  Distancia_Casa = 30,   Horas_Extra='Si'),type = "response"))*100

#predict(object = mod, newdata = datapredict, type = 'response')

cat("Probabilidad de Rotación: ", prob_rotacion,"%")
## Probabilidad de Rotación:  84.70042 %
prob_Corte=(predict(mod,list(Departamento = 'Ventas',Estado_Civil = 'Soltero',   Edad=mean(Rotacion$Edad),   Ingreso_Mensual = mean(Rotacion$Ingreso_Mensual),  Distancia_Casa = mean(Rotacion$Distancia_Casa),   Horas_Extra='Si'),type = "response"))*100
cat("Probabilidad de corte: ", prob_Corte,"%")
## Probabilidad de corte:  51.9952 %

La probablidad de rotar de un trabajador con las caracteristicas mencionadas es de 84% se define la probabilidad de corte prediciendo la rotación para una persona con caracteristicas promedio (52%), la probabilidad obtenida para el trabajador es mayor que esta probabilidad de corte y por tanto deberia intervenirse este trabajador para disminuir esta probabilidad de rotacion.

  1. En las conclusiones se discute sobre cual seria la estrategia para disminuir la rotación en la empresa (con base en las variables que resultaron significativas en el punto 3). Ejemplo: Mejorar el ambiente laboral, los incentivos económicos, distribuir la carga de horas extra (menos turnos y mas personal).

Realizar estudio de intereses dirigido al grupo de trabajadores solteros para conocer sus proyecciones personales, se pueden establecerr actividades de esparcimiento asociadas a las preferencias de este grupo que presumiblemente tiene un estilo de vida menos rigido.

Se deben revisar las politicas del departamento de ventas, asi como el direccionamiento y estrategias de los jefes y coordinadores de éste, puede evaluarse modificar las politicas de incentivos y condiciones de ingresos frente al equilibrio de su vida personal.

Dirigir a los empleados de menor ingresos, mayor oportunidad de capacitación sobre manejo financiero y proyeccion de crecimiento personal y profesional

Verificar las politicas de horas extra puesto que tienen alta incidencia en la rotación, verificar que sea equitativo entre los trabajadores y de ser posible tener un incentivo para cuando se requiere trabajar horas extras, se puede evaluar la flexibilizacion de ciertas jornadas cuando se presenten horas extras recurrentes en una misma semana,

de ser posible manejar estrategias de alternancia donde puedan aplicar aquellos trabajadores con una mayor distancia hasta su casa en determinados dias de la semana.