0. 代码数据下载
算法学习
、4对1辅导
、论文辅导
、核心期刊
项目的代码和数据下载
可以通过公众号
滴滴我
1. 背景介绍
随着经济全球化和技术革命的进一步拓展,市场竞争日益激烈。在这场争夺的背后,人才的竞争又是重中之重。人才相对于资本等其他资源的稀缺性将使高素质的人才在各个企业之间流动成为一种常态。 而这就很容易造成公司的人员流失,那么造成这些人员流失的原因主要有哪些呢?我们怎么做可以减少人才流失呢?
2. 研究问题
人员流失因素分析
3. 部分字段含义
字段名 | 含义 |
---|---|
Age | 年龄 |
Attribute | 离职 |
BusinessTravel | 出差:0-不出差、1-偶尔出差、2-经常出差 |
Department | 部门:1-人力资源、2-科研、3-销售 |
DistanceFromHome | 离家距离 |
Education | 教育程度:1-大学以下、2-大学、3-学士、4-硕士、5-博士 |
EducationField | 教育领域 |
EnvironmentSatisfaction | 环境满意度 |
Gender | 性别:1-Male男、0-Female女 |
JobInvolvement | 工作投入 |
JobLevel | 职位等级 |
JobRole | 工作岗位 |
JobSatisfaction | 工作满意度 |
MaritalStatus | 婚姻状况:0-Divorced离婚、1-Single未婚、2-已婚 |
MonthlyIncome | 月收入 |
NumCompaniesWorked | 服务过几家公司 |
OverTime | 加班 |
RelationshipSatisfaction | 关系满意度 |
StockOptionLevel | 股权等级 |
TotalWorkingYears | 总工作年限 |
TrainingTimesLastYear | 上一年培训次数 |
WorkLifeBalance | 工作生活平衡 |
YearsAtCompany | 工作时长 |
YearsInCurrentRole | 当前岗位在职时长 |
YearsSinceLastPromotion | 上次升职时间 |
YearsWithCurrManager | 和现任经理时长 |
4. 数据处理
4.1 导入数据
a. 导入数据处理包
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
# 数据全显示
pd.set_option('display.max_columns', None)
# 颜色
colors = sns.color_palette()
# 数据精度
pd.set_option('precision', 3)
# 解决中文/小数点显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
b. 导入数据
data_path = 'WA_Fn-UseC_-HR-Employee-Attrition.csv'
df = pd.read_csv(data_path)
c. 查看数据前5列,观察数据结构
df.head(5)
d. 查看数据集信息、检查缺失值
df.info()
e. 查看数据描述性信息,检查异常值
df.describe()
f. 查看所有数据分布
# 查看所有数据分布
colnm = df.columns.to_list()
plt.figure(figsize=(35, 25))
for i in range(35):
plt.subplot(5, 7, i+1) # 3行4列 位置是i+1的子图
df[colnm[i]].hist(bins=80, color=colors[1]) # bins 指定显示多少竖条
plt.xlabel(colnm[i], fontsize=13)
plt.ylabel('Frequency')
plt.tight_layout()
print('\n figure 01')
plt.show()
结论: 该公司员工平均年龄为36岁 平均工作年限为11年,最长工作年限为40年 月平均收入为6502.93等重要信息
4.2 洞察数据(主要是公司离职人数)
4.2.1 公司离职人数与各部分对比
# 公司各部门离职率分析
plt.figure(figsize=(15, 9)) # 图片大小
df1 = pd.crosstab(df['Department'], df['Attrition'])
df1.plot(kind='bar')
plt.legend()
plt.xlabel('部门')
plt.ylabel('人数')
plt.xticks(rotation=0)
plt.title('公司各部门离职率分析')
print('\n figure 02')
结论:公司主要由三个部门组成(人力资源,科技部门,销售部门),其中科技部门的总人数最多,相对应的离职人数也是最多的,人力资源部门总人数和离职人数都最少
4.2.2 公司离职人数占比分析
# 公司离职人数占比分析
labels = ['离职', '在职']
sizes = [sum(df['Attrition'] == 'Yes'), sum(df['Attrition'] == 'No')]
explode = (0, 0.001)
plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=False, startangle=150)
plt.title("公司离职人数占比分析")
print('\n figure 03')
结论:公司离职率是16%
4.2.3 加班与离职率的关系
# 加班与离职率的关系
plt.figure(figsize=(6, 4))
sns.countplot(x='OverTime', hue='Attrition', data=df, color=colors[4])
plt.legend()
plt.xlabel('加班时长')
plt.title('加班与离职率的关系')
print('\n figure 04')
结论:加班时间越长,员工的离职率越高,加班是导致离职的重要原因
4.2.4 商务出差与离职率的关系
# 商务出差与离职率的关系
plt.figure(figsize=(6, 4))
sns.countplot(x='BusinessTravel', hue='Attrition', data=df)
plt.legend()
plt.xlabel('商务出差频次')
plt.title('商务出差与离职率的关系')
print('\n figure 05')
结论:如果频繁的商务出差,员工的离职率会更高
4.2.5 教育程度与离职率的关系
# 教育程度与离职率的关系
plt.figure(figsize=(6, 4))
sns.countplot(x='Education', hue='Attrition', data=df, color=colors[6])
plt.legend()
plt.xlabel('教育程度')
plt.title('教育程度与离职率的关系')
print('\n figure 06')
结论:科技公司大部分学历中偏上,教育程度越高,更有竞争力,离职率也越低
4.2.6 性别与离职率的关系
# 性别与离职率的关系
plt.figure(figsize=(6, 4))
sns.countplot(x='Gender', hue='Attrition', data=df, color=colors[8])
plt.legend()
plt.xlabel('性别')
plt.title('性别与离职率的关系')
print('\n figure 07')
结论:科技公司男性人数比较多,通过公司人口基数来对比,女性的离职率是要高于男性的
4.2.7 婚姻状况与离职率的关系
# 婚姻状况与离职率的关系
labels = ['单身', '已婚', '离婚']
sizes = [sum(df['MaritalStatus'] == 'Married'), sum(df['MaritalStatus'] == 'Single'), sum(df['MaritalStatus'] == 'Divorced')]
explode = (0.04, 0, 0.001)
plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=False, startangle=150)
plt.title("婚姻状况与离职率的关系")
print('\n figure 08')
结论:公司单身离职率最高,离婚后的离职率最低
4.2.8 收入与离职率的关系
# 收入与离职率的关系
df_income1 = df[(df['MonthlyIncome'] > 1000) & (df['MonthlyIncome'] < 8000)]
df_income2 = df[(df['MonthlyIncome'] > 8000) & (df['MonthlyIncome'] < 15000)]
df_income3 = df[(df['MonthlyIncome'] > 15000) & (df['MonthlyIncome'] < 20000)]
labels = ['月收入小于8000离职率', '月收入8000-15000离职率', '月收入大于15000离职率']
sizes = [sum(df_income1['Attrition'] == 'Yes'), sum(df['Attrition'] == 'Yes'),
sum(df['Attrition'] == 'Yes')]
explode = (0.04, 0, 0.001)
plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=False, startangle=150)
plt.title("收入与离职率的关系")
print('\n figure 09')
结论:公司单身离职率最高,离婚后的离职率最低
4.2.9 员工工作过的公司数与离职率的关系
# 员工工作过的公司与离职率的关系
df_worked1 = df[(df['NumCompaniesWorked'] > 0) & (df['NumCompaniesWorked'] < 3)]
df_worked2 = df[(df['NumCompaniesWorked'] > 3) & (df['NumCompaniesWorked'] < 6)]
df_worked3 = df[(df['NumCompaniesWorked'] > 6) & (df['NumCompaniesWorked'] < 10)]
x = ['0-3家', '3-6家', '6-10家']
y = [sum(df_worked1['Attrition'] == 'Yes'), sum(df_worked2['Attrition'] == 'Yes'), sum(df_worked3['Attrition'] == 'Yes')]
plt.plot(x, y, color='r')
plt.xlabel('员工工作过公司数量')
plt.ylabel('离职人数')
plt.title("员工工作过的公司与离职率的关系")
print('\n figure 10')
结论:员工工作过的公司越少,离职率越低,说明频繁跳槽的员工稳定性较差,更容易离职。
5. 总结建议
**结论:**根据我们前面的分析可以得出结论,影响离职的因素主要有
- 出差多
- 大学刚毕业没多久的年轻单身人士
- 加班多
- 底层、基层收入低
- 部门男女比例失调
- 销售部门
建议:
- 对于新人和大学生,其大多是将企业当作自己职业生涯发展的跳板,在企业工作对他们而言就是为了获得工作经验或是学习相关技术,一旦目的达到,或者达不到他们的期望、工作不满意,他们就会选择待遇更高、发展空间更大的企业服务。建议提高这些刚进入公司的新人归属感、公司内部多一些交流,给其一个平台。同时,对于已经选择离开的人员,我们HR部门要及时吸引新人注入,为企业带来活力的同时,弥补职位空缺。如果可以的话,我们可以多招一些有经验的员工同时对于校园招聘这一块我们要严格把关,提高招聘要求,虽然我们不能强制要求员工留下,但我们可以通过员工关怀,激励等手段减少相应的人员流失。
- 单身年轻人跳槽厉害不可避免,同时由于有些部门明显男女比例不协调,或许可以考虑公司内部发展牵线,比如开展不同部门联谊会等
- 针对销售部门人员流失比例大情况,由于销售部门的重要性,加班出差不可避免,那么我们是否能在招聘的时候就强调这一点,让候选人有一个心里预期,以免将来进入公司后觉得不满意从而选择离职。
- 基层员工工资普遍较低,适当关注底层员工的工资,给他们涨薪。
算法学习
、4对1辅导
、论文辅导
、核心期刊
项目的代码和数据下载
可以通过公众号
滴滴我