基于 Python 的随机森林和 XGBoost 薪资预测模型:从数据爬取到预测优化
引言
在招聘市场中,职位的薪资水平是求职者和企业关注的核心指标之一。然而,由于不同职位的薪资标准受多方面因素影响,例如年限要求、学历要求、公司规模、行业类型等,因此单纯依靠经验进行判断难以精准。为此,我们通过 Python 数据爬取、数据清洗、特征工程、机器学习建模等步骤,构建出薪资预测模型,帮助用户更加直观地了解市场薪酬水平。
系列博客结构
-
Python 爬取 BOSS 直聘职位数据并保存到 Excel:
通过 Python 结合爬虫库,批量获取 BOSS 直聘的职位数据,存储为 Excel 文件格式,为后续分析提供数据支持。 -
Python 清洗与深度解析 BOSS 直聘数据:
对爬取到的数据进行标准化和清洗,包括薪资转换、年限解析、公司规模分析等,以保证模型输入的数据质量。 -
揭秘职场薪资秘密:用 Python 全面解读 BOSS 直聘招聘数据:
基于清洗后的数据展开深入分析,围绕薪资分布、职位要求、行业分布等多个维度,揭示职场薪资秘密、技能需求和地域分布特点
-
Python 实现岗位需求趋势与薪资预测(本文):
使用随机森林和XGBoost模型对招聘数据进行薪资预测,进行模型性能比较,并通过可视化和解释工具深入分析模型输出结果。
环境配置与库安装
1. 需要安装的 Python 库
本文使用以下 Python 库:
pandas
:数据读取与处理。numpy
:数值运算。scikit-learn
:机器学习模型库。xgboost
:提升树模型库。matplotlib
和seaborn
:可视化工具。shap
:解释机器学习模型输出的重要性。joblib
:用于保存和加载模型。- nltk:停用词处理
2. 安装指令
建议使用阿里云镜像源加速库安装:
pip install -i https://mirrors.aliyun.com/pypi/simple pandas numpy scikit-learn xgboost matplotlib seaborn shap joblib openpyxl nltk
数据预处理与特征工程
读取 Excel 数据
import pandas as pd
import numpy as np
import re
from sklearn.preprocessing import OneHotEncoder
from sklearn.model_selection import train_test_split
# 读取 Excel 文件
df = pd.read_excel('job_data.xlsx')
# 删除缺失值
df.dropna(subset=['岗位要求', '薪资描述'], inplace=True)
标准化薪资字段
我们将薪资范围(如 8k-15k/月
或 年薪15万·14薪
)标准化为中位数值:
def extract_salary(salary_text):
salaries = re.findall(r'\d+', salary_text)
if len(salaries) == 2:
return (int(salaries[0]) + int(salaries[1])) // 2
elif len(salaries) == 1:
return int(salaries[0])
else:
return np.nan
df['平均薪资'] = df['薪资描述'].apply(extract_salary)
df.dropna(subset=['平均薪资'], inplace=True)
转换其他字段
将是否上市转化为二进制值,将公司规模中的人数标准化为数值:
df['是否上市'] = df['是否上市'].apply(lambda x: 1 if '上市' in x else 0)
df['公司规模'] = df['公司规模'].apply(lambda x: int(re.findall(r'\d+', str(x))[0]) if re.findall(r'\d+', str(x)) else 10)
独热编码特征
对城市和行业类型进行独热编码&#