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

数据入口:人力资源分析数据集 - 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 npdata_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.dtypesdata['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 pltX = 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_scorelog_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.rhkb.cn/news/428633.html

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

相关文章

Win10 安装VS Code

一、软件介绍 Visual Studio Code(简称VS Code)是一个由微软开发的免费、开源的代码编辑器。它支持Windows、Linux和macOS操作系统,并且提供了许多功能,使其成为许多开发者的首选开发工具。以下是VS Code的一些主要特点&#xff…

【Elasticsearch】-7.17.24版本接入

官网 https://www.elastic.co/cn/downloads/elasticsearch 本项目基于windows环境下,其他环境操作类似 1、初始化配置 打开config/elasticsearch.yaml 添加如下配置 cluster.name: dams_clusternetwork.host: 127.0.0.1 http.port: 9200# 不开启geo数据库 inge…

vite 使用飞行器仪表示例

这里写自定义目录标题 环境vue代码效果图 环境 jquery npm install -S jqueryjQuery-Flight-Indicators 将img、css、js拷贝到vite工程目录中 打开 jquery.flightindicators.js&#xff0c;在文件开头加上import jQuery from "jquery"; vue代码 <template>&…

我与Linux的爱恋:命令行参数|环境变量

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;Linux的学习 文章目录 一.命令行参数二.环境变量1.环境变量的基本概念2.查看环境变量的方法3.环境变量相关命令4.环境变量的组织方式以及获取环境变量的三种方法 环境变量具有全局属性 一…

【Linux庖丁解牛】—Linux基本指令(上)!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a; Linux庖丁解牛 &#x1f516;克心守己&#xff0c;律己则安 目录 1、 pwd命令 2、ls 指令 3、cd 指令 4、Linux下的根目录 5、touch指令 6、 stat指令 7、mkdi…

通威股份半年报业绩巨降:销售费用大增,近一年股价跌四成

《港湾商业观察》施子夫 王璐 光伏领域龙头企业通威股份&#xff08;600438.SH&#xff09;交出的半年报延续了2023年营收和净利润双下滑趋势&#xff0c;幅度显得更大。 即便受行业波动影响&#xff0c;但如何重整及提升盈利能力&#xff0c;通威股份还需要给出解决方案。​…

详解c++:new和delete

文章目录 前言一、new和mallocnew的用法&#xff08;爽点&#xff09;自动构造 delete和freedelete的用法&#xff08;爽点&#xff09; 提醒 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 在C中&#xff0c;new 和 delete 是两个非常重要的操作符&am…

FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频

Android早期的MediaPlayer控件对于网络视频的兼容性很差&#xff0c;所以后来单独推出了Exoplayer库增强支持网络视频&#xff0c;在《Android Studio开发实战&#xff1a;从零基础到App上线(第3版)》一书第14章的“14.3.3 新型播放器ExoPlayer”就详细介绍了Exoplayer库的详细…

【Python】从基础到进阶(八):文件操作与上下文管理

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、引言二、Python文件操作基础1. 打开文件2. 读取文件3. 写入文件4. 文件指针定位 三、上下文管理1. 使用with管理文件2. 自定义上下文管理器 四、文件操作的最佳实践五、案例&#xff1a;日志文件管理1. 需求分析2. 实现…

OpenCV结构分析与形状描述符(24)检测两个旋转矩形之间是否相交的一个函数rotatedRectangleIntersection()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 测两个旋转矩形之间是否存在交集。 如果存在交集&#xff0c;则还返回交集区域的顶点。 下面是一些交集配置的例子。斜线图案表示交集区域&#…

从边缘设备到云端平台,合宙DTURTU打造无缝物联网解决方案

如今&#xff0c;物联网&#xff08;IoT&#xff09;技术飞速发展&#xff0c;万物互联的时代已然到来&#xff0c;那么&#xff0c;高效、稳定地连接边缘设备与云端平台&#xff0c;实现数据的实时采集、传输与处理&#xff0c;就成为了推动物联网应用落地的关键。 DTU&#…

以root用户登陆ubuntu的桌面环境

去我的个人博客观看&#xff0c;观感更佳哦&#xff0c;&#x1f619;&#x1f619; 前言 在学习Linux的时候&#xff0c;经常都需要使用sudo权限来对配置文件进行修改&#xff0c;常用的方法就是用vim编辑器在命令行界面进行修改&#xff0c;比如sudo vim /etc/profile&#…

【深度学习】(1)--神经网络

文章目录 深度学习神经网络1. 感知器2. 多层感知器偏置 3. 神经网络的构造4. 模型训练损失函数 总结 深度学习 深度学习(DL, Deep Learning)是机器学习(ML, Machine Learning)领域中一个新的研究方向。 从上方的内容包含结果&#xff0c;我们可以知道&#xff0c;在学习深度学…

【Linux】解锁系统编程奥秘,高效文件IO的实战技巧

文件 1. 知识铺垫2. C文件I/O2.1. C文件接口2.2 fopen()与重定向2.3. 当前路径2.4. stdin、stdout、stderr 3. 系统文件I/O3.1. 前言3.2. open3.2.1. flags</h3>3.2.2. mode</h3>3.2.3. 返回值fd 3.3. write</h2>3.4. read3.5. close</h2>3.6. lseek&l…

面试经典150题——删除有序数组中的重复项

目录 题目链接&#xff1a;26. 删除有序数组中的重复项 - 力扣&#xff08;LeetCode&#xff09; 题目描述 判题标准: 示例 提示&#xff1a; 解法一&#xff1a;双指针 Java写法&#xff1a; 运行时间 C写法&#xff1a; 运行时间 论屎山代码是如何出现的 时间复杂…

感知笔记2:ROS 视觉 - 沿线行走

如何在 ROS 中使用 OpenCV如何跟踪线路如何根据颜色查找不同元素跟踪多条路径并做出决定为线路跟踪创建基本的 PID 在本章中&#xff0c;您将学习如何使用 ROS 中最基本、最强大的感知工具&#xff1a;OpenCV。 OpenCV 是最广泛、最完整的图像识别库。有了​​它&#xff0c;…

Docker实操:安装MySQL5.7详解(保姆级教程)

介绍 Docker 中文网址: https://www.dockerdocs.cn Docker Hub官方网址&#xff1a;https://hub.docker.com Docker Hub中MySQL介绍&#xff1a;https://hub.docker.com/_/mysql ​ 切换到“Tags”页面&#xff0c;复制指定的MySQL版本拉取命令&#xff0c;例如 &#xff1a…

uv-ui组件的使用——自定义输入框的样式

一、官网的使用 二、自定义修改样式 我是在小程序中使用此组件 想要自定义修改样式的话&#xff0c;需要placeholderClass加上 placeholderStyle配合使用 tip1&#xff1a;单独使用placeholderClass&#xff0c;他只会第一次渲染时生效&#xff0c;输入文字再清除后就不生效…

十六,Spring Boot 整合 Druid 以及使用 Druid 监控功能

十六&#xff0c;Spring Boot 整合 Druid 以及使用 Druid 监控功能 文章目录 十六&#xff0c;Spring Boot 整合 Druid 以及使用 Druid 监控功能1. Druid 的基本介绍2. 准备工作&#xff1a;3. Druid 监控功能3.1 Druid 监控功能 —— Web 关联监控3.2 Druid 监控功能 —— SQL…

(蓝桥杯)STM32G431RBT6(TIM4-PWM)

一、基础配置 这个auto-reload preload是自动重装载值&#xff0c;因为我们想让他每改变一个占空比&#xff0c;至少出现一次周期 Counter Period(Autoreload Regisiter)这个设值为10000&#xff0c;那么就相当于它的周期是10000 脉冲宽度可以设置为占周期的一半&#xff0c;那…