大数据分析案例-基于决策树算法构建大学毕业生薪资预测模型

news2024/11/18 17:21:28

🤵‍♂️ 个人主页:@艾派森的个人主页

✍🏻作者简介:Python学习者
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+


喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章

大数据分析案例合集
大数据分析案例-基于随机森林算法预测人类预期寿命
大数据分析案例-基于随机森林算法的商品评价情感分析
大数据分析案例-用RFM模型对客户价值分析(聚类)
大数据分析案例-对电信客户流失分析预警预测
大数据分析案例-基于随机森林模型对北京房价进行预测
大数据分析案例-基于RFM模型对电商客户价值分析
大数据分析案例-基于逻辑回归算法构建垃圾邮件分类器模型
大数据分析案例-基于决策树算法构建员工离职预测模型

大数据分析案例-基于KNN算法对茅台股票进行预测

大数据分析案例-基于多元线性回归算法构建广告投放收益模型
大数据分析案例-基于随机森林算法构建返乡人群预测模型
大数据分析案例-基于决策树算法构建金融反欺诈分类模型

目录

1.项目背景

2.项目简介

2.1项目说明

2.2数据说明

2.3技术工具

3.算法原理

4.项目实施步骤

4.1理解数据

4.2数据预处理

4.3探索性数据分析

4.3.1各个大学的平均薪资

4.3.2平均薪资最高的前十名岗位

4.3.3平均薪资最低的前十名岗位

4.3.4每年的平均薪资水平

4.4特征工程

4.5模型构建

4.6特征重要性

4.7模型预测

5.实验总结

源代码 


1.项目背景

        随着高等教育的普及和社会经济的发展,大学毕业生就业成为社会关注的焦点之一。对于大学毕业生而言,选择何种专业和职业路径往往会直接影响其未来的职业发展和薪资水平。因此,通过构建一个能够预测大学毕业生薪资的模型,可以为学生提供更明智的职业规划和决策支持,也能为用人单位提供更科学的人才招聘依据。

        决策树算法因其简单、易解释、能够处理非线性关系等特点,在数据挖掘和机器学习领域得到了广泛应用。通过构建基于决策树的大学毕业生薪资预测模型,可以充分利用该算法对各种变量之间复杂关系的建模能力,实现对薪资水平的准确预测。

        当前社会,大学毕业生的就业形势具有多样性和复杂性,受到多方面因素的影响,包括但不限于所学专业、学历水平、实习经验、地理位置、行业需求等。因此,借助决策树算法进行大学毕业生薪资预测,有助于深入挖掘各种影响因素之间的关系,为个体制定更为个性化的职业规划提供科学依据。

        此外,通过对毕业生薪资的预测,还能够为高校提供有针对性的培养方案,更好地迎合社会对各类专业人才的需求,促进教育与用人需求的对接。同时,用人单位在招聘时也能更准确地评估不同专业和背景的毕业生的薪资水平,提高用人效率。

        综上所述,基于决策树算法构建大学毕业生薪资预测模型,既符合当前社会对高等教育与就业关系深度对接的需求,也为个体和社会提供了更为准确的信息和决策支持。

2.项目简介

2.1项目说明

        本实验旨在对2009年-2020年各大学各学院的毕业生平均薪资数据进行分析挖掘,这一研究有望在提高大学毕业生职业发展水平、促进高校与用人单位合作、优化人才流动与分配等方面发挥积极作用。

2.2数据说明

        数据来源于Kaggle,原始数据共有14470行,6个变量,各变量含义如下:

Year:年份

Name:名称

Primary Job Title:主要岗位名称

Base Pay:基本薪资

Department:学院

College:大学

2.3技术工具

Python版本:3.9

代码编辑器:jupyter notebook

3.算法原理

        决策树( Decision Tree) 又称为判定树,是数据挖掘技术中的一种重要的分类与回归方法,它是一种以树结构(包括二叉树和多叉树)形式来表达的预测分析模型。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。一般,一棵决策树包含一个根节点,若干个内部结点和若干个叶结点。叶结点对应于决策结果,其他每个结点对应于一个属性测试。每个结点包含的样本集合根据属性测试的结果划分到子结点中,根结点包含样本全集,从根结点到每个叶结点的路径对应了一个判定的测试序列。决策树学习的目的是产生一棵泛化能力强,即处理未见示例强的决策树。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。

决策树的构建

特征选择:选取有较强分类能力的特征。

决策树生成:典型的算法有 ID3 和 C4.5, 它们生成决策树过程相似, ID3 是采用信息增益作为特征选择度量, 而 C4.5 采用信息增益比率。

决策树剪枝:剪枝原因是决策树生成算法生成的树对训练数据的预测很准确, 但是对于未知数据分类很差, 这就产生了过拟合的现象。涉及算法有CART算法。

决策树的划分选择

熵:物理意义是体系混乱程度的度量。

信息熵:表示事物不确定性的度量标准,可以根据数学中的概率计算,出现的概率就大,出现的机会就多,不确定性就小(信息熵小)。

决策树的剪枝

剪枝:顾名思义就是给决策树 "去掉" 一些判断分支,同时在剩下的树结构下仍然能得到不错的结果。之所以进行剪枝,是为了防止或减少 "过拟合现象" 的发生,是决策树具有更好的泛化能力。

具体做法:去掉过于细分的叶节点,使其回退到父节点,甚至更高的节点,然后将父节点或更高的叶节点改为新的叶节点。

剪枝的两种方法:

预剪枝:在决策树构造时就进行剪枝。在决策树构造过程中,对节点进行评估,如果对其划分并不能再验证集中提高准确性,那么该节点就不要继续王下划分。这时就会把当前节点作为叶节点。

后剪枝:在生成决策树之后再剪枝。通常会从决策树的叶节点开始,逐层向上对每个节点进行评估。如果剪掉该节点,带来的验证集中准确性差别不大或有明显提升,则可以对它进行剪枝,用叶子节点来代填该节点。

注意:决策树的生成只考虑局部最优,相对地,决策树的剪枝则考虑全局最优。

4.项目实施步骤

4.1理解数据

首先导入本次实验用到的第三方库和数据

查看数据大小

查看数据基本信息

查看数值型变量描述性统计

查看非数值型变量描述性统计

4.2数据预处理

统计数据的缺失值情况

从结果可以发现原始数据集并不存在缺失值,故不需要处理

检测原始数据中是否存在重复值

从结果发现为False,说明不存在重复值,故不需要处理

4.3探索性数据分析

4.3.1各个大学的平均薪资

4.3.2平均薪资最高的前十名岗位

4.3.3平均薪资最低的前十名岗位

4.3.4每年的平均薪资水平

4.4特征工程

这里需要进行编码处理

4.5模型构建

首先拆分数据集为测试集和训练集,测试集比例为0.2

定义一个评估模型的函数

构建线性回归模型

构建决策树模型

构建GBDT模型

4.6特征重要性

4.7模型预测

从图中可以看出,模型预测的效果好不错。

5.实验总结

        通过基于决策树算法的大学毕业生薪资预测模型的构建和研究,我们深入探讨了影响毕业生薪资水平的多种因素之间的复杂关系。该模型不仅在预测准确性上表现出色,而且具有良好的可解释性,有助于为大学生提供更科学的职业规划建议,同时为用人单位提供更精准的招聘决策支持。

        在实验中,通过决策树算法,我们成功地建立了一个能够捕捉这些信息之间关系的模型,从而实现了对毕业生薪资的准确预测。模型的优势在于它不仅能够对每个因素的重要性进行排序,还能够直观地呈现各个决策节点,为决策者提供了清晰的决策路径。

        总体而言,基于决策树算法的大学毕业生薪资预测模型为高校、毕业生和用人单位提供了一个有力的决策工具,有助于实现更加精准的人才匹配,推动高等教育与职业市场更好地协同发展。未来的研究可以进一步探索模型的泛化能力和适应性,以应对变化多端的就业市场和职业发展环境。

心得与体会:

通过这次Python项目实战,我学到了许多新的知识,这是一个让我把书本上的理论知识运用于实践中的好机会。原先,学的时候感叹学的资料太难懂,此刻想来,有些其实并不难,关键在于理解。

在这次实战中还锻炼了我其他方面的潜力,提高了我的综合素质。首先,它锻炼了我做项目的潜力,提高了独立思考问题、自我动手操作的潜力,在工作的过程中,复习了以前学习过的知识,并掌握了一些应用知识的技巧等

在此次实战中,我还学会了下面几点工作学习心态:

1)继续学习,不断提升理论涵养。在信息时代,学习是不断地汲取新信息,获得事业进步的动力。作为一名青年学子更就应把学习作为持续工作用心性的重要途径。走上工作岗位后,我会用心响应单位号召,结合工作实际,不断学习理论、业务知识和社会知识,用先进的理论武装头脑,用精良的业务知识提升潜力,以广博的社会知识拓展视野。

2)努力实践,自觉进行主角转化。只有将理论付诸于实践才能实现理论自身的价值,也只有将理论付诸于实践才能使理论得以检验。同样,一个人的价值也是透过实践活动来实现的,也只有透过实践才能锻炼人的品质,彰显人的意志。

3)提高工作用心性和主动性。实习,是开端也是结束。展此刻自我面前的是一片任自我驰骋的沃土,也分明感受到了沉甸甸的职责。在今后的工作和生活中,我将继续学习,深入实践,不断提升自我,努力创造业绩,继续创造更多的价值。

这次Python实战不仅仅使我学到了知识,丰富了经验。也帮忙我缩小了实践和理论的差距。在未来的工作中我会把学到的理论知识和实践经验不断的应用到实际工作中,为实现理想而努力。

源代码 

import pandas as pd
import matplotlib.pylab as plt
import numpy as np
import seaborn as sns
sns.set(font='SimHei')
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示
plt.rcParams['axes.unicode_minus'] = False   #解决符号无法显示
import warnings
warnings.filterwarnings('ignore')

data = pd.read_csv('大学薪资数据集.csv') # 加载数据集
data.head() # 查看数据前五行
data.shape
data.info()
data.describe()
data.describe(include='O')
data.isnull().sum()
any(data.duplicated())
# 各个大学的平均薪资
data.groupby('College')['Base Pay'].mean().plot(kind='bar')
plt.title('各个大学的平均薪资')
plt.show()
# 平均薪资最高的前十名岗位
data.groupby('Primary Job Title')['Base Pay'].mean().sort_values(ascending=False).head(10)[::-1].plot(kind='barh')
plt.title('平均薪资最高的前十名岗位')
plt.xlabel('平均薪资')
plt.show()
# 平均薪资最低的前十名岗位
data.groupby('Primary Job Title')['Base Pay'].mean().sort_values(ascending=False).tail(10)[::-1].plot(kind='barh')
plt.title('平均薪资最低的前十名岗位')
plt.xlabel('平均薪资')
plt.show()
# 每年的平均薪资水平
data.groupby('Year')['Base Pay'].mean().plot()
plt.title('每年平均薪资折线图')
plt.ylabel('平均薪资')
plt.show()
# 特征工程-编码处理
from sklearn.preprocessing import LabelEncoder
for col in data.describe(include='O').columns.to_list():
    data[col] = LabelEncoder().fit_transform(data[col])
data.head()
from sklearn.model_selection import train_test_split
# 准确数据
data['Base Pay'] = data['Base Pay'].astype(dtype='int')
X = data.drop('Base Pay',axis=1)
y = data['Base Pay']
# 划分数据集
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=42)
print('训练集大小:',X_train.shape[0])
print('测试集大小:',X_test.shape[0])
from sklearn.metrics import r2_score,mean_absolute_error,mean_squared_error

def train_model(ml_model):
    print("Model is: ", ml_model)
    model = ml_model.fit(X_train, y_train)
    print("Training score: ", model.score(X_train,y_train))
    predictions = model.predict(X_test)
    r2score = r2_score(y_test, predictions)
    print("r2 score is: ", r2score)
    print('MAE:', mean_absolute_error(y_test,predictions))
    print('MSE:', mean_squared_error(y_test,predictions))
    print('RMSE:', np.sqrt(mean_squared_error(y_test,predictions)))
    # 真实值和预测值的差值
    sns.distplot(y_test - predictions)
# 构建多元线性回归模型
from sklearn.linear_model import LinearRegression
lg = LinearRegression()
train_model(lg)
# 决策树回归
from sklearn.tree import DecisionTreeRegressor
tree = DecisionTreeRegressor()
train_model(tree)
# GBDT
from sklearn.ensemble import GradientBoostingRegressor
gbdt = GradientBoostingRegressor()
train_model(gbdt)
#打印特征重要性评分
feat_labels = X_train.columns[0:]
importances = gbdt.feature_importances_
indices = np.argsort(importances)[::-1]
index_list = []
value_list = []
for f,j in zip(range(X_train.shape[1]),indices):
    index_list.append(feat_labels[j])
    value_list.append(importances[j])
    print(f + 1, feat_labels[j], importances[j])
plt.figure(figsize=(10,6))
plt.barh(index_list[::-1],value_list[::-1])
plt.yticks(fontsize=12)
plt.title('各特征重要程度排序',fontsize=14)
plt.show()
# 使用决策树模型预测并可视化
plt.figure(figsize=(10,6))  
y_pred = tree.predict(X_test)
plt.plot(range(len(y_test))[:200],y_pred[:200],'b',label='预测值')
plt.plot(range(len(y_test))[:200],y_test[:200],'r',label='真实值')
plt.legend(loc='upper right',fontsize=15)
plt.xlabel('the number of People',fontdict={'weight': 'normal', 'size': 15})
plt.ylabel('value of Salary',fontdict={'weight': 'normal', 'size': 15})
plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1548062.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Web开发基本流程

Web是全球广域网,能够通过浏览器访问的网站。我们要访问网站,首先要在浏览器输入对应的域名。 浏览器也是一个程序,京东的网站也是一个程序,在京东那边电脑运行着,我们只是通过浏览器远程访问。京东的程序由三个部分组…

Redis入门到实战-第十六弹

Redis实战热身Cuckoo filter篇 完整命令参考官网 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://redis.io/Redis概述 Redis是一个开源的(采用BSD许可证),用作数据库、缓存、消息…

Java毕业设计-基于springboot开发的学生就业管理系统-毕业论文+答辩PPT(附源代码+演示视频)

文章目录 前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构 三、系统实现展示1、前台功能模块2、后台功能模块2.1 管理员功能2.2 学生功能2.3 企业功能 四、毕设内容和源代码获取总结 Java毕业设计-基于spring…

CDLF20-80_立式不锈钢多级泵

一、产品概述CDLF20-80 立式不锈钢多级泵是一款高效能、节能型的多级离心泵,它采用了先进的设计和制造技术,以确保泵的高效率和长期稳定运行。该泵主要用于城市供水、锅炉给水、高层建筑供水及消防系统等场合,能够处理清洁的或稍有污染的冷热…

智能医疗-方案优势

实时更新,信息展示更便利 电子标签床头信息卡可设计特定的信息模板展示病患信息,并可根据治疗进展实时更新,病患通过床头电子标签即可了解病情信息。 —签多能,医护管理更高效 电子墨水屏技术改进了传统院内展示内容单一、更换成…

Autosar Crypto Interface学习笔记

文章目录 前言Functional specificationError classificationError detection API specificationType DefinitionsFunction definitionsGeneral APICryIf_InitCryIf_GetVersionInfo Job Processing InterfaceCryIf_ProcessJobDispatch Key IDs匹配KeyId Job Cancellation Inter…

vmware,linux,centos7,NAT模式下的网络配置

centos7的NAT网络配置 NAT模式说明虚拟机网络配置工具本机配置net8网络(NAT的网域)本机的IP配置(用于net8局域网内解析主机IP和域名对应关系使用)(可选)虚拟机内的网络配置虚拟机ping不通www.baidu.com的情况下虚拟机ping可以ping…

【双指针】Leetcode 三数之和

题目解析 15. 三数之和 这道题有两个需要注意的地方:1. 三个数字也不可以是同一个位置上的 2. 最终结果里面的三元组不可以是重复的 所以这道题就需要对结果实现去重这一个逻辑,遇到相同的数字就需要往后面移动,忽略 算法讲解 1. 首先对数…

2024蓝桥杯每日一题(状压DP)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一:毕业旅行问题 试题二:蒙德里安的梦想 试题三:最短Hamilton路径 试题四:国际象棋 试题一:毕业旅行问题 【题目描述】 小明目前在做一份毕…

集合系列(十六) -集合知识回顾整理

一、摘要 在 Java 中,集合大致可以分为两大体系,一个是 Collection,另一个是 Map,都位于java.util包下。 Collection :主要由 List、Set、Queue 接口组成,List 代表有序、重复的集合;其中 Set…

一文读懂Cache一致性原理

1. 为何需要cache一致性 访问memory数据的速度相比core的运行速度来说,要花费更多的时钟周期,为了减轻这个差异引进了存储器层次结构,如图1所示。在层次结构中,越往上,读写速度越快,价格更贵,存…

Prometheus(六):Blackbox监控安装配置

目录 1 Blackbox Exporter安装配置1.1 Blackbox Exporter简介1.2 安装1、安装-使用源码包安装下载安装blackbox.yml文件配置快速启动文件 2、安装-使用docker 1.3 Prometheus配置1、http监控2、ping探测-ip3、https probe-DNS解析4、metrics配置5、TCP监控-探测端口 总结 1 Bla…

Element UI中日期选择日(date-picker)等其他选择器下拉显示错位、位置错误解决

省流版 给选择器加上唯一key(下面的想看就看) 问题复现 需求是用一个下拉切换时间维度的选择,分别为年度、季度、月度,但是开发的时候发现,当切换的时候,视图可正常切换,但点击选择时却发现选…

InfoNCE loss

InfoNCE loss是一种用于自监督学习的损失函数,通常用于训练对比学习模型,如自编码器或神经网络。全称是"InfoNCE: Contrastive Estimation of Neural Entropy",基于对比学习的思想,旨在最大化正样本的相似性&#xff0c…

关于 C/C++ 1Z(17)开源项目 openppp2 协同程式切换工作流

下述为开源项目 openppp2(github)构建工作在 C/C 17 的 stackful 有栈协同程式的工作流切换示意图: 在 openppp2 之中采用人工手动方式管理协同程式之间的切换,每个中断过程只是保存线程栈信息(如寄存器、当前#PC EIP&…

利用idea创建一个maven web工程

1.创建Maven项目 2.选择不使用Web项目骨架&#xff08;即普通maven项目&#xff09; 3.创建成功后在pom.xml设置打包方式为war&#xff0c;并重构maven项目 <packaging>war</packaging> 4.补齐Maven Web项目缺失webapp的目录结构 右键项目名打开模块设置&#xf…

【STM32+HAL】I2C+DMA读取AS5600编码器

一、DMA的应用 有关更多DMA的应用&#xff0c;详见【STM32HAL】DMA应用 二、HAL库配置 1、开启I2C 开启对应DMA及中断 2、开启串口通信 至此&#xff0c;HAL库配置完毕 三、DMA版&#xff08;高效但不稳定&#xff09; 1、as5600.c #include "AS5600.h" #includ…

Javascript本地存储的方式,区别及应用场景

文章目录 一、方式cookielocalStorage特点sessionStorage扩展的前端存储方式优点&#xff1a;缺点&#xff1a; 二、区别三、应用场景相关连接 一、方式 javaScript本地缓存的方法我们主要讲述以下四种&#xff1a; cookiesessionStoragelocalStorageindexedDB cookie Cook…

【Python】python编程初探2---字符编码,输入和输出,初识数据类型

欢迎来CILMY23的博客 本篇主题为【Python】python编程初探2---字符编码&#xff0c;输入和输出&#xff0c;初识数据类型 个人主页&#xff1a;CILMY23-CSDN博客 Python系列专栏&#xff1a;​​​​​​​http://t.csdnimg.cn/rAsEH 上一篇博客&#xff1a;http://t.csdni…

网络层协议之IP协议

网络层主要做两方面事情&#xff1a; 1.地址管理&#xff1a;制定一系列规则&#xff0c;通过地址描述出网络上的一个设备的位置 2.路由选择&#xff1a;网络环境复杂&#xff0c;从一个节点到另一个节点之间有很多条路径&#xff0c;这就需要通过路由选择来筛选/规划出更合适…