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

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

✍🏻作者简介: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()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

渐变色x轴换行柱状图

// 系统上云率const optionBar {title: {text: 系统上云率,left: left,textStyle: {color: "#fff",fontSize: 14,fontWeight: 650,align: "center",},},color: [#32C5FF, #00F766, #EECB5F],grid: {top: 40,bottom: 0,},legend: { // 控制图例组件show: …

C语言中其他运算符介绍

除了算术运算符和位运算符外,C语言还提供了一些其他类型的运算符,包括逗号运算符、条件运算符、sizeof运算符、指针运算符等。这些运算符在C语言中具有特定的功能和用途,对于编写复杂的程序和实现各种算法非常有用。本文将深入介绍C语言中的这…

是德科技keysight DSOX3104A示波器

181/2461/8938产品概述: Keysight(原Agilent) InfiniiVision DSOX3104A 的价位较低,能够在满足您苛刻预算要求的情况下提供卓越性能,以及可选功能。是德(原安捷伦)突破性技术可以在相同的预算条件下提供更多更出色的示波器功能 Keysight(原A…

Spring Boot 整合分布式搜索引擎 Elastic Search 实现 自动补全功能

文章目录 ⛄引言一、分词器⛅拼音分词器⚡自定义分词器 二、自动补全查询三、自动补全⌚业务需求⏰实现酒店搜索自动补全 四、效果图⛵小结 ⛄引言 本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,…

zabbix监控vmware esxi

一、zabbix服务端配置 修改zabbix_server.conf配置文件 vim /etc/zabbix/zabbix_server.conf #######zabbix_server.conf底部第二行开始添加下面配置######## StartVMwareCollectors5 #StartVMwareCollectors - 预先启动Vmware collector收集器实例的数量。此值取决于要监控的…

深入了解 Postman 请求头的使用方法

当你在使用 Postman 发送请求时,请求头(Headers)是你可以包含在 HTTP 请求中的重要部分之一。请求头包含了关于请求的元数据信息,这些信息对于服务器来处理请求是非常重要的。下面是一份详细的图文介绍,说明了如何在 P…

算法(6)KMP+trie

KMP: 最浅显易懂的 KMP 算法讲解_哔哩哔哩_bilibili 该视频使用python书写代码,不会python的小伙伴也可以看看了解kmp的大致思路。 问题描述: kmp:字符串匹配算法,用来找一个长字符串中出现了几次小字符串&#xf…

ubuntu中使用docker对配置文件进行挂载

目录 1.什么是挂载? 2.挂载的好处 3.挂载的方法 4.运行 5.查看 1.什么是挂载? 挂载通常指的是使操作系统能够访问到文件系统的过程。当一个文件系统被挂载到一个目录(称为挂载点)后,从该目录及其子目录下就可以访…

游戏本续航@控制中心的省电模式效果如何

文章目录 节能模式长续航模式👺相关工具 节能模式长续航模式👺 蓝天模具Control Center中的模式 根据我的试验,以及软件的提示,可以发现 Power Saving是最省电的,儿Quiet模式并不省电,它会启用独立显卡,只不过风扇的转速不像娱乐模式和性能模式那么积极而…

MySQL中使用distinct单、多字段去重方法

目录 一、distinct 1.1 只对一个字段查重 1.2多个字段去重 1.3针对null处理 1.4与distinctrow同义 二、聚合函数中使用distinct 三、CONCAT_WS函数 多个字段拼接去重是指将多个字段的值按照一定的规则进行拼接,并去除重复的拼接结果。这样可以生成唯一标识符…

抖店找达人带货,能赚钱吗?了解达人的这些特征!出单其实很简单

哈喽~我是电商月月 把抖音小店做起来的人都说,抖音小店前期出单最好的方式只有达人带货 那为什么还有那么多新手朋友确实找达人带货了,仍是不赚钱,不出单呢? 原因只有两点: 要么是你的品不好,要么就是你…

YOLOv7 | 注意力机制 | 添加ECA注意力机制

目录 原理简介 代码实现 yaml文件实现(tips:可以添加不同的位置) 检查是否添加执行成功 完整代码分享 论文创新必备(可帮忙做实验) 启动命令 ECA是通道注意力机制的一种实现形式,是基于SE的扩展。…

基于工业以太网的电能计量管理系统的应用

摘要:针对目前工业电能模式的研究现状,本文阐述了在现代以太网基础上的电能管理系统的设计。 该系统实现了电能的远程实时监控与管理,并且该系统支持多种终端设备的远程访问,建立了一个实时的人机界面管理平台,实现对电…

Web CSS笔记2

目录 1、背景 ①、背景图片(image) ②、背景平铺(repeat) ③、背景位置(position) ④、背景附着(attachment) ⑤、背景透明(CSS3) ⑥、背景图片缩放大小(size): ⑦、背景简写 2、标签显…

全国1000米分辨率逐年植被覆盖度(FVC)数据集

本数据集包括2000年至今,全国逐年植被覆盖度数据,FVC范围值为0-1,数据为浮点型,GeoTIFF格式。GeoTIFF文件均可用ArcGIS软件和GDAL读取和打开。 植被覆盖度是指植被(包括叶、茎、枝)在地面的垂直投影面…

【CXL协议-事务层之CXL.cache (3)】

3.2 CXL.cache 3.2.1 概述 CXL.cache 协议将设备和主机之间的交互定义为许多请求,每个请求至少有一个关联的响应消息,有时还有数据传输。 该接口由每个方向的三个通道组成: 请求、响应和数据。 这些通道根据其方向命名,D2H&…

Llama模型下载

最近llama模型下载的方式又又变了,所以今天简单更新一篇文章,关于下载的,首先上官网,不管在哪里下载你都要去官网登记一下信息:https://llama.meta.com/llama2 然后会出现下面的信息登记网页: 我这里因为待…

【unity】认识unity Hub的主要功能

这里我们主要讲解unity Hub中的【项目】和【安装】功能,其他对应的功能栏相信大家根据文字就可以知道相应的作用。 首先是介绍【项目】功能,在这里我们可以创建本地项目和云端项目,作为初学者我们创建本地项目皆可,当然如果你是多…

fs.1.10 ON CENTOS7 docker镜像制作

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 centos7 docker上编译安装fs1.10版本的流程记录。 环境 docker engine:Version 24.0.6 centos docker:7 freeswitch:v1.10.7 手动模式 centos准备 docker hub拉取centos镜像。…

I/O(输入/输出流的概述)

文章目录 前言一、流的概述二、输入/输出流 1.字节/字符输入流2.字节/字符输出流总结 前言 在变量、数组和对象中储存的数据是暂时的,程序结束后它们就会丢失。如果想要永久地储存程序创建的数据,需要将其保存在磁盘文件中,这样就可以在程序中…