Logistic Regression: Predicting IBM Employee Attrition

Inroduction

This analysis utilizes IBM employee attrition data retrieved from Kaggle. It is comprised of 1,470 observations and 35 variables; the binary outcome variable is attrition (Yes/No) and there are 33 possible predictor variables. The task is to use logistic regression modeling to estimate the probability of IBM employee attrition based on selected variables. While a more thorough analysis would examine all predictors, for the purposes of this assignment, I only selected five independent variables: job role, job involvement, monthly income, overtime, and age. The goal is to be able to answer the following question: What kind of employees are more inclined to leave IBM? More specifically, are employees in certain positions more likely to leave IBM than others? Does the level of job involvement increase or decrease the likelihood of attrition? What impact does monthly income and working overtime have? What effect does age have on likelihood of attrition?


Data and Variables

The variables selected for this analysis are as follows:

  • Attrition - Attrition will act as the binary dependent variable in this analysis;the responses are either “Yes” or “No”.
  • JobRole - This variable describes the 9 positions held at the company: Healthcare Representative, Human Resources, Laboratory Technician, Manager, Manufacturing Director, Research Director, Research Scientist, Sales Executive, and Sales Representative.
  • JobInvolvement - This variable measures employee involvement in the company on a 1 to 4 scale. [1 ‘Low’ 2 ‘Medium’ 3 ‘High’ 4 ‘Very High’]
  • MonthlyIncome
  • OverTime - This variable describes whether or not the employee regularly works overtime; the responses are either “Yes” or “No”.
  • Age
library(readr)
AttritionDataset <- read_csv("C:/Users/Raven/Desktop/AttritionDataset.xls")
head(AttritionDataset)
library(dplyr)
AttritionDataset2 <- select(AttritionDataset, 
               Attrition, JobRole, JobInvolvement, MonthlyIncome, OverTime, Age)
AttritionDataset2$Attrition <- as.factor(AttritionDataset2$Attrition)
AttritionDataset2$JobRole <- as.factor(AttritionDataset2$JobRole)
AttritionDataset2$OverTime <- as.factor(AttritionDataset2$OverTime)
AttritionDataset2$Attrition <- as.integer(AttritionDataset2$Attrition)
AttritionDataset2 <- mutate(AttritionDataset2,
                            Attrition = sjmisc::rec(Attrition, rec = "2=1; 1=0"))
str(AttritionDataset2)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   1470 obs. of  6 variables:
 $ Attrition     : num  1 0 1 0 0 0 0 0 0 0 ...
 $ JobRole       : Factor w/ 9 levels "Healthcare Representative",..: 8 7 3 7 3 3 3 3 5 1 ...
 $ JobInvolvement: int  3 2 2 3 3 3 4 3 2 3 ...
 $ MonthlyIncome : int  5993 5130 2090 2909 3468 3068 2670 2693 9526 5237 ...
 $ OverTime      : Factor w/ 2 levels "No","Yes": 2 1 2 2 1 1 2 1 1 1 ...
 $ Age           : int  41 49 37 33 27 32 59 30 38 36 ...

Logistic Regression Models

Model 1

Examining one independent variable: Job role
Model 1 examines the influence of job role on the likelihood of attrition. The results show that sales representatives have the highest log odds ratio of leaving IBM. Being a sales representative increases the log odds ratio of attrition by 2.19. Contrarily, research directors are the least likely to resign from the company. Being a research director reduces the log odds ratio of attrition by 1.05.

m1 <- glm(Attrition ~ JobRole, family = binomial, data = AttritionDataset2)
summary(m1)

Call:
glm(formula = Attrition ~ JobRole, family = binomial, data = AttritionDataset2)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.0068  -0.6200  -0.5925  -0.3170   2.7162  

Coefficients:
                               Estimate Std. Error z value Pr(>|z|)    
(Intercept)                   -2.606796   0.345410  -7.547 4.45e-14 ***
JobRoleHuman Resources         1.402824   0.477118   2.940 0.003280 ** 
JobRoleLaboratory Technician   1.450727   0.374851   3.870 0.000109 ***
JobRoleManager                -0.358477   0.574123  -0.624 0.532371    
JobRoleManufacturing Director  0.004107   0.476146   0.009 0.993118    
JobRoleResearch Director      -1.056765   0.795058  -1.329 0.183793    
JobRoleResearch Scientist      0.955686   0.380350   2.513 0.011983 *  
JobRoleSales Executive         1.055136   0.374926   2.814 0.004889 ** 
JobRoleSales Representative    2.191281   0.411838   5.321 1.03e-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: 1209.7  on 1461  degrees of freedom
AIC: 1227.7

Number of Fisher Scoring iterations: 6

Model 2

Adding additional independent variables: Job involvement, monthly income
Model 2 examines how job role, job involvement, and monthly income influence the likelihood of attrition. Model 2 shows that sales representatives have the highest log odds ratio of leaving IBM. As the level of job involvement increases, the log odds ratio of attrition decreases, but only by a slight margin. It also shows that one unit increase in monthly income decreases the log odds ratio of attrition by .00002768, however it is not significant.

m2 <- glm(Attrition ~ JobRole + JobInvolvement + MonthlyIncome, family = binomial, data = AttritionDataset2)
summary(m2)

Call:
glm(formula = Attrition ~ JobRole + JobInvolvement + MonthlyIncome, 
    family = binomial, data = AttritionDataset2)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.3047  -0.6733  -0.5400  -0.2900   2.8091  

Coefficients:
                                Estimate Std. Error z value Pr(>|z|)    
(Intercept)                   -1.134e+00  5.400e-01  -2.101  0.03565 *  
JobRoleHuman Resources         1.326e+00  4.994e-01   2.655  0.00793 ** 
JobRoleLaboratory Technician   1.336e+00  4.163e-01   3.208  0.00134 ** 
JobRoleManager                -6.147e-02  7.013e-01  -0.088  0.93015    
JobRoleManufacturing Director -2.181e-02  4.784e-01  -0.046  0.96364    
JobRoleResearch Director      -8.030e-01  8.696e-01  -0.923  0.35582    
JobRoleResearch Scientist      8.839e-01  4.216e-01   2.096  0.03605 *  
JobRoleSales Executive         1.046e+00  3.779e-01   2.769  0.00562 ** 
JobRoleSales Representative    2.061e+00  4.612e-01   4.469 7.86e-06 ***
JobInvolvement                -4.825e-01  1.006e-01  -4.797 1.61e-06 ***
MonthlyIncome                 -2.768e-05  4.148e-05  -0.667  0.50450    
---
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: 1186.5  on 1459  degrees of freedom
AIC: 1208.5

Number of Fisher Scoring iterations: 6

Model 3

Adding additional independent variables: Overtime, Age
Model 3 builds on model 2 by examining overtime and age in addition to job role, job involvement, and monthly income. The first new variable, overtime, shows that for those who have worked overtime, the log odds ratio of attrition is 1.51 higher than those who have not. The second new variable introduced, age, shows that one unit increase in age reduces the likelihood of leaving IBM by 0.032. Both variables are significant.

m3 <- glm(Attrition ~ JobRole + JobInvolvement + MonthlyIncome + OverTime + Age, family = binomial, data = AttritionDataset2)
summary(m3)

Call:
glm(formula = Attrition ~ JobRole + JobInvolvement + MonthlyIncome + 
    OverTime + Age, family = binomial, data = AttritionDataset2)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.7072  -0.5763  -0.4102  -0.2323   2.9781  

Coefficients:
                                Estimate Std. Error z value Pr(>|z|)    
(Intercept)                   -7.114e-01  6.246e-01  -1.139 0.254664    
JobRoleHuman Resources         1.445e+00  5.154e-01   2.803 0.005058 ** 
JobRoleLaboratory Technician   1.454e+00  4.291e-01   3.389 0.000701 ***
JobRoleManager                -1.153e-01  7.132e-01  -0.162 0.871594    
JobRoleManufacturing Director -2.999e-02  4.883e-01  -0.061 0.951030    
JobRoleResearch Director      -9.745e-01  8.794e-01  -1.108 0.267770    
JobRoleResearch Scientist      7.680e-01  4.344e-01   1.768 0.077049 .  
JobRoleSales Executive         1.014e+00  3.879e-01   2.615 0.008933 ** 
JobRoleSales Representative    2.086e+00  4.790e-01   4.354 1.34e-05 ***
JobInvolvement                -4.905e-01  1.054e-01  -4.653 3.28e-06 ***
MonthlyIncome                  2.461e-06  4.497e-05   0.055 0.956358    
OverTimeYes                    1.513e+00  1.593e-01   9.492  < 2e-16 ***
Age                           -3.204e-02  1.036e-02  -3.093 0.001982 ** 
---
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: 1085.6  on 1457  degrees of freedom
AIC: 1111.6

Number of Fisher Scoring iterations: 6

Model 4

Testing the interaction between overtime and monthly income
Model 4 includes all variables and also tests the interaction between overtime and monthly income. The results show that the effect of working overtime on the log odds ratio of attrition does not depend on how much the employee makes (or does not make) in monthly income. The interaction is insignificant.

m4 <- glm(Attrition ~ OverTime*MonthlyIncome + JobInvolvement + JobRole + Age, family = binomial, data = AttritionDataset2)
summary(m4)

Call:
glm(formula = Attrition ~ OverTime * MonthlyIncome + JobInvolvement + 
    JobRole + Age, family = binomial, data = AttritionDataset2)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.7141  -0.5696  -0.4020  -0.2470   2.8187  

Coefficients:
                                Estimate Std. Error z value Pr(>|z|)    
(Intercept)                   -8.705e-01  6.342e-01  -1.373 0.169851    
OverTimeYes                    1.846e+00  2.841e-01   6.497 8.20e-11 ***
MonthlyIncome                  3.352e-05  4.937e-05   0.679 0.497142    
JobInvolvement                -4.870e-01  1.057e-01  -4.606 4.10e-06 ***
JobRoleHuman Resources         1.438e+00  5.143e-01   2.796 0.005180 ** 
JobRoleLaboratory Technician   1.459e+00  4.275e-01   3.412 0.000645 ***
JobRoleManager                -1.430e-01  7.140e-01  -0.200 0.841275    
JobRoleManufacturing Director -3.272e-02  4.866e-01  -0.067 0.946387    
JobRoleResearch Director      -9.680e-01  8.782e-01  -1.102 0.270373    
JobRoleResearch Scientist      7.427e-01  4.335e-01   1.714 0.086610 .  
JobRoleSales Executive         9.994e-01  3.863e-01   2.587 0.009677 ** 
JobRoleSales Representative    2.099e+00  4.788e-01   4.383 1.17e-05 ***
Age                           -3.193e-02  1.038e-02  -3.075 0.002102 ** 
OverTimeYes:MonthlyIncome     -6.424e-05  4.516e-05  -1.423 0.154880    
---
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: 1083.6  on 1456  degrees of freedom
AIC: 1111.6

Number of Fisher Scoring iterations: 6

Model 5

Testing the interaction between Job role and Job involvement
Model 5 includes all variables and also tests the interaction between job role and job involvement. The results of the interaction show that the effect of job role on the log odds ratio of attrition does not depend on job involvement. The interaction is not significant.

m5 <- glm(Attrition ~ JobRole*JobInvolvement + Age + MonthlyIncome + OverTime, family = binomial, data = AttritionDataset2)
summary(m5)

Call:
glm(formula = Attrition ~ JobRole * JobInvolvement + Age + MonthlyIncome + 
    OverTime, family = binomial, data = AttritionDataset2)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.8567  -0.5811  -0.4030  -0.2361   2.9056  

Coefficients:
                                               Estimate Std. Error z value Pr(>|z|)
(Intercept)                                  -1.423e+00  1.398e+00  -1.018  0.30882
JobRoleHuman Resources                        2.972e+00  1.862e+00   1.596  0.11049
JobRoleLaboratory Technician                  1.851e+00  1.433e+00   1.292  0.19640
JobRoleManager                                2.552e+00  2.061e+00   1.238  0.21572
JobRoleManufacturing Director                -2.612e-02  1.819e+00  -0.014  0.98854
JobRoleResearch Director                     -3.064e+00  3.736e+00  -0.820  0.41211
JobRoleResearch Scientist                     1.734e+00  1.470e+00   1.179  0.23839
JobRoleSales Executive                        1.682e+00  1.425e+00   1.180  0.23787
JobRoleSales Representative                   3.337e+00  1.623e+00   2.056  0.03977
JobInvolvement                               -2.180e-01  4.697e-01  -0.464  0.64253
Age                                          -3.204e-02  1.041e-02  -3.077  0.00209
MonthlyIncome                                 2.286e-06  4.537e-05   0.050  0.95981
OverTimeYes                                   1.516e+00  1.602e-01   9.467  < 2e-16
JobRoleHuman Resources:JobInvolvement        -5.897e-01  6.871e-01  -0.858  0.39076
JobRoleLaboratory Technician:JobInvolvement  -1.510e-01  5.108e-01  -0.296  0.76746
JobRoleManager:JobInvolvement                -1.063e+00  7.842e-01  -1.355  0.17529
JobRoleManufacturing Director:JobInvolvement  4.360e-03  6.638e-01   0.007  0.99476
JobRoleResearch Director:JobInvolvement       7.346e-01  1.233e+00   0.596  0.55128
JobRoleResearch Scientist:JobInvolvement     -3.702e-01  5.243e-01  -0.706  0.48016
JobRoleSales Executive:JobInvolvement        -2.556e-01  5.156e-01  -0.496  0.62009
JobRoleSales Representative:JobInvolvement   -4.803e-01  5.836e-01  -0.823  0.41049
                                                
(Intercept)                                     
JobRoleHuman Resources                          
JobRoleLaboratory Technician                    
JobRoleManager                                  
JobRoleManufacturing Director                   
JobRoleResearch Director                        
JobRoleResearch Scientist                       
JobRoleSales Executive                          
JobRoleSales Representative                  *  
JobInvolvement                                  
Age                                          ** 
MonthlyIncome                                   
OverTimeYes                                  ***
JobRoleHuman Resources:JobInvolvement           
JobRoleLaboratory Technician:JobInvolvement     
JobRoleManager:JobInvolvement                   
JobRoleManufacturing Director:JobInvolvement    
JobRoleResearch Director:JobInvolvement         
JobRoleResearch Scientist:JobInvolvement        
JobRoleSales Executive:JobInvolvement           
JobRoleSales Representative:JobInvolvement      
---
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: 1081.2  on 1449  degrees of freedom
AIC: 1123.2

Number of Fisher Scoring iterations: 6

Model 6

Testing the Interaction between overtime and job involvement
Model 6 includes all variables and also tests the interaction between overtime and job involvement. The results show that the effect of working overtime on the log odds ratio of attrition does not depend on an employee’s involvement in the company. The interaction is not significant.

m6 <- glm(Attrition ~ OverTime*JobInvolvement + JobRole + MonthlyIncome + OverTime, family = binomial, data = AttritionDataset2)
summary(m6)

Call:
glm(formula = Attrition ~ OverTime * JobInvolvement + JobRole + 
    MonthlyIncome + OverTime, family = binomial, data = AttritionDataset2)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.7560  -0.5621  -0.4106  -0.2355   3.0578  

Coefficients:
                                Estimate Std. Error z value Pr(>|z|)    
(Intercept)                   -1.5416467  0.6090726  -2.531 0.011369 *  
OverTimeYes                    1.4012113  0.5727265   2.447 0.014423 *  
JobInvolvement                -0.5260575  0.1398329  -3.762 0.000169 ***
JobRoleHuman Resources         1.4428322  0.5145547   2.804 0.005047 ** 
JobRoleLaboratory Technician   1.4519333  0.4281664   3.391 0.000696 ***
JobRoleManager                 0.0896110  0.7066352   0.127 0.899088    
JobRoleManufacturing Director -0.0021027  0.4879250  -0.004 0.996562    
JobRoleResearch Director      -0.7326825  0.8765523  -0.836 0.403229    
JobRoleResearch Scientist      0.7746040  0.4329809   1.789 0.073614 .  
JobRoleSales Executive         1.0866241  0.3873412   2.805 0.005026 ** 
JobRoleSales Representative    2.1574349  0.4776540   4.517 6.28e-06 ***
MonthlyIncome                 -0.0000416  0.0000423  -0.984 0.325360    
OverTimeYes:JobInvolvement     0.0349531  0.2115103   0.165 0.868743    
---
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.6  on 1457  degrees of freedom
AIC: 1121.6

Number of Fisher Scoring iterations: 6

Model 7

Testing the Interaction between age and job role
Model 7 includes all variables and also tests the interaction between age and job role. The results show that the effect of age on the log odds ratio of attrition does not depend on an employee’s role in the company. The interaction is not significant.

m7 <- glm(Attrition ~ Age*JobRole + JobInvolvement + MonthlyIncome + OverTime, family = binomial, data = AttritionDataset2)
summary(m7)

Call:
glm(formula = Attrition ~ Age * JobRole + JobInvolvement + MonthlyIncome + 
    OverTime, family = binomial, data = AttritionDataset2)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.7122  -0.5645  -0.4041  -0.2192   3.2265  

Coefficients:
                                    Estimate Std. Error z value Pr(>|z|)    
(Intercept)                       -7.195e-01  1.735e+00  -0.415   0.6785    
Age                               -2.815e-02  4.308e-02  -0.654   0.5134    
JobRoleHuman Resources             5.821e+00  2.637e+00   2.208   0.0273 *  
JobRoleLaboratory Technician       2.396e+00  1.826e+00   1.313   0.1893    
JobRoleManager                    -9.719e-01  3.537e+00  -0.275   0.7835    
JobRoleManufacturing Director     -1.033e+00  2.273e+00  -0.455   0.6494    
JobRoleResearch Director          -6.858e+00  5.825e+00  -1.177   0.2391    
JobRoleResearch Scientist          6.959e-01  1.847e+00   0.377   0.7063    
JobRoleSales Executive            -6.521e-01  1.846e+00  -0.353   0.7239    
JobRoleSales Representative        3.590e+00  1.953e+00   1.838   0.0661 .  
JobInvolvement                    -5.008e-01  1.071e-01  -4.676 2.93e-06 ***
MonthlyIncome                     -1.562e-05  4.551e-05  -0.343   0.7315    
OverTimeYes                        1.548e+00  1.623e-01   9.536  < 2e-16 ***
Age:JobRoleHuman Resources        -1.337e-01  7.543e-02  -1.772   0.0764 .  
Age:JobRoleLaboratory Technician  -3.029e-02  4.742e-02  -0.639   0.5229    
Age:JobRoleManager                 2.177e-02  7.805e-02   0.279   0.7803    
Age:JobRoleManufacturing Director  2.612e-02  5.683e-02   0.460   0.6458    
Age:JobRoleResearch Director       1.302e-01  1.198e-01   1.087   0.2772    
Age:JobRoleResearch Scientist      5.198e-04  4.789e-02   0.011   0.9913    
Age:JobRoleSales Executive         4.555e-02  4.671e-02   0.975   0.3295    
Age:JobRoleSales Representative   -5.162e-02  5.315e-02  -0.971   0.3314    
---
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: 1066.9  on 1449  degrees of freedom
AIC: 1108.9

Number of Fisher Scoring iterations: 7

Model Selection: Likelihood Ratio Test

Lower deviance means better fit to data. According to the likelihood ratio test results, model 7 presents the lowest residual deviance compared to the other models. It should be noted, however, that the interaction term in this model proved to be insignificant. Instead, it can be argued that model 3 is the best fitting model for this data. If we take into into account the statistical significance of the predictors and the use of as few variables as possible, model 3 is considered the strongest. Furthermore, it produces the greatest decrease in deviance when compared to the other models. The BIC score (as can be seen in the upcoming model comparison table) also maintains that model 3 is the best fitting model for this data.

anova(m1, m2, m3, m4, m5, m6, m7, test = "Chisq")
Analysis of Deviance Table

Model 1: Attrition ~ JobRole
Model 2: Attrition ~ JobRole + JobInvolvement + MonthlyIncome
Model 3: Attrition ~ JobRole + JobInvolvement + MonthlyIncome + OverTime + 
    Age
Model 4: Attrition ~ OverTime * MonthlyIncome + JobInvolvement + JobRole + 
    Age
Model 5: Attrition ~ JobRole * JobInvolvement + Age + MonthlyIncome + 
    OverTime
Model 6: Attrition ~ OverTime * JobInvolvement + JobRole + MonthlyIncome + 
    OverTime
Model 7: Attrition ~ Age * JobRole + JobInvolvement + MonthlyIncome + 
    OverTime
  Resid. Df Resid. Dev Df Deviance  Pr(>Chi)    
1      1461     1209.7                          
2      1459     1186.5  2   23.141 9.441e-06 ***
3      1457     1085.6  2  100.896 < 2.2e-16 ***
4      1456     1083.6  1    2.042 0.1529822    
5      1449     1081.2  7    2.426 0.9325715    
6      1457     1095.6 -8  -14.471 0.0702864 .  
7      1449     1066.9  8   28.707 0.0003569 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Model Comparison

The AIC score is lowest in Model 7, while the BIC score is the lowest in Model 3.

library(texreg)
htmlreg(list(m1, m2, m3, m4, m5, m6, m7))
Statistical models
Model 1 Model 2 Model 3 Model 4 Model 5 Model 6 Model 7
(Intercept) -2.61*** -1.13* -0.71 -0.87 -1.42 -1.54* -0.72
(0.35) (0.54) (0.62) (0.63) (1.40) (0.61) (1.74)
JobRoleHuman Resources 1.40** 1.33** 1.44** 1.44** 2.97 1.44** 5.82*
(0.48) (0.50) (0.52) (0.51) (1.86) (0.51) (2.64)
JobRoleLaboratory Technician 1.45*** 1.34** 1.45*** 1.46*** 1.85 1.45*** 2.40
(0.37) (0.42) (0.43) (0.43) (1.43) (0.43) (1.83)
JobRoleManager -0.36 -0.06 -0.12 -0.14 2.55 0.09 -0.97
(0.57) (0.70) (0.71) (0.71) (2.06) (0.71) (3.54)
JobRoleManufacturing Director 0.00 -0.02 -0.03 -0.03 -0.03 -0.00 -1.03
(0.48) (0.48) (0.49) (0.49) (1.82) (0.49) (2.27)
JobRoleResearch Director -1.06 -0.80 -0.97 -0.97 -3.06 -0.73 -6.86
(0.80) (0.87) (0.88) (0.88) (3.74) (0.88) (5.82)
JobRoleResearch Scientist 0.96* 0.88* 0.77 0.74 1.73 0.77 0.70
(0.38) (0.42) (0.43) (0.43) (1.47) (0.43) (1.85)
JobRoleSales Executive 1.06** 1.05** 1.01** 1.00** 1.68 1.09** -0.65
(0.37) (0.38) (0.39) (0.39) (1.42) (0.39) (1.85)
JobRoleSales Representative 2.19*** 2.06*** 2.09*** 2.10*** 3.34* 2.16*** 3.59
(0.41) (0.46) (0.48) (0.48) (1.62) (0.48) (1.95)
JobInvolvement -0.48*** -0.49*** -0.49*** -0.22 -0.53*** -0.50***
(0.10) (0.11) (0.11) (0.47) (0.14) (0.11)
MonthlyIncome -0.00 0.00 0.00 0.00 -0.00 -0.00
(0.00) (0.00) (0.00) (0.00) (0.00) (0.00)
OverTimeYes 1.51*** 1.85*** 1.52*** 1.40* 1.55***
(0.16) (0.28) (0.16) (0.57) (0.16)
Age -0.03** -0.03** -0.03** -0.03
(0.01) (0.01) (0.01) (0.04)
OverTimeYes:MonthlyIncome -0.00
(0.00)
JobRoleHuman Resources:JobInvolvement -0.59
(0.69)
JobRoleLaboratory Technician:JobInvolvement -0.15
(0.51)
JobRoleManager:JobInvolvement -1.06
(0.78)
JobRoleManufacturing Director:JobInvolvement 0.00
(0.66)
JobRoleResearch Director:JobInvolvement 0.73
(1.23)
JobRoleResearch Scientist:JobInvolvement -0.37
(0.52)
JobRoleSales Executive:JobInvolvement -0.26
(0.52)
JobRoleSales Representative:JobInvolvement -0.48
(0.58)
OverTimeYes:JobInvolvement 0.03
(0.21)
Age:JobRoleHuman Resources -0.13
(0.08)
Age:JobRoleLaboratory Technician -0.03
(0.05)
Age:JobRoleManager 0.02
(0.08)
Age:JobRoleManufacturing Director 0.03
(0.06)
Age:JobRoleResearch Director 0.13
(0.12)
Age:JobRoleResearch Scientist 0.00
(0.05)
Age:JobRoleSales Executive 0.05
(0.05)
Age:JobRoleSales Representative -0.05
(0.05)
AIC 1227.67 1208.53 1111.64 1111.60 1123.17 1121.64 1108.93
BIC 1275.31 1266.76 1180.45 1185.70 1234.32 1190.45 1220.09
Log Likelihood -604.84 -593.27 -542.82 -541.80 -540.58 -547.82 -533.47
Deviance 1209.67 1186.53 1085.64 1083.60 1081.17 1095.64 1066.93
Num. obs. 1470 1470 1470 1470 1470 1470 1470
p < 0.001, p < 0.01, p < 0.05

Figures

Figure 1. Attrition and Job Role

library(visreg)
visreg(m3, "JobRole", scale = "response")

Based on figure 1, the position with the highest likelihood of attrition are sales representatives.


Figure 2. Attrition and Job Involvement

library(visreg)
visreg(m3, "JobInvolvement", scale = "response")

The higher the level of involvement, the least likely an employee is to leave. Employees with little involvement in the company have the highest log odds ratio of attrition.


Figure 3. Attrition and Overtime

library(visreg)
visreg(m3, "OverTime", scale = "response")

The log odds ratio of attrition for employees who work overtime is substantially higher than those who do not.


Figure 4. Attrition and Age

library(visreg)
visreg(m3, "Age", scale = "response")

As age increases, the log odds ratio of attrition decreases. Older employees are more likely to stay with the company, while the younger are more likely to leave.


Analysis of Results

The results revealed that sales representatives are significantly more likely to leave IBM than any other position. Further studies will need to be done to examine why this is case. What is it about this particular position that increases the likelihood of attrition? It is worthy of a closer examination. Furthermore, it can also be said that as job involvement increases, the log odds ratio of leaving IBM decreases. Essentially, the more involved IBM employees are in the company, the less likely they are to resign. Employees with little involvement have the highest log odds ratio of attrition. The results also revealed that working overtime has a significant detrimental effect on the likelihood of remaining with IBM. The log odds ratio of employee turnover is 1.51 higher for employees who have worked overtime than for those who have not. Finally, it can be said that older employees are slightly less likely to leave IBM than younger ones. For every unit increase in age, the log odds ratio of attrition decreases by 0.032. Ultimately, these findings provided meaningful insight into attrition and the factors that influence it within IBM.

LS0tDQp0aXRsZTogIlNvYyA3MTIgSG9tZXdvcmsgIzUiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KI0xvZ2lzdGljIFJlZ3Jlc3Npb246IFByZWRpY3RpbmcgSUJNIEVtcGxveWVlIEF0dHJpdGlvbiANCg0KIyMgSW5yb2R1Y3Rpb24gDQoNClRoaXMgYW5hbHlzaXMgdXRpbGl6ZXMgSUJNIGVtcGxveWVlIGF0dHJpdGlvbiBkYXRhIHJldHJpZXZlZCBmcm9tIEthZ2dsZS4gSXQgaXMgY29tcHJpc2VkIG9mIDEsNDcwIG9ic2VydmF0aW9ucyBhbmQgMzUgdmFyaWFibGVzOyB0aGUgYmluYXJ5IG91dGNvbWUgdmFyaWFibGUgaXMgYXR0cml0aW9uIChZZXMvTm8pIGFuZCB0aGVyZSBhcmUgMzMgcG9zc2libGUgcHJlZGljdG9yIHZhcmlhYmxlcy4gVGhlIHRhc2sgaXMgdG8gdXNlIGxvZ2lzdGljIHJlZ3Jlc3Npb24gbW9kZWxpbmcgdG8gZXN0aW1hdGUgdGhlIHByb2JhYmlsaXR5IG9mIElCTSBlbXBsb3llZSBhdHRyaXRpb24gYmFzZWQgb24gc2VsZWN0ZWQgdmFyaWFibGVzLiANCldoaWxlIGEgbW9yZSB0aG9yb3VnaCBhbmFseXNpcyB3b3VsZCBleGFtaW5lIGFsbCBwcmVkaWN0b3JzLCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgYXNzaWdubWVudCwgSSBvbmx5IHNlbGVjdGVkIGZpdmUgaW5kZXBlbmRlbnQgdmFyaWFibGVzOiAqKmpvYiByb2xlKiosICoqam9iIGludm9sdmVtZW50KiosICoqbW9udGhseSBpbmNvbWUqKiwgKipvdmVydGltZSoqLCBhbmQgKiphZ2UqKi4gVGhlIGdvYWwgaXMgdG8gYmUgYWJsZSB0byBhbnN3ZXIgdGhlIGZvbGxvd2luZyBxdWVzdGlvbjogKipXaGF0IGtpbmQgb2YgZW1wbG95ZWVzIGFyZSBtb3JlIGluY2xpbmVkIHRvIGxlYXZlIElCTT8qKiBNb3JlIHNwZWNpZmljYWxseSwgYXJlIGVtcGxveWVlcyBpbiBjZXJ0YWluIHBvc2l0aW9ucyBtb3JlIGxpa2VseSB0byBsZWF2ZSBJQk0gdGhhbiBvdGhlcnM/IERvZXMgdGhlIGxldmVsIG9mIGpvYiBpbnZvbHZlbWVudCBpbmNyZWFzZSBvciBkZWNyZWFzZSB0aGUgbGlrZWxpaG9vZCBvZiBhdHRyaXRpb24/IFdoYXQgaW1wYWN0IGRvZXMgbW9udGhseSBpbmNvbWUgYW5kIHdvcmtpbmcgb3ZlcnRpbWUgaGF2ZT8gV2hhdCBlZmZlY3QgZG9lcyBhZ2UgaGF2ZSBvbiBsaWtlbGlob29kIG9mIGF0dHJpdGlvbj8gDQoNCi0tLQ0KDQojIyBEYXRhIGFuZCBWYXJpYWJsZXMNCg0KVGhlIHZhcmlhYmxlcyBzZWxlY3RlZCBmb3IgdGhpcyBhbmFseXNpcyBhcmUgYXMgZm9sbG93czoNCg0KKiAqKkF0dHJpdGlvbioqIC0gQXR0cml0aW9uIHdpbGwgYWN0IGFzIHRoZSBiaW5hcnkgZGVwZW5kZW50IHZhcmlhYmxlIGluIHRoaXMgYW5hbHlzaXM7dGhlIHJlc3BvbnNlcyBhcmUgZWl0aGVyICJZZXMiIG9yICJObyIuDQoqICoqSm9iUm9sZSoqIC0gVGhpcyB2YXJpYWJsZSBkZXNjcmliZXMgdGhlIDkgcG9zaXRpb25zIGhlbGQgYXQgdGhlIGNvbXBhbnk6IEhlYWx0aGNhcmUgUmVwcmVzZW50YXRpdmUsIEh1bWFuIFJlc291cmNlcywgTGFib3JhdG9yeSBUZWNobmljaWFuLCBNYW5hZ2VyLCBNYW51ZmFjdHVyaW5nIERpcmVjdG9yLCBSZXNlYXJjaCBEaXJlY3RvciwgUmVzZWFyY2ggU2NpZW50aXN0LCBTYWxlcyBFeGVjdXRpdmUsIGFuZCBTYWxlcyBSZXByZXNlbnRhdGl2ZS4NCiogKipKb2JJbnZvbHZlbWVudCoqIC0gVGhpcyB2YXJpYWJsZSBtZWFzdXJlcyBlbXBsb3llZSBpbnZvbHZlbWVudCBpbiB0aGUgY29tcGFueSBvbiBhIDEgdG8gNCBzY2FsZS4gWzEgJ0xvdycgMiAnTWVkaXVtJyAzICdIaWdoJyA0ICdWZXJ5IEhpZ2gnXQ0KKiAqKk1vbnRobHlJbmNvbWUqKiANCiogKipPdmVyVGltZSoqIC0gVGhpcyB2YXJpYWJsZSBkZXNjcmliZXMgd2hldGhlciBvciBub3QgdGhlIGVtcGxveWVlIHJlZ3VsYXJseSB3b3JrcyBvdmVydGltZTsgdGhlIHJlc3BvbnNlcyBhcmUgZWl0aGVyICJZZXMiIG9yICJObyIuIA0KKiAqKkFnZSoqIA0KDQpgYGB7cn0NCmxpYnJhcnkocmVhZHIpDQpBdHRyaXRpb25EYXRhc2V0IDwtIHJlYWRfY3N2KCJDOi9Vc2Vycy9SYXZlbi9EZXNrdG9wL0F0dHJpdGlvbkRhdGFzZXQueGxzIikNCmBgYA0KYGBge3J9DQpoZWFkKEF0dHJpdGlvbkRhdGFzZXQpDQpgYGANCiANCg0KYGBge3J9DQpsaWJyYXJ5KGRwbHlyKQ0KQXR0cml0aW9uRGF0YXNldDIgPC0gc2VsZWN0KEF0dHJpdGlvbkRhdGFzZXQsIA0KICAgICAgICAgICAgICAgQXR0cml0aW9uLCBKb2JSb2xlLCBKb2JJbnZvbHZlbWVudCwgTW9udGhseUluY29tZSwgT3ZlclRpbWUsIEFnZSkNCmBgYA0KDQpgYGB7cn0NCkF0dHJpdGlvbkRhdGFzZXQyJEF0dHJpdGlvbiA8LSBhcy5mYWN0b3IoQXR0cml0aW9uRGF0YXNldDIkQXR0cml0aW9uKQ0KQXR0cml0aW9uRGF0YXNldDIkSm9iUm9sZSA8LSBhcy5mYWN0b3IoQXR0cml0aW9uRGF0YXNldDIkSm9iUm9sZSkNCkF0dHJpdGlvbkRhdGFzZXQyJE92ZXJUaW1lIDwtIGFzLmZhY3RvcihBdHRyaXRpb25EYXRhc2V0MiRPdmVyVGltZSkNCmBgYA0KDQpgYGB7cn0NCkF0dHJpdGlvbkRhdGFzZXQyJEF0dHJpdGlvbiA8LSBhcy5pbnRlZ2VyKEF0dHJpdGlvbkRhdGFzZXQyJEF0dHJpdGlvbikNCmBgYA0KDQpgYGB7cn0NCkF0dHJpdGlvbkRhdGFzZXQyIDwtIG11dGF0ZShBdHRyaXRpb25EYXRhc2V0MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyaXRpb24gPSBzam1pc2M6OnJlYyhBdHRyaXRpb24sIHJlYyA9ICIyPTE7IDE9MCIpKQ0Kc3RyKEF0dHJpdGlvbkRhdGFzZXQyKQ0KYGBgDQoNCi0tLQ0KDQojIyAgTG9naXN0aWMgUmVncmVzc2lvbiBNb2RlbHMNCg0KIyMjIE1vZGVsIDEgDQoNCioqRXhhbWluaW5nIG9uZSBpbmRlcGVuZGVudCB2YXJpYWJsZTogSm9iIHJvbGUqKiAgDQpNb2RlbCAxIGV4YW1pbmVzIHRoZSBpbmZsdWVuY2Ugb2Ygam9iIHJvbGUgb24gdGhlIGxpa2VsaWhvb2Qgb2YgYXR0cml0aW9uLiBUaGUgcmVzdWx0cyBzaG93IHRoYXQgc2FsZXMgcmVwcmVzZW50YXRpdmVzIGhhdmUgdGhlIGhpZ2hlc3QgbG9nIG9kZHMgcmF0aW8gb2YgbGVhdmluZyBJQk0uIEJlaW5nIGEgc2FsZXMgcmVwcmVzZW50YXRpdmUgaW5jcmVhc2VzIHRoZSBsb2cgb2RkcyByYXRpbyBvZiBhdHRyaXRpb24gYnkgMi4xOS4gQ29udHJhcmlseSwgcmVzZWFyY2ggZGlyZWN0b3JzIGFyZSB0aGUgbGVhc3QgbGlrZWx5IHRvIHJlc2lnbiBmcm9tIHRoZSBjb21wYW55LiBCZWluZyBhIHJlc2VhcmNoIGRpcmVjdG9yIHJlZHVjZXMgdGhlIGxvZyBvZGRzIHJhdGlvIG9mIGF0dHJpdGlvbiBieSAxLjA1LiANCmBgYHtyfQ0KbTEgPC0gZ2xtKEF0dHJpdGlvbiB+IEpvYlJvbGUsIGZhbWlseSA9IGJpbm9taWFsLCBkYXRhID0gQXR0cml0aW9uRGF0YXNldDIpDQpzdW1tYXJ5KG0xKQ0KYGBgDQoNCi0tLQ0KDQojIyMgTW9kZWwgMiANCg0KKipBZGRpbmcgYWRkaXRpb25hbCBpbmRlcGVuZGVudCB2YXJpYWJsZXM6IEpvYiBpbnZvbHZlbWVudCwgbW9udGhseSBpbmNvbWUqKiAgDQpNb2RlbCAyIGV4YW1pbmVzIGhvdyBqb2Igcm9sZSwgam9iIGludm9sdmVtZW50LCBhbmQgbW9udGhseSBpbmNvbWUgaW5mbHVlbmNlIHRoZSBsaWtlbGlob29kIG9mIGF0dHJpdGlvbi4gTW9kZWwgMiBzaG93cyB0aGF0IHNhbGVzIHJlcHJlc2VudGF0aXZlcyBoYXZlIHRoZSBoaWdoZXN0IGxvZyBvZGRzIHJhdGlvIG9mIGxlYXZpbmcgSUJNLiBBcyB0aGUgbGV2ZWwgb2Ygam9iIGludm9sdmVtZW50IGluY3JlYXNlcywgdGhlIGxvZyBvZGRzIHJhdGlvIG9mIGF0dHJpdGlvbiBkZWNyZWFzZXMsIGJ1dCBvbmx5IGJ5IGEgc2xpZ2h0IG1hcmdpbi4gSXQgYWxzbyBzaG93cyB0aGF0IG9uZSB1bml0IGluY3JlYXNlIGluIG1vbnRobHkgaW5jb21lIGRlY3JlYXNlcyB0aGUgbG9nIG9kZHMgcmF0aW8gb2YgYXR0cml0aW9uIGJ5IC4wMDAwMjc2OCwgaG93ZXZlciBpdCBpcyBub3Qgc2lnbmlmaWNhbnQuDQpgYGB7cn0NCm0yIDwtIGdsbShBdHRyaXRpb24gfiBKb2JSb2xlICsgSm9iSW52b2x2ZW1lbnQgKyBNb250aGx5SW5jb21lLCBmYW1pbHkgPSBiaW5vbWlhbCwgZGF0YSA9IEF0dHJpdGlvbkRhdGFzZXQyKQ0Kc3VtbWFyeShtMikNCmBgYA0KDQotLS0NCg0KIyMjIE1vZGVsIDMNCg0KKipBZGRpbmcgYWRkaXRpb25hbCBpbmRlcGVuZGVudCB2YXJpYWJsZXM6IE92ZXJ0aW1lLCBBZ2UqKiAgDQpNb2RlbCAzIGJ1aWxkcyBvbiBtb2RlbCAyIGJ5IGV4YW1pbmluZyBvdmVydGltZSBhbmQgYWdlIGluIGFkZGl0aW9uIHRvIGpvYiByb2xlLCBqb2IgaW52b2x2ZW1lbnQsIGFuZCBtb250aGx5IGluY29tZS4gVGhlIGZpcnN0IG5ldyB2YXJpYWJsZSwgb3ZlcnRpbWUsIHNob3dzIHRoYXQgZm9yIHRob3NlIHdobyBoYXZlIHdvcmtlZCBvdmVydGltZSwgdGhlIGxvZyBvZGRzIHJhdGlvIG9mIGF0dHJpdGlvbiBpcyAxLjUxIGhpZ2hlciB0aGFuIHRob3NlIHdobyBoYXZlIG5vdC4gVGhlIHNlY29uZCBuZXcgdmFyaWFibGUgaW50cm9kdWNlZCwgYWdlLCBzaG93cyB0aGF0IG9uZSB1bml0IGluY3JlYXNlIGluIGFnZSByZWR1Y2VzIHRoZSBsaWtlbGlob29kIG9mIGxlYXZpbmcgSUJNIGJ5IDAuMDMyLiBCb3RoIHZhcmlhYmxlcyBhcmUgc2lnbmlmaWNhbnQuIA0KYGBge3J9DQptMyA8LSBnbG0oQXR0cml0aW9uIH4gSm9iUm9sZSArIEpvYkludm9sdmVtZW50ICsgTW9udGhseUluY29tZSArIE92ZXJUaW1lICsgQWdlLCBmYW1pbHkgPSBiaW5vbWlhbCwgZGF0YSA9IEF0dHJpdGlvbkRhdGFzZXQyKQ0Kc3VtbWFyeShtMykNCmBgYA0KDQotLS0NCg0KIyMjIE1vZGVsIDQNCg0KKipUZXN0aW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIG92ZXJ0aW1lIGFuZCBtb250aGx5IGluY29tZSoqICAgIA0KTW9kZWwgNCBpbmNsdWRlcyBhbGwgdmFyaWFibGVzIGFuZCBhbHNvIHRlc3RzIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIG92ZXJ0aW1lIGFuZCBtb250aGx5IGluY29tZS4gVGhlIHJlc3VsdHMgc2hvdyB0aGF0IHRoZSBlZmZlY3Qgb2Ygd29ya2luZyBvdmVydGltZSBvbiB0aGUgbG9nIG9kZHMgcmF0aW8gb2YgYXR0cml0aW9uIGRvZXMgKm5vdCogZGVwZW5kIG9uIGhvdyBtdWNoIHRoZSBlbXBsb3llZSBtYWtlcyAob3IgZG9lcyBub3QgbWFrZSkgaW4gbW9udGhseSBpbmNvbWUuIFRoZSBpbnRlcmFjdGlvbiBpcyBpbnNpZ25pZmljYW50LiANCmBgYHtyfQ0KbTQgPC0gZ2xtKEF0dHJpdGlvbiB+IE92ZXJUaW1lKk1vbnRobHlJbmNvbWUgKyBKb2JJbnZvbHZlbWVudCArIEpvYlJvbGUgKyBBZ2UsIGZhbWlseSA9IGJpbm9taWFsLCBkYXRhID0gQXR0cml0aW9uRGF0YXNldDIpDQpzdW1tYXJ5KG00KQ0KYGBgDQoNCi0tLQ0KDQojIyMgTW9kZWwgNSANCg0KKipUZXN0aW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIEpvYiByb2xlIGFuZCBKb2IgaW52b2x2ZW1lbnQqKiAgICANCk1vZGVsIDUgaW5jbHVkZXMgYWxsIHZhcmlhYmxlcyBhbmQgYWxzbyB0ZXN0cyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBqb2Igcm9sZSBhbmQgam9iIGludm9sdmVtZW50LiBUaGUgcmVzdWx0cyBvZiB0aGUgaW50ZXJhY3Rpb24gc2hvdyB0aGF0IHRoZSBlZmZlY3Qgb2Ygam9iIHJvbGUgb24gdGhlIGxvZyBvZGRzIHJhdGlvIG9mIGF0dHJpdGlvbiBkb2VzICpub3QqIGRlcGVuZCBvbiBqb2IgaW52b2x2ZW1lbnQuIFRoZSBpbnRlcmFjdGlvbiBpcyBub3Qgc2lnbmlmaWNhbnQuIA0KYGBge3J9DQptNSA8LSBnbG0oQXR0cml0aW9uIH4gSm9iUm9sZSpKb2JJbnZvbHZlbWVudCArIEFnZSArIE1vbnRobHlJbmNvbWUgKyBPdmVyVGltZSwgZmFtaWx5ID0gYmlub21pYWwsIGRhdGEgPSBBdHRyaXRpb25EYXRhc2V0MikNCnN1bW1hcnkobTUpDQpgYGANCg0KLS0tDQoNCiMjIyBNb2RlbCA2DQoNCioqVGVzdGluZyB0aGUgSW50ZXJhY3Rpb24gYmV0d2VlbiBvdmVydGltZSBhbmQgam9iIGludm9sdmVtZW50KiogICAgDQpNb2RlbCA2IGluY2x1ZGVzIGFsbCB2YXJpYWJsZXMgYW5kIGFsc28gdGVzdHMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gb3ZlcnRpbWUgYW5kIGpvYiBpbnZvbHZlbWVudC4gVGhlIHJlc3VsdHMgc2hvdyB0aGF0IHRoZSBlZmZlY3Qgb2Ygd29ya2luZyBvdmVydGltZSBvbiB0aGUgbG9nIG9kZHMgcmF0aW8gb2YgYXR0cml0aW9uIGRvZXMgKm5vdCogZGVwZW5kIG9uIGFuIGVtcGxveWVlJ3MgaW52b2x2ZW1lbnQgaW4gdGhlIGNvbXBhbnkuIFRoZSBpbnRlcmFjdGlvbiBpcyBub3Qgc2lnbmlmaWNhbnQuDQoNCg0KYGBge3J9DQptNiA8LSBnbG0oQXR0cml0aW9uIH4gT3ZlclRpbWUqSm9iSW52b2x2ZW1lbnQgKyBKb2JSb2xlICsgTW9udGhseUluY29tZSArIE92ZXJUaW1lLCBmYW1pbHkgPSBiaW5vbWlhbCwgZGF0YSA9IEF0dHJpdGlvbkRhdGFzZXQyKQ0Kc3VtbWFyeShtNikNCmBgYA0KDQotLS0NCg0KIyMjIE1vZGVsIDcNCg0KKipUZXN0aW5nIHRoZSBJbnRlcmFjdGlvbiBiZXR3ZWVuIGFnZSBhbmQgam9iIHJvbGUqKiAgICANCk1vZGVsIDcgaW5jbHVkZXMgYWxsIHZhcmlhYmxlcyBhbmQgYWxzbyB0ZXN0cyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBhZ2UgYW5kIGpvYiByb2xlLiBUaGUgcmVzdWx0cyBzaG93IHRoYXQgdGhlIGVmZmVjdCBvZiBhZ2Ugb24gdGhlIGxvZyBvZGRzIHJhdGlvIG9mIGF0dHJpdGlvbiBkb2VzICpub3QqIGRlcGVuZCBvbiBhbiBlbXBsb3llZSdzIHJvbGUgaW4gdGhlIGNvbXBhbnkuIFRoZSBpbnRlcmFjdGlvbiBpcyBub3Qgc2lnbmlmaWNhbnQuDQpgYGB7cn0NCm03IDwtIGdsbShBdHRyaXRpb24gfiBBZ2UqSm9iUm9sZSArIEpvYkludm9sdmVtZW50ICsgTW9udGhseUluY29tZSArIE92ZXJUaW1lLCBmYW1pbHkgPSBiaW5vbWlhbCwgZGF0YSA9IEF0dHJpdGlvbkRhdGFzZXQyKQ0Kc3VtbWFyeShtNykNCmBgYA0KDQotLS0NCg0KIyMgTW9kZWwgU2VsZWN0aW9uOiBMaWtlbGlob29kIFJhdGlvIFRlc3QgDQoNCkxvd2VyIGRldmlhbmNlIG1lYW5zIGJldHRlciBmaXQgdG8gZGF0YS4gQWNjb3JkaW5nIHRvIHRoZSBsaWtlbGlob29kIHJhdGlvIHRlc3QgcmVzdWx0cywgbW9kZWwgNyBwcmVzZW50cyB0aGUgbG93ZXN0IHJlc2lkdWFsIGRldmlhbmNlIGNvbXBhcmVkIHRvIHRoZSBvdGhlciBtb2RlbHMuIEl0IHNob3VsZCBiZSBub3RlZCwgaG93ZXZlciwgdGhhdCB0aGUgaW50ZXJhY3Rpb24gdGVybSBpbiB0aGlzIG1vZGVsIHByb3ZlZCB0byBiZSBpbnNpZ25pZmljYW50LiBJbnN0ZWFkLCBpdCBjYW4gYmUgYXJndWVkIHRoYXQgbW9kZWwgMyBpcyB0aGUgYmVzdCBmaXR0aW5nIG1vZGVsIGZvciB0aGlzIGRhdGEuIElmIHdlIHRha2UgaW50byBpbnRvIGFjY291bnQgdGhlIHN0YXRpc3RpY2FsIHNpZ25pZmljYW5jZSBvZiB0aGUgcHJlZGljdG9ycyBhbmQgdGhlIHVzZSBvZiBhcyBmZXcgdmFyaWFibGVzIGFzIHBvc3NpYmxlLCBtb2RlbCAzIGlzIGNvbnNpZGVyZWQgdGhlIHN0cm9uZ2VzdC4gRnVydGhlcm1vcmUsIGl0IHByb2R1Y2VzIHRoZSBncmVhdGVzdCBkZWNyZWFzZSBpbiBkZXZpYW5jZSB3aGVuIGNvbXBhcmVkIHRvIHRoZSBvdGhlciBtb2RlbHMuIFRoZSBCSUMgc2NvcmUgKGFzIGNhbiBiZSBzZWVuIGluIHRoZSB1cGNvbWluZyBtb2RlbCBjb21wYXJpc29uIHRhYmxlKSBhbHNvIG1haW50YWlucyB0aGF0IG1vZGVsIDMgaXMgdGhlIGJlc3QgZml0dGluZyBtb2RlbCBmb3IgdGhpcyBkYXRhLiAgIA0KDQpgYGB7cn0NCmFub3ZhKG0xLCBtMiwgbTMsIG00LCBtNSwgbTYsIG03LCB0ZXN0ID0gIkNoaXNxIikNCmBgYA0KDQotLS0NCg0KIyMjIE1vZGVsIENvbXBhcmlzb24gDQoNClRoZSBBSUMgc2NvcmUgaXMgbG93ZXN0IGluIE1vZGVsIDcsIHdoaWxlIHRoZSBCSUMgc2NvcmUgaXMgdGhlIGxvd2VzdCBpbiBNb2RlbCAzLiANCmBgYHtyIHJlc3VsdHM9J2FzaXMnfQ0KbGlicmFyeSh0ZXhyZWcpDQpodG1scmVnKGxpc3QobTEsIG0yLCBtMywgbTQsIG01LCBtNiwgbTcpKQ0KYGBgDQoNCi0tLQ0KDQojIyBGaWd1cmVzDQoNCiMjIyBGaWd1cmUgMS4gQXR0cml0aW9uIGFuZCBKb2IgUm9sZSANCmBgYHtyfQ0KbGlicmFyeSh2aXNyZWcpDQp2aXNyZWcobTMsICJKb2JSb2xlIiwgc2NhbGUgPSAicmVzcG9uc2UiKQ0KYGBgDQpCYXNlZCBvbiBmaWd1cmUgMSwgdGhlIHBvc2l0aW9uIHdpdGggdGhlIGhpZ2hlc3QgbGlrZWxpaG9vZCBvZiBhdHRyaXRpb24gYXJlIHNhbGVzIHJlcHJlc2VudGF0aXZlcy4gDQoNCi0tLQ0KDQojIyMgRmlndXJlIDIuIEF0dHJpdGlvbiBhbmQgSm9iIEludm9sdmVtZW50DQpgYGB7cn0NCmxpYnJhcnkodmlzcmVnKQ0KdmlzcmVnKG0zLCAiSm9iSW52b2x2ZW1lbnQiLCBzY2FsZSA9ICJyZXNwb25zZSIpDQpgYGANCg0KVGhlIGhpZ2hlciB0aGUgbGV2ZWwgb2YgaW52b2x2ZW1lbnQsIHRoZSBsZWFzdCBsaWtlbHkgYW4gZW1wbG95ZWUgaXMgdG8gbGVhdmUuIEVtcGxveWVlcyB3aXRoIGxpdHRsZSBpbnZvbHZlbWVudCBpbiB0aGUgY29tcGFueSBoYXZlIHRoZSBoaWdoZXN0IGxvZyBvZGRzIHJhdGlvIG9mIGF0dHJpdGlvbi4NCg0KLS0tDQoNCiMjIyBGaWd1cmUgMy4gQXR0cml0aW9uIGFuZCBPdmVydGltZQ0KYGBge3J9DQpsaWJyYXJ5KHZpc3JlZykNCnZpc3JlZyhtMywgIk92ZXJUaW1lIiwgc2NhbGUgPSAicmVzcG9uc2UiKQ0KYGBgDQpUaGUgbG9nIG9kZHMgcmF0aW8gb2YgYXR0cml0aW9uIGZvciBlbXBsb3llZXMgd2hvIHdvcmsgb3ZlcnRpbWUgaXMgc3Vic3RhbnRpYWxseSBoaWdoZXIgdGhhbiB0aG9zZSB3aG8gZG8gbm90LiANCg0KLS0tDQoNCiMjIyBGaWd1cmUgNC4gQXR0cml0aW9uIGFuZCBBZ2UgDQpgYGB7cn0NCmxpYnJhcnkodmlzcmVnKQ0KdmlzcmVnKG0zLCAiQWdlIiwgc2NhbGUgPSAicmVzcG9uc2UiKQ0KYGBgDQoNCkFzIGFnZSBpbmNyZWFzZXMsIHRoZSBsb2cgb2RkcyByYXRpbyBvZiBhdHRyaXRpb24gZGVjcmVhc2VzLiBPbGRlciBlbXBsb3llZXMgYXJlIG1vcmUgbGlrZWx5IHRvIHN0YXkgd2l0aCB0aGUgY29tcGFueSwgd2hpbGUgdGhlIHlvdW5nZXIgYXJlIG1vcmUgbGlrZWx5IHRvIGxlYXZlLiANCg0KLS0tDQoNCiMjQW5hbHlzaXMgb2YgUmVzdWx0cw0KDQpUaGUgcmVzdWx0cyByZXZlYWxlZCB0aGF0IHNhbGVzIHJlcHJlc2VudGF0aXZlcyBhcmUgc2lnbmlmaWNhbnRseSBtb3JlIGxpa2VseSB0byBsZWF2ZSBJQk0gdGhhbiBhbnkgb3RoZXIgcG9zaXRpb24uIEZ1cnRoZXIgc3R1ZGllcyB3aWxsIG5lZWQgdG8gYmUgZG9uZSB0byBleGFtaW5lIHdoeSB0aGlzIGlzIGNhc2UuIFdoYXQgaXMgaXQgYWJvdXQgdGhpcyBwYXJ0aWN1bGFyIHBvc2l0aW9uIHRoYXQgaW5jcmVhc2VzIHRoZSBsaWtlbGlob29kIG9mIGF0dHJpdGlvbj8gSXQgaXMgd29ydGh5IG9mIGEgY2xvc2VyIGV4YW1pbmF0aW9uLiBGdXJ0aGVybW9yZSwgaXQgY2FuIGFsc28gYmUgc2FpZCB0aGF0IGFzIGpvYiBpbnZvbHZlbWVudCBpbmNyZWFzZXMsIHRoZSBsb2cgb2RkcyByYXRpbyBvZiBsZWF2aW5nIElCTSBkZWNyZWFzZXMuIEVzc2VudGlhbGx5LCB0aGUgbW9yZSBpbnZvbHZlZCBJQk0gZW1wbG95ZWVzIGFyZSBpbiB0aGUgY29tcGFueSwgdGhlIGxlc3MgbGlrZWx5IHRoZXkgYXJlIHRvIHJlc2lnbi4gRW1wbG95ZWVzIHdpdGggbGl0dGxlIGludm9sdmVtZW50IGhhdmUgdGhlIGhpZ2hlc3QgbG9nIG9kZHMgcmF0aW8gb2YgYXR0cml0aW9uLiBUaGUgcmVzdWx0cyBhbHNvIHJldmVhbGVkIHRoYXQgd29ya2luZyBvdmVydGltZSBoYXMgYSBzaWduaWZpY2FudCBkZXRyaW1lbnRhbCBlZmZlY3Qgb24gdGhlIGxpa2VsaWhvb2Qgb2YgcmVtYWluaW5nIHdpdGggSUJNLiBUaGUgbG9nIG9kZHMgcmF0aW8gb2YgZW1wbG95ZWUgdHVybm92ZXIgaXMgMS41MSBoaWdoZXIgZm9yIGVtcGxveWVlcyB3aG8gaGF2ZSB3b3JrZWQgb3ZlcnRpbWUgdGhhbiBmb3IgdGhvc2Ugd2hvIGhhdmUgbm90LiBGaW5hbGx5LCBpdCBjYW4gYmUgc2FpZCB0aGF0IG9sZGVyIGVtcGxveWVlcyBhcmUgc2xpZ2h0bHkgbGVzcyBsaWtlbHkgdG8gbGVhdmUgSUJNIHRoYW4geW91bmdlciBvbmVzLiBGb3IgZXZlcnkgdW5pdCBpbmNyZWFzZSBpbiBhZ2UsIHRoZSBsb2cgb2RkcyByYXRpbyBvZiBhdHRyaXRpb24gZGVjcmVhc2VzIGJ5IDAuMDMyLiBVbHRpbWF0ZWx5LCB0aGVzZSBmaW5kaW5ncyBwcm92aWRlZCBtZWFuaW5nZnVsIGluc2lnaHQgaW50byBhdHRyaXRpb24gYW5kIHRoZSBmYWN0b3JzIHRoYXQgaW5mbHVlbmNlIGl0IHdpdGhpbiBJQk0uIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg==