人力资源数据集分析(二)_随机森林与逻辑回归

news2024/9/20 22:01:26

数据入口:人力资源分析数据集 - Heywhale.com

数据说明

字段说明
EmpID唯一的员工ID
Age年龄
AgeGroup年龄组
Attrition是否离职
BusinessTravel出差:很少、频繁、不出差
DailyRate日薪
Department任职部门:研发部门、销售部门、人力资源部门
DistanceFromHome通勤距离
Education教育等级
EducationField专业领域:生命科学、医学、市场营销、技术、其他
EnvironmentSatisfaction工作环境满意度
Gender性别
HourlyRate时薪
JobInvolvement工作参与度
JobLevel工作级别
JobRole工作角色
JobSatisfaction工作满意度
MaritalStatus婚姻状况
MonthlyIncome月收入
SalarySlab工资单
MonthlyRate月薪
NumCompaniesWorked工作过的公司数量
PercentSalaryHike加薪百分比
PerformanceRating绩效评级
RelationshipSatisfaction关系满意度
StandardHours标准工时
StockOptionLevel股票期权级别
TotalWorkingYears总工作年数
TrainingTimesLastYear去年培训时间
WorkLifeBalance工作生活平衡评价
YearsAtCompany在公司工作年数
YearsInCurrentRole担任现职年数
YearsSinceLastPromotion上次晋升后的年数
YearsWithCurrManager与现任经理共事年数
import pandas as pd
data = 'HR_Analytics.csv'
data = pd.read_csv(file_path)
# 打印每一列的唯一值
for column in data.columns:
    print(f"Unique values in {column}:")
    print(data[column].unique())

通过这段代码可以了解每一列的唯一值。观察到某些列含有缺失值且缺失值的行数较少,可以直接删去。

data_cleaned = data.dropna()

本文将通过随机森林与逻辑回归预测员工晋升路径和潜在的流失风险。

一:预测员工晋升路径

  1. 数据理解:首先,需要查看CSV文件的内容,以了解数据的结构和可用特征。这将帮助确定哪些特征可能与员工晋升路径相关。
  2. 数据预处理:基于数据理解,可能需要进行数据清洗,处理缺失值,转换分类数据,以及进行特征选择。
  3. 模型选择:选择一个合适的机器学习模型来预测员工晋升路径。考虑到这是一个分类问题,逻辑回归、决策树或随机森林等模型可能适用。
  4. 模型训练与评估:使用历史数据训练模型,并使用适当的评估指标(如准确率、召回率、F1分数)来评估模型性能。
  5. 结果解释:最后,我将解释模型结果,并提供关于员工晋升路径的预测。

首先检查数据集中的分类特征,以便进行适当的编码:

categorical_features = data.select_dtypes(include=['object', 'category']).columns.tolist()

categorical_features

数据集中有多个分类特征,包括员工ID、年龄组、离职情况、出差频率、部门、教育领域、性别、工作角色、婚姻状况和薪资等级。为了在机器学习模型中使用这些特征,我们需要对它们进行编码。常见的编码方法包括独热编码(One-Hot Encoding)标签编码(Label Encoding)。独热编码适用于具有多个类别且类别之间没有顺序关系的特征,而标签编码适用于具有顺序关系的特征。

接下来,我将使用独热编码处理具有多个类别的分类特征。然后,我将选择与员工晋升路径相关的特征,并准备数据集以进行模型训练。

data_encoded = pd.get_dummies(data, columns=categorical_features, drop_first=True)

data_encoded.head()

数据集经过独热编码后,现在包含了1522个特征。这个特征数量对于建立一个有效的机器学习模型来说可能太多了,可能会导致过拟合。因此,我们需要进行特征选择,只保留与员工晋升路径最相关的特征。

为了选择相关特征,我们可以使用不同的特征选择方法,例如基于模型的特征选择(如使用随机森林的特征重要性)或使用统计测试(如卡方检验)来选择与目标变量最相关的特征。在这个案例中,我们的目标变量是员工是否晋升,这需要我们首先定义晋升的标准。例如,我们可以根据员工的工作等级(JobLevel)是否增加来定义晋升。

接下来,我将定义晋升的标准,并使用随机森林模型来确定哪些特征与晋升最相关。然后,我将选择这些特征来训练模型。

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report
import numpy as np

data_encoded['Promotion'] = np.where(data_encoded['JobLevel'] > data_encoded['JobLevel'].shift(-1), 1, 0)

data_encoded.dropna(subset=['Promotion'], inplace=True)

relevant_features = [
    'Education', 'TotalWorkingYears', 'TrainingTimesLastYear',
    'YearsAtCompany', 'YearsInCurrentRole', 'YearsSinceLastPromotion',
    'YearsWithCurrManager'
]

features = data_encoded[relevant_features]
target = data_encoded['Promotion']

X_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.2, random_state=42)

rf_classifier = RandomForestClassifier(n_estimators=100, random_state=42)

rf_classifier.fit(X_train, y_train)

y_pred = rf_classifier.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)

accuracy, classification_report(y_test, y_pred)

使用随机森林模型,我们得到了大约70%的准确率,可以使用该随机森林模型对数据进行预测。

此外,从分类报告中我们可以看到,模型在预测晋升(标签1)方面的召回率较低,这意味着它可能没有很好地识别出所有晋升的案例。这可能是因为晋升事件相对较少,导致数据集不平衡。在未来的工作中,可以考虑使用过采样欠采样技术来处理这种不平衡,或者使用不同的评估指标,如F1分数,来更好地衡量模型性能。

二:预测员工流失风险

1:判断特征重要性

首先进行一些基本的特征工程,例如从现有特征中创建新的特征。

categorical_features = ['EmpID', 'AgeGroup', 'Attrition', 'BusinessTravel', 'Department', 
                        'EducationField', 'Gender', 'JobRole', 'MaritalStatus', 'SalarySlab']
data[categorical_features] = data[categorical_features].astype('category')

data_types_updated = data.dtypes

data['Experience'] = data['TotalWorkingYears'] - data['YearsAtCompany']

data_types_updated, data['Experience'].head()

我已经将分类特征转换为正确的数据类型,并创建了一个新的特征Experience,它表示员工的总工作经验减去在当前公司的年数。

接下来,将进行特征选择,确定哪些特征对于预测流失风险最为重要。这可以通过多种方法来完成,例如使用相关性分析、基于模型的特征重要性等。在这里,我将使用随机森林模型的特征重要性来选择特征。

from sklearn.preprocessing import LabelEncoder
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, accuracy_score
import matplotlib.pyplot as plt

X = data.drop(['EmpID', 'Attrition'], axis=1)
y = data['Attrition']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

rf_clf = RandomForestClassifier(n_estimators=100, random_state=42)

le = LabelEncoder()

for feature in categorical_features:
    if feature != 'Attrition': 
        data[feature] = le.fit_transform(data[feature])

X = data.drop(['EmpID', 'Attrition'], axis=1)
y = data['Attrition']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

rf_clf.fit(X_train, y_train)

feature_importances = rf_clf.feature_importances_

feature_importances_df = pd.DataFrame({'Feature': X_train.columns, 'Importance': feature_importances})

feature_importances_sorted = feature_importances_df.sort_values(by='Importance', ascending=False)

top_features = feature_importances_sorted.head(10)

plt.figure(figsize=(12, 8))
plt.barh(top_features['Feature'], top_features['Importance'], color='skyblue')
plt.xlabel('Feature Importance')
plt.ylabel('Feature')
plt.title('Top 10 Most Important Features for Attrition Prediction')
plt.gca().invert_yaxis()
plt.show()

top_features

根据随机森林模型的特征重要性,我们可以看到MonthlyIncome(月收入)是预测员工流失风险最重要的特征,其次是Age(年龄)、DailyRate(日薪)、MonthlyRate(月薪)等。这些特征对于预测员工是否流失具有显著的影响。

接下来,我将使用这些特征来训练一个逻辑回归模型,并评估其在测试集上的性能。逻辑回归是一种常用的分类算法,特别适用于二元分类问题。

这段代码是一个使用Python语言和scikit-learn库进行数据预处理、模型训练、特征重要性评估和可视化的完整流程。以下是这段代码的详细解释:

from sklearn.preprocessing import LabelEncoder
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, accuracy_score
import matplotlib.pyplot as plt
import pandas as pd
  • LabelEncoder 用于将分类特征转换为数值型数据。
  • RandomForestClassifier 是随机森林分类器,用于分类任务。
  • train_test_split 用于将数据集分割为训练集和测试集。
  • classification_report 和 accuracy_score 用于评估模型的性能。
  • matplotlib.pyplot 用于数据可视化。
X = data.drop(['EmpID', 'Attrition'], axis=1)
y = data['Attrition']
  • 这部分代码从数据集中移除了不需要的列(例如员工ID和目标变量),并将剩余的数据作为特征集(X)和目标变量(y)。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  • 使用 train_test_split 函数将数据集分割为训练集和测试集,其中测试集占总数据的20%,random_state 确保结果的可重复性。
rf_clf = RandomForestClassifier(n_estimators=100, random_state=42)

le = LabelEncoder()
  • 初始化一个随机森林分类器,其中包含100棵树。
  • 初始化一个 LabelEncoder 实例。
for feature in categorical_features:
    if feature != 'Attrition': 
        data[feature] = le.fit_transform(data[feature])
  • 遍历分类特征列表,使用 LabelEncoder 对每个特征进行编码,排除目标变量。
X = data.drop(['EmpID', 'Attrition'], axis=1)
y = data['Attrition']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  • 由于数据已经经过编码处理,再次执行特征和目标变量的分割以及训练集和测试集的分割。
rf_clf.fit(X_train, y_train)
  • 使用训练集数据训练随机森林分类器。
feature_importances = rf_clf.feature_importances_

feature_importances_df = pd.DataFrame({'Feature': X_train.columns, 'Importance': feature_importances})

feature_importances_sorted = feature_importances_df.sort_values(by='Importance', ascending=False)

top_features = feature_importances_sorted.head(10)
  • 从训练好的模型中获取特征重要性。
  • 创建一个DataFrame来存储特征和它们的重要性。
  • 按照特征重要性对DataFrame进行排序。
  • 显示最重要的前10个特征。
plt.figure(figsize=(12, 8))
plt.barh(top_features['Feature'], top_features['Importance'], color='skyblue')
plt.xlabel('Feature Importance')
plt.ylabel('Feature')
plt.title('Top 10 Most Important Features for Attrition Prediction')
plt.gca().invert_yaxis()
plt.show()
  • 使用条形图可视化最重要的前10个特征。
  • 设置图表的大小、颜色、标签和标题。
  • 反转y轴,使得最重要的特征在上方。
top_features
  • 显示排序后的特征重要性DataFrame的前10行。

2:建立逻辑回归预测模型

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix, roc_auc_score

log_clf = LogisticRegression(random_state=42)

log_clf.fit(X_train, y_train)

y_pred = log_clf.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)
conf_matrix = confusion_matrix(y_test, y_pred)
roc_auc = roc_auc_score(y_test, log_clf.predict_proba(X_test)[:, 1])

accuracy, conf_matrix, roc_auc

逻辑回归模型在测试集上的准确率为83.16%,混淆矩阵显示有48个实际流失的样本被错误地预测为未流失。模型的ROC AUC得分为0.709,这意味着模型在区分流失和非流失员工方面的性能是中等偏上。可以利用该逻辑回归根据员工数据预测员工是否流失。

:roc_auc_score(y_test, log_clf.predict_proba(X_test)[:, 1])

roc_auc_score是一个用于计算接收者操作特征曲线下面积(Receiver Operating Characteristic Area Under the Curve,简称 ROC AUC)的函数。ROC AUC 是一种衡量二分类模型性能的指标,它的值介于 0.5(随机猜测)和 1(完美分类)之间,值越接近 1 表示模型性能越好。

y_test是真实的测试集目标变量值,通常是 0 和 1 表示的二分类结果。

log_clf.predict_proba(X_test)是使用已经训练好的分类器(这里假设 log_clf 是一个逻辑回归分类器)对测试集 X_test 进行预测,得到的是一个概率矩阵,其中每一行表示一个样本属于不同类别的概率。

[:, 1]表示取这个概率矩阵的第二列,通常对应着正类(1)的概率预测值。

整体而言,这段代码是计算使用逻辑回归分类器对测试集进行预测得到的正类概率与真实的测试集目标变量之间的 ROC AUC 值,以评估该分类器在测试集上的性能表现。

想要探索多元化的数据分析视角,可以关注之前发布的相关内容。

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

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

相关文章

Visual Studio Code( VS Code)倍速提高编程工作效率的免费的源代码编辑器

耕耘于编程二十多年,后端、前端、操作系统、数据库、脚本都做过,各种各样的编程工具,IDE开发环境都用过,但是让我感觉比较好用、容易上手、能够提高工作效率的开发工具还是VS Code,下面我就简单的介绍一下这个广泛使用…

MySQL--导入SQL文件(命令行导入)

MySQL--导入SQL文件 一、前言二、导入SQL文件 一、前言 用可视化编辑工具编写,并且在控制台输入命令行在MySQL中导入SQL文件。 在导入SQL文件之前查看了目前存在的数据库 **目标:**在可视化编辑工具(这里以word文档为例)中编写SQL语句&…

计算机毕业设计 美妆神域网站的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

力扣53-最大子序和(Java详细题解)

题目链接:力扣53-最大子序和 前情提要: 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 dp五部曲。 1.确定dp数组和i下标的含义。 2.确定递推公式。 3.dp初始化。 4.确定dp的遍历顺序。 5.如果没有ac打印dp数组 利于debug。 每一个…

EM-seq:酶法甲基化测序,甲基化测序的新选择

DNA甲基化作为一种关键的表观遗传修饰,已被广泛认为在基因表达调控、细胞分化以及多种疾病的发生发展中扮演着重要角色。DNA甲基化:将甲基基团添加到DNA分子的胞嘧啶上,可以影响基因的活性而不改变DNA序列,这种改变的持久性和可逆…

【原创教程】电气电工20:一文弄透电气电工辅材

电气电工这些知识点,我们描述的比较细,虽然看起来比较简单,但是它是后面我们技能提升的基础,如果我们后面学电气工程师相关知识,这些都属于基本功。 接着我们来看一下电气辅材。 电气辅材定义: 电气辅材是指与电气设备固有的元器件配套使用的配件和器具。常见的电气辅…

基于FPGA+GPU异构平台的遥感图像切片解决方案

随着遥感和成像技术的不断进步和普及,获取大量高分辨率的遥感图像已成为可能。这些大规模的遥感图像数据需要进行有效的处理和分析,以提取有用的信息,进行进一步的应用。遥感图像切片技术应运而生,该技术可以将大型遥感图像分割成…

Sentinel组件学习

Sentinel组件学习 1. Sentinel是什么2. Sentinel的作用3. 为啥使用Sentinel4. SpringCloud整合Sentinel代码示例4.1. 搭建Sentinel Dashboard4.2. SpringCloud项目接入Sentinel4.3. 使用SentinelResource注解 5. Sentinel Dashboard使用5.1 流控规则流控模式流控效果 5.2 熔断规…

cmake--get_filename_component

作用 按照指定的方式获取文件或者目录的信息。 使用 get_filename_component(<variable> <filename> <component>) variable: 用于保存提取的信息。 filename: 指定路径的文件或者目录。 component: 链接1 component DIRECTORY: 提取文件或者目录的父…

西安国际数字影像产业园:什么让这里成为创新型数字园区的典范?

在数字化浪潮奔涌的时代&#xff0c;创新型数字园区如雨后春笋般涌现&#xff0c;而树莓集团倾力打造的西安国际数字影像产业园无疑是其中的佼佼者。究竟是什么让这里成为创新型数字产业园区的典范呢&#xff1f; 1、西安国际数字影像产业园拥有强大的产业集聚效应。树莓集团凭…

『功能项目』QFrameWork道具栏物品生成【64】

我们打开上一篇63QFrameWork框架重构OnGUI的项目&#xff0c; OnGUI优点&#xff1a; 简单易用&#xff1a;OnGUI是基于代码的UI系统&#xff0c;对于简单的调试界面或者小型项目来说&#xff0c;可以快速实现UI需求。即时更新&#xff1a;OnGUI的UI元素是即时更新的&#xff…

基于Benes网络的SIMD同态密文任意重排

摘要 RLWE的密文使用了SIMD后极大的增加的同态加密的效率。同态加密通过加密一个向量&#xff0c;实现对明文的快速加法和乘法。然而&#xff0c;加密为一个密文的向量的内部元素之间&#xff0c;无法高效的操作。 如一个密文加密了 [ a , b , c ] [a,b,c] [a,b,c]&#xff0c…

13 vue3之内置组件keep-alive

内置组件keep-alive 有时候我们不希望组件被重新渲染影响使用体验&#xff1b;或者处于性能考虑&#xff0c;避免多次重复渲染降低性能。而是希望组件可以缓存下来,维持当前的状态。这时候就需要用到keep-alive组件。 开启keep-alive 生命周期的变化 初次进入时&#xff1a;…

使用express或koa或nginx部署history路由模式的单页面应用

使用hash模式会有#&#xff0c;影响美观&#xff0c;所以使用history模式会是个更好的选择。 前端项目打包上线部署&#xff0c;可以使用下面的方式部署history模式的项目&#xff0c;下面以 jyH5 为例 expressjs部署 express脚手架搭建的app.js中添加如下代码&#xff1a; …

大模型团队招人(校招):阿里巴巴智能信息,2025届春招来了!

阿里巴巴智能信息&#xff0c;2025届春招开始啦&#xff0c;欢迎有意向的优秀同学扫码投递。实习的内容也是大语言模型的核心方向Alignment&#xff0c;在这里有丰富的实验资源、良好的数据支持、优秀的师兄师姐带领你进入大模型的全新领域。内推直达&#xff1a;https://talen…

【Python】探索 Blinker:Python 进程内信号/事件分发系统

没人疼就去健身 &#xff0c;练完浑身疼&#xff01; 在现代软件开发中&#xff0c;事件驱动编程是一种非常强大的模式&#xff0c;它允许系统组件之间进行松散耦合的通信。Blinker 是一个 Python 库&#xff0c;提供了一个快速的进程内信号/事件分发系统&#xff0c;使得事件…

Double-Fetch漏洞检测工具的部署、使用与原理分析

文章目录 前言1、概述1.1、简介1.2、工作原理1.2.1、内核空间与用户空间的信息传递1.2.2、Double-Fetch漏洞产生的原因1.2.3、产生Double-Fetch漏洞的情况1.2.4、一个Double-Fetch漏洞示例1.2.5、Double-Fetch漏洞检测工具原理 1.3、模式匹配原理分析1.3.1、Coccinelle介绍1.3.…

AN7563PT数据手册学习笔记1

AN7563PT AN7563PT1 Overview2 Feature3 Block Diagram AN7563PT 1 Overview AN7563PT是一款高度集成的单芯片解决方案&#xff0c;适用于以太网网关应用。集成4个千兆以太网物理层、1个DDR4/DDR3控制器、1个USB3.0主机接口、1个USB2.0主机接口、2个PCIe Gen2单通道、1个VoIP…

什么是损失函数?常见的损失函数有哪些?

损失函数 什么是损失函数&#xff1f;损失函数作用如何设计损失函数常见的损失函数有哪些&#xff1f; 什么是损失函数&#xff1f; 损失函数&#xff08;Loss Function&#xff09;&#xff0c;也称为误差函数&#xff0c;是机器学习和深度学习中的一个重要概念。它用于衡量模…

光伏设计软件的基本功能

一、屋顶绘制 光伏设计软件的首要功能是屋顶绘制。通过直观易用的界面&#xff0c;可以轻松绘制出建筑物的屋顶轮廓、结构细节等基本信息。软件支持多种屋顶类型的绘制&#xff0c;并允许用户自定义屋顶尺寸和形状。 二、参照物、障碍物放置 在光伏系统设计中&#xff0c;参照…