员工离职预测

前言

员工离职,似乎已经成为每一家企业都要面对的问题,特别是优秀人才离职的问题会让领导特别头疼。今天我们就通过kaggle上某一家企业员工离职的真实数据来对离职率进行分析建模,并对预测结果显示要离职的员工提出挽留建议。

目录

1. 数据来源及背景

2. 明确分析目的

3. 数据探索分析

4. 数据预处理

5. 可视化分析

6. 特征工程

7. 逻辑回归模型

8. 朴素贝叶斯模型

9. 模型评估之ROC曲线

正文

1. 数据来源及背景

数据来源: https://www.kaggle.com/jiangzuo/hr-comma-sep/version/1

数据背景: 该数据集是指某公司员工的离职数据, 其包含14999个样本以及10个特征, 这10个特征分别为: 员工对公司满意度, 最新考核评估, 项目数, 平均每月工作时长, 工作年限, 是否出现工作事故, 是否离职, 过去5年是否升职, 岗位, 薪资水平.

2. 明确分析目的

该数据集讨论的是公司员工离职的问题, 那么, 我们首先需要对影响员工离职的因素进行分析:

将上述影响因素与现有的数据相结合来提出问题,进而明确我们的分析目的:

1) 员工对公司满意度平均水平如何?员工的最新考核情况又是如何?员工所参加项目数是怎样?员工平均每月工作时长以及平均工作年限分别是多少?

2) 当前离职率是多少?工作事故发生率?过去5年升职率?薪资水平又如何?共有多少种岗位?

3) 是否离职和其他9个特征的关系如何?

4) 根据现有数据, 如何对某个员工是否离职进行预测?

5) 针对当前的员工离职情况,企业该如何对待呢?

3. 数据探索分析

1) 查看前2行和后2行数据

import pandas as pd
df = pd.read_csv(r'D:\Data\HR_comma_sep.csv')
pd.set_option('display.max_rows', 4)
df

数据维度14999行×10列, 除过岗位和薪资水平是字符型外, 其余均是数字 (具体是什么类型还需要进一步确定).

2) 查看数据类型等信息

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 14999 entries, 0 to 14998
Data columns (total 10 columns):
satisfaction_level       14999 non-null float64
last_evaluation          14999 non-null float64
number_project           14999 non-null int64
average_montly_hours     14999 non-null int64
time_spend_company       14999 non-null int64
Work_accident            14999 non-null int64
left                     14999 non-null int64
promotion_last_5years    14999 non-null int64
sales                    14999 non-null object
salary                   14999 non-null object
dtypes: float64(2), int64(6), object(2)
memory usage: 1.1+ MB

前两个特征为64位浮点型, 后两个为字符型, 其余为64位整型, 且均无缺失值.

3). 描述性统计

df.describe()
df.describe(include=['O']).T

1) 员工对公司满意度平均水平如何?员工的最新考核情况又是如何?员工所参加项目数是怎样?员工平均每月工作时长以及平均工作年限分别是多少?

员工对公司的满意度: 范围 0.09~1, 中位数0.640, 均值0.613, 总体来说员工对公司较满意

最新考核评估: 范围 0.36~1, 中位数0.720, 均值0.716, 员工考核平均水平中等偏上.

项目数: 范围 2~7个, 中位数4, 均值3.8, 平均参加项目数为4个

平均每月工作时长: 范围96~310小时, 中位数200, 均值201

工作年限: 范围2~10年, 中位数3, 均值3.5

2) 当前离职率是多少?工作事故发生率?过去5年升职率?薪资水平又如何?共有多少种岗位?

当前离职率为23.81%

工作事故发生率14.46%.

过去5年升职率2.13%.

薪资水平共有3个等级, 最多的是低等, 多达7316人.

员工岗位有10种, 其中最多的是销售, 多达4140人.

4. 数据预处理

没有缺失值, 因此不用处理缺失值. 

1. 异常值

通过箱线图查看异常值.

import seaborn as sns
fig, ax = plt.subplots(1,5, figsize=(12, 2))
sns.boxplot(x=df.columns[0], data=df, ax=ax[0])
sns.boxplot(x=df.columns[1], data=df, ax=ax[1])
sns.boxplot(x=df.columns[2], data=df, ax=ax[2])
sns.boxplot(x=df.columns[3], data=df, ax=ax[3])
sns.boxplot(x=df.columns[4], data=df, ax=ax[4])

除了工作年限外, 其他均无异常值. 该异常值也反映了该公司员工中以年轻人为主 

 

5. 可视化分析

在这里通过可视化的形式对第三个问题“是否离职和其他9个特征的关系如何?”进行回答.

1. 人力资源总体情况

from pyecharts import Pie
attr = ["离职", "在"]
v1 =[df.left.value_counts()[1], df.left.value_counts()[0]]
pie = Pie("该公司人力资源总体情况", title_pos='center')
pie.add(
    "",
    attr,                       
    v1,                          
    radius=[35, 65],
    label_text_color=None,
    is_label_show=True,
    legend_orient="vertical",
    legend_pos="left",
)
pie.render()

离职3571人, 在职11428人, 离职率为23.81% 

2. 对公司满意度与是否离职的关系

from pyecharts import Boxplot
#字段重命名
df.columns=['satisfaction', 'evaluation', 'project', 'hours', 'years_work','work_accident', 'left', 'promotion', 'department', 'salary<
  • 2
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值