DAY16 机器学习专案实作-员工离职预测(上)

一、前言

前面学了这麽多的方法,大家是不是在烦恼要怎麽使用?或是不知道该用在什麽地方?今天就由小编来带大家进行专案实战,让大家轻松上手。


二、资料哪里来

这次我们所用的资料是从Aidea平台上取得的,来到首页後可以看到上面有练习场,直接点进去找“员工离职预测”就可以报名。在练习场的资料原本都是用来比赛的,在比完赛後主办方会放在上面供大家练习。因为是比赛的资料,所以资料集都稍微有点难度,不过也因为是跟业界合作,拿到的资料都是真实资料~大家有兴趣也可以下载其他议题的资料来做,那我们就开始吧!

Aidea传送门

https://ithelp.ithome.com.tw/upload/images/20210908/20140427lyR2qTp41Q.png


三、读资料:

通常比赛方会附上资料说明,告诉我们题目的目标是要做什麽,也会给出每个栏位的说明,要记得先读懂,不然会不知道怎麽开始。
以这个资料为例,他要我们找到哪些员工未来可能离职,而我们就要根据他的资料去预测0(未离职)或1(离职),很显然的这是个分类问题。
https://ithelp.ithome.com.tw/upload/images/20210908/20140427zCGCxwmVu2.png


四、探索性资料分析+视觉化

1.观察有无空值

因为特徵数量太多,我只列出部分几个:

df_train.isnull().sum()

年度绩效等级B 73
年度绩效等级C 73
年龄层级 73
婚姻状况 73
年资层级A 73
年资层级B 73
年资层级C 73
任职前工作平均年数 73
最高学历 5326
毕业学校类别 3841
毕业科系类别 73
眷属量 73

2.观察资料离职率在资料间的占比

可以发现这是资料不平衡的资料集

ax = sns.countplot(x="PerStatus", data=df_train)

https://ithelp.ithome.com.tw/upload/images/20210908/20140427DS3oouldZs.png

3.观察各个特徵之间的离职率自资料间的占比

可以看到有些特徵在某部分离职率很高,例如我们可以看到厂区代码,待在厂区六的离职率相对高很多,所以我们到时候特徵筛选的时候可以把这些纳入考虑。

但在这里我要跟读者说抱歉,因为这是使用R语言画的,所以这部分没有提供程序码,大家可以利用前面所学的试着去做视觉化,来训练自身的画图能力喔~
https://ithelp.ithome.com.tw/upload/images/20210908/20140427J1CLgw3E3K.png
https://ithelp.ithome.com.tw/upload/images/20210908/20140427yVABSjDuum.png

4.生成新特徵作视觉化

因为资料因为资料给的是同一个人四年的资料,因此我们用有离职的人当年减上一年去看看是什麽特徵出现变化导致他们离职。

结果我们发现有五个特徵的变化导致离职的比率比没变化高。分别是:训练时数c、生产总额、近三个月请假数A、近一年请假数A、年度绩效等级c ,到时候我们在做特徵筛选时就可以把这五个特徵丢进去看看,看有没有比较重要。

#画出堆叠长条图
data0=[]
data1=[]
data11=[]
for i in range(1,22):
    data0.append((train[train.columns[i]]==0).sum())
    data1.append((train[train.columns[i]]==1).sum())
    data11.append((train[train.columns[i]]==-1).sum())
#%%
import numpy as np
import matplotlib.pyplot as plt

year=['专案时数变化', '专案总数变化', '特殊专案占比变化', '训练时数A变化', '训练时数B变化',
       '训练时数C变化', '生产总额变化', '荣誉数变化', '是否升迁变化', '升迁速度变化', '近三月请假数A变化',
       '近一年请假数A变化', '近三月请假数B变化', '近一年请假数B变化', '出差数A变化', '出差数B变化', '出差集中度变化',
       '年度绩效等级A变化', '年度绩效等级B变化', '年度绩效等级C变化', '加班数变化']

plt.figure(figsize=(9,7))
plt.bar(year,data0,color="green",label="没变化")
plt.bar(year,data1,color="yellow",bottom=np.array(data0),label="变化增加导致离职")
plt.bar(year,data11,color="red",bottom=np.array(data0)+np.array(data1),label="变化减少导致离职")

plt.legend(loc="lower left",bbox_to_anchor=(0.8,1.0))
plt.xticks(rotation=30)
plt.show()

https://ithelp.ithome.com.tw/upload/images/20210908/201404276IO3SBAffi.png


五、结论

目前对资料大致的观察就到这边,每个人对资料的想法都不相同,不一定要照着小编的图去画,可能我还有一些特徵细节没有发现,大家也可以自己去探索看看喔~做资料分析最重要的就是动手去尝试看看,接下来我们就往资料前处理以及特徵工程的部分继续迈进啦,我们下篇见~


<<:  Day 2 - Using Google reCAPTCHA with ASP.NET Web Forms C#「我不是机器人」验证

>>:  #0 - SCSS 不负责任快速入门

Day 13 - Rancher 专案管理指南 - 资源控管

本文将於赛後同步刊登於笔者部落格 有兴趣学习更多 Kubernetes/DevOps/Linux 相...

[Day 11] Select 下拉

Day10 在许多登入画面会选择某些内容 像选择参观网站是否满18岁等等选项 所以可以用下拉选单来显...

[DAY8]k8s必学的设定档-yaml (上)

YAML(/ˈjæməl/,尾音类似camel骆驼)是一个可读性高,用来表达资料序列化的格式。YA...

DAY1-为何要逼自己参加铁人赛

我是今年刚毕业的应届毕业生 不知道有没有男生跟我有一样的困扰,想要找Junior的缺,但因为还没当兵...

Day 10. 新手也能懂的物件导向 part 2

上一篇讲了一部分物件导向的特性,今天要来讲多型,在此之前要先介绍介面(interface),以及他的...