数据挖掘实战:员工离职预测(训练赛)

赛题来自:datacastle

 

任务

从给定的影响员工离职的因素和员工是否离职的记录,建立一个逻辑回归模型预测有可能离职的员工

 

数据

数据主要包括影响员工离职的各种因素(工资、出差、工作环境满意度、工作投入度、是否加班、是否升职、工资提升比例等)以及员工是否已经离职的对应记录。 

主要字段说明

  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:跟目前的管理者共事年数;

测试数据主要包括350条记录,30个字段,跟训练数据的不同是测试数据并不包括员工是否已经离职的记录;

通过由训练数据所建立的模型以及所给的测试数据,得出测试数据相应的员工是否已经离职的预测。

 

预处理

这里还是借助google colab 平台来练习

import pandas as pd
data = pd.read_csv('pfm_train.csv')
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1100 entries, 0 to 1099
Data columns (total 31 columns):
Age                         1100 non-null int64
Attrition                   1100 non-null int64
BusinessTravel              1100 non-null object
Department                  1100 non-null object
DistanceFromHome            1100 non-null int64
Education                   1100 non-null int64
EducationField              1100 non-null object
EmployeeNumber              1100 non-null int64
EnvironmentSatisfaction     1100 non-null int64
Gender                      1100 non-null object
JobInvolvement              1100 non-null int64
JobLevel                    1100 non-null int64
JobRole                     1100 non-null object
JobSatisfaction             1100 non-null int64
MaritalStatus               1100 non-null object
MonthlyIncome               1100 non-null int64
NumCompaniesWorked          1100 non-null int64
Over18                      1100 non-null object
OverTime                    1100 non-null object
PercentSalaryHike           1100 non-null int64
PerformanceRating           1100 non-null int64
RelationshipSatisfaction    1100 non-null int64
StandardHours               1100 non-null int64
StockOptionLevel            1100 non-null int64
TotalWorkingYears           1100 non-null int64
TrainingTimesLastYear       1100 non-null int64
WorkLifeBalance             1100 non-null int64
YearsAtCompany              1100 non-null int64
YearsInCurrentRole          1100 non-null int64
YearsSinceLastPromotion     1100 non-null int64
YearsWithCurrManager        1100 non-null int64
dtypes: int64(23), object(8)
memory usage: 266.5+ KB

可以看到没有缺失值

 

这里有数值特征还有类别特征,需要把类别特征统一为数值型,这里先看看不同特征对应的离职率,以观察特征的相关性

1、年龄分布

data[['Age','Attrition']].groupby(['Age']).mean().plot.bar()

可以看到十几二十的年轻人比四十多岁的中年人较容易离职

 

2、出差频率分布

data[['BusinessTravel','Attrition']].groupby(['BusinessTravel']).mean().plot.bar()

这里看到出差越多离职的概率越大

其他特征也可以同样获得分布图

 

接下来是去除相关性不大(该属性下不同的值离职率差别不大)的特征,保留剩余的特征利用逻辑回归、神经网络、决策树来判别。代码待补充~

 

 

超好用的 pandas 之 groupby

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值