员工离职预测案例-实验手册
一.背景介绍
该实例以一家公司为例,他们想了解为什么一些最有经验和最有经验的员工会提前离职。该公司希望预测哪些有价值的员工将离职。
该实例的目标是预测是否的员工已经离开了;
度量标准是正确预测的雇员的百分比。
二.数据简介
利用这个数据库,并尝试预测哪些有价值的员工将离开下一步。数据集中的字段包括:员工满意度、最后的评价、一些项目、每月平均时间、花在公司的时间、他们是否发生过工伤事故、在过去的5年里他们是否升职了、所处部门、工资、员工是否已经离开。
变量类型 | 变量名 | 变量名翻译 | 详细说明 | 取值范围 | 备注 |
因变量 | left | 是否已经离职 | 定性变量 共2个水平 | 0代表未离职 1代表已经离职 | 已经离职占 23.81% |
自变量 | satisfaction_level | 对公司的满意程度 | | 0~1 | 平均满意程度为0.6 |
成长型基金last_evaluation | 绩效评估 | | 0~1 | 平均绩效评估为0.7 |
number_project | 参加过的项目数 | 单位:个 | 2~7 | 平均参加4个项目 |
average_montly_hours | 平均每月工作时长 | 单位:小时 | 96~310 | |
time_spend_company | 每天在公司时长 | 单位:小时 | 2~10 | |
Work_accident | 是否发生过工作差错 | 定性变量 共2个水平 | 0代表未发生 1代表已经发生 | 发生工作差错的占 14.46% |
什么蔬菜降血糖 promotion_last_5years | 五年内是否升职 | 定性变量 共2个水平 | 0代表未升职 1代表已经升职 | 升职的占 21.27% |
sales台账什么意思 | 职业 | 定性变量 共10个水平 | accounting、hr等 | |
salary | 薪资水平 | 定性变量 共3个水平 | 卡卡西真面目medium high、low | high占 8.25% low占 48.78% |
| | | | | |
数据集下载地址(/c/sm/data)
第一步 导入所需的包
library(plyr) # Rmisc的关联包,若同时需要加载dplyr包,必须先加载plyr包
library(dplyr) # filter()
library(ggplot2) # ggplot()
library(DT) # datatable() 建立交互式数据表
library(caret) # createDataPartition() 分层抽样函数
library(rpart) # rpart()
library(e1071) # naiveBayes()
library(randomForest) # randomForest()
library(pROC) # roc()
library(Rmisc) # multiplot() 分割绘图区域
第二步 导入数据
hr <- read.csv("D/HR_comma_p.csv")
第三步 描述性分析
str(hr) # 查看数据的基本数据结构
summary(hr) # 计算数据的主要描述统计量
纠正o型腿的睡姿
通过观察各个变量的主要描述统计量可知,离职率将近24%、对公司的满意度在62%左右、绩效评估在约72%左右、平均每人参加过3-4个项目、员工每月平均工作时长在200小时左右
hr$left <- factor(hr$left, levels = c('0', '1'))
后续的个别模型需要目标变量必须为因子型,我们将其转换为因子型
box_sat <- ggplot(hr, aes(x = left, y = satisfaction_level, fill = left)) +
geom_boxplot(varwidth = T) + # varwidth=T意味着箱子的宽度根据样本数决定
theme_bw() + # 一种ggplot的主题
# 在图中标识均值点,fun.y = 'mean'为求均值,geom = 'point'为绘制点图,
# 后面的是那个参数就是控制点的形状、大小和填充颜色
stat_summary(fun.y = 'mean', geom = 'point', shape = 23, size = 3, fill = 'white') +
labs(x = 'left', y = 'satisfaction_level') + # 设置横纵坐标标签
# 设置刻度标签字体大小,rel()控制原始字号的倍数
= element_text(size = rel(1.3)),
= element_text(size = rel(1.3)),
axis.title.x = element_text(size = rel(1.3)),
# 设置坐标轴标签字体大小
axis.title.y = element_text(size = rel(1.3)))
# 绘制绩效评估与是否离职的箱线图
box_eva <- ggplot(hr, aes(x = left, y = last_evaluation, fill = left)) +
geom_boxplot(varwidth = T) +
theme_bw() +
stat_summary(fun.y = 'mean', geom = 'point', shape = 23, size = 3, fill = 'white') +
labs(x = 'left', y = 'last_evaluation') +
= element_text(size = rel(1.3)),
= element_text(size = rel(1.3)),
axis.title.x = element_text(size = rel(1.3)),一次不忠百次不容
axis.title.y = element_text(size = rel(1.3)))
# 绘制平均月工作时长与是否离职的箱线图
box_mon <- ggplot(hr, aes(x = left, y = average_montly_hours, fill = left)) +
geom_boxplot(varwidth = T) +
theme_bw() +
stat_summary(fun.y = 'mean', geom = 'point', shape = 23, size = 3, fill = 'white') +
labs(x = 'left', y = 'average_montly_hours') +
= element_text(size = rel(1.3)),
= element_text(size = rel(1.3)),
学而不厌的厌是什么意思 axis.title.x = element_text(size = rel(1.3)),
axis.title.y = element_text(size = rel(1.3)))
# 合并这些图形在一个绘图区域,cols = 3的意思就是排版为一行三列
育儿知识大全multiplot(box_sat, box_eva, box_mon, cols = 3)
探索员工对公司满意度、绩效评估和月均工作时长与是否离职的关系,绘制对公司满意度与是否离职的箱线图
通过探索员工对公司满意度、绩效评估和月均工作时长与离职的关系可知,离职员工的特点为对公司的满意度较低,大多集中在0.4左右;绩效评估较高,在0.8以上的较为集中;平均月工作时长较高,一多半超过了平均水平(200小时)
# 绘制参与项目个数条形图时需要把此变量转换为因子型
hr$number_project <- factor(hr$number_project,
levels = c('2', '3', '4', '5', '6', '7'))
bar_pro <- ggplot(hr, aes(x = number_project, fill = left)) +
geom_bar(position = 'fill') + # position = 'fill'即绘制百分比堆积条形图
theme_bw() +
labs(x = 'left', y = 'number_project') +
= element_text(size = rel(1.3)),
= element_text(size = rel(1.3)),
axis.title.x = element_text(size = rel(1.3)),