使用Python进行员工流失分析

员工流失分析是指分析离开公司、企业的员工的行为,并将他们与公司中的现有员工进行比较。它有助于找出哪些员工可能很快离开。所以,如果你想学习如何分析员工流失,这篇文章适合你。本文中,将带您完成使用Python进行员工流失分析的任务。

员工流失分析

员工流失分析是一种行为分析,我们研究离开公司的员工的行为和特征,并将其特征与现有员工进行比较,以找到可能很快离开公司的员工。

就招聘和培训成本、生产力损失和员工士气下降而言,员工的高流失率对任何公司来说都是昂贵的。通过识别员工流失的原因,企业可以采取措施减少员工流失,留住宝贵的员工。

使用Python进行员工流失分析

导入必要的Python库和数据集来开始此任务:

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import plotly.express as px
import plotly.graph_objects as go
import plotly.io as pio
pio.templates.default = "plotly_white"data = pd.read_csv("WA_Fn-UseC_-HR-Employee-Attrition.csv")
print(data.head())

输出

   Age Attrition     BusinessTravel  DailyRate              Department  \
0   41       Yes      Travel_Rarely       1102                   Sales   
1   49        No  Travel_Frequently        279  Research & Development   
2   37       Yes      Travel_Rarely       1373  Research & Development   
3   33        No  Travel_Frequently       1392  Research & Development   
4   27        No      Travel_Rarely        591  Research & Development   DistanceFromHome  Education EducationField  EmployeeCount  EmployeeNumber  \
0                 1          2  Life Sciences              1               1   
1                 8          1  Life Sciences              1               2   
2                 2          2          Other              1               4   
3                 3          4  Life Sciences              1               5   
4                 2          1        Medical              1               7   ...  RelationshipSatisfaction StandardHours  StockOptionLevel  \
0  ...                         1            80                 0   
1  ...                         4            80                 1   
2  ...                         2            80                 0   
3  ...                         3            80                 0   
4  ...                         4            80                 1   TotalWorkingYears  TrainingTimesLastYear WorkLifeBalance  YearsAtCompany  \
0                  8                      0               1               6   
1                 10                      3               3              10   
2                  7                      3               3               0   
3                  8                      3               3               8   
4                  6                      3               3               2   YearsInCurrentRole  YearsSinceLastPromotion  YearsWithCurrManager  
0                  4                        0                     5  
1                  7                        1                     7  
2                  0                        0                     0  
3                  7                        3                     0  
4                  2                        2                     2  [5 rows x 35 columns]

让我们看看这个数据集是否包含任何缺失值:

print(data.isnull().sum())

输出

Age                         0
Attrition                   0
BusinessTravel              0
DailyRate                   0
Department                  0
DistanceFromHome            0
Education                   0
EducationField              0
EmployeeCount               0
EmployeeNumber              0
EnvironmentSatisfaction     0
Gender                      0
HourlyRate                  0
JobInvolvement              0
JobLevel                    0
JobRole                     0
JobSatisfaction             0
MaritalStatus               0
MonthlyIncome               0
MonthlyRate                 0
NumCompaniesWorked          0
Over18                      0
OverTime                    0
PercentSalaryHike           0
PerformanceRating           0
RelationshipSatisfaction    0
StandardHours               0
StockOptionLevel            0
TotalWorkingYears           0
TrainingTimesLastYear       0
WorkLifeBalance             0
YearsAtCompany              0
YearsInCurrentRole          0
YearsSinceLastPromotion     0
YearsWithCurrManager        0
dtype: int64

现在让我们来看看数据集中年龄的分布:

sns.displot(data['Age'], kde=True)
plt.title('Distribution of Age')
plt.show()

在这里插入图片描述
让我们来看看各部门的流失率:

# Filter the data to show only "Yes" values in the "Attrition" column
attrition_data = data[data['Attrition'] == 'Yes']# Calculate the count of attrition by department
attrition_by = attrition_data.groupby(['Department']).size().reset_index(name='Count')# Create a donut chart
fig = go.Figure(data=[go.Pie(labels=attrition_by['Department'],values=attrition_by['Count'],hole=0.4,marker=dict(colors=['#3CAEA3', '#F6D55C']),textposition='inside'
)])# Update the layout
fig.update_layout(title='Attrition by Department', font=dict(size=16), legend=dict(orientation="h", yanchor="bottom", y=1.02, xanchor="right", x=1
))# Show the chart
fig.show()

在这里插入图片描述
我们可以看到研发部门的人员流失率很高。现在让我们来看看按专业领域划分的流失百分比:

attrition_by = attrition_data.groupby(['EducationField']).size().reset_index(name='Count')# Create a donut chart
fig = go.Figure(data=[go.Pie(labels=attrition_by['EducationField'],values=attrition_by['Count'],hole=0.4,marker=dict(colors=['#3CAEA3', '#F6D55C']),textposition='inside'
)])# Update the layout
fig.update_layout(title='Attrition by Educational Field', font=dict(size=16), legend=dict(orientation="h", yanchor="bottom", y=1.02, xanchor="right", x=1
))# Show the chart
fig.show()

在这里插入图片描述
我们可以看到,以生命科学为专业的员工流失率很高。现在让我们来看看在公司工作的年数中的自然减员百分比:

attrition_by = attrition_data.groupby(['YearsAtCompany']).size().reset_index(name='Count')# Create a donut chart
fig = go.Figure(data=[go.Pie(labels=attrition_by['YearsAtCompany'],values=attrition_by['Count'],hole=0.4,marker=dict(colors=['#3CAEA3', '#F6D55C']),textposition='inside'
)])# Update the layout
fig.update_layout(title='Attrition by Years at Company', font=dict(size=16), legend=dict(orientation="h", yanchor="bottom", y=1.02, xanchor="right", x=1
))# Show the chart
fig.show()

在这里插入图片描述
我们可以看到,大多数员工在工作一年后离开公司。现在让我们来看看自上次晋升以来的年数的流失百分比:

attrition_by = attrition_data.groupby(['YearsSinceLastPromotion']).size().reset_index(name='Count')# Create a donut chart
fig = go.Figure(data=[go.Pie(labels=attrition_by['YearsSinceLastPromotion'],values=attrition_by['Count'],hole=0.4,marker=dict(colors=['#3CAEA3', '#F6D55C']),textposition='inside'
)])# Update the layout
fig.update_layout(title='Attrition by Years Since Last Promotion', font=dict(size=16), legend=dict(orientation="h", yanchor="bottom", y=1.02, xanchor="right", x=1
))# Show the chart
fig.show()

在这里插入图片描述
我们可以看到,与获得晋升的员工相比,没有获得晋升的员工离开公司的次数更多。现在让我们来看看按性别划分的流失百分比:

attrition_by = attrition_data.groupby(['Gender']).size().reset_index(name='Count')# Create a donut chart
fig = go.Figure(data=[go.Pie(labels=attrition_by['Gender'],values=attrition_by['Count'],hole=0.4,marker=dict(colors=['#3CAEA3', '#F6D55C']),textposition='inside'
)])# Update the layout
fig.update_layout(title='Attrition by Gender', font=dict(size=16), legend=dict(orientation="h", yanchor="bottom", y=1.02, xanchor="right", x=1
))# Show the chart
fig.show()

在这里插入图片描述
男性的自然流失率高于女性。现在让我们通过分析月收入与员工年龄之间的关系来看看流失情况:

fig = px.scatter(data, x="Age", y="MonthlyIncome", color="Attrition", trendline="ols")
fig.update_layout(title="Age vs. Monthly Income by Attrition")
fig.show()

在这里插入图片描述
我们可以看到,随着年龄的增长,每月收入增加。我们还可以看到,低月收入的员工流失率很高。

这就是我们分析员工流失的方法。

员工流失预测模型

现在,让我们准备一个机器学习模型来预测员工流失。该数据集具有许多具有分类值的特征。我将这些分类变量转换为数值:

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
data['Attrition'] = le.fit_transform(data['Attrition'])
data['BusinessTravel'] = le.fit_transform(data['BusinessTravel'])
data['Department'] = le.fit_transform(data['Department'])
data['EducationField'] = le.fit_transform(data['EducationField'])
data['Gender'] = le.fit_transform(data['Gender'])
data['JobRole'] = le.fit_transform(data['JobRole'])
data['MaritalStatus'] = le.fit_transform(data['MaritalStatus'])
data['Over18'] = le.fit_transform(data['Over18'])
data['OverTime'] = le.fit_transform(data['OverTime'])

现在让我们来看看相关性:

correlation = data.corr()
print(correlation["Attrition"].sort_values(ascending=False))

输出

Attrition                   1.000000
OverTime                    0.246118
MaritalStatus               0.162070
DistanceFromHome            0.077924
JobRole                     0.067151
Department                  0.063991
NumCompaniesWorked          0.043494
Gender                      0.029453
EducationField              0.026846
MonthlyRate                 0.015170
PerformanceRating           0.002889
BusinessTravel              0.000074
HourlyRate                 -0.006846
EmployeeNumber             -0.010577
PercentSalaryHike          -0.013478
Education                  -0.031373
YearsSinceLastPromotion    -0.033019
RelationshipSatisfaction   -0.045872
DailyRate                  -0.056652
TrainingTimesLastYear      -0.059478
WorkLifeBalance            -0.063939
EnvironmentSatisfaction    -0.103369
JobSatisfaction            -0.103481
JobInvolvement             -0.130016
YearsAtCompany             -0.134392
StockOptionLevel           -0.137145
YearsWithCurrManager       -0.156199
Age                        -0.159205
MonthlyIncome              -0.159840
YearsInCurrentRole         -0.160545
JobLevel                   -0.169105
TotalWorkingYears          -0.171063
EmployeeCount                    NaN
Over18                           NaN
StandardHours                    NaN
Name: Attrition, dtype: float64

为这个数据添加一个新特征,满意度评分:

data['SatisfactionScore'] = data['EnvironmentSatisfaction'] + data['JobSatisfaction'] + data['RelationshipSatisfaction']

现在让我们将数据分为训练集和测试集:

from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# Split the data into training and testing sets
X = data.drop(['Attrition'], axis=1)
y = data['Attrition']
xtrain, xtest, ytrain, ytest = train_test_split(X, y, test_size=0.3, random_state=42)

下面是我们如何训练员工流失预测模型:

from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()
model.fit(xtrain, ytrain)# Evaluate the model's performance
ypred = model.predict(xtest)
accuracy = accuracy_score(ytest, ypred)
print("Accuracy:", accuracy)

输出

Accuracy: 0.8662131519274376

总结

员工流失分析是一种行为分析,我们研究离开公司的员工的行为和特征,并将其特征与现有员工进行比较,以找到即将离开公司的员工。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/87389.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【李沐深度学习笔记】基础优化方法

课程地址和说明 基础优化方法p2 本系列文章是我学习李沐老师深度学习系列课程的学习笔记,可能会对李沐老师上课没讲到的进行补充。 基础优化方法 在讲具体的线性回归实现之前,要先讲一下基础的优化模型的方法 梯度下降 当模型没有显示解&#xff08…

华为孟晚舟:从最惨千金 到最强战士

作者:积溪 简评:华为25号开发布会,有何深意?从最惨千金到最强战士,孟晚舟和华为都回来了 #华为发布会 #孟晚舟 #任正非 #华为 华为发布会 在打谁的脸? 苹果只是前菜 今天才是正餐 两年前的今天 华为…

数据结构 | 树

树 树是n(n>0)个结点的有限集。当n 0时,称为空树。在任意一棵非空树中应满足: 有且仅有一个特定的称为根的结点。当n>1时,其余节点可分为m(m>0)个互不相交的有限集T1,T2,…,Tm&#…

git_回退到上一次commit与pull

git 回退到上个版本 rollback 回滚 git reset HEAD, git 回退到上一版本

SpringCloud 学习(一)简介和环境搭建

1. 简介 1.1 SpringCloud SpringCloud 基于 SpringBoot 提供了一套微服务解决方案,包括服务注册与发现,配置中心,全链路监控,服务网关,负载均衡,熔断器等组件,除了 NetFlix 的开源组件做高度抽…

SpringMVC 学习(一)Servlet

1. Hello Servlet (1) 创建父工程 删除src文件夹 引入一些基本的依赖 <!--依赖--> <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test<…

【KMP算法】C++

KMP算法的原理是通过构建部分匹配表&#xff0c;来利用已经匹配过的信息&#xff0c;避免不必要的回溯。部分匹配表是一个长度与模式字符串相等的数组&#xff0c;用于记录在每个位置上的最长公共前后缀的长度。 这样图片完全表达了KMP算法的核心思想&#xff0c;出处来自添加链…

ruoyi-nbcio项目增加右上角的消息提醒

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 因为以后流程的通知需要提醒&#xff0c;所以右上角需要增加消息提醒。 1、增加右上角的按钮与信息 <div class"right-menu"><templat…

深入探讨Vue.js:从基础到高级(最佳实践)

文章目录 Vue.js 基础1. Vue.js 是什么&#xff1f;2. Vue 实例3. 双向数据绑定 Vue 组件1. 什么是 Vue 组件&#xff1f;2. 组件之间的通信 Vue 模板语法1. 插值和指令2. 条件和循环3. 事件绑定和表单输入绑定 Vue 路由1. Vue Router安装和配置&#xff1a;导航&#xff1a; 2…

常识判断 --- 党史

目录 中共1~3大 例题 国民党 例题 中共4~5大 例题 中共起义~会议 例题 中共六届六中全会&#xff08;1938年9月&#xff09; 中共七大&#xff08;1945年4月&#xff09; 例题 中共七届二中全会 例题 中共8~10大 中共11~12届全会 例题 中共13~14大 …

拼多多商品详情数据接口

拼多多商品详情接口的具体内容。获取拼多多商品详情&#xff0c;可以参考如下方式&#xff1a; item_get_app-根据ID取商品详情原数据接口包括&#xff1a;标题&#xff0c;价格&#xff0c;促销价&#xff0c;优惠券&#xff0c;库存&#xff0c;销量&#xff0c;详情图片&am…

前端自定义导出PPT

1、背景 前端导出PPT&#xff0c;刚接触这个需求&#xff0c;还是比较懵逼&#xff0c;然后就在网上查找资料&#xff0c;最终确认是可行的&#xff1b;这个需求也是合理的&#xff0c;我们做了一个可视化数据报表&#xff0c;报表导出成PPT&#xff0c;将在线报表转成文档类型…

【编码魔法师系列_构建型1.2 】工厂方法模式(Factory Method)

学会设计模式&#xff0c;你就可以像拥有魔法一样&#xff0c;在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们&#xff08;GoF&#xff09;凝聚出来的最佳实践&#xff0c;可以提高代码的可读性、可维护性和可重用性&#xff0c;从而让我们的开发效率更高。通…

设置github的默认分支

设置github的默认分支 更换默认分支默认分支的作用 更换默认分支 之前默认的分支想main, 现在想更换默认的分支 点击main, 可以看到有两个分支: main和gpuVersion, 可以看到这里默认main分支为default 如果想设置gpuVersion作为default,可以点击View all branches, 进入下一个…

测试域: 流量回放-工具篇jvm-sandbox,jvm-sandbox-repeater,gs-rest-service

JVM-Sandbox Jvm-Sandbox-Repeater架构_小小平不平凡的博客-CSDN博客 https://www.cnblogs.com/hong-fithing/p/16222644.html 流量回放框架jvm-sandbox-repeater的实践_做人&#xff0c;最重要的就是开心嘛的博客-CSDN博客 [jvm-sandbox-repeater 学习笔记][入门使用篇] 2…

数据结构 | 树和二叉树

树 树是n&#xff08;n>0&#xff09;个结点的有限集。当n 0时&#xff0c;称为空树。在任意一棵非空树中应满足&#xff1a; 有且仅有一个特定的称为根的结点。当n>1时&#xff0c;其余节点可分为m&#xff08;m>0&#xff09;个互不相交的有限集T1,T2,…,Tm&#…

uni-app 之 去掉顶部导航

uni-app 之 去掉顶部导航 uniapp怎么样去掉顶部导航 uniapp去掉顶部导航的方法&#xff1a; 1、去掉所有导航栏&#xff1b; 2、单一页面去掉顶部导航栏。 image.png uniapp去掉顶部导航的方法&#xff1a; 1、去掉所有导航栏 "globalStyle": {"navigationBar…

Perceptual Compression与Semantic Compression的含义

这是我在读LDMS的学到的 Perceptual Compression 保留人类能够感知的重要信息&#xff0c;例如纹理&#xff0c;局部边缘等 Semantic Compression 保留数据的实际意义&#xff0c;例如图片包含了人物、建筑&#xff0c;人物之间的关系等

活动预告 | 中国数据库联盟(ACDU)中国行第三站定档成都,邀您探讨数据库前沿技术

数据库技术一直是信息时代中不可或缺的核心组成部分&#xff0c;随着信息量的爆炸式增长和数据的多样化&#xff0c;其重要性愈发凸显。作为中国数据库联盟&#xff08;ACDU&#xff09;的品牌活动之一&#xff0c;【ACDU 中国行】在线下汇集数据库领域的行业知名人士&#xff…

uniapp小程序点击按钮直接退出小程序效果demo(整理)

点击按钮直接退出小程序 <navigator target"miniProgram" open-type"exit">退出小程序</navigator>