Kaggle数据分析实践——优秀员工为何离职

Kaggle数据分析实践——优秀员工为何离职

R in Action前五章学习结束,并了解了dplyr和ggplot2两个包的使用,便试着在Kaggle上下载数据进行实践,检验学习效果。

本文介绍了关于优秀员工离职原因的数据分析,数据源来自Kaggle:

Human Resources Analytics | Kaggle

1. 分析目的

最优秀最有经验的员工,其离职的主要原因是什么

2. 理解数据

hr <- read.csv(file.choose(),stringsAsFactors = FALSE)
str(hr)

导入数据后,先查看数据结构,包括以下变量:

  • satisfaction_level : 满意度
  • last_evaluation : 绩效评估
  • number_project : 完成项目数
  • average_montly_hours : 平均月度工作时间
  • time_spend_company : 服务年限
  • Work_accident : 是否有工伤
  • left : 是否离职
  • promotion_last_5years: 过去5年是否有升职
  • sales : 工作部门
  • salary:薪资水平
  • 3. 处理数据

    Kaggle下载下来的数据基本上都是比较干净的数据了,不需要太多的清洗工作,这里只是为后续分析做个简单的处理:

    1) 变量重命名

    hr<-rename(hr,satisfaction = satisfaction_level,evaluation = last_evaluation,project = number_project,monthlyhour = average_montly_hours,serviceyear = time_spend_company,accident = Work_accident,promotion = promotion_last_5years,dept=sales)
    

    2) 增加新变量

    由于salary是chr,在后续相关性分析中不能够纳入,所以先将salary转换为数值格式的salary grade

    hr$SG[hr$salary=="low"]<-1
    hr$SG[hr$salary=="medium"]<-2
    hr$SG[hr$salary=="high"]<-3
    

    4. 分析数据

    1) 初步探索

    summary(hr)
    

    可以观察到满意度的中位数为0.64,绩效评估的中位数为0.72,完成项目的中位数是4个,平均月度工作时间为200个小时,服务年限的中位数是3年。

    2) 相关性分析

    载入corrplot包进行变量之间的相关性分析。

    hr_cor <- hr %>%
      select(satisfaction:promotion,SG)
    M <- cor(hr_cor)
    corrplot(M,method = "circle")
    

    圆圈的大小代表了相关性的大小,圆圈的颜色代表了正相关还是负相关。

    可以初步看出一般而言,离职原因是因为满意度低,工资低,服务年限较长,月工作时间多,没有晋升机会。

    3) 目标群体分析

    这次分析的目标群体是最优秀最有经验的员工,那么首先需要把这些员工筛选出来。根据初步探索的结果,我们暂定最优秀最有经验的员工标准为:

    • 绩效评估大于中位数
    • 完成项目大于中位数
    • 或服务年限大于中位数和平均数
    hr_top<-filter(hr,hr$evaluation>0.72 & hr$project>4 | hr$serviceyear>=4)
    hr_top1<-hr_top %>%
      select(satisfaction:promotion,SG)
    M<-cor(hr_top1)
    corrplot(M,method = "circle")
    

    这次的相关性结果和上次的有了一些变化,月度工作时长和完成项目的相关性变大,下面通过图形来具体看一下每个变量和离职的关系。

    4)变量分析

    hr_top$dept<-factor(hr_top$dept)
    hr_top$salary<-factor(hr_top$salary)
    hr_top$left<-factor(hr_top$left)
    hr_top$promotion<-factor(hr_top$promotion)
    ggplot(data = hr_top,mapping = aes(x=satisfaction,fill=left))+
      geom_histogram()
    ggplot(data = hr_top,mapping = aes(x=evaluation,fill=left))+
      geom_histogram()
    ggplot(data = hr_top,mapping = aes(x=project,fill=left))+
      geom_histogram()
    ggplot(data = hr_top,mapping = aes(x=monthlyhour,fill=left))+
      geom_histogram()
    ggplot(data = hr_top,mapping = aes(x=serviceyear,fill=left))+
      geom_histogram()
    ggplot(data = hr_top,mapping = aes(x=accident,fill=left))+
      geom_histogram()
    ggplot(data = hr_top,mapping = aes(x=promotion,fill=left))+
      geom_bar(position = "stack")
    ggplot(data = hr_top,mapping = aes(x=dept,fill=left))+
      geom_bar(position = "fill")
    ggplot(data = hr_top,mapping = aes(x=dept,fill=left))+
      geom_bar(position = "stack")
    ggplot(data = hr_top,mapping = aes(x=salary,fill=left))+
      geom_bar(position = "dodge")
    
    • 满意度在0.1以下的,离职率将近100%;满意度在0.8左右的,离职率将近50%
    • 绩效评估在0.75以上的,离职率在50%左右
    • 完成项目数越多,离职率越高
    • 月度工作220小时以上,工作时长越长,离职率越高
    • 服务年限3-5年,离职率最高
    • 在过去5年未得到升职的,离职率大约为33%
    • 从部门离职率来看,各部门占比差不多,HR和Technical占比相对较大

    但从离职人数来看,sales和technical的绝对值相对较大

    • 薪资水平越低,离职率越高

    基本上到这里所有变量对离职的影响都分析了,但我仍好奇那些对公司满意度高的优秀员工,究竟是哪种因素主要导致了其离职。于是我将满意度大于0.7的优秀员工筛选出来,发现主要是钱少事多未升职。如果进一步分析的话,倒是可以看看满意度是怎么评估的,钱少事多未升职满意度还较高,不知是什么因素起了作用。

    5. 分析总结

    从相关性和对各个变量的分析来看,最优秀最有经验的员工离职,主要原因有以下几点:

    • 工作强度大:月度工作时长超过220小时,大约日工作时长为10小时以上
    • 工作能力强:绩效评估越高,完成项目越多,工作经验越多,离职的资本就越大,有更多的跳槽机会
    • 薪资水平低:拥有的能力和经验和获得的报酬不符
    • 未得到晋升

    呼吁我们的Finance和HR同事们多多关注top performance的员工啊,对公司贡献多,经验丰富,能力强,如果没有获得合理的待遇和职业发展机会,也怪不得人家另谋高就。公司招新人的成本可比老员工大多了。。。印证了那句话,钱给少了,心委屈了

    发布于 2017-06-21 07:37