大数据分析案例-基于决策树算法构建员工离职预测模型

news2024/10/5 16:26:29

🤵‍♂️ 个人主页:@艾派森的个人主页

✍🏻作者简介:Python学习者
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+


目录

1.项目背景

2.项目简介

2.1项目说明

2.2数据说明

2.3技术工具

3.算法原理

4.项目实施步骤

4.1理解数据

4.2数据预处理

4.3探索性数据分析

4.3.1.分析满意度与离职的关系

4.3.2分析考核得分与离职的关系

4.3.3分析工程数量与离职的关系

4.3.4分析月工时与离职的关系

4.3.5分析工龄与离职的关系

4.4特征工程

4.5模型构建

4.6参数调优

4.7模型评估

4.8模型预测

5.实验总结


1.项目背景

        对企业而言,适当的人员流动以及新老员工的交替,可以给企业带来新的生命力与鲜适的生机。但是,过高的员工流失率,就会影响到企业的稳定性和健康发展。因为员工流动频繁,新员工重新熟悉工作岗位和企业环境,需要一定的适应周期,如此势必会浪费一定的时间成本和人力成本;同时,还可能会导致产品质量和生产效率的较大波动。我们通常将一般的企业的年离职率设置在8%为目标,而实际上许多的企业的员工流失率大都远远超出这个范围。富士康科技集团被誉为全球最大的代工工厂,中国内地有超过100万的工人,占总人力的85%以上。以富士康ccpbg-mit事业处烟台厂区为例,近5年的员工离职率平均在21.3%左右,其中离职员工主要为一线员工,入职时间不满一年。类似的事情在德尔福同样发生过。可见,制造企业,面临的流水线员工高频率流动、流失率居高不下的问题已十分严峻。我们为了解决问题,将分析企业员工离职原因,并且提出一些建议。

2.项目简介

2.1项目说明

本项目旨在分析该公司员工是离职数据,得出员工离职的原因,提出建议,最后构建员工离职模型,时刻关注员工情况,实现精准预测,及时做出调整,避免人员流失。

2.2数据说明

数据集来源于kaggle平台,是一家公司员工离职数据集,共有15000行,7列。具体字段信息如下:

属性名属性描述
工资薪资等级(低、中、高),object字符类型
满意度员工对工作的满意度,float浮点类型
考核得分员工的工作考核得分,float浮点类型
工程数量员工的总工程项目数量,int整数类型
月工时员工的月工作小时,int整数类型
工龄员工的工龄,int整数类型
离职员工是否离职(否0,是1),int整数类型

2.3技术工具

Python版本:3.9

代码编辑器:jupyter notebook

3.算法原理

        决策树( Decision Tree) 又称为判定树,是数据挖掘技术中的一种重要的分类与回归方法,它是一种以树结构(包括二叉树和多叉树)形式来表达的预测分析模型。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。一般,一棵决策树包含一个根节点,若干个内部结点和若干个叶结点。叶结点对应于决策结果,其他每个结点对应于一个属性测试。每个结点包含的样本集合根据属性测试的结果划分到子结点中,根结点包含样本全集,从根结点到每个叶结点的路径对应了一个判定的测试序列。决策树学习的目的是产生一棵泛化能力强,即处理未见示例强的决策树。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。

决策树的构建

特征选择:选取有较强分类能力的特征。

决策树生成:典型的算法有 ID3 和 C4.5, 它们生成决策树过程相似, ID3 是采用信息增益作为特征选择度量, 而 C4.5 采用信息增益比率。

决策树剪枝:剪枝原因是决策树生成算法生成的树对训练数据的预测很准确, 但是对于未知数据分类很差, 这就产生了过拟合的现象。涉及算法有CART算法。

决策树的划分选择

熵:物理意义是体系混乱程度的度量。

信息熵:表示事物不确定性的度量标准,可以根据数学中的概率计算,出现的概率就大,出现的机会就多,不确定性就小(信息熵小)。

4.项目实施步骤

4.1理解数据

首先导入员工离职数据集

 查看数据大小

原始数据集共有15000行,7列

查看数据基本信息

 

从结果中看出,原始数据集中不存在缺失值,故不需要进行缺失值处理

查看数据描述性信息

从结果中可看出各特征的均值、方差、最大最小和四分位数等信息 

4.2数据预处理

前面我们发现数据集不存在缺失值,所以这里我们对重复值进行删除

 从结果中看出,重复的数据共有3044个

4.3探索性数据分析

4.3.1.分析满意度与离职的关系

通过箱型图我们发现,离职的员工对于工作的满意度显著低于在职员工的满意度,说明满意度是员工离职的一个重要因素,企业应当重视,增加员工的满意度,从双因素理论来说,企业在保证满足员工的保健因素外,还应当重视员工的激励因素。

4.3.2分析考核得分与离职的关系

通过箱型图发现,考核得分与离职之间的关系不是很明显,但是离职员工的最低考核得分比在职员工高且中位数也比在职员工高,说明离职的员工大部分还都是比较优秀的员工,这样的话企业更应该重视员工的离职情况,避免人才流失。

4.3.3分析工程数量与离职的关系

通过箱型图发现,离职员工的工程数量明显多于在职员工,说明员工离职的原因可能是因为工程数量太多,导致工作繁忙,压力大。作为企业,应该适当安排工作量,避免出现一个员工的工程数量过大。

4.3.4分析月工时与离职的关系

通过箱型图发现,离职员工的月工时也是明显大于在职员工的,也间接证明了前面说的工程数量,所以这是同样的问题导致,企业应当采取相应的策略来解决这一问题。 

 4.3.5分析工龄与离职的关系

 从图发现,离职员工的工龄一般为3-5年,一般来说工龄越大离职的可能性越大,所有该企业应当在员工的工龄在3-5年的时候,多关注一下员工的满意度情况,采取一些策略,经最大可能减少人员流失。

4.3.6分析薪资与离职的关系

low_salary_dimission_rate = data[data['工资']=='低']['离职'].value_counts().values.tolist()[1]/sum(data[data['工资']=='低']['离职'].value_counts().values.tolist())
mid_salary_dimission_rate = data[data['工资']=='中']['离职'].value_counts().values.tolist()[1]/sum(data[data['工资']=='中']['离职'].value_counts().values.tolist())
high_salary_dimission_rate = data[data['工资']=='高']['离职'].value_counts().values.tolist()[1]/sum(data[data['工资']=='高']['离职'].value_counts().values.tolist())
dimission_rate = pd.DataFrame()
dimission_rate = pd.DataFrame(columns=['离职率'],index=['低','中','高'],data=[low_salary_dimission_rate,mid_salary_dimission_rate,high_salary_dimission_rate])
dimission_rate.plot(kind='barh')
plt.title('薪资等级与离职率之间的关系')
plt.show()

 

从图中看出,薪资等级越低,员工的离职率越高,薪资低的离职率为20%,数字还是比较大的,企业应该给员工加薪或者多加一些福利政策,以此来留住人才。

 最后我们看下原始数据集中离职和在职数据的比例情况

从图看出,离职的数据远远小于在职数据,数据不均衡,所以在建模之前需要进行欠采样处理。 

4.4特征工程

首先对工资等级进行编码处理,将字符型数据转化为数值型

接着对数据进行欠采样处理,这里用到的第三方库imblearn需要进行安装(pip install imblearn) 

 

4.5模型构建

在模型构建之前,我们先对数据集进行拆分为训练集和测试集,测试集比例为0.2

构建决策树模型并输出其模型准确率 

 

 可以看出决策树模型准确率为0.92,较为不错。

4.6参数调优

这里我们使用网格搜索进行参数调优选择

 接着使用最优模型参数组合重新训练模型

从结果看出优化后的模型准确率为0.95,相较于前面的0.93,模型准确率提高了不少。

 4.7模型评估

首先先将最优模型的决策树可视化

 

接着查看模型的分类报告、混淆矩阵和ROC曲线

 

 

模型分类报告中可以看出模型在0和1分类上的精确率、召回率和F1值等信息。在模型混淆矩阵中可以看出模型在预测0和1分类时,预测正确和错误的个数。最后从ROC曲线可看出曲线靠近左上角,模型效果不错,且AUC值为0.97。

4.8模型预测

这里我们使用测试集中的前十条数据来进行模型预测

 从结果中看出,模型预测正确了9个错误了1个。

5.实验总结

本次实验通过分析企业员工离职数据,得出影响员工离职因素较大的是满意度、工程数量、月工时和薪资。企业应该在这些方面进行改进优化,比如给员工增加薪资或福利,给员工下发的任务数量要合理等等来提高员工的满意度,减少人员流失。

心得与体会:

通过这次Python项目实战,我学到了许多新的知识,这是一个让我把书本上的理论知识运用于实践中的好机会。原先,学的时候感叹学的资料太难懂,此刻想来,有些其实并不难,关键在于理解。

在这次实战中还锻炼了我其他方面的潜力,提高了我的综合素质。首先,它锻炼了我做项目的潜力,提高了独立思考问题、自我动手操作的潜力,在工作的过程中,复习了以前学习过的知识,并掌握了一些应用知识的技巧等

在此次实战中,我还学会了下面几点工作学习心态:

1)继续学习,不断提升理论涵养。在信息时代,学习是不断地汲取新信息,获得事业进步的动力。作为一名青年学子更就应把学习作为持续工作用心性的重要途径。走上工作岗位后,我会用心响应单位号召,结合工作实际,不断学习理论、业务知识和社会知识,用先进的理论武装头脑,用精良的业务知识提升潜力,以广博的社会知识拓展视野。

2)努力实践,自觉进行主角转化。只有将理论付诸于实践才能实现理论自身的价值,也只有将理论付诸于实践才能使理论得以检验。同样,一个人的价值也是透过实践活动来实现的,也只有透过实践才能锻炼人的品质,彰显人的意志。

3)提高工作用心性和主动性。实习,是开端也是结束。展此刻自我面前的是一片任自我驰骋的沃土,也分明感受到了沉甸甸的职责。在今后的工作和生活中,我将继续学习,深入实践,不断提升自我,努力创造业绩,继续创造更多的价值。

这次Python实战不仅仅使我学到了知识,丰富了经验。也帮忙我缩小了实践和理论的差距。在未来的工作中我会把学到的理论知识和实践经验不断的应用到实际工作中,为实现理想而努力。

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

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

相关文章

在windows操作系统上安装mysql数据库

背景 写这个数据库的安装教程,是为了后续文章中在windows系统中搭建测试环境要用到数据库做铺垫,不是所有的人都有云服务器,有的觉得去虚拟机里面安装太麻烦了,电脑会更卡,因此,还不如直接在自己电脑上安装…

客户管理繁,库存盘点难?明道云让你准点下班

文/张占胜 程哲 赵香英 编辑/杜逸敏 一、行业背景 随着疫情的扩散,经济形势日益复杂多变,进销存管理无疑成为了国内企业的焦点。如何利用新时代的先进技术把这一传统管理方式现代化和智能化,已经引起了国内业界的重视,这也是企…

Infleqtion与Morningstar合作探索量子计算的新途径

(图片来源:网络) 量子计算服务商Infleqtion宣布,将Infleqtion的旗舰量子软件SuperstaQ整合到Morningstar投资和投资组合分析平台Morningstar Direct中。借助SuperstaQ的整合,通过Morningstar的实验室分析模块&#xff…

12.20工作学习记录 力扣 罗马文转数字

每日一题:罗马文转数字 定义两个指针 不断后移 每一次让前一个指针的值累加为sum 最后返回sum 力扣https://leetcode.cn/problems/roman-to-integer/ 最长公共前缀 主要是subString方法 力扣https://leetcode.cn/problems/longest-common-prefix/solutions/现在分词与形容…

【Linux学习】之systemd与systemctl

文章目录一、systemd1. systemd 守护进程管理 Linux 的启动2. systemd 提供的功能:3. systemd 使用单元来管理不同类型的对象。4. 服务单元信息二、systemctl1. systemctl输出中的服务状态2. 列出servera上安装的所以服务单元3. 列出servera上所有活动和不活动的套接字单元4.1 …

Activiti7-任务分配

上面这些已经在流程变量设置的时候学会了 ,这里略。 参考:Activiti7-流程变量_ZHOU_VIP的博客-CSDN博客 错别字:认领任务 设计一个流程,设置候选人 错了,应该设置在候选人那里 由于修改了流程设计,需要重…

被勒索后的72 小时“生死时速”

编者按 数字化浪潮蓬勃兴起,企业面临的安全挑战亦日益严峻。 腾讯安全近期将复盘2022年典型的攻击事件,帮助企业深入了解攻击手法和应对措施,完善自身安全防御体系。 本篇是第四期,复盘了一次勒索病毒的紧急应对事件。一旦染上…

【ML】异常检测、PCA、混淆矩阵、调参综合实践(基于sklearn)

【ML】异常检测、PCA、混淆矩阵、调参综合实践(基于sklearn)加载数据可视化数据异常点检测PCA降维使用KNN进行分类并可视化计算混淆矩阵调节n_neighbors参数找到最优值加载数据 数据集:https://www.kaggle.com/datasets/yuanheqiuye/data-cl…

数据分析之描述性统计

当我们打开一份有十几列,几万行的明细数据时,那种感觉我相信用铺天盖地、头晕目眩来形容是再合适不过了。 面对如此令人崩溃的场景,必须要求我们要求能够快速找到数据的特征。描述性统计正是为此而生,它通过几个简单的分析方法就…

k8s——基于集群部署工具kubeadm部署k8s

角色和IP 通过网络镜像下载和配置k8s 操作系统初始化 关闭防火墙: $ systemctl stop firewalld $ systemctl disable firewalld关闭 selinux: $ sed -i s/enforcing/disabled/ /etc/selinux/config # 永久 $ setenforce 0 # 临时关闭 swap&#xff1…

OpenCV C++实现 图片批量重命名、格式转换

方法一:以0~n数字序命名方法二:指定字长 数字序命名方法三:指定前缀 数字序重命名全部源码下载通常拍摄的一组数据集,图片命名会比较长,不方便人眼查看; 可以按照制定规则重命名, 本文方法,可以重命名,也可以格式转换(不是简单的换后缀,这样图片有时会出问题,而是以…

[JavaEE] 线程与进程的区别详解

专栏简介: JavaEE从入门到进阶 题目来源: leetcode,牛客,剑指offer. 创作目标: 记录学习JavaEE学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 目录 认识线程(Thread) 1. 线程是什么? 2. 为什么要有…

java 对接百度AI文字识别第三方接口--(api方式以及sdk方式)

平时在工作当中难免会需要对接第三方接口。今天就带领大家来实践一下百度ai的文字识别技术。我使用的是文字识别中名片识别服务,别问为什么,因为是免费的,其他的服务要钱。。。。。。 一:准备工作 首先需要在百度ai官方网站注册账…

【案例实践】基于Citespace和vosviewer文献计量学可视化SCI论文高效写作方法

【点击观看视频】基于Citespace和vosviewer文献计量学可视化SCI论文高效写作方法 文献计量学是指用数学和统计学的方法,定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体,注重量化的综合性知识体系。特别是,信息可视化技…

如何定位线上问题?

面试官:「你是怎么定位线上问题的?」 这个面试题我在两年社招的时候遇到过,前几天面试也遇到了。我觉得我每一次都答得中规中矩,今天来梳理复盘下,下次又被问到的时候希望可以答得更好。 下一次我应该会按照这个思路…

景联文科技2D3D融合标注案例分享|数据标注

在自动驾驶场景中,激光雷达生成的点云数据可用于测量物体的形状和轮廓,并估算出周围物体的位置和速度,但由于激光雷达生成的点云数据缺少RGB数据中存在的纹理和颜色信息,无法精确地识别出路上的汽车、行人、障碍物、信号灯等。而2…

网络流及几种算法FF、EK、Dinic

终于要开始学习&&复习这个知识点了,说句实话半年多之前就该写这篇文章来加强理解,但是一直没有落实,因为又去练习了很多学过的算法,感觉这个算法不太常用哦,传说中的省选算法,比赛比较少见&#xf…

在2022 CCF上获得两项大奖!

喜报!      在日前举行的      2022全国高性能计算学术年会上      戴尔科技集团      获得两项大奖!      戴尔科技PowerEdge绿色数据中心      液冷解决方案荣获“解决方案奖”    PowerEdge R750 DAOS      高性能分布式存储系统荣获“产品…

基于springboot+mybatis+mysql+jsp网上书城管理系统

基于 springbootmybatismysqljsp 网上书城管理系统一、系统介绍二、功能展示1.主页(客户)2.登陆(客户)3.我的购物车(客户)4.我的订单(客户)5.我的图书(商家)6.新书上架(商家)7.订单管…

股指期货是怎么交易的?3分钟教你从入门到精通

相对比投资于单一的产品而言,越来越多的投资者开始爱上股指期货,因为指数的波动速度特别的快,再加上里面的收益空间也特别的饱满,所以这是绝大多数希望赚快钱的投资者最喜欢的类似期货、股票等产品。而且很多进入到这个市场的投资…