摘要
本文通过分析美国、加拿大和英国在2021-2024年期间的数据开发岗位人员薪资数据,建立随机森林预测模型,预测数据开发人员的未来薪资水平,并探究影响薪资的关键因素。
首先,对获取的数据集中的数据进行预处理。然后,利用梯度提升树模型分析特征重要性,并选择关键特征。最后,建立随机森林模型进行预测,并通过性能指标评估模型效果。实验结果表明,本文建立的随机森林模型的预测效果不理想,主要原因包括数据质量不佳、特征工程不合理等。针对这些问题,本文提出了相应的改进方案,包括进行数据质量校验、优化数据集、采用更合适的特征编码方法、以及使用网格搜索进行模型调优等。
本研究为数据开发人员的薪资预测提供了一定的参考,并揭示了影响薪资的关键因素。未来可以进一步探索更先进的机器学习模型,并结合更多数据源,提高预测精度。
Abstract
This paper develops a random forest prediction model by analyzing the salary data of data developers in the United States, Canada, and the United Kingdom from 2021 to 2024, aiming to forecast the future salary levels of data developers and explore the key factors affecting compensation. Initially, the data from the acquired dataset undergoes preprocessing. Subsequently, a gradient boosting tree model is employed to analyze feature importance and select key features. Finally, a random forest model is constructed for prediction, and its effectiveness is evaluated through performance metrics. The experimental results indicate that the random forest model established in this paper does not yield satisfactory prediction results, mainly due to poor data quality and unreasonable feature engineering. In response to these issues, corresponding improvement strategies are proposed, including data quality verification, dataset optimization, adoption of more appropriate feature encoding methods, and the use of grid search for model tuning.
This study provides a certain reference for the salary prediction of data developers and reveals the key factors influencing compensation. Future research could further explore more advanced machine learning models and combine additional data sources to enhance prediction accuracy.
关键词:机器学习、随机森林、薪资预测
一、目标分析
在当今的数据驱动时代,数据开发人员在企业和社会的发展中扮演着至关重要的角色。随着大数据、人工智能和机器学习等技术的不断进步,数据开发人员通过对海量数据的挖掘、处理和分析,为企业提供有价值的信息和洞察,从而在决策过程中发挥重要作用。数据开发人员的岗位需求在发达国家呈现出持续增长的趋势,这一职业的发展前景被广泛看好。
然而,数据开发人员的薪资水平受到多种因素的影响,如地理位置、工作经验、技能要求等。薪资水平不仅反映了数据开发人员的工作价值,也影响着企业和机构在人才招聘和留存方面的竞争力。因此,对于企业和个人而言,了解和预测数据开发人员的薪资水平具有重要的现实意义。
本文通过分析美国、加拿大和英国在2021-2024年期间的数据开发岗位人员薪资数据,运用机器学习技术建立预测模型,以便更好地了解薪资水平的变化趋势和关键影响因素。希望通过预测未来数据开发岗位薪资状况为准备从事相关工作的人员提供参考。
1.2数据说明
数据集包含的数据特征名称及详细信息如表1-1所示。
表1-1 特征名称及说明
序号 | 特征名称 | 特征说明 |
1 | work_year 工作时间 | 数据收集时对应的不同年份,主要为2021年-2024年 |
2 | experience_level 专业经验水平 | 具体内容包括初级、中级、高级对应数据开发人员所取得的专业等级 |
3 | employment_type 工作合同类型 | 代表了该工作人员与对应公司的雇佣关系,包括全职、兼职、合同等 |
4 | job_title 员工职位 | 表示该工作人员在公司中担任的职位角色,例如数据工程师、AI工程师等 |
5 | Salary 工资 | 表示该工作人员所获得的原始货币工资,属于预测的目标 |
6 | salary_currency 支付工资的货币 | 根据公司所在地不同,公司支付的货币有所不同 |
7 | salary_in_usd 换算成美元后的工资 | 由于货币不统一,无法对工资信息进行对比,将所有工资换算为美元便于后续进行处理 |
8 | employee_residence员工居住的位置 | 由于存在兼职、合同等不同类型的员工,员工所居住的位置与公司所在地的位置可能不同 |
9 | remote_ratio 远程完成工作百分比 | 不同工作类型与公司制度会出现部分或全部工作远程完成,这与工资信息可能也有一定的关系 |
10 | company_location 公司地理位置 | 公司的地理位置一般与支付的工资、使用的货币等息息相关。本次主要使用美国、加拿大和英国三个国家的数据 |
11 | company_size 公司规模 | 基于员工人数进行公司规模的划分,公司规模的大小对工资信息也有一定的影响 |
1.3分析目标
结合近年来不同地区数据开发人员薪资数据集内容与机器学习模型,实现的主要目标为:
- 通过对现有的数据集进行预处理后,使用特征工程识别影响数据开发人员薪资的关键特征。
- 使用机器学习模型预测2025年数据开发人员的工资。
本实验的主要过程如图1-1所示,主要步骤如下:
- 对数据开发人员薪资数据进行预处理,了解数据集内容并进行初步的特征分析;
- 使用梯度提升树模型获取特征重要性,选择关键特征;
- 建立随机森林模型进行预测;
- 计算相关评测指标并进行调参优化模型;
- 使用随机森林模型预测2025年数据开发人员的薪资情况;
- 对建立的模型进行进一步分析
图1-1 数据开发人员薪资预测模型流程
二、数据准备
在本次实验过程中,实验数据集来源于Kaggle平台Zee Solution的数据分析师和研究员发布的数据集“Data Developer Salary in 2024”。主要使用了美国、加拿大和英国这些具有大量数据开发人员需求的发达国家在2021年-2024年期间的薪资信息作为代表性样例进行实验和预测。
对原始数据集进行数据抽取,数据抽取完成后,加载抽取后数据集并观察数据集的基本信息,同时对目标列原始信息进行可视化,通过绘制原始目标数据的频数分布直方图和核密度估计曲线来了解原始数据分布情况与趋势探查。
图2-1 原始目标数据频数分布直方图和核密度估计曲线
图2-2 数据集基本信息
2.2数据清洗
对抽取数据集进行初步的处理,保证数据的完整性和正确性。初步处理主要对可能出现的缺失值与异常值进行处理。处理方法如下:
由于数据集中的数据类型包括数值型数据与类别型数据,再进行缺失值处理时,使用均值填充数值缺失值,使用众数填充类别缺失值。
对异常值的处理主要集中于与目标列即工资相关列数值的处理。对于过高的工资数据进行舍弃。
图2-4 处理后目标数据频数分布直方图和核密度估计曲线
2.3特征相关性分析
通过计算各特征之间的相关性并绘制各特征之间的相关性热力图来初步进行特征选择。
图2-5 各特征之间的相关性热力图
通过图2-5各特征之间的相关性热力图可以发现,目标列salary_in_usd与remote_ratio和company_size呈负相关,与experience_level、job_title、salary_currency列的相关性相对其他特征列要更强一些。但整体来说,各特征之间的相关性都较弱,相关系数均低于0.3,各特征之间不具有很高的共线性。
此外,我们看到salary特征列与目标列salary_in_usd的相关性为1,存在严重的共线性。其原因主要是因为salary特征列与salary_in_usd目标列在本质上都属于用户所得的工资,只是表现的形式不一样,一个以当地货币为准,一个以统一货币为标准。为了防止后续训练模型时出现因货币之间汇率造成的误差,我们选择salary_in_usd这个统一标准的数据作为目标列,同时将salary特征列舍弃,不再作为后续特征列使用,防止出现由于相关性过强导致过拟合的现象。
由于各特征列之间相关性很低,各特征均具有较高的独立性,因而需要建立模型从而进一步来获取特征的重要性,从而选取关键特征。
三、特征工程
3.1标签编码
标签编码(Label Encoding)是一种将类别型数据转换为数值型数据的技术。在标签编码中,每个类别被分配一个唯一的整数。这种编码方法适用于类别之间存在自然的排序关系的情况,例如“低”、“中”、“高”或者“铜牌”、“银牌”、“金牌”。
标签编码的优点是它简化了数据,使得算法能够处理这些数据。对于某些算法,如决策树和基于树的集成方法(如随机森林、梯度提升机等),标签编码是一种有效的处理类别数据的方法,因为这些算法能够利用类别数据的顺序信息。
在本次实验中,我们使用Python中scikit-learn库的LabelEncoder类,进行标签编码。
图3-1 部分类别信息编码展示
根据运行结果可以得到类别型数据在后续建立模型时与类别编码对应的数值关系。部分关系如下表3-1所示:
表3-1 部分类型数据编码结果
特征列 | 序号 | 原类型数据 | 编码数据 |
experience_level | 1 | EN | 0 |
2 | EX | 1 | |
3 | MI | 2 | |
4 | SE | 3 | |
salary_currency | 1 | CAD | 0 |
2 | EUR | 1 | |
3 | GBP | 2 | |
4 | USD | 3 | |
job_title | 1 | AI Architect | 0 |
2 | AI Developer | 1 | |
3 | AI Engineer | 2 | |
4 | AI Product Manager | 3 | |
5 | AI Programmer | 4 | |
6 | AI Research Engineer | 5 | |
… | … | … | |
140 | Software Data Engineer | 139 | |
141 | Staff Data Scientist | 140 | |
142 | Staff Machine Learning Engineer | 141 |
3.2梯度提升树模型
梯度提升树(Gradient Boosting Tree, GBT)是一种基于决策树的集成学习算法,它通过迭代地构建一系列的决策树来提高预测性能。在每次迭代中,GBT 都会添加一个新的决策树,以最小化前一次迭代后的损失函数的梯度。这种方法能够捕捉到数据中的复杂模式,并且由于其可扩展性和灵活性,在获取特征重要性方面有很好的性能。
GBT 获取特征重要性的思想是基于以下几个关键点:
- 损失函数:GBT 算法以损失函数(Loss Function)的形式定义其目标。损失函数可以是均方误差(MSE)、对数损失(Log Loss)等,取决于具体问题的类型。
- 前向分步:在每次迭代中,GBT 试图最小化损失函数的梯度,这通常涉及到对预测结果进行预测,然后计算损失函数的梯度。这个梯度指向了使损失函数增加最快的方向。
- 决策树:为了最小化梯度,GBT 构建了一个新的决策树,其目的是减少损失函数的梯度。决策树通过在数据集上进行分割,以减少预测误差。
- 特征重要性:每个特征对损失函数的梯度贡献不同。那些使梯度减少最多的特征被认为是更有价值的,因为它们在最小化损失函数方面起到了关键作用。
设𝑓(𝑥)为模型的预测,yi为实际观测值,为预测值,
为损失函数,ℎ(𝑥)为决策树,θj为决策树的第𝑗个节点。
GBT 的迭代过程如下式所示:
其中,是决策树对𝑓(𝑥)的修正,𝛼是学习率,它决定了每次迭代中决策树对整体模型的影响程度。
特征重要性是通过计算每个特征在决策树中的分裂频率来确定的。一个特征在多个决策树的节点中作为分裂点,那么这个特征的重要性就较高。
例如,对于一个二元特征,其重要性可以通过以下式计算:
其中,𝑛是数据点的数量,是数据点𝑖的原始纯度,
是数据点𝑖在特征
上的纯度。
通过这种方法,GBT 可以有效地评估每个特征对模型的贡献,并据此进行特征选择。
3.3特征选择
通过各特征之间的相关系数热力图可以发现,各特征之间的相关共线性不高,需要进一步进行特征选择。在这里我们采用训练梯度提升树GBT来评估每个特征对模型贡献,从而选择更为关键的特征进行机器学习模型的训练。
图3-2 特征重要性分析图
通过特征重要性分析图我们可以发现,job_title特征列、experience_level特征列以及salary_currency特征列的重要性要高于其他特征列。因而我们选取以上三个特征列进行机器学习模型的建立和测试。
为实现对数据开发人员薪资的预测,本实验采用随机森林建立预测模型。
4.1随机森林模型训练
随机森林基于决策树的集成学习方法,通过构建多个决策树并对它们的结果进行投票来提高预测的准确性。
根据特征工程部分使用梯度提升树模型对各特征列的分析,我们选择重要性最高的三个特征进行模型的建立和训练,并进行预测。
4.2结果预测与结果可视化
根据建立的随机森林模型,给出基础的特征相关数据并输入预测模型进行薪资预测。在本次实验中,我们设置的主要特征值为salary_currency == 'USD' 和 experience_level == 'SE'即工资货币为美元(便于进行结果可视化分析),专业经验水平为高级工程师的职位为AI Engineer(人工智能工程师)、Data Analyst(数据分析师)、Data Engineer(数据工程师) 和 Machine Learning Engineer(机器学习工程师)的薪资情况。
主要过程为,根据特征工程部分的标签编码设置在预测模型中赋予相应的数值,再输出预测值。同时,我们计算了2021-2024年相同指标即工资货币为美元,专业经验水平为高级工程师的相应职位的平均工资来绘制折线图,了解工资的变化趋势。
图4-1 预测结果
图4-2 可视化折线趋势图
对于实现预测任务的模型来说,我们主要关注预测结果与实际结果之间的误差关系,比如模型的均方差、R方值、平均绝对误差、中值绝对误差以及可解释方差。
图5-1 性能指标计算结果
图5-2 预测—实际值散点图
通过计算得到的性能指标进行分析可以发现,均方差、平均绝对误差、中值绝对误差的值都非常大,均方差甚至超过10次方。同时,模型的R方值和可解释方差仅为0.34左右,更加接近0。通过预测—实际值散点图可以看出,预测值与真实值重合的点不多,表明建立的随机森林模型拟合效果很差,预测的薪资情况不够准确,与未来的真实值可能会出现很大的偏差。
通过分析计算得到的相关性能指标可以发现,我们建立的随机森林模型的预测效果很差,准确率只有百分之三十左右。我们对实验的各个环节进行深入的分析和评估,从而判断可能导致预测效果不理想的各种因素。
6.1原因分析
数据准备
1.未进行数据质量校验
在数据准备阶段,我们对抽取的数据集进行了数据分布与趋势探查和数据清洗,却没有进行数据质量校验来处理数据集中可能存在的噪声数据,导致后续处理的数据中可能存在噪声数据,从而导致了预测模型效果不理想。
2.数据清洗的异常处理不完善
在数据清洗部分,我们对缺失值和异常值进行了处理。通过加载数据集可以发现,数据集中不含空,因而数据清洗时主要是对异常值的舍弃。我们对异常值的处理方法是对与目标列相关的超出正常范围的数据进行舍弃。整个过程中只是处理了部分取值异常的数据,对于一些重复的数据、相矛盾的数据没有进行处理。
特征工程
1.对类型数据使用标签编码
数据集中含有较多的类型数据,如“experience_level专业经验水平”、“employment_type工作合同类型”、“salary_currency支付工资的货币”等。特别是“job_title员工职位”这一类型数据,在进行标签编码时,编码到了141。
标签编码一般不适合基数很高的类别特征,其分配的整数值可能会误导机器学习模型算法,使其认为类别之间存在大小关系,而实际上这些关系并不存在。此外,类别之间没有自然的排序关系,标签编码可能会导致模型性能下降。
2.关键特征选择可能不完全
在本次实验中我们发现各特征之间的相关性很低,具有较强的独立性。这对于模型训练来说是一件好事,但也带来了关键特征选择的问题。我们仅使用了梯度提升树模型获取了特征的重要性,从计算得到的重要性分析图可以发现,各特征的重要性不超过0.5,相对来说不是很高。即选择的特征可能依旧不是最关键的特征。
模型训练
1.模型选择
在本次实验中,我们选择了建立随机森林模型进行预测。随机森林模型通过构建多棵决策树并对它们的预测结果进行平均或投票来提高预测的准确性和稳定性。随机森林模型是由多棵决策树组成的,因此模型的决策过程比较复杂,难以解释每棵树的决策过程,而其决策过程对预测结果有一定的影响。
2.模型调优
随机森林的参数调整对于优化模型性能至关重要,随机森林的许多参数(如n_estimators森林中树的数量、max_features每次分裂时考虑的最大特征数量、max_depth树的最大深度等)需要进行不断的调整,从而获得更好的模型性能。在实验过程中,我们对模型进行了多次调参,但结果并没有太大变化。由于随机森林模型有较多的参数,所以通过手动调参获得最好的参数组合较为困难。
6.2解决方案
根据分析获得的可能导致模型预测效果不佳的原因,我们给出了以下对应的解决方案,可以在后续的实验工作中继续改进模型,从而提高模型预测的准确度
数据准备
1.进行数据质量校验并优化数据集
对抽取后得到的数据集进行数据质量校验,通过一致性校验、异常值校验来检验数据中存在的噪声数据,对噪声数据进行处理,来提高数据集的质量,便于后续进行机器学习模型的建立与训练。
2.增加异常处理方法
增加对异常值处理的方式和处理过程,除了对与目标列相关的取值异常数据处理,还应该增加对其他特征列,特别是对job_title列中的数据进行处理。删除数量较少的数据记录信息,精简对应的职工类型。
特征工程
1.对类型数据采用其他编码方法
标签编码对于类型数据较多且不具有自然排序关系的效果不好。当类别特征的基数非常大,且类别之间没有自然的排序关系时我们可以采用哈希编码(Hash Encoding)。或采用频率编码(Frequency Encoding)来捕获每个类别在数据集中的出现频率。采用合适的方法将类型数据转换为数值数据,减少编码后对模型训练的影响。
2.建立其他模型获取特征重要性
我们可以建立多个获取特征重要性的模型来计算特征重要性,并将计算出来的特征重要性进行频率和重要性分析,使用重要性高且出现频率高的模型作为关机按特征进行模型的建立与训练。
模型训练
1.更换其他模型
我们可以考虑将多个随机森林模型进行融合,例如使用平均、加权平均或堆叠(stacking)等方法。或通过建立其他机器学习模型来进行训练和预测。
2.模型调优
人工手动调参不能很好的获得最优参数组合,可以采用网格搜索调参。网格搜索调参是一种超参数调参的方法,它通过遍历给定的超参数组合的网格来找到最优的超参数组合。网格搜索的优点是简单且易于理解,可以确保不会错过任何超参数组合。
七、结论与心得
7.1实验结论
本次实验中,我们选用了随机森林模型进行数据开发人员薪资的预测。随机森林模型是一种集成学习方法,通过构建多棵决策树并对它们的预测结果进行平均或投票来提高预测的准确性和稳定性。在进行预测时,随机森林模型具有以下优势和劣势:
优势
- 抗过拟合能力强。随机森林在训练过程中,通过对特征和样本进行随机抽样,能够减少模型的过拟合现象,提高模型的泛化能力。
- 高准确率。随机森林模型通过对多棵决策树的预测结果进行平均或投票,能够提高预测的准确率。
- 对异常值和噪声不敏感。随机森林模型在训练过程中,通过对特征和样本进行随机抽样,能够降低异常值和噪声对模型的影响。
劣势
- 训练时间较长。随机森林模型需要训练多棵决策树,因此训练时间会比单个决策树模型长。
- 预测速度较慢。随机森林模型在进行预测时,需要对多棵决策树的结果进行平均或投票,因此预测速度会比单个决策树模型慢。
- 难以解释。随机森林模型是由多棵决策树组成的,因此模型的决策过程比较复杂,难以解释每棵树的决策过程。
综合以上随机森林模型的优点以及相较于单个决策树的缺点,我们选用随机森林模型进行模型的建立和训练从而实现对数据开发人员薪资的预测。
通过计算相关的性能度量指标和可视化散点图可以发现,实验的效果低于预期,性能很差,模型精度较低,用于指导实际工作的价值不高。但仍具有一定的参考意义。
对于模型精度较低的问题,我们通过对实验过程的各个阶段进行的分析,提出了相应的可能导致模型预测效果较差的原因,并给出了相应的解决方案(具体内容见上一节模型分析),在后续的实验过程中可以根据给出方案指定新的实验计划和内容,从而通过进一步的实验获得更好的实验结果。