1. 赛题
员工满意度又称雇员满意度,是团队精神的一种参考,也就是个体对他所从事的工作的一般态度。是组织成员对其工作特征的认知评价,是员工通过比较实际获得的价值与期望获得的价值之间的差距后,对工作各方面满足与否的态度和情绪反映。通过持续的员工满意度调查,企业可以对自身管理中所存在的问题进行“诊断”,进而系统地解决问题,改善企业的管理,提高生产效率、降低人员流失率。因此,科学的员工满意度分析对于提高企业管理的有效性意义重大。
本次练习赛基于员工的满意度调查与员工的基本信息和工作经历,预测员工对于公司的满意度情况。
2. 数据说明
本次练习赛所使用数据集基于**人力资源分析数据集**,并且针对部分字段做出了一定的调整,所有的字段信息请以本练习赛提供的字段信息为准,字段信息内容参考如下:
3. 代码实现与解读
3.1 数据加载与导入
首先导入必要的库并加载训练集和测试集数据
import pandas as pd
from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor, ExtraTreesRegressor
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import mean_squared_error
import xgboost as xgb
import lightgbm as lgb
import numpy as np
# 加载数据
train_df = pd.read_csv('/home/mw/input/es_data1750/train.csv')
test_df = pd.read_csv('/home/mw/input/es_data1750/test.csv')
3.2 数据预处理
处理逻辑:
-
对分类特征
['division', 'package', 'salary']进行标签编码 -
fit_transform()用于训练集:学习编码规则并转换 -
transform()用于测试集:应用相同的编码规则,确保一致性le = LabelEncoder()
for col in ['division', 'package', 'salary']: train_df[col] = le.fit_transform(train_df[col]) test_df[col] = le.transform(test_df[col])
特征工程:
-
移除非特征列:
ID(标识符) -
分离目标变量:
satisfaction_level(满意度分数) -
构建特征矩阵和目标向量
X_train = train_df.drop(columns=['satisfaction_level', 'ID']) y_train = train_df['satisfaction_level'] X_test = test_df.drop(columns=['ID'])
数据集划分:
-
80%训练集 + 20%验证集
-
random_state=42确保结果可重现X_tr, X_val, y_tr, y_val = train_test_split( X_train, y_train, test_size=0.2, random_state=42 )
3.3 多模型配置
模型策略分析:
参数说明:
-
n_estimators=500:更多基学习器,需要配合小学习率 -
learning_rate=0.05:小学习率防止过拟合 -
subsample=0.8:行采样,增加多样性 -
colsample_bytree=0.8:列采样,防止过拟合models = { "RandomForest": RandomForestRegressor(n_estimators=300, random_state=42), "GradientBoosting": GradientBoostingRegressor(random_state=42), "ExtraTrees": ExtraTreesRegressor(n_estimators=300, random_state=42), "XGBoost": xgb.XGBRegressor( n_estimators=500, learning_rate=0.05, max_depth=6, subsample=0.8, colsample_bytree=0.8, eval_metric='rmse' ), "LightGBM": lgb.LGBMRegressor( n_estimators=500, learning_rate=0.05, num_leaves=31 ) }
3.4 模型训练与评估
-
遍历所有模型进行训练
-
在验证集上预测并计算RMSE
-
记录各模型性能得分
-
选择最佳模型
rmse_scores = {}
for name, model in models.items(): print(f"\n训练模型:{name} ...") model.fit(X_tr, y_tr)
val_pred = model.predict(X_val) rmse = mean_squared_error(y_val, val_pred) rmse_scores[name] = rmse print(f"{name} RMSE = {rmse}")best_model_name = min(rmse_scores, key=rmse_scores.get) best_model = models[best_model_name]
print("最佳模型:", best_model_name) print("验证集最小 RMSE:", rmse_scores[best_model_name])
3.5 测试集预测与输出
best_model.fit(X_train, y_train) # 使用全量训练数据重新训练
test_predictions = best_model.predict(X_test)
result_df = pd.DataFrame({
'ID': test_df['ID'],
'Prediction': test_predictions
})
result_df.to_csv('employee_satisfaction_predictions.csv', index=False)
print("\n预测完成,已保存 employee_satisfaction_predictions.csv")
最佳模型选择随机森林,测试得到RMSE为0.1734783197749903