本文探讨的是kaggle中的一个案例-员工离职分析,从数据集中分析员工的离职原因,并发现其中的问题。数据主要包括影响员工离职的各种因素(工资、绩效、工作满意度、参加项目数、工作时长、是否升职、等)以及员工是否已经离职的对应记录。

数据来源:Human Resources Analytics | Kaggle

参考学习视频:http://www.tianshansoft.com/

分析目的:分析员工离职原因。

1.对数据集中变量进行描述性分析,变量说明:

2.探索是否离职与公司满意度,绩效,工作时长,工作意外的联系。

#员工离职与满意度关系
p1_sat<- ggplot(data = train,aes(left,satisfaction_level,fill=left))+geom_boxplot()+
labs(x='员工情况',y='员工对公司满意度')+
scale_x_discrete(labels=c('在职','离职'))+
stat_summary(fun.y = mean,geom="point",shape=23,size=1.8)+ #添加均值点
guides(fill=F) #除去图例

其他数据绘图类似

#呈现一页多图(Rmisc包)
multiplot(p1_sat,p2_eva,p3_hours,p4_time,cols =2)

初步结论:

1.离职员工对公司满意度普遍较低,评分集中在0.4

2.离职员工工作时长较长,集中在220小时

3.50%以上的离职员工绩效都在0.8以上,超过了平均绩效0.71

3.离职员工工作年限普遍较长,平均在该公司工作了4年

3.探索是否离职与薪水水平、职业的关系

#探索是否离职与自身职业的关系
p5_sales<- ggplot(data = train,aes(sales,..count..,fill=left))+
geom_bar(stat = 'count',position = 'fill')+
labs(x='职位名称',y='比例')+
guides(fill=F) #去除图例

其他数据绘图类似

图中可看出

1.低工资的员工离职率较高,超过了25%。离职率与薪资水平呈负相关,薪水越高,离职率越低。

2.五年内无升职的员工,离职率达25%,远大于已升职的员工。

3.只参加了两个项目离职率接近65%,参加过7个项目的员工均已离职。参加项目越多,离职率越高(除去参加2个项目的员工)

接下来要进行的是

建模预测:决策树和朴素贝叶斯

建立决策树模型思路:

1.提取出优秀员工(绩效>0.7或工作年限>=4或参加项目数>=5)

2.交叉验证 (此处使用五折交叉验证)  

3.划分训练集和测试集

4.训练模型,建模

5.建立混淆矩阵

  • 首先提取出优秀员工
good <-filter(.data = train,last_evaluation>0.7|time_spend_company>=4|number_project>=5) #满足三个条件中的一个均可
summary(good)
  • 接着进行交叉验证(caret包)

train_control <- trainControl(method='cv',number = 5) #method = ‘cv’是设置交叉验证方法,number = 5意味着是5折交叉验证

  • 划分训练集和测试集,70%作为训练集,剩下为测试集
set.seed(1234)  #设置种子,使抽样结果一致
intrain <- createDataPartition(y = train$left,p = 0.7,list = F)
#createDataPartition( )就是数据划分函数
#对象是left,p=0.7表示训练数据所占的比例为70%
#list是输出结果的格式,默认list=FALSE
train_data <- train[intrain,]       #训练集
test_data <- train[-intrain,] #测试集
  • 使用训练集训练模型: train()函数
rpartmodel <- train(left ~ ., data = train_data,
trControl = train_control, method = 'rpart')
# 使用caret包中的trian函数对训练集使用5折交叉的方法建立决策树模型
# left ~.的意思是根据因变量与所有自变量建模;trCintrol是控制使用那种方法进行建模
# method就是设置使用哪种算法
  • 利用rpartmodel模型进行预测:predict()函数
pre_model <-  predict(rpartmodel,test_data[,-7])#([-7]的意思就是剔除测试集的因变量(left)这一列
  • 建立混淆矩阵
con_rpart <- table(pre_model,test_data$left)
con_rpart   #查看矩阵

求得

查准率=743/(743+61)=92.4%

查全率=743/(743+328)=69.3%

建立朴素贝叶斯模型

思路:

1.训练模型

2.预测

 nbmodel <-train(left ~. ,data=train_data,trControl=train_control,method='nb')
pre_nb_model <-predict(nbmodel,test_data[,-7])
con_nb <- table(pre_nb_model,test_data$left)
con_nb

查准率: 718/(718+46)=93.97%

查全率: 718/(718+353)=67%

查全率较低于决策模型中的69%,所以使用决策树模型

模型评估

  • 将预测模型转化为数值型
pre_model <- as.numeric(pre_model)       #绘制ROC曲线需要将值转为数值型
pre_nb_model <-as.numeric(pre_nb_model)
roc_rpart <- roc(test_data$left,pre_model) #使用决策树模型
  • 求假正例率和真正例率(查全率)
#假正例率=1-真反例率
Specificity <- roc_rpart$specificities #真反例率。假正例率为ROC曲线X轴
Sensitivity <- roc_rpart$sensitivities #真正例率,为ROC曲线Y轴

  • 绘制ROC曲线(决策树模型)
ggplot(data = NULL,aes(1-Specificity,Sensitivity))+
geom_line(color='red') + #ROC曲线
geom_abline()+ #对角线
annotate(geom = 'text',x = 0.4,y=0.5,label=paste('AUC',round(roc_rpart$auc,3)))
#geom='text'指图层上声明增加注释,在坐标(0.4,0.5)处添加AUC值

  • 绘制ROC曲线(朴素贝叶斯模型)
pre_nb_model <-as.numeric(pre_nb_model)
roc_nb <- roc(test_data$left,pre_nb_model)
Specificity_nb <- roc_nb$specificities
Sensitivity_nb <- roc_nb$sensitivities
ggplot(data=NULL,aes(1-Specificity_nb,Sensitivity_nb))+
geom_line(color='red')+
geom_abline()+
geom_text(aes(0.4,0.5),data = NULL,label=paste('AUC',round(roc_nb$auc,3)))+
labs(title='ROC曲线(朴素贝叶斯)')+
theme(plot.title = element_text(hjust = 0.5))

模型应用

#使用回归树模型预测概率
Pre_end <- predict(rpartmodel,test_data[,-7],type='prob')
data_end <- cbind(round(Pre_end,3),pre_model)
names(data_end) <- c('pred.0', 'pred.1', 'pred')
datatable(data_end)

kaggle之员工离职分析的更多相关文章

  1. 用R语言分析与预測员工离职

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/kMD8d5R/article/details/83542978 https://mmbiz.qpic ...

  2. 员工离职困扰?来看AI如何解决,基于人力资源分析的 ML 模型构建全方案 ⛵

    作者:韩信子@ShowMeAI 数据分析实战系列:https://www.showmeai.tech/tutorials/40 机器学习实战系列:https://www.showmeai.tech/t ...

  3. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 – 员工离职管理

    C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 – 员工离职管理 当公司有几万人,上千家加盟网点,几个庞大的直属分公司后,系统账户的有效管理也是一个头疼的问题,把所有的帐户及时进行科学 ...

  4. 【项目实战】Kaggle电影评论情感分析

    前言 这几天持续摆烂了几天,原因是我自己对于Kaggle电影评论情感分析的这个赛题敲出来的代码无论如何没办法运行,其中数据变换的维度我无法把握好,所以总是在函数中传错数据.今天痛定思痛,重新写了一遍代 ...

  5. k3 cloud中员工离职以后释放站点

    进入金蝶云企业平台:https://cloud.kingdee.com/qy,找到对应的用户并选择离职 给替代的员工加上专业应用组: 客户端也加上分组并且同步注册用户 管理中心更新用户许可:

  6. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 员工离职管理

    当公司有几万人,上千家加盟网点,几个庞大的直属分公司后,系统账户的有效管理也是一个头疼的问题,把所有的帐户及时进行科学的管理,有人员离职时及时进行记录,防止离职人员的系统账户有各种安全漏洞. 谁什么时 ...

  7. SpagoBi开发示例——员工离职人数统计

    1.开发工具:SpagoBIStudio_5.1,操作界面和使用方法和eclipse没差 安装参考:http://www.cnblogs.com/starlet/p/4778334.html   2. ...

  8. 139_Power BI之某制造企业HR相关数据年度复盘

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 最近在忙一个关于制造企业HR年度数据复盘分析:数据已脱敏. 先来看看效果. 1.视频效果 [video widt ...

  9. R语言-离职率分析

    案例:员工流失是困扰企业的关键因素之一,在这次的分析中我将分析以下内容: 对一些重要变量进行可视化及探索分析,收入,晋升,满意度,绩效,是否加班等方面进行单变量分析 分析员工流失的因素,探索各个变量的 ...

随机推荐

  1. Python学习---range/for/break/continue简单使用

    range的使用:注意,在python3中,交互模式下已经不显示了 for循环的使用 打印50-70 # 第一种方案 for i in range(100): if i <= 70 and i ...

  2. Mysql常用语句与函数(待续)

    -- 查询语句select class from stu_info where sid=1000000102;select * from stu_info t where t.age=88; -- t ...

  3. winform中webBrowser模拟网页操作中遇到的问题

    我们通过网页上传一些特殊数据的时候,由于必填项众多,数量量大的时候,会发现工作相当繁琐,前段时间做了一个winform内嵌webBrowser模拟网页上传文档的小工具,发现了许多问题,总结一下: 先说 ...

  4. centos 7.0 查看selinux状态|关闭|开启

    Linux在安装好之后通常SELinux都是出于默认开启的状态,开启的情况下会导致一些服务的安装不成功. 在不需要的情况下完全可以关闭掉,下面是在centos 7.0里面如何查看,关闭selinux. ...

  5. BZOJ 1061 志愿者招募 最小费用流&&线性规划建模

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1061 题目大意: 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主 ...

  6. 问题:一球从某高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第n次落地时,共经过多少米?第n次反弹多高?

    import java.util.Scanner; //题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半:再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? public c ...

  7. 对deferred(延迟对象)的理解

    deferred对象从jQuery 1.5.0开始引入 什么是defrred对象 开发网站过程中,我们经常遇到某些耗时长的JS操作,其中,既有异步操作(如Ajax读取服务器数据),也有同步的操作(如遍 ...

  8. BigDecimal.setScale用法总结

    1. BigDecimal num1 = new BigDecimal(2.225667);//这种写法不允许,会造成精度损失 2. BigDecimal num2 = new BigDecimal( ...

  9. sofar:机器学习检测十题

    http://sofasofa.io/forum_main_post.php?postid=1001084 http://sofasofa.io/forum_main_post.php?postid= ...

  10. 【luogu P3258 [JLOI2014]松鼠的新家】 题解

    题目链接:https://www.luogu.org/problemnew/show/P3258 谁说树剖过不去会RE呢? 我今天就是要强行树剖了 树剖强艹 #include <cstdio&g ...