请求协助实现员工流失预测模型的单样本特征重要性排序展示
实现个体员工离职决策的Top3影响特征方案
针对你需要为每个员工ID输出影响其离职预测结果的Top3特征并按系数排序的需求,以下是基于不同模型类型的具体实现方法:
一、按模型类型选择实现方式
1. 树模型(XGBoost、LightGBM、RandomForest等)
树模型最适合用SHAP值来量化个体样本的特征贡献,它能准确反映每个特征对该员工离职预测结果的正负影响程度。
具体步骤:
- 先安装SHAP库:
pip install shap - 加载训练好的模型和包含员工ID、特征的数据集
- 计算所有样本的SHAP值:
import shap import pandas as pd # 假设trained_model是你训练好的树模型,employee_data包含EMPLOYEE_ID和所有特征列 explainer = shap.TreeExplainer(trained_model) shap_values = explainer.shap_values(employee_data.drop("EMPLOYEE_ID", axis=1)) # 二分类场景下,取对应"离职"类的SHAP值(通常是索引1) if isinstance(shap_values, list): shap_values = shap_values[1] - 生成每个员工的Top3特征:
feature_names = employee_data.drop("EMPLOYEE_ID", axis=1).columns shap_df = pd.DataFrame(shap_values, columns=feature_names, index=employee_data["EMPLOYEE_ID"]) # 按特征贡献的绝对值排序,取前3并保留系数(正负代表影响方向:正=推动离职,负=抑制离职) top3_results = shap_df.apply( lambda row: row.sort_values(key=lambda x: abs(x), ascending=False).head(3).to_dict(), axis=1 )
2. 线性模型(Logistic Regression)
线性模型的个体特征贡献直接等于特征取值 × 模型系数,计算起来更直接:
具体步骤:
- 提取训练好的模型系数,计算每个样本的特征贡献:
import pandas as pd # 假设trained_model是训练好的Logistic Regression模型 model_coef = trained_model.coef_[0] feature_names = employee_data.drop("EMPLOYEE_ID", axis=1).columns # 计算每个员工的特征贡献值 contribution_df = employee_data.drop("EMPLOYEE_ID", axis=1) * model_coef contribution_df.index = employee_data["EMPLOYEE_ID"] # 生成Top3特征 top3_results = contribution_df.apply( lambda row: row.sort_values(key=lambda x: abs(x), ascending=False).head(3).to_dict(), axis=1 )
二、结果整合与展示
可以把结果合并到原员工数据集中,方便查看:
# 将Top3特征转换为易读的字符串格式 employee_data["TOP3_INFLUENTIAL_FACTORS"] = top3_results.apply( lambda x: ", ".join([f"{feat}: {coeff:.2f}" for feat, coeff in x.items()]) )
输出后每个员工的该列会显示类似:SALARY: 1.25, SATISFACTION: -0.91, DISTANCE FROM HOME: 0.62,直观展示影响最大的三个因素及作用方向。
三、关键注意事项
- 确保用于计算的数据集特征与模型训练时的特征完全一致(包括顺序、名称、预处理方式),避免出现匹配错误。
- 若使用神经网络等其他模型,可替换为
shap.DeepExplainer来计算SHAP值,逻辑和树模型一致。 - 排序时如果更关注影响的"大小",按绝对值排序;如果要优先展示推动离职的因素,可直接按系数降序排序。
内容的提问来源于stack exchange,提问作者Mariyem
相关产品推荐
相关产品推荐

