Python · 机器学习员工流失预测

该博客详细介绍了使用Python进行员工流失预测的步骤,包括数据预处理、特征工程、模型选择(如Ridge、Lasso、随机森林、GB、XGB、CatBoost和LGB)以及模型融合,最终评估预测效果。
摘要由CSDN通过智能技术生成

Python · 机器学习 员工流失预测

提示:前言
Python · 机器学习 员工流失预测


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

关于数据集
揭示导致员工流失的因素并探讨重要问题,例如“按工作角色和流失情况显示离家距离的细目分类”或“按教育程度和流失情况比较平均月收入”。这是一个由 IBM 数据科学家创建的虚构数据集。

学历
1‘大专以下’
2‘大专’
3‘本科’
4‘硕士’
5‘博士’

环境满意度
1“低”
2“中”
3“高”
4“非常高”

工作参与度
1 ‘低’
2 ‘中等’
3 ‘高’
4 ‘非常高’

工作满意度
1 ‘低’
2 ‘中等’
3 ‘高’
4 ‘非常高’

PerformanceRating
1 ‘低’
2 ‘好’
3 ‘优秀’
4 ‘优秀’

关系满意度
1 ‘低’
2 ‘中等’
3 ‘高’
4 ‘非常高’

WorkLifeBalance
1 ‘差’
2 ‘好’
3 ‘更好’
4 ‘最好’

数据集:https://www.kaggle.com/datasets/pavansubhasht/ibm-hr-analytics-attrition-dataset


提示:以下是本篇文章正文内容,下面案例可供参考

一、导入包

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

import sklearn
from sklearn.model_selection import train_test_split, RepeatedKFold
from sklearn.metrics import roc_auc_score
from sklearn.preprocessing import StandardScaler

%matplotlib inline

TRAIN_CSV = '/kaggle/input/playground-series-s3e3/train.csv'
TEST_CSV = '/kaggle/input/playground-series-s3e3/test.csv'
EXTERNAL_CSV = '/kaggle/input/ibm-hr-analytics-attrition-dataset/WA_Fn-UseC_-HR-Employee-Attrition.csv'

二、数据准备阶段

2.1. 读取数据

首先,我们读取 CSV 文件并将所有数据放入单个数据框中。 虽然我们无法访问测试数据的 Attrition 特征,但通过这种数据集组合,我们可以使用其他特征之间的关系。

测试列表示数据集

target = 'Class'

df1 = pd.read_csv(TRAIN_CSV)
df1['test'] = 0
df1['gen'] = 1

df2 = pd.read_csv(TEST_CSV)
df2['test'] = 1
df2['gen'] = 1

df3 = pd.read_csv(EXTERNAL_CSV)
df3['test'] = 0
df3['gen'] = 0

#df = pd.concat([df1, df2]) # Do not include the original dataset
#df = pd.concat([df1, df2, df3[df3[target] == 1]])  # Only incorporate items with Class==1
df = pd.concat([df1, df2, df3])

df.id.fillna(-1, inplace=True)
df.id = df.id.astype(int)

df.reset_index(inplace=True)

df

在这里插入图片描述

三、检查缺失值

缺失值处理

# Histogram 
pd.isna(df).sum()

在这里插入图片描述
幸运的是,我们在 EmployeeNumber 列中只有缺失值。 我们还注意到,此列仅填充在原始数据集中,而我们在生成的数据集中没有它,因此必须将其删除。

df[pd.notna(df['EmployeeNumber'])].test.unique()

在这里插入图片描述
让我们分别检查每一列

Attrition 这是我们的目标专栏
我们将“是”/“否”值映射到 1/0。

df.Attrition = df.Attrition.map({
   'No' : 0, 'Yes' : 1, 0 : 0, 1 : 1})
df.Attrition.value_counts()

在这里插入图片描述

四、数值特征

如果列有许多唯一值,我们将其视为数字列。 有些列的唯一值很少,必须单独考虑

num_columns = ['Age', 'DailyRate', 'DistanceFromHome', 'HourlyRate', 
               'MonthlyIncome', 'MonthlyRate', 'TotalWorkingYears', 
               'YearsAtCompany', 'YearsInCurrentRole', 'YearsSinceLastPromotion',
               'YearsWithCurrManager']

fig, axs = plt.subplots(ncols=3, nrows=4, figsize=(24,18))
for n, col in enumerate(num_columns):
    ax = axs[n // 3, n % 3
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python量化投资、代码解析与论文精读

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值