Advertisement

R语言smoothHR包_R语言-离职率分析

阅读量:

案例:人才流失对企业造成困扰是一个重要问题之一,在本次分析中将深入探讨以下方面:

对于一些关键变量实施可视化展示和深入探索分析,并分别对收入、晋升、满意度、绩效以及是否加班等指标展开单变量研究。

分析员工流失的因素,探索各个变量的影响度

构建有效的模型来预测员工是否会离职

数据集主要分析的字段

Attrition 是否离职 需要预测的结果变量## Gender 性别## Age 年龄## Education 学历## NumCompaniesWorked 任职过的企业数量## TotalWorkingYears 工作年限## MaritalStatus 婚姻状况## YearsAtCompany 在公司的工作时间## JobRole 职位## JobLevel 职位等级## MonthlyIncome 月薪## JobInvolvement 工作投入程度## PerformanceRating 绩效评分## StockOptionLevel 员工的股权等级## PercentSalaryHike 涨薪百分比## TrainingTimesLastYear 上一年培训次数## YearsSinceLastPromotion 距离上次升值的时间## EnvironmentSatisfaction 环境满意度## JobSatisfaction 工作满意度## RelationshipSatisfaction 关系满意度## WorkLifeBalance 生活和工作的平衡度## DistanceFromHome 公司和家庭的距离## OverTime 是否要加班## BusinessTravel 是否要出差

1.导入包

library(ggplot2)

library(grid)

library(gridExtra)

library(plyr)

library(rpart)

library(rpart.plot)

library(randomForest)

library(caret)

library(gbm)

library(survival)

library(pROC)

library(DMwR)

library(scales)

2.导入数据集并查看

Attr.df

head(Attr.df)

summary(Attr.df)

结论:离职率大概在1:5左右

企业的员工的平均年龄在36,37岁左右

月薪的大概是在4900美元,这里采用中位数,平均数会引起偏差

3.单变量分析

3.1探索性别,年龄,工龄,企业数量,在公司的时限的分析

#离职员工年龄的分布

g1

g2

g3

g4

grid.arrange(g1,g2,g3,g4,ncol=2,nrow=2)

结论:

1.年龄较低的员工的离职率较高,主要集中在30岁以下的员工

2.工作过的企业数量越多越容易离职

3.在公司工作的时间越久,越不容易离职

4.工龄低的员工离职的几率比较大

3.2性别,职位等级,教育背景,部门的分析

#离职员工的性别分布

g5

scale_y_continuous(labels=percent)#离职员工的教育背景分布

g7

scale_y_continuous(labels=percent)#离职员工的部门分布

g8

scale_y_continuous(labels=percent) grid.arrange(g5, g6, g7, g8, ncol= 2, nrow = 2)

结论:

1.男性的离职率比女性稍高

2.等级越高离职的可能性越小,但是主要集中1级别的职场新人

3.学历和离职率没有太大的关联

4.销售部门相对于其他两个部门离职率较高

3.3 探索涨薪比例,培训次数,每年晋升,员工股权的分析

#离职员工与涨薪比例的关系

g11

g12

该图显示了离职员工与年度晋升关系的分析。
其中,
统计信息类型设为'count',
形状参数设置为0.7,
位置映射采用恒等映射,
颜色设定为黑色。

  • labs(y = '百分比')
  • scale_y_continuous(labels = percent)
    #显示离职员工与年度晋升关系的分析图

g13

g14

stat.identity, shape=0.7, position.identity, colour.black) + labs(y = 'Percentage') + scale_y_continuous(labels = percent)

grid.arrange(g11, g12, g13, g14, ncol= 2)

结论:

1.没有涨薪计划的员工流失率较高

2.培训次数和离职率没有太大的影响

3.没有晋升的员工离职率较高

4.没有股权的员工流失率较大

3.4探索工作满意度,同事满意度,环境满意度的分析

#离职员工与工作满意度的关系

g15

统计信息参数设置为stat=count,alpha=0.7,position=identity,color=black,并附加 labs(y="Percentage") + scale_y_continuous(labels=percent)以完成图形绘制操作。该图表主要关注的是离职员工与其同事满意度之间的关联分析。

g16

该图中设置统计信息类型并赋予其值'count';同时设定alpha参数值为0.7;将图表的位置参数设定为'identity';并将图表的颜色设置为黑色;在y轴方向上添加标题并将其标签设为"Percentage";通过连续型刻度标签展示百分比格式;并在图表顶端添加主题标签:分析离职员工与工作环境满意度之间的关系

g17

该图层基于计数统计,默认透明度设为0.7,并采用恒等位置显示;同时在沿Y轴放置'Percentage'标签的基础上,并设置刻度标签使其基于percent函数生成

grid.arrange(g15, g16,g17, ncol= 3)

结论:满意度越高越不容易离职

3.5探索加班,工作生活的平衡性,是否需要出差,家庭距离之间的关系

#离职员工和加班之间的关系

g18

stat=count, alpha=0.7,position=identity,color="black") +labs(y="百分比") + scale_y_continuous(labels="百分比")#探讨离职员工与工作生活的关系

g19

stat = "count", alpha = 0.7, position = "identity", colour = "black") + labs(y = "Percentage") + scale_y_continuous(labels = percent) # 分析离职员工与出差的关系

g20

The stat parameter is set to 'count', alpha is assigned a value of 0.7, position is configured as 'identity', and color is specified as 'black'. The y-axis label is labeled as 'Percentage', and the y-axis scale is configured using the percent format.

g21

grid.arrange(g18, g19,g20,g21, ncol= 2)

结论:

1.加班越多离职率越高

2.认为工作和生活协调为1的员工工离职率较高

3.经常出差的员工离职率较高

4.距离上班地点越远的员工离职率较高

3.6月薪,职位等级和离职率的关系

离职员工和月薪的关系

g9

离职员工与职位等级的关系

g10

统计量设为计数项;α值设定为0.7;位置设置为恒等映射;颜色设定为黑色)+ labs(纵轴表示百分比)+ scale_y_continuous(标签设置为百分比)

grid.arrange(g9, g10, ncol= 2)

结论:

1.月薪低的员工容易离职

2.职位级别低的离职率较高,但不是很明显

3.6进一步分析月薪和职位级别的关系

与代码库相关的图形构建中

结论:经研究发现,收入水平并非影响员工离职的主要因素.只有当付出与回报成正比时才不会出现大量人员流失

4.建模

4.1决策树

#去除数据集中没有必要的因子

levels(Attr.df$JobRole)

levels(Attr.df$EducationField)

Attr.df

n

rnd

train

test

dtree

preds

rocv

rocv$auc

prop.table(table(test$Attrition,preds,dnn= c('Actual','Predicted')),1)

dtreepr

predspr

rocvpr

rocvpr$auc

rpart.plot(dtreepr,type=4,extra=104,tweak = 0.9,fallen.leaves = F,cex = 0.7)

结论:AUC的值0.624比较低,而且灵敏度0.3说明该模型并不能很好的预测离职

4.2随机森林

set.seed(2343)

fit.forest

rfpreds

rocrf

rocrf$auc

结论:需要进行优化

4.3GBM

set.seed(3443)#定义10折交叉验证用于控制所有的GBM模型训练

ctrl

gbmfit

gbmpreds

rocgbm

rocgbm$auc

结论:需要进行优化

4.4优化GBM模型

#设置和之前一样的种子数

ctrl$seeds

model_weights

(1/table(train$Attrition)[1]),

(1/table(train$Attrition)[2]))

weightedleft

data=train,

method='gbm',

verbose=F,

weights=model_weights,

metric='ROC',

trControl=ctrl)

weightedpreds

rocweight

rocweight$auc#向上采样

ctrl$sampling

upfit

data=train,

method= "gbm",

verbose=FALSE,

metric= "ROC",

trControl=ctrl)

uppreds

rocup

rocup$auc#向下采样

ctrl$sampling

downfit

data=train,

method= "gbm",

verbose=FALSE,

metric= "ROC",

trControl=ctrl)

downpreds

rocdown

rocdown$auc

prop.table(table(test$Attrition, weightedpreds, dnn= c("Actual", "Predicted")),1)

结论:选取第二车向上采样的模型,精确度提升到72%,灵敏度提升到62%

5 使用模型来预测离职

5.1查看哪些因素影响员工离职

varImp(upfit)

总结:总结如下:影响员工离职的主要因素包括工作时间延长、薪资水平、工作时间长短、股权是否存在以及员工年龄等。

5.2预测工作投入高,月薪少的员工的离职率

upfitprobs

test$Prediction

ggplot(test,

aes(aesthetic=x轴变量, y轴变量=y预测值, fill=factor(工作参与度类别)) + geom_point(点的透明度设置为0.7) + geom_smooth(拟合线采用最小二乘法(LMS)) + facet_wrap(~工作参与度类别) + theme(移除图例) + ggtitle("工作参与度分析图") + theme(图片标题对齐左中)

结果显示:图4表明尽管员工的工作投入程度较高但其收入水平相对较低却仍然难以轻易离职这可能与其对企业具有较强的企业认同感以及其他较为完善的福利保障措施密切相关

5.3预测那些职位的离职率最高

根据数据集test构建可视化图形,并使用JobRole作为分组变量和预测值进行比较;随后绘制半透明箱线图以显示数据分布特征;并移除图例以简化视觉效果;最后将y轴标签格式化为百分比形式以增强可读性

结论:销售的离职率相对与其他的离职率较大

总结:

1.员工离职的很大原因是因为加班,或者是付出和回报不成正比导致的

在一些生活场景中,例如长时间外出工作,工作地点距离居住地较远也可能是导致员工离职的一个次要因素之一

3.相比而言,在薪酬水平的竞争中,员工更倾向于选择拥有更多股权权益,获得股息收益的员工更容易留下来

4.年龄,在公司的年限和工龄也是影响员工离职的一些重要的指标

5.如果有更多的真实数据集,模型可能会更加准确

github:https://github.com/Mounment/R-Project

全部评论 (0)

还没有任何评论哟~