百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

kaggle模拟人力资源数据——如何预测员工失业率?

toyiye 2024-07-08 23:07 13 浏览 0 评论

介绍

员工流失率是指离职并被新人代替的员工比例。员工流失会给企业带来成本,包括但不限于:空缺,招聘,培训和替换。平均而言,企业需要花费四周到三个月时间对新员工进行培训。如果新员工入职第一年就离职,对于公司而言是一种损失。更有甚者,一些公司例如咨询机构会面临客户满意度下降的问题,由于咨询顾问的频繁变更可能导致业务损失。

在这篇文章中,我们将从kaggle中选择模拟人力资源数据,建立一个分类器,帮助我们预测在给定属性的情况下,哪些员工更可能离职。这样的分类器将有助于企业预测员工流失率,并帮助解决带来的高成本。我们将使用最常见的分类器:随机森林(RandomForest),渐变增强树(Gradient Boosting Trees),临近算法(K-NearestNeighbors),Logistic回归和支持向量机(SupportVector Machine)。

数据有14,999个样本。以下是每个特征及其定义:

?satisfaction_level:满意度{0-1}。

?last_evaluationTime:距离上次绩效评估的时间(以年为单位)。

?number_project:在工作中完成的项目数量。

?average_montly_hours:每月平均在职小时数。

?time_spend_company:在职年份。

?Work_accident:员工是否有工作场所事故。

? left:员工是否离职{0,1}。

?promotion_last_5years:这个员工在过去的五年里是否晋升。

?sales:员工工作的部门。

?salary:相对工资水平{低,中,高}。

1

数据处理

我们先来检查数据(是否有缺失值和每个特征的数据类型):

由于没有缺失值,我们不需要做任何填补。 但是,需要做一些数据预处理:

1.将sales名称更改为department。

2.把salary转换成有序分类的特征(ordinalcategorical feature),因为低,中,高之间有内在秩序。

3.从department中创建虚拟特征(dummyfeatures),去掉第一个虚拟特征以避免一些学习算法可能出现的线性依赖。

数据现在可以用于建模了。最终特征的数量是17。

2

建模

我们先来看看每个类(class)的比例,看看我们是在处理平衡数据还是不平衡数据,因为在拟合分类器(classifiers)时,每个类都有自己的一套工具。

如图所示,我们的数据集不平衡。因此,当我们在这些数据集上使用分类器时,比较f1-score或AUC(ROC曲线下的面积)等模型时,我们应该使用准确度以外的度量。而且,在训练过程中,类的不平衡会影响学习算法,即学习基于数据集中的多数类来优化预测的模型,使决策规则偏向大多数类。有三种方法可以解决这个问题:

1.对少数群体的错误预测给予较大的惩罚。

2.提高少数群体的抽样或降低多数人群的抽样数量。

3.生成合成训练样本。

尽管如此,我们没有明确的指导或最佳实践来处理这种情况。因此,我们需要尝试看看哪一个最适合。我们将限制自己使用前两个,即用分类器中的class_weight对少数类的错误预测分配较大的惩罚,并且评估训练数据的上采样/下采样(upsampling/downsampling),看哪个表现更好。

首先,使用80/20法则将数据分到训练和测试集中;80%的数据将用于训练模型,20%用于测试模型的表现。其次,对少数类上采样,对多数类下采样。对于这个数据集,正面类(positiveclass)是少数类,负面类(negative class)是多数类。

Original shape: (11999, 17) (11999,)

Upsampled shape: (18284, 17) (18284,)

Downsampled shape: (5714, 17) (5714,)

我不认为我们需要应用像PCA这样的降维,因为:

1)我们想知道每个特征在决定谁将离开与否中的重要性。

2)数据集的维度是合理的(17个特征)。 但是,最好还看看需要多少主成分来解释90%,95%和99%的数据方差(variation)。

看来需要14,15和16个主成分来分别捕获90%,95%和99%的数据方差。换句话说,这意味着数据已经比较合理,因为特征值彼此非常接近,并进一步证明我们不需要压缩数据。

我们在构建分类器时要遵循的方法如下:

1.使用scikit-learn的make_pipeline来处理分类器时构建一个pipeline处理所有的步骤,这将有两步:

  • 标准化数据,使所有特征处于同一规模。

  • 我们要使用来拟合模型的分类器(估计器)。

2.使用GridSearchCV使用10倍交叉验证来调整超参数。我们可以使用RandomizedSearchCV,它的速度更快,可能会超过GridSearchCV,尤其是当我们有两个以上的超参数时,每个参数的范围都很大。然而,由于我们只有两个超参数和缩小的范围,GridSearchCV的效果一般。

3.使用训练数据拟合模型。

4.使用测试数据绘制混淆矩阵(confusion matrix)和ROC曲线以得到最佳估计量。

对随机森林,Gradient Boosting Trees,邻近算法,Logistic回归和支持向量机重复以上步骤。接下来,选择交叉验证(crossvalidation )f1得分最高的分类器。

3

随机森林

首先,我们将使用未抽样,上采样和下采样数据拟合一个随机森林分类器。 其次,我们将使用交叉验证(CV)f1评分来评估每种方法,并选择具有最高CV f1评分的方法。 最后,我们将使用该方法来匹配其他分类器。

我们将调整的唯一超参数是:

max_feature:在每次分割中随机考虑多少个特征。 这将有助于避免在每次分割中选择少量强大的特征,让其他特征有机会起作用。因此,预测的相关性会降低,每棵树的方差也会降低。

min_samples_leaf:每次拆分有多少个例子成为最终的叶节点(leafnode)。

随机森林是一个有多个树(n_estimators)的集合模型。 最终预测将是所有估计者的预测的加权平均(回归)或模式(分类)。 注意:大量树不会导致过度拟合(overfitting)。

上采样产生最高的CV f1得分99.8%。 因此,我们将使用上采样数据来适应其他分类器。 新的数据现在有18284个例子:50%属于正面类,50%属于负面类。

我们使用上面调整的最佳超参数来修改具有上采样数据的随机森林,并使用测试数据绘制混淆矩阵和ROC曲线。

4

渐变增强树

渐变增强树与随机森林相同,除了:

  • 从小树开始,通过考虑生成的树的residual,从生成的树开始。

  • 更多的树会导致过度拟合; 与随机森林相反。

所以我们可以把每一棵树看作一个弱学习者。 除了max_features和n_estimators之外,我们要调整的另外两个超参数是:

  • learning_rate:树学习的速度,越慢越好。

  • max_depth:每次树增长时分割的数量,这限制了每棵树中节点的数量。

使用测试数据来拟合GB分类器并绘制混淆矩阵和ROC曲线。

5

临近算法

KNN被称为懒学习算法,因为它不学习任何参数。我们要调整的两个超参数是:

  • n_neighbors:在预测中使用的邻居数量。

  • 权重:基于以下因素分配邻居的权重:

  • “uniform”:所有相邻点具有相同的权重。

  • “distance”:使用预测中使用的每个相邻点的欧氏距离(euclideandistance)的倒数。

我们来拟合KNN分类器,绘制混淆矩阵和ROC曲线。

6

Logistic回归

对于Logistic回归,我们将调整三个超参数:

  • penalty:正规化(regularization)类型,L2或L1正则化。

  • C:与参数λ的正则化相反。C越高,正规化越少。 我们将使用覆盖非正则化到完全正则化的全部范围的值,其中模型是样本标签的模式。

fit_intercept:是否包含拦截。

我们不会使用任何非线性,如多项式特征(polynomialfeatures)。

7

Support Vector Machine

支持向量机(SVM)

由于两个原因,SVM对于超参数的调整是非常昂贵的:

1.对于大的数据集,它变得非常缓慢。

2.有很多超调参数需要很长时间才能调整CPU。

因此,我们将使用我们之前提到过的超参数值来得出Penn MachineLearning Benchmark 165数据集的最佳表现。我们通常要调整的超参数是:

C, gamma, kernel, degree and coef0

The 10-folds CV f1-score is: 96.38%

8

结论

最后列出我们迄今为止训练过的所有分类器的测试准确率并绘制ROC曲线。 然后我们将选择ROC曲线下面积最大的分类器。

即使随机森林和梯度提升树具有几乎相等的AUC,随机森林具有更高的准确率和f1分数,分别为99.27%和99.44%。 因此,我们有理由说随机森林胜过了其他的分类器。 让我们来看看随机森林分类器中的特征重要性。

最重要的五个特点是:

? satisfaction_level

? time_spend_company

? average_montly_hours

? number_project

? lats_evaluation

我们可以得到的结论是:

  1. 在处理不平衡类别时,准确性不是用来评估模型的好方法。 我们可以使用AUC和f1-score。

  2. 上采样/下采样,数据合成和使用平衡类别权重是尝试提高不平衡类别数据集分类器准确度的好方式。

  3. GridSearchCV可以帮助调整每个学习算法的超参数。RandomizedSearchCV速度更快,甚至可能超过GridSearchCVes,尤其是当我们有两个以上的超参数要调整时。

  4. 主成分分析(PCA)并不总是被推荐,特别是如果数据处于良好的特征空间(featurespace),并且它们的特征值彼此非常接近。

  5. 不出所料,集合模型(ensemble models)在大多数情况下都优于其他学习算法。

免责声明:转载自网络 不用于商业宣传 版权归原作者所有 侵权删

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码