🏆 员工流失预测项目复盘:如何用数据找出“高风险员工”,助力 HR 精准干预?
👨💻 项目关键词:特征工程|模型选择|XGBoost|SHAP 可解释性|HR 决策支持系统
🧭 项目背景:让 HR 提前“看见”员工流失风险
Salifort Motors 的 HR 团队正面临一个棘手的问题:如何在员工主动提出离职之前,提前识别出那些有流失倾向的关键人才?这种“被动应对”的现状,就像在“失血”却无法止血。
为了解决这一痛点,我们基于公司提供的匿名员工数据,构建了一个完整的员工流失预测系统,目标是实现从“事后处理”到“事前预警”的转变。
✅ 项目目标
-
构建预测模型
开发一个机器学习模型,能够预测员工在未来 6 个月内 是否有离职倾向。 -
可解释性分析
揭示影响员工流失的关键因素,帮助 HR 理解“为什么”员工会流失,并据此制定有针对性的干预策略。
📊 数据准备与清洗:干净、合规、结构化的基础工作
1️⃣ 原始数据概况:
- 来源文件:
HR_capstone_dataset.csv
- 记录数:14,999 条
- 字段数:10 个
字段涵盖:满意度、工时、晋升、部门、薪资等相关信息
2️⃣ 清洗流程:
步骤 | 说明 | 结果 |
---|---|---|
去重 | 删除 3000+ 条重复记录 | 保留 11,991 行 |
命名规范 | 所有列名统一为 snake_case 格式 | 提升变量可读性,便于后续建模 |
缺失值处理 | 检查所有字段,未发现缺失值 | 无需填充或删除,数据完整性良好 |
异常值检测 | 使用 IQR 方法发现 time_spend 存在极端值 | 选择保留,因后续使用树模型对异常值具有较强鲁棒性 |
🔍 特征选择与构建:预测力 + 可解释性并重
我们从原始的员工行为数据中,提取和构造了 11 个特征。在建模前,我特别注重了三件事:
✅ 1. 变量含义明确,避免业务误解
- 所有字段命名采用
snake_case
规范(如satisfaction_level
,avg_hours
); - 所有派生变量都能对应到现实中的 HR 观察逻辑,确保可解释性。
✅ 2. 重点派生特征构造:工作负荷指数 workload_index
为了更好地量化“个体过劳”现象,我构建了一个新的变量:
workload_index = 员工工时 / 所在部门的平均工时
📌 业务含义:相对部门而言,工作量超标的员工往往更容易流失,尤其是没有晋升通道的个体。
✅ 3. 类别变量处理方式明确
salary
:序数编码(OrdinalEncoder)department
:独热编码(OneHotEncoder,drop first)left
(是否离职):作为目标变量,1 表示已离职
🌟 特征重要性验证结果表明:workload_index
成为模型中 Top5 的影响因子之一,不仅提升了 AUC,也有良好可解释性。
🤖 模型选择:追求稳定性与解释力的平衡
我们在模型选择中经历了三轮迭代:
🔁 尝试模型:
- Logistic Regression(可解释性强,但精度有限)
- Random Forest(性能好,但不够细腻)
- XGBoost(最终选择)
选择理由:
维度 | Logistic | RF | XGBoost |
---|---|---|---|
精度 | 中 | 高 | ⭐ 很高 |
可解释性 | 高 | 中 | ⭐ 可解释性工具丰富 |
训练速度 | 快 | 中 | 快 |
业务沟通 | ⭐ 容易 | 中 | ⭐ 可用 SHAP 解读 |
📌 最终采用 XGBoost + SHAP 解释分析,在保证精度的同时,满足 HR 对“结果解释+干预线索”的需求。
📊 模型评估方法:不是一味追高精度,而是服务业务目的
在流失预测场景中,我们不求 100% 精确,但要尽可能少“漏掉”高风险员工。因此我们选择:
✅ 主要评估指标:
- Recall(召回率):是否尽可能找到“潜在流失员工”?
- Precision(精确率):是否把“非流失者”误判得很少?
- F1-score:在 Precision 与 Recall 之间取得平衡
- AUC:整体排序能力强不强?
模型版本 | Recall | Precision | F1-score | AUC | 说明 |
---|---|---|---|---|---|
原始模型 | 0.921 | 0.992 | 0.955 | 0.97 | 基准版本 |
去掉 satisfaction | 0.901 | 0.946 | 0.923 | 0.94 | 降维但效果下降 |
加入 workload_index | 0.915 | 0.954 | 0.934 | 0.96 | 效果提升,解释性更强 |
📌 结论:加入合适的派生变量,比盲目加模型复杂度更能提升效果。
🧠 结果解释与 HR 建议输出:让数据说“人的话”
通过 SHAP 值分析与特征重要性可视化,我们识别出了最主要的影响因子:
特征 | SHAP 平均值 | 实际含义 | HR 建议 |
---|---|---|---|
satisfaction_level | 0.312 | 满意度低是最大风险 | 定期满意度调研,识别不满原因 |
avg_hours | 0.187 | 工时过长导致疲劳 | 控制高峰期工时波动 |
number_project | 0.114 | 同时负责项目多→压垮 | 降低中高层员工项目数量 |
time_spend | 0.098 | 司龄 3–4 年是跳槽窗口 | 重点关注未晋升的 3 年老员工 |
workload_index | 0.086 | 相对负荷超标是风险点 | 发现“看似稳定但高压”的员工 |
💬 HR 决策建议输出模板:
- 每月生成一次高风险员工名单(Top 5% 概率)
- 给出该员工“主要风险因素”(如:满意度低+无晋升+过劳)
- HRBP 与直线经理联合进行访谈/轮岗建议/晋升激励
- 针对流失率高的部门进行阶段性策略优化
🎯 本质上,这是一个辅助 HR 做“定向关注” 的工具,不是机器决策,而是引导管理聚焦。
✅ 项目总结:数据要有温度,模型要为人服务
这个项目让我真正理解了一个核心逻辑:
- 特征设计要结合实际业务,能被管理者理解;
- 模型指标不是越高越好,而是匹配场景目标;
- 解释与建议要贴近业务语言,才会真正使用。