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