相关链接
【2023年第十一届泰迪杯数据挖掘挑战赛】C题泰迪内推平台招聘与求职双向推荐系统构建 建模及python代码详解 问题一
【2023年第十一届泰迪杯数据挖掘挑战赛】C题泰迪内推平台招聘与求职双向推荐系统构建 建模及python代码详解 问题二
【2023年第十一届泰迪杯数据挖掘挑战赛】C题泰迪内推平台招聘与求职双向推荐系统构建 建模及python代码详解 问题三
【2023年第十一届泰迪杯数据挖掘挑战赛】C题泰迪内推平台招聘与求职双向推荐系统构建 建模及python代码详解 问题四
完整代码下载见图中信息
1 题目
见【2023年第十一届泰迪杯数据挖掘挑战赛】C题泰迪内推平台招聘与求职双向推荐系统构建 建模及python代码详解 问题一
2 问题三构建岗位匹配度和求职者满意度的模型
在招聘和求职过程中,企业面对多位优质求职者,将会考虑求职者能力要求、技能掌握 等多方面,岗位匹配度是体现求职者满足企业招聘要求的匹配程度;同样,求职者对于多种 招聘信息,也会依据自身条件和要求,选取符合自己心意的岗位,因此求职者满意度指标可 客观体现求职者对企业招聘岗位的满意程度。对于不满足岗位最低要求的求职者,企业可定 义其岗位匹配度为 0。同样,对于不满足求职者最低要求的岗位,求职者可定义其求职者满 意度为 0。
根据问题2的招聘信息与求职者信息,构建岗位匹配度和求职者满意度的模型,基于该模型,为每条招聘信息提供岗位匹配度非0的求职者,将结果进行降序排序存放在“resul3 - 1. csv”文件中,以及为每位求职者提供求职者满意度非0的招聘信息,将结果进行降序排序存放在“result3 - 2. csv”文件中。(模板文件见附件1中的CSV文件)
3 思路解析
建模方案
为了构建岗位匹配度和求职者满意度的模型,需要先对result1-1.csv和result1-2.csv数据进行清洗和处理,然后才能计算出每个招聘信息对应的岗位匹配度和每位求职者对应的求职者满意度。
- 对result1-1.csv进行清洗和处理:
- 去除重复的招聘信息id;
- 对于空值或无意义的数据进行删除或替换;
- 对员工数量、学历、岗位经验等分类数据进行数字化处理,便于后续计算。
- 对result1-2.csv进行清洗和处理:
- 去除重复的求职者id;
- 对于空值或无意义的数据进行删除或替换;
- 将预期岗位和技能进行关键词提取和分词处理,便于后续计算。
- 计算岗位匹配度:
- 对于每条招聘信息,根据预期岗位和技能对求职者进行筛选,筛选出符合条件的求职者;
- 对于每个符合条件的求职者,计算其与招聘信息的岗位匹配度,可以使用技能匹配度和职位匹配度等指标进行计算;
- 对于每条招聘信息,将所有符合条件的求职者的岗位匹配度求和,得到该招聘信息的总岗位匹配度。
- 计算求职者满意度:
- 对于每位求职者,根据学历、岗位经验等条件对招聘信息进行筛选,筛选出符合条件的招聘信息;
- 对于每个符合条件的招聘信息,计算其与求职者的求职者满意度,可以使用薪资、公司类型、工作地点等指标进行计算;
- 对于每位求职者,将所有符合条件的招聘信息的求职者满意度求和,得到该求职者的总求职者满意度。
- 根据计算出来的岗位匹配度和求职者满意度,按照岗位匹配度进行排序得到result3-1.csv,按照求职者满意度进行排序得到result3-2.csv。
4 代码实现
4.1 岗位匹配度
import pandas as pd
import numpy as np
# 读取招聘信息和求职者信息
job_info = pd.read_csv('data/result1-1.csv')
job_seekers = pd.read_csv('data/result1-2.csv')
# 将招聘信息和求职者信息合并,使用交叉连接的方式
job_matching = pd.merge(job_info.assign(key=1), job_seekers.assign(key=1), on='key').drop('key', axis=1)
# 定义计算匹配度函数
def calculate_match(row):
# 判断学历匹配度,如果不符合则匹配度为0
。。。略,请下载完整代码
# 判断岗位是否匹配,如果有一个岗位匹配则匹配度为1,否则为0
。。。略,请下载完整代码
return 0
# 计算岗位匹配度
job_matching['匹配度'] = 。。。略,请下载完整代码
# 根据匹配度降序排序
job_matching = job_matching.sort_values(by='匹配度', ascending=False)
# 保存结果
job_matching[['招聘信息id', '求职者id', '匹配度']].to_csv('data/result3-1.csv', index=False)
4.2 求职者满意度
from ast import literal_eval
# 读取招聘信息和求职者信息
job_info = pd.read_csv('data/result1-1.csv')
job_seekers = pd.read_csv('data/result1-2.csv')
# 使用literal_eval()函数将字符串转换为列表
job_seekers['预期岗位'] = job_seekers['预期岗位'].apply(literal_eval)
# 使用explode()函数将列表中的元素分解成单独的行
job_seekers_all = job_seekers.explode('预期岗位')
# 将招聘信息和求职者信息合并,使用左连接的方式
。。。略,请下载完整代码
# 求四列数据的最大值
max_value = max(job_satisfaction[['最低薪资','最高薪资','预期最低薪资','预期最高薪资']].max())
# 求四列数据的最小值
min_value = min(job_satisfaction[['最低薪资','最高薪资','预期最低薪资','预期最高薪资']].min())
# 将薪资归一化
def min_max_normalize(x):
if min_value == max_value:
return x
return (x - min_value) / (max_value - min_value)
job_satisfaction['最低薪资'] = job_satisfaction['最低薪资'].apply(min_max_normalize)
job_satisfaction['最高薪资'] = job_satisfaction['最高薪资'].apply(min_max_normalize)
job_satisfaction['预期最低薪资'] = job_satisfaction['预期最低薪资'].apply(min_max_normalize)
job_satisfaction['预期最高薪资'] = job_satisfaction['预期最高薪资'].apply(min_max_normalize)
# 对于求职者满意度的计算,可以采用类似的方法,将招聘信息和求职者信息合并后,按照求职者的要求和条件进行筛选和计算匹配度。以下是一个基于pandas库的求职者满意度计算方案:
# 定义计算满意度函数
def calculate_satisfaction(row):
# 判断薪资是否满意,如果不满意则满意度为0
。。。略,请下载完整代码
# 计算专业技能匹配度
。。。略,请下载完整代码
# 计算工作经验匹配度
。。。略,请下载完整代码
# 计算学历匹配度
。。。略,请下载完整代码
# 还有地区距离满意度
。。。略,请下载完整代码
# 权重自己定
# total_satisfaction = 0.4 * salary_satisfaction + 0.2 * skill_satisfaction + 0.2 * exp_satisfaction + 0.2 * edu_satisfaction
return total_satisfaction
# 计算满意度
job_satisfaction['满意度'] = job_satisfaction.apply(calculate_satisfaction, axis=1)
# 根据满意度降序排序
job_satisfaction = job_satisfaction.sort_values(by='满意度', ascending=False)
# 保存结果
job_satisfaction[['招聘信息id', '求职者id', '满意度']].to_csv('data/result3-2.csv', index=False)