【机器学习案例-16】员工离职预测:从数据探索到模型构建完整流程解析

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:xf982831907

💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

在这里插入图片描述

一、项目背景与目标

  “员工突然离职对企业造成多大损失?如何提前预判离职风险?”
  本文将带您从零开始,使用决策树和随机森林算法,基于真实HR数据集构建员工离职预测模型。通过完整的数据分析流程,揭示影响员工离职的关键因素,并实现可落地的预测方案。


二、数据集介绍

  使用公开HR数据集,包含14,999条员工记录,关键特征包括:

特征名称说明类型
satisfaction_level员工对公司的满意度float64
last_evaluation绩员工上次KPI评分float64
number_project同时处理的项目数int64
average_montly_hours平均每个月的工作时间int64
time_spend_company在公司的时间int64
Work_accident是否出现过工作事故int64
left是否离开int64
promotion_last_5years最近5年是否升职int64
sales员工部门object
salary薪资等级object

三、完整代码实现

1. 环境准备与数据加载

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, roc_auc_score

# 配置可视化样式
plt.style.use('ggplot')
%matplotlib inline

# 加载数据
df = pd.read_csv('/path/to/HR_comma_sep.csv')

  查看数据基本情况:

print(df.shape)
df.info()
df.head()

df.isna().sum()


  发现一共有14999条数据,数据包含10个特征,而数据集中无缺失值;

2. 数据预处理

# 特征重命名
df = df.rename(columns={
    'satisfaction_level': 'satisfaction',
    'last_evaluation': 'evaluation',
    'number_project': 'projectCount',
    'average_montly_hours': 'averageMonthlyHours',
    'time_spend_company': 'yearsAtCompany',
    'Work_accident': 'workAccident',
    'promotion_last_5years': 'promotion',
    'sales': 'department',
    'left': 'turnover'
})

# 处理分类变量
df['department'] = df['department'].astype('category').cat.codes
df['salary'] = df['salary'].astype('category').cat.codes

# 检查数据平衡性
print(f"离职比例:{df.turnover.value_counts(normalize=True)[1]:.1%}")

3. 探索性分析(EDA)

3.1 特征分布可视化
# 设置画布
fig, axes = plt.subplots(2, 2, figsize=(15, 10))

# 满意度分布对比
sns.kdeplot(data=df, x='satisfaction', hue='turnover', ax=axes[0,0], fill=True)
axes[0,0].set_title('满意度分布对比')

# 工时分布对比
sns.boxplot(data=df, x='turnover', y='averageMonthlyHours', ax=axes[0,1])
axes[0,1].set_title('月均工时分布')

# 项目数分布
sns.countplot(data=df, x='projectCount', hue='turnover', ax=axes[1,0])
axes[1,0].set_title('参与项目数分布')

# 司龄分布
sns.histplot(data=df, x='yearsAtCompany', hue='turnover', multiple='stack', ax=axes[1,1])
axes[1,1].set_title('司龄分布')

plt.tight_layout()

3.2 相关性分析
# 计算相关系数矩阵
corr_matrix = df.corr()

# 绘制热力图
plt.figure(figsize=(12,8))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', fmt=".2f")
plt.title('特征相关性热力图')


4. 特征工程与数据拆分

# 划分特征与标签
X = df.drop('turnover', axis=1)
y = df['turnover']

# 分层抽样拆分数据集
X_train, X_test, y_train, y_test = train_test_split(
    X, y, 
    test_size=0.2, 
    stratify=y,  # 保持类别分布
    random_state=42
)

5. 模型构建与评估

5.1 决策树模型
# 初始化决策树
dtree = DecisionTreeClassifier(
    criterion='entropy',
    max_depth=3,
    min_samples_leaf=0.01,
    random_state=42
)

# 训练模型
dtree.fit(X_train, y_train)

# 模型评估
print("决策树性能评估:")
print(classification_report(y_test, dtree.predict(X_test)))
print(f"AUC得分:{roc_auc_score(y_test, dtree.predict_proba(X_test)[:,1]):.2f}")

5.2 随机森林模型
# 初始化随机森林
rf = RandomForestClassifier(
    n_estimators=100,
    max_depth=5,
    class_weight='balanced',  # 处理数据不平衡
    random_state=42
)

# 训练模型
rf.fit(X_train, y_train)

# 模型评估
print("\n随机森林性能评估:")
print(classification_report(y_test, rf.predict(X_test)))
print(f"AUC得分:{roc_auc_score(y_test, rf.predict_proba(X_test)[:,1]):.2f}")


6. 关键特征解析

# 获取特征重要性
feature_importance = pd.Series(rf.feature_importances_, index=X.columns)
feature_importance = feature_importance.sort_values(ascending=False)

# 可视化特征重要性
plt.figure(figsize=(10,6))
sns.barplot(x=feature_importance, y=feature_importance.index)
plt.title('特征重要性排序')
plt.xlabel('重要性得分')


四、分析结论与业务洞见

  1. 关键离职驱动因素

    • 员工满意度与离职率呈强负相关(相关系数-0.39)
    • 高绩效员工离职呈现双峰现象(满意度分布分析)
    • 月均工时超过250小时的员工离职风险显著增加
  2. 模型表现对比

    模型准确率召回率AUC
    决策树0.970.950.96
    随机森林0.980.980.99
  3. 业务建议

    • 建立满意度实时监测系统
    • 优化高绩效员工的工作强度分配
    • 对司龄3-5年的员工加强关怀计划

五、优化方向与思考

  1. 模型优化

    • 尝试XGBoost、LightGBM等梯度提升算法
    • 使用SMOTE等过采样技术处理数据不平衡
  2. 特征工程

    • 构建交叉特征(如:满意度*绩效评分)
    • 添加时间序列特征(历史行为数据)
  3. 部署应用

    • 开发可视化预警看板
    • 集成到HR系统实现实时预测

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

云天徽上

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

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

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

打赏作者

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

抵扣说明:

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

余额充值