电子产业
数字化服务平台

扫码下载
手机洽洽

  • 微信小程序

    让找料更便捷

  • 扫码下载手机洽洽

    随时找料

    即刻洽谈

    点击下载PC版
  • 华强电子网公众号

    电子元器件

    采购信息平台

  • 华强电子网移动端

    生意随身带

    随时随地找货

  • 华强商城公众号

    一站式电子元器件

    采购平台

  • 芯八哥公众号

    半导体行业观察第一站

kaggle案例:预测员工离职(人工智能告诉你答案)

来源:电子发烧友 作者:华仔 浏览:623

标签:

摘要: 查看数据的基本数据结构 计算数据的主要描述统计量 后续的个别模型需要目标变量必须为因子型,我们将其转换为因子型 探索员工对公司满意度、绩效评估和月均工作时长与是否离职的关系...

        ################### ============== 加载包 =================== #################

library(plyr) # Rmisc的关联包,若同时需要加载dplyr包,必须先加载plyr包

library(dplyr) # filter()

library(ggplot2) # ggplot()

library(DT) # datatable() 建立交互式数据表

library(caret) # createDataParTITIon() 分层抽样函数

library(rpart) # rpart()

library(e1071) # naiveBayes()

library(pROC) # roc()

library(Rmisc) # mulTIplot() 分割绘图区域

################### ============= 导入数据 ================== #################

kaggle案例:员工离职预测(附学习视频)

kaggle案例:员工离职预测(附学习视频)

hr 《- read。csv(“D:/R/天善智能/书豪十大案例/员工离职预测\\HR_comma_sep。csv”)

str(hr) # 查看数据的基本数据结构

kaggle案例:员工离职预测(附学习视频)

描述性分析

################### ============= 描述性分析 ================== ###############

str(hr) # 查看数据的基本数据结构

summary(hr) # 计算数据的主要描述统计量

# 后续的个别模型需要目标变量必须为因子型,我们将其转换为因子型

hr$left 《- factor(hr$left, levels = c(‘0’, ‘1’))

## 探索员工对公司满意度、绩效评估和月均工作时长与是否离职的关系

# 绘制对公司满意度与是否离职的箱线图

box_sat 《- ggplot(hr, aes(x = left, y = saTIsfaction_level, fill = left)) +

geom_boxplot() +

theme_bw() + # 一种ggplot的主题

labs(x = ‘left’, y = ‘satisfaction_level’) # 设置横纵坐标标签

box_sat

kaggle案例:员工离职预测(附学习视频)

员工对公司满意度与是否离职的箱线图

离职员工对公司的满意度较低,大多集中在0.4左右;

# 绘制绩效评估与是否离职的箱线图

box_eva 《- ggplot(hr, aes(x = left, y = last_evaluation, fill = left)) +

geom_boxplot() +

theme_bw() +

labs(x = ‘left’, y = ‘last_evaluation’)

box_eva

kaggle案例:员工离职预测(附学习视频)

绩效评估与是否离职的箱线图

离职员工的绩效评估较高,在0.8以上的较为集中;

# 绘制平均月工作时长与是否离职的箱线图

box_mon 《- ggplot(hr, aes(x = left, y = average_montly_hours, fill = left)) +

geom_boxplot() +

theme_bw() +

labs(x = ‘left’, y = ‘average_montly_hours’)

box_mon

kaggle案例:员工离职预测(附学习视频)

离职员工的平均月工作时长较高,一多半超过了平均水平(200小时)

# 绘制员工在公司工作年限与是否离职的箱线图

box_time 《- ggplot(hr, aes(x = left, y = time_spend_company, fill = left)) +

geom_boxplot() +

theme_bw() +

labs(x = ‘left’, y = ‘time_spend_company’)

box_time

kaggle案例:员工离职预测(附学习视频)

离职员工的工作年限在4年左右

# 合并这些图形在一个绘图区域,cols = 2的意思就是排版为一行二列

multiplot(box_sat, box_eva, box_mon, box_time, cols = 2)

kaggle案例:员工离职预测(附学习视频)

## 探索参与项目个数、五年内有没有升职和薪资与离职的关系

# 绘制参与项目个数条形图时需要把此变量转换为因子型

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’)

bar_pro

kaggle案例:员工离职预测(附学习视频)

员工参与项目个数与是否离职的百分比堆积条形图

参加项目数越多的员工离职率越大(去除项目数为2的样本)

# 绘制5年内是否升职与是否离职的百分比堆积条形图

bar_5years 《- ggplot(hr, aes(x = as.factor(promotion_last_5years), fill = left)) +

geom_bar(position = ‘fill’) +

theme_bw() +

labs(x = ‘left’, y = ‘promotion_last_5years’)

bar_5years

kaggle案例:员工离职预测(附学习视频)

5年内是否升职与是否离职的百分比堆积条形图

五年内没有升职的员工的离职率比较大

# 绘制薪资与是否离职的百分比堆积条形图

bar_salary 《- ggplot(hr, aes(x = salary, fill = left)) +

geom_bar(position = ‘fill’) +

theme_bw() +

labs(x = ‘left’, y = ‘salary’)

bar_salary

kaggle案例:员工离职预测(附学习视频)

薪资与是否离职的百分比堆积条形图

薪资越高离职率越低

# 合并这些图形在一个绘图区域,cols = 3的意思就是排版为一行三列

multiplot(bar_pro, bar_5years, bar_salary, cols = 3)

kaggle案例:员工离职预测(附学习视频)

建模预测之回归树

############## =============== 提取优秀员工 =========== ###################

# filter()用来筛选符合条件的样本

hr_model 《- filter(hr, last_evaluation 》= 0.70 | time_spend_company 》= 4

| number_project 》 5)

############### ============ 自定义交叉验证方法 ========== ##################

# 设置5折交叉验证 method = ‘cv’是设置交叉验证方法,number = 5意味着是5折交叉验证

train_control 《- trainControl(method = ‘cv’, number = 5)

kaggle案例:员工离职预测(附学习视频)

################ =========== 分成抽样 ============== ##########################

set.seed(1234) # 设置随机种子,为了使每次抽样结果一致

# 根据数据的因变量进行7:3的分层抽样,返回行索引向量 p = 0.7就意味着按照7:3进行抽样,

# list=F即不返回列表,返回向量

index 《- createDataPartition(hr_model$left, p = 0.7, list = F)

traindata 《- hr_model[index, ] # 提取数据中的index所对应行索引的数据作为训练集

testdata 《- hr_model[-index, ] # 其余的作为测试集

##################### ============= 回归树 ============= #####################

# 使用caret包中的trian函数对训练集使用5折交叉的方法建立决策树模型

# left ~。的意思是根据因变量与所有自变量建模;trCintrol是控制使用那种方法进行建模

# methon就是设置使用哪种算法

rpartmodel 《- train(left ~ 。, data = traindata,

trControl = train_control, method = ‘rpart’)

# 利用rpartmodel模型对测试集进行预测,([-7]的意思就是剔除测试集的因变量这一列)

pred_rpart 《- predict(rpartmodel, testdata[-7])

# 建立混淆矩阵,positive=‘1’设定我们的正例为“1”

con_rpart 《- table(pred_rpart, testdata$left)

con_rpart

kaggle案例:员工离职预测(附学习视频)

kaggle案例:员工离职预测(附学习视频)

kaggle案例:员工离职预测(附学习视频)

kaggle案例:员工离职预测(附学习视频)

建模预测之朴素贝叶斯

################### ============ Naives Bayes =============== #################

nbmodel 《- train(left ~ 。, data = traindata,

trControl = train_control, method = ‘nb’)

pred_nb 《- predict(nbmodel, testdata[-7])

con_nb 《- table(pred_nb, testdata$left)

con_nb

kaggle案例:员工离职预测(附学习视频)

模型评估+应用

kaggle案例:员工离职预测(附学习视频)

kaggle案例:员工离职预测(附学习视频)

################### ================ ROC ==================== #################

# 使用roc函数时,预测的值必须是数值型

pred_rpart 《- as。numeric(as。character(pred_rpart))

pred_nb 《- as。numeric(as。character(pred_nb))

roc_rpart 《- roc(testdata$left, pred_rpart) # 获取后续画图时使用的信息

#假正例率:(1-Specififity[真反例率])

Specificity 《- roc_rpart$specificities # 为后续的横纵坐标轴奠基,真反例率

Sensitivity 《- roc_rpart$sensitivities # 查全率 : sensitivities,也是真正例率

# 绘制ROC曲线

#我们只需要横纵坐标 NULL是为了声明我们没有用任何数据

p_rpart 《- ggplot(data = NULL, aes(x = 1- Specificity, y = Sensitivity)) +

geom_line(colour = ‘red’) + # 绘制ROC曲线

geom_abline() + # 绘制对角线

annotate(‘text’, x = 0.4, y = 0.5, label = paste(‘AUC=’, #text是声明图层上添加文本注释

#‘3’是round函数里面的参数,保留三位小数

round(roc_rpart$auc, 3))) + theme_bw() + # 在图中(0.4,0.5)处添加AUC值

labs(x = ‘1 - Specificity’, y = ‘Sensitivities’) # 设置横纵坐标轴标签

p_rpart

kaggle案例:员工离职预测(附学习视频)

回归树的ROC曲线

roc_nb 《- roc(testdata$left, pred_nb)

Specificity 《- roc_nb$specificities

Sensitivity 《- roc_nb$sensitivities

p_nb 《- ggplot(data = NULL, aes(x = 1- Specificity, y = Sensitivity)) +

geom_line(colour = ‘red’) + geom_abline() +

annotate(‘text’, x = 0.4, y = 0.5, label = paste(‘AUC=’,

round(roc_nb$auc, 3))) + theme_bw() +

labs(x = ‘1 - Specificity’, y = ‘Sensitivities’)

p_nb

kaggle案例:员工离职预测(附学习视频)

朴素贝叶斯ROC曲线图

回归树的AUC值(0.93) 》 朴素贝叶斯的AUC值(0.839)

最终我们选择了回归树模型做为我们的实际预测模型

######################### ============= 应用 =============####################

# 使用回归树模型预测分类的概率,type=‘prob’设置预测结果为离职的概率和不离职的概率

pred_end 《- predict(rpartmodel, testdata[-7], type = ‘prob’)

# 合并预测结果和预测概率结果

data_end 《- cbind(round(pred_end, 3), pred_rpart)

# 为预测结果表重命名

names(data_end) 《- c(‘pred.0’, ‘pred.1’, ‘pred’)

# 生成一个交互式数据表

datatable(data_end)

kaggle案例:员工离职预测(附学习视频)

最终我们会生成一个预测结果表

型号 厂商 价格
EPCOS 爱普科斯 /
STM32F103RCT6 ST ¥461.23
STM32F103C8T6 ST ¥84
STM32F103VET6 ST ¥426.57
STM32F103RET6 ST ¥780.82
STM8S003F3P6 ST ¥10.62
STM32F103VCT6 ST ¥275.84
STM32F103CBT6 ST ¥130.66
STM32F030C8T6 ST ¥18.11
N76E003AT20 NUVOTON ¥9.67