和鲸社区AI实训季 员工满意度预测

28 阅读24分钟

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 模型训练与评估

  1. 遍历所有模型进行训练

  2. 在验证集上预测并计算RMSE

  3. 记录各模型性能得分

  4. 选择最佳模型

    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