Discover key factors affecting employee performance

As an employer, we are always interested in

From the data we collected and evaluate its features, we are going to explore the answers to the questions above.

1. Call Packages required

library(tidyverse)
library(lattice)

2. Load datasets

hrs <- read_csv('hrs.csv')

indexing hrs.csv [===========================================] 9.72GB/s, eta:  0s
                                                                                 
head(hrs)
sapply(hrs,class)
             Employee_Name                      EmpID                  MarriedID 
               "character"                  "numeric"                  "numeric" 
           MaritalStatusID                   GenderID                EmpStatusID 
                 "numeric"                  "numeric"                  "numeric" 
                    DeptID                PerfScoreID     FromDiversityJobFairID 
                 "numeric"                  "numeric"                  "numeric" 
                    Salary                      Termd                 PositionID 
                 "numeric"                  "numeric"                  "numeric" 
                  Position                      State                        Zip 
               "character"                "character"                "character" 
                       DOB                        Sex                MaritalDesc 
                    "Date"                "character"                "character" 
               CitizenDesc             HispanicLatino                   RaceDesc 
               "character"                "character"                "character" 
                DateofHire          DateofTermination                 TermReason 
                    "Date"                     "Date"                "character" 
          EmploymentStatus                 Department                ManagerName 
               "character"                "character"                "character" 
                 ManagerID          RecruitmentSource           PerformanceScore 
                 "numeric"                "character"                "character" 
          EngagementSurvey            EmpSatisfaction       SpecialProjectsCount 
                 "numeric"                  "numeric"                  "numeric" 
LastPerformanceReview_Date             DaysLateLast30                   Absences 
                    "Date"                  "numeric"                  "numeric" 

3. Transform data

hrs$DOB <- as.Date(hrs$DOB,'%m/%d/%y')
hrs$DateofHire <- as.Date(hrs$DateofHire,'%m/%d/%Y')
hrs$LastPerformanceReview_Date <- as.Date(hrs$LastPerformanceReview_Date,'%m/%d/%Y')
hrs$DateofTermination <- as.Date(hrs$DateofTermination,'%m/%d/%Y')
hrs <- hrs %>% mutate_at(c('Position','State','Zip','Sex','MaritalDesc','CitizenDesc',
                           'RaceDesc','EmploymentStatus','Department','ManagerName',
                           'RecruitmentSource','PerformanceScore'),as.factor)
sapply(hrs,class)
             Employee_Name                      EmpID                  MarriedID 
               "character"                  "numeric"                  "numeric" 
           MaritalStatusID                   GenderID                EmpStatusID 
                 "numeric"                  "numeric"                  "numeric" 
                    DeptID                PerfScoreID     FromDiversityJobFairID 
                 "numeric"                  "numeric"                  "numeric" 
                    Salary                      Termd                 PositionID 
                 "numeric"                  "numeric"                  "numeric" 
                  Position                      State                        Zip 
                  "factor"                   "factor"                   "factor" 
                       DOB                        Sex                MaritalDesc 
                    "Date"                   "factor"                   "factor" 
               CitizenDesc             HispanicLatino                   RaceDesc 
                  "factor"                "character"                   "factor" 
                DateofHire          DateofTermination                 TermReason 
                    "Date"                     "Date"                "character" 
          EmploymentStatus                 Department                ManagerName 
                  "factor"                   "factor"                   "factor" 
                 ManagerID          RecruitmentSource           PerformanceScore 
                 "numeric"                   "factor"                   "factor" 
          EngagementSurvey            EmpSatisfaction       SpecialProjectsCount 
                 "numeric"                  "numeric"                  "numeric" 
LastPerformanceReview_Date             DaysLateLast30                   Absences 
                    "Date"                  "numeric"                  "numeric" 

4. Check correlation between features and single out Performance Score. Then we can see Engagement,Satisfaction,Salary and DaysLateLast30 are significantly associated with Performance.

hrs %>% select_if(is.numeric) %>% select(-1) %>% cor() %>% data.frame() %>%
    select(6) %>% arrange(-PerfScoreID)

5. If plot employee performance,satisfaction and engagment together, we can see that performance is associated with engagement and satisfaction to some extent.

bwplot(PerfScoreID~EmpSatisfaction+EngagementSurvey | Department,data=hrs,
       main='Employees Performance,satisfaction and engagement by department',
       sub='Coef: satisfacetion 0.3035;engagement: 0.5449')
cor(hrs[c('EmpSatisfaction','EngagementSurvey')],hrs$PerfScoreID)

6. If we plot employee performance and satisfaction , we find that the relationship is not so obvious, as same satisfaction could possibly lead to high performance or low per{formance.the coefficient between performance and satisfaction is 0.3035.

bwplot(PerfScoreID~EmpSatisfaction | Department,data=hrs,
       main='Employees Performance,satisfaction by department',
       sub='Coef: satisfacetion 0.3035')

7.If we plot employee performance and engagement, we find that their relationship is rather obvious, and their coefficient is 0.5449. Meanwhile, we find unusual in the Production, which located in the performance 1,engagement 3, that means some employees of Production may have problems with their jobs.

bwplot(PerfScoreID~EngagementSurvey | Department,data=hrs,
       main='Employees Performance,engagement by department',
       sub='Coef: engagement: 0.5449')

8. Let’s plot performance and days late last 30 days, we can see it’s quite interesting that in IT/IS, the more days late, the higher performance. As we know that’s not true, so we need to investigate what’s wrong with the employees in IT/IS.

bwplot(PerfScoreID~DaysLateLast30 | Department, data=hrs,
       main='Employee Performance,DaysLateLast30 by department',
       sub='Coef: DaysLateLast30: -0.7347')

9. Conclusion

  • Based on the exploration above , we can say there are 4 major factors related with employee performance, 1.Employee Engagement 2. Employee Satisfaction 3. Attendance 4. Salary.

  • We also find something unusual in Production and IT/IS. For Production, some employees were engaged more, but their performance was lower. That’s an issue to be addressed and needs to solve it. For IT/IS, some employees were late more, but their performance was higher, it’s also a conflict to be investigated and solved.

LS0tCiN0aXRsZTogIlIgTm90ZWJvb2siCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCiMjIyBEaXNjb3ZlciBrZXkgZmFjdG9ycyBhZmZlY3RpbmcgZW1wbG95ZWUgcGVyZm9ybWFuY2UKCkFzIGFuIGVtcGxveWVyLCB3ZSBhcmUgYWx3YXlzIGludGVyZXN0ZWQgaW4gCgoqIFdoYXQgZmFjdG9ycyBhcmUgc2lnbmlmaWNhbnRseSBhc3NvY2lhdGVkIHdpdGggZW1wbG95ZWVzJyBwZXJmb3JtYW5jZT8gCgoqIEhvdyB0byBpbXByb3ZlIGVtcGxveWVlcycgY29tcGV0ZW5jZSBpbiB0aGVpciBqb2I/CgoKRnJvbSB0aGUgZGF0YSB3ZSBjb2xsZWN0ZWQgYW5kIGV2YWx1YXRlIGl0cyBmZWF0dXJlcywgd2UgYXJlIGdvaW5nIHRvIGV4cGxvcmUgdGhlIGFuc3dlcnMKdG8gdGhlIHF1ZXN0aW9ucyBhYm92ZS4KCiMjIyMgMS4gQ2FsbCBQYWNrYWdlcyByZXF1aXJlZApgYGB7cn0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkobGF0dGljZSkKYGBgCgojIyMjIDIuIExvYWQgZGF0YXNldHMKYGBge3IgbWVzc2FnZT1GQUxTRX0KaHJzIDwtIHJlYWRfY3N2KCdocnMuY3N2JykKaGVhZChocnMpCnNhcHBseShocnMsY2xhc3MpCmBgYAoKIyMjIyAzLiBUcmFuc2Zvcm0gZGF0YQpgYGB7cn0KaHJzJERPQiA8LSBhcy5EYXRlKGhycyRET0IsJyVtLyVkLyV5JykKaHJzJERhdGVvZkhpcmUgPC0gYXMuRGF0ZShocnMkRGF0ZW9mSGlyZSwnJW0vJWQvJVknKQpocnMkTGFzdFBlcmZvcm1hbmNlUmV2aWV3X0RhdGUgPC0gYXMuRGF0ZShocnMkTGFzdFBlcmZvcm1hbmNlUmV2aWV3X0RhdGUsJyVtLyVkLyVZJykKaHJzJERhdGVvZlRlcm1pbmF0aW9uIDwtIGFzLkRhdGUoaHJzJERhdGVvZlRlcm1pbmF0aW9uLCclbS8lZC8lWScpCgpocnMgPC0gaHJzICU+JSBtdXRhdGVfYXQoYygnUG9zaXRpb24nLCdTdGF0ZScsJ1ppcCcsJ1NleCcsJ01hcml0YWxEZXNjJywnQ2l0aXplbkRlc2MnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAnUmFjZURlc2MnLCdFbXBsb3ltZW50U3RhdHVzJywnRGVwYXJ0bWVudCcsJ01hbmFnZXJOYW1lJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JlY3J1aXRtZW50U291cmNlJywnUGVyZm9ybWFuY2VTY29yZScpLGFzLmZhY3RvcikKc2FwcGx5KGhycyxjbGFzcykKYGBgCgoKIyMjIyA0LiBDaGVjayBjb3JyZWxhdGlvbiBiZXR3ZWVuIGZlYXR1cmVzIGFuZCBzaW5nbGUgb3V0IFBlcmZvcm1hbmNlIFNjb3JlLiBUaGVuIHdlIGNhbiBzZWUgRW5nYWdlbWVudCxTYXRpc2ZhY3Rpb24sU2FsYXJ5IGFuZCBEYXlzTGF0ZUxhc3QzMCBhcmUgc2lnbmlmaWNhbnRseSBhc3NvY2lhdGVkIHdpdGggUGVyZm9ybWFuY2UuCmBgYHtyfQpocnMgJT4lIHNlbGVjdF9pZihpcy5udW1lcmljKSAlPiUgc2VsZWN0KC0xKSAlPiUgY29yKCkgJT4lIGRhdGEuZnJhbWUoKSAlPiUKICAgIHNlbGVjdCg2KSAlPiUgYXJyYW5nZSgtUGVyZlNjb3JlSUQpCmBgYAoKIyMjIyA1LiBJZiBwbG90IGVtcGxveWVlIHBlcmZvcm1hbmNlLHNhdGlzZmFjdGlvbiBhbmQgZW5nYWdtZW50IHRvZ2V0aGVyLCB3ZSBjYW4gc2VlIHRoYXQgcGVyZm9ybWFuY2UgaXMgYXNzb2NpYXRlZCB3aXRoIGVuZ2FnZW1lbnQgYW5kIHNhdGlzZmFjdGlvbiB0byBzb21lIGV4dGVudC4KYGBge3J9CmJ3cGxvdChQZXJmU2NvcmVJRH5FbXBTYXRpc2ZhY3Rpb24rRW5nYWdlbWVudFN1cnZleSB8IERlcGFydG1lbnQsZGF0YT1ocnMsCiAgICAgICBtYWluPSdFbXBsb3llZXMgUGVyZm9ybWFuY2Usc2F0aXNmYWN0aW9uIGFuZCBlbmdhZ2VtZW50IGJ5IGRlcGFydG1lbnQnLAogICAgICAgc3ViPSdDb2VmOiBzYXRpc2ZhY2V0aW9uIDAuMzAzNTtlbmdhZ2VtZW50OiAwLjU0NDknKQpjb3IoaHJzW2MoJ0VtcFNhdGlzZmFjdGlvbicsJ0VuZ2FnZW1lbnRTdXJ2ZXknKV0saHJzJFBlcmZTY29yZUlEKQpgYGAKIVtdKGZpZ3VyZS9QbG90MS5wbmcpCgojIyMjIDYuIElmIHdlIHBsb3QgZW1wbG95ZWUgcGVyZm9ybWFuY2UgYW5kIHNhdGlzZmFjdGlvbiAsIHdlIGZpbmQgdGhhdCB0aGUgcmVsYXRpb25zaGlwIGlzIG5vdCBzbyBvYnZpb3VzLCBhcyBzYW1lIHNhdGlzZmFjdGlvbiBjb3VsZCBwb3NzaWJseSBsZWFkIHRvIGhpZ2ggcGVyZm9ybWFuY2Ugb3IgbG93IHBlcntmb3JtYW5jZS50aGUgY29lZmZpY2llbnQgYmV0d2VlbiBwZXJmb3JtYW5jZSBhbmQgc2F0aXNmYWN0aW9uIGlzIDAuMzAzNS4KCmBgYHtyfQpid3Bsb3QoUGVyZlNjb3JlSUR+RW1wU2F0aXNmYWN0aW9uIHwgRGVwYXJ0bWVudCxkYXRhPWhycywKICAgICAgIG1haW49J0VtcGxveWVlcyBQZXJmb3JtYW5jZSxzYXRpc2ZhY3Rpb24gYnkgZGVwYXJ0bWVudCcsCiAgICAgICBzdWI9J0NvZWY6IHNhdGlzZmFjZXRpb24gMC4zMDM1JykKYGBgCiFbXShmaWd1cmUvUGxvdDIucG5nKQoKCiMjIyMgNy5JZiB3ZSBwbG90IGVtcGxveWVlIHBlcmZvcm1hbmNlIGFuZCBlbmdhZ2VtZW50LCB3ZSBmaW5kIHRoYXQgdGhlaXIgcmVsYXRpb25zaGlwIGlzIHJhdGhlciBvYnZpb3VzLCBhbmQgdGhlaXIgY29lZmZpY2llbnQgaXMgMC41NDQ5LiBNZWFud2hpbGUsIHdlIGZpbmQgdW51c3VhbCBpbiB0aGUgUHJvZHVjdGlvbiwgd2hpY2ggbG9jYXRlZCBpbiB0aGUgcGVyZm9ybWFuY2UgMSxlbmdhZ2VtZW50IDMsIHRoYXQgbWVhbnMgc29tZSBlbXBsb3llZXMgb2YgUHJvZHVjdGlvbiBtYXkgaGF2ZSBwcm9ibGVtcyB3aXRoIHRoZWlyIGpvYnMuCgpgYGB7cn0KYndwbG90KFBlcmZTY29yZUlEfkVuZ2FnZW1lbnRTdXJ2ZXkgfCBEZXBhcnRtZW50LGRhdGE9aHJzLAogICAgICAgbWFpbj0nRW1wbG95ZWVzIFBlcmZvcm1hbmNlLGVuZ2FnZW1lbnQgYnkgZGVwYXJ0bWVudCcsCiAgICAgICBzdWI9J0NvZWY6IGVuZ2FnZW1lbnQ6IDAuNTQ0OScpCmBgYAohW10oZmlndXJlL1Bsb3QzLnBuZykKCiMjIyMgOC4gTGV0J3MgcGxvdCBwZXJmb3JtYW5jZSBhbmQgZGF5cyBsYXRlIGxhc3QgMzAgZGF5cywgd2UgY2FuIHNlZSBpdCdzIHF1aXRlIGludGVyZXN0aW5nIHRoYXQgaW4gSVQvSVMsIHRoZSBtb3JlIGRheXMgbGF0ZSwgdGhlIGhpZ2hlciBwZXJmb3JtYW5jZS4gQXMgd2Uga25vdyB0aGF0J3Mgbm90IHRydWUsIHNvIHdlIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hhdCdzIHdyb25nIHdpdGggdGhlIGVtcGxveWVlcyBpbiBJVC9JUy4KCmBgYHtyfQpid3Bsb3QoUGVyZlNjb3JlSUR+RGF5c0xhdGVMYXN0MzAgfCBEZXBhcnRtZW50LCBkYXRhPWhycywKICAgICAgIG1haW49J0VtcGxveWVlIFBlcmZvcm1hbmNlLERheXNMYXRlTGFzdDMwIGJ5IGRlcGFydG1lbnQnLAogICAgICAgc3ViPSdDb2VmOiBEYXlzTGF0ZUxhc3QzMDogLTAuNzM0NycpCmBgYAoKIVtdKGZpZ3VyZS9QbG90NC5wbmcpCgojIyMjIDkuIENvbmNsdXNpb24KCiogQmFzZWQgb24gdGhlIGV4cGxvcmF0aW9uIGFib3ZlICwgd2UgY2FuIHNheSB0aGVyZSBhcmUgNCBtYWpvciBmYWN0b3JzIHJlbGF0ZWQgd2l0aCBlbXBsb3llZSBwZXJmb3JtYW5jZSwgMS5FbXBsb3llZSBFbmdhZ2VtZW50IDIuIEVtcGxveWVlIFNhdGlzZmFjdGlvbiAzLiBBdHRlbmRhbmNlIDQuIFNhbGFyeS4KCiogV2UgYWxzbyBmaW5kIHNvbWV0aGluZyB1bnVzdWFsIGluIFByb2R1Y3Rpb24gYW5kIElUL0lTLiBGb3IgUHJvZHVjdGlvbiwgc29tZSBlbXBsb3llZXMgd2VyZSBlbmdhZ2VkIG1vcmUsIGJ1dCB0aGVpciBwZXJmb3JtYW5jZSB3YXMgbG93ZXIuIFRoYXQncyBhbiBpc3N1ZSB0byBiZSBhZGRyZXNzZWQgYW5kIG5lZWRzIHRvIHNvbHZlIGl0LiBGb3IgSVQvSVMsIHNvbWUgZW1wbG95ZWVzIHdlcmUgbGF0ZSBtb3JlLCBidXQgdGhlaXIgcGVyZm9ybWFuY2Ugd2FzIGhpZ2hlciwgaXQncyBhbHNvIGEgY29uZmxpY3QgdG8gYmUgaW52ZXN0aWdhdGVkIGFuZCBzb2x2ZWQuCgoKCg==