员工离职预测

一、概述

1、项目来源:https://www.dcjingsai.com/static_page/cmpList.html

2、字段信息如下:
训练数据主要包括1100条记录,31个字段,主要字段说明如下:
(1)Age:员工年龄
(2)Attrition:员工是否已经离职,1表示已经离职,2表示未离职,这是目标预测值;
(3)BusinessTravel:商务差旅频率,Non-Travel表示不出差,Travel_Rarely表示不经常出差,Travel_Frequently表示经常出差;
(4)Department:员工所在部门,Sales表示销售部,Research & Development表示研发部,Human Resources表示人力资源部;
(5)DistanceFromHome:公司跟家庭住址的距离,从1到29,1表示最近,29表示最远;
(6)Education:员工的教育程度,从1到5,5表示教育程度最高;
(7)EducationField:员工所学习的专业领域,Life Sciences表示生命科学,Medical表示医疗,Marketing表示市场营销,Technical Degree表示技术学位,Human Resources表示人力资源,Other表示其他;
(8)EmployeeNumber:员工号码;
(9)EnvironmentSatisfaction:员工对于工作环境的满意程度,从1到4,1的满意程度最低,4的满意程度最高;
(10)Gender:员工性别,Male表示男性,Female表示女性;
(11)JobInvolvement:员工工作投入度,从1到4,1为投入度最低,4为投入度最高;
(12)JobLevel:职业级别,从1到5,1为最低级别,5为最高级别;
(13)JobRole:工作角色:Sales Executive是销售主管,Research Scientist是科学研究员,Laboratory Technician实验室技术员,Manufacturing Director是制造总监,Healthcare Representative是医疗代表,Manager是经理,Sales Representative是销售代表,Research Director是研究总监,Human Resources是人力资源;
(14)JobSatisfaction:工作满意度,从1到4,1代表满意程度最低,4代表满意程度最高;
(15)MaritalStatus:员工婚姻状况,Single代表单身,Married代表已婚,Divorced代表离婚;
(16)MonthlyIncome:员工月收入,范围在1009到19999之间;
(17)NumCompaniesWorked:员工曾经工作过的公司数;
(18)Over18:年龄是否超过18岁;
(19)OverTime:是否加班,Yes表示加班,No表示不加班;
(20)PercentSalaryHike:工资提高的百分比;
(21)PerformanceRating:绩效评估;
(22)RelationshipSatisfaction:关系满意度,从1到4,1表示满意度最低,4表示满意度最高;
(23)StandardHours:标准工时;
(24)StockOptionLevel:股票期权水平;
(25)TotalWorkingYears:总工龄;
(26)TrainingTimesLastYear:上一年的培训时长,从0到6,0表示没有培训,6表示培训时间最长;
(27)WorkLifeBalance:工作与生活平衡程度,从1到4,1表示平衡程度最低,4表示平衡程度最高;
(28)YearsAtCompany:在目前公司工作年数;
(29)YearsInCurrentRole:在目前工作职责的工作年数
(30)YearsSinceLastPromotion:距离上次升职时长
(31)YearsWithCurrManager:跟目前的管理者共事年数;

3、使用方法:分类算法(逻辑回归、随机森林)
4、目的:混淆矩阵测算验证集正确率越高越好

二、分析过程

读入数据并将单一变量删除(年满18岁、标准工时、员工编号为常量)

setwd("E:/R数据源/员工离职预测训练赛")
data<-read.csv("pfm_train.csv",header = T,encoding = "UTF-8")
head(data)str(data)
summary(data)
#年满18岁、标准工时、员工编号为常量,删除。
data<-data[,-c(8,18,23)]

作图观察各自变量与是否离职影响程度

library(ggplot2)
library(stringi)
library(stringr)
library(reshape2)
library(labeling)#年龄、性别与是否离职关系图
p1<-ggplot(data, aes(X.U.FEFF.Age, fill = factor(Attrition))) + geom_histogram(bins=30) + facet_grid(.~Gender)+ labs(fill="Attrition")+ xlab("Age")+ylab("Total Count")#工作水平、部门与是否离职关系图
p2<-ggplot(data, aes(x = JobLevel, fill = as.factor(Attrition))) +geom_bar() +facet_grid(.~Department)+xlab("Job Level")+  ylab("Total Count")+ labs(fill = "Attrition")#出差情况、部门与是否离职关系图
p3<-ggplot(data, aes(x = BusinessTravel, fill = as.factor(Attrition))) +geom_bar() +facet_grid(.~Department)+xlab("BusinessTravel")+  ylab("Total Count")+ labs(fill = "Attrition")#月收入与离职情况关系图
p4<-ggplot(data, aes(MonthlyIncome, fill = factor(Attrition))) + geom_histogram(bins=30) + labs(fill="Attrition")+ xlab("MonthlyIncome")+ylab("Total Count")#婚姻状况、性别与是否离职关系图
p5<-ggplot(data, aes(x = MaritalStatus, fill = factor(Attrition))) + geom_bar() + facet_grid(.~Gender)+ labs(fill="Attrition")+ xlab("MaritalStatus")+ylab("Total Count")#加班情况与是否离职关系图
p6<-ggplot(data, aes(x = OverTime, fill = factor(Attrition))) + geom_bar() + labs(fill="Attrition")+ xlab("OverTime")+ylab("Total Count")

#合并展示

library(plyr)
library(lattice)
library(Rmisc)
multiplot(p1,p2,cols=2)
multiplot(p3,p4,p5,p6,cols=2)



由上图可以看出,离职人员特征包括偏年轻化,男性稍多,单身,月收入较低,加班等。

将年龄、月收入连续性变量离散化:

data$X.U.FEFF.Age[data$X.U.FEFF.Age<25]<-1
data$X.U.FEFF.Age[data$X.U.FEFF.Age>=25&data$X.U.FEFF.Age<35]<-2
data$X.U.FEFF.Age[data$X.U.FEFF.Age>=35&data$X.U.FEFF.Age<45]<-3
data$X.U.FEFF.Age[data$X.U.FEFF.Age>=45&data$X.U.FEFF.Age<55]<-4
data$X.U.FEFF.Age[data$X.U.FEFF.Age>=55]<-5
#转化为因子类型
data$X.U.FEFF.Age<-factor(data$X.U.FEFF.Age)
data$MonthlyIncome[data$MonthlyIncome<=3000]<-1
data$MonthlyIncome[data$MonthlyIncome>3000 & data$MonthlyIncome<=6000]<-2
data$MonthlyIncome[data$MonthlyIncome>6000 & data$MonthlyIncome<=9000]<-3
data$MonthlyIncome[data$MonthlyIncome>9000 & data$MonthlyIncome<=12000]<-4
data$MonthlyIncome[data$MonthlyIncome>12000 & data$MonthlyIncome<=17000]<-5
data$MonthlyIncome[data$MonthlyIncome>17000]<-6
#转化为因子类型
data$MonthlyIncome<-factor(data$MonthlyIncome)

各特征值重要性展示:

library(mlbench)
library(caret)control <- trainControl(method="repeatedcv", number=10, repeats=3)
model <- train(Attrition~., data=data, method="lvq", preProcess="scale", trControl=control)
importance <- varImp(model, scale=FALSE)
print(importance)
plot(importance)


特征值选取:选取几个特征值时正确性最高

control1 <- rfeControl(functions=rfFuncs, method="cv", number=10)
results <- rfe(data[,-2], data[,2], sizes=c(1:8), rfeControl=control1)
print(results)
predictors(results)
plot(results, type=c("g", "o"))


****?(结果有误?)

分类建模
分类标签列转化为因子类型

data$Attrition<-factor(data$Attrition,levels=c(0,1))

划分训练集与验证集:

data_train<-sample(nrow(data),0.7*nrow(data))
df.train<-data[data_train,]
df.validate<-data[-data_train,]

逻辑回归:

g1<-glm(Attrition~.,data=df.train,family=binomial())
summary(g1)

对模型进行验证:

prob<-predict(g1,df.validate,type="response")
logit.pred<-factor(prob>0.5,levels=c(F,T),labels=c(0,1))
table(df.validate$Attrition,logit.pred,dnn=c("实际","预测"))

三、分类预测

读入测试集进行预测(需要对测试集按照训练集进行相同处理:删除常量,年龄、月收入离散化)

test<-read.csv("pfm_test.csv",header = T,encoding = "UTF-8")
head(test)
test<-test[,-c(7,17,22)]
test$X.U.FEFF.Age[test$X.U.FEFF.Age<25]<-1
test$X.U.FEFF.Age[test$X.U.FEFF.Age>=25&test$X.U.FEFF.Age<35]<-2
test$X.U.FEFF.Age[test$X.U.FEFF.Age>=35&test$X.U.FEFF.Age<45]<-3
test$X.U.FEFF.Age[test$X.U.FEFF.Age>=45&test$X.U.FEFF.Age<55]<-4
test$X.U.FEFF.Age[test$X.U.FEFF.Age>=55]<-5
test$X.U.FEFF.Age<-factor(test$X.U.FEFF.Age)test$MonthlyIncome[test$MonthlyIncome<=3000]<-1
test$MonthlyIncome[test$MonthlyIncome>3000 & test$MonthlyIncome<=6000]<-2
test$MonthlyIncome[test$MonthlyIncome>6000 & test$MonthlyIncome<=9000]<-3
test$MonthlyIncome[test$MonthlyIncome>9000 & test$MonthlyIncome<=12000]<-4
test$MonthlyIncome[test$MonthlyIncome>12000 & test$MonthlyIncome<=17000]<-5
test$MonthlyIncome[test$MonthlyIncome>17000]<-6
test$MonthlyIncome<-factor(test$MonthlyIncome)

模型结果预测并输出:

test_prob<-predict(g1,test,type="response")
test_logit.pred<-factor(test_prob>0.5,levels=c(F,T),labels=c(0,1))
head(test_logit.pred)
write.csv(test_logit.pred,file = "E:/R数据源/员工离职预测训练赛/test_pred.csv")

目前排名:320/2290

结果尚待优化,尝试决策树、随机森林算法结果不佳,进行特征组合提示:


特征组合及参数优化方面改进方法欢迎指导。

DC算法竞赛——员工离职预测相关推荐

  1. 天池竞赛员工离职预测训练赛

    组员:欧阳略.陶奇辉.王曙光.吴轩毅 数据来源:天池大数据竞赛员工离职预测训练赛中的数据 大致数据截图如下 根据所给数据,我组利用Pycharm编程源代码截图如下 最终,我组预测准确率为0.89,基本 ...

  2. 数据挖掘竞赛-员工离职预测训练赛

    员工离职预测 简介 DC的一道回归预测题.是比较基础的分类问题,主要对逻辑回归算法的使用.核心思路为属性构造+逻辑回归. 过程 数据获取 报名参与比赛即可获得数据集的百度网盘地址,这个比赛时间很久,随 ...

  3. 员工离职预测(logistic)(R语言)

    员工离职预测(logistic) 出于工作需要及个人兴趣,学习数据分析及R语言是差不多2年前,第一篇更新的文章为m久前做的员工离职预测,当时做这个项目的主要是为了学习logistic算法,数据来源为D ...

  4. 机器学习-员工离职预测训练赛

    [数据来源]DC竞赛的员工离职预测训练赛 一共两个csv表格,pfm_train.csv训练(1100行,31个字段),pfm_test.csv测试集(350行,30个字段) [字段说明] Age:员 ...

  5. 基于集成学习方法Random Forest、Adaboost、GBDT、LightGBM、XGBoost的调参、建模、评估实现kaggle竞赛员工离职案例分析(2)

    基于集成学习方法Random Forest.Adaboost.GBDT.LightGBM.XGBoost的调参.建模.评估实现kaggle竞赛员工离职案例分析(2) 引言 3. adaboost模型分 ...

  6. kaggle员工离职预测——SVC

    一.比赛说明 比赛地址:https://www.kaggle.com/c/bi-attrition-predict 问题描述 数据包括员工的各种统计信息,以及该员工是否已经离职,统计的信息包括工资.出 ...

  7. 吃鸡排名预测挑战赛 空气质量预测 英雄联盟大师预测 手机行为识别 员工离职预测 猫十二分类体验赛

    1.吃鸡排名预测挑战赛 https://aistudio.baidu.com/aistudio/competition/detail/155/0/introduction 2.空气质量预测https: ...

  8. r语言员工离职_使用R机器学习进行员工离职预测系列(一)

    最近一直觉得,其实机器学习的门槛并不高,以R语言的角度,甚至稍微学过一点,就可以针对相关数据进行各种算法模型的建立和测试. 而真正有难度的地方一是算法优化部分,二是和对于模型评价的部分,这两个部分往往 ...

  9. 基于python的kaggle练习(二)——员工离职预测

    前沿 目前社会上呈现出一种公司招不到人,大批失业人员的矛盾现象,且大部分公司的离职率居高不下,很多入职没多久就辞职,所花费的培训招聘等资源都浪费了.为了弄清楚公司员工离职原因,通过kaggle上某一家 ...

  10. 员工离职预测 逻辑回归

    import numpy as np import pandas as pd from sklearn.preprocessing import LabelEncoder#中文编码为数字 import ...

最新文章

  1. 2012年河南省普通高校招生本科一批院校 平行投档分数线(理科)
  2. 编程类-----matlab基础语法复习(1)
  3. linux捕捉信号sigint失败,为shell布置陷阱:trap捕捉信号方法论
  4. C/C++混淆点-逗号运算符
  5. 信息学奥赛一本通C++语言——1065:奇数求和
  6. 项目人力资源管理重点梳理
  7. vim编辑器初级(一)
  8. GitGithub 视频教程(Java版)
  9. 李宏毅机器学习hw1~4作业 强化点
  10. Tupper自我指涉公式:图象里竟然包含式子本身
  11. 韦东山第一二期衔接课程内容概要
  12. 搭建Mysql双主双从报错The slave I/O thread stops because master and slave have equal MySQL server UUIDs(已解决)
  13. 怎么看R语言是不是在运行_五个方法,教你怎么看自己电脑的硬盘是不是固态硬盘?...
  14. 浏览器隐私模式真的可以保证我们的隐私不被透露吗?
  15. ubuntu 20.04.3 安装教程(本人一步一步安装记录...)
  16. 近30所高校,获教育部点名表扬!
  17. R reticulate 设置 python 环境
  18. SAP 检验批决策增强
  19. visual studio 错误:在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include StdAfx.h”?
  20. 闪电连接算法之Python实现

热门文章

  1. element-ui+vue,翻页添加首页、尾页跳转按钮
  2. CSDN资源下载 不限积分/C币 都可以下
  3. Hive元数据存储和表数据存储
  4. 通过STM32CubeMX实现LED闪烁——基于HAL库
  5. 常用电子个人邮箱账号格式怎么写?
  6. Derek Sivers:砍掉一切没有惊讶感的内容(译)
  7. 方舟仙境服务器什么时候修复,方舟生存进化官服多久删一次服务器
  8. Factory reset会黑屏一段时间进入Provision首页
  9. 在Centos7上安装Docker
  10. 简单实现微信抢红包的功能(Java)