实战案例|金融行业工资与工龄之间关系的预测模型~

简介: 实战案例|金融行业工资与工龄之间关系的预测模型~

01定义


一元线性回归模型是一种根据自变量X和因变量Y的相关关系,建立X与Y的线性回归方程并进行预测的模型。


该模型是拟合出来一条线,来使得预测值和实际值尽可能的接近,如果大部分的实际值落在该线上,或者很接近这条线,则该模型的拟合的较好。


一元线性回归的预测模型为:

Y = aX+b

其中,X代表自变量,Y代表因变量,a为回归系数,b为截距


02模型实现


Python有一个第三方库—Scikit-Learn库,它可以轻松的搭建一元线性回归模型。


因为第三方库,所以我们要进行手动安装,命令如下:

pip install Scikit-Learn


我们现在来读取数据,代码如下:

import pandas as pd
df = pd.read_excel('金融行业收入表.xlsx')
df.head(10)


查看一下获取的数据:


32.png


此时,我们可以先进行散点图的绘制了,代码如下:


from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  #解决中文乱码问题
plt.rcParams['axes.unicode_minus'] = False# 解决“-”显示为方块的问题
plt.scatter(X,Y)
plt.xlabel('工龄')
plt.ylabel('薪水')
plt.title('金融行业')
plt.show()


我们来看一下绘制出来的散点图:



33.png


我们对绘制好后的散点图进行查看,并没有什么可以直观看到的数据。接下来我们开始使用Scikit-Learn库搭建模型了,代码如下:


from sklearn.linear_model import LinearRegression
linear = LinearRegression()
linear.fit(X,Y)
y = linear.predict(X)
plt.scatter(X,Y)
plt.plot(X,y,color='yellow')
plt.xlabel('工龄/年')
plt.ylabel('薪水/元')
plt.title('金融行业')
plt.show()


我们看一下绘制出来的模型图:


34.png

我们来计算一下该模型的一元线性回归方程,代码如下:


a = linear.coef_[0]
b = linear.intercept_
f'回归模型方程为:y={int(a)}x+{int(b)}'


计算出回归模型方程为:y=4792x+6269


当模型搭建好后,我们还需要对模型进行评估,看其线性拟合程度是否较高,特征变量与,目标变量是否具有相关性,代码如下:


import statsmodels.api as sm
result = sm.OLS(Y,sm.add_constant(X)).fit().summary()


我们查看一下该模型的数据信息:


35.jpg


这个数据展示里面,只需要记住用红色框框起来的即可。


它们代表的含义是,R-squaredAdj.R-squared的值代表的是方程拟合程度,它们的取值是0-1,越靠近1,则拟合程度越高,从图中我们可以看到,它们两个的值分别是0.9050.904,说明拟合程度非常高了。


P的取值范围也是0-1,不过它是越靠近0,则特征变量显著性越高,从上图我们看到,两个特征变量的P值均为0,所以这两个变量都和目标变量具有相关性,不是偶然因素导致的。


03模型优化


通过对上面模型的观察,我们发现一元一次方程可能并不是它最佳模型,它的最佳模型更像是一条曲线,所以我们现在尝试一下用一元二次线性回归方程来对其进行绘制,看看是否契合,绘制代码如下:

from sklearn.preprocessing import PolynomialFeatures
linear = PolynomialFeatures(degree=2)  # 改变degree的值可以改变方程次数
x = linear.fit_transform(X)
linear = LinearRegression()
linear.fit(x,Y)
y = linear.predict(x)
plt.scatter(X,Y)
plt.plot(X,y,color='yellow')
plt.xlabel('工龄/年')
plt.ylabel('薪水/元')
plt.title('金融行业')
plt.show()


一元二次回归模型图:


36.png


我们来计算一下该模型的一元二次线性回归方程,代码如下:


a = linear.coef_[2]
b = linear.coef_[1]
c = linear.intercept_
f'一元二次线性回归方程为:y={a}x*x+{b}x+{c}'


计算出一元二次线性回归方程为:

y=611.8072409537128x*x-154.72510423942225x+12138.94866245218


同理,当模型搭建好后,我们还需要对模型进行评估,看其线性拟合程度是否较高,特征变量与,目标变量是否具有相关性,代码如下:


from sklearn.preprocessing import PolynomialFeatures
import statsmodels.api as sm
linear = PolynomialFeatures(degree=2)  # 改变degree的值可以改变方程次数
x = linear.fit_transform(X)
result = sm.OLS(Y,sm.add_constant(X)).fit().summary()


我们查看一下该模型的数据信息:


37.jpg


从上图我们发现,一元二次线性回归方程的R-squaredAdj.R-squared值和一元线性回归方程的值相同,看来该模型变成二次后,并未优化。    

04拓展


用同样的方法,我们也可以搭建出汽车、餐饮和IT行业的回归模型,这里只展示模型图,有兴趣的读者可以自行动手进行复现。


38.png


代码如下:


# 金融行业
df = pd.read_excel('金融行业收入表.xlsx')
X_financial = df[['工龄']]
Y_financial = df['薪水']
x_financial = linear_.fit_transform(X_financial)
linear = LinearRegression()
linear.fit(x_financial,Y_financial )
y = linear.predict(x_financial)
ax1.scatter(X_financial,Y_financial )
ax1.plot(X_financial,y,color='yellow')
ax1.set_title('金融行业')
# 餐饮行业
df = pd.read_excel('餐饮行业收入表.xlsx')
X_food = df[['工龄']]
Y_food = df['薪水']
x_food = linear_.fit_transform(X_food)
linear = LinearRegression()
linear.fit(x_food,Y_food)
y = linear.predict(x_food)
ax2.scatter(X_food,Y_food)
ax2.plot(X_food,y,color='red')
ax2.set_title('餐饮行业')
# 汽车行业
df = pd.read_excel('汽车行业收入表.xlsx')
X_car = df[['工龄']]
Y_car = df['薪水']
x_car = linear_.fit_transform(X_car)
linear = LinearRegression()
linear.fit(x_car,Y_car)
y = linear.predict(x_car)
ax3.scatter(X_car,Y_car)
ax3.plot(X_car,y,color='purple')
ax3.set_title('汽车行业')
# IT行业
df = pd.read_excel('IT行业收入表.xlsx')
X_it = df[['工龄']]
Y_it = df['薪水']
x_it = linear_.fit_transform(X_it)
linear = LinearRegression()
linear.fit(x_it,Y_it)
y = linear.predict(x_it)
ax4.scatter(X_it,Y_it)
ax4.plot(X_it,y,color='pink')
ax4.set_title('IT行业')


05小结


1. 本文通过预测金融行业从业者工资和工龄之间的关系,来学习线性回归方程的搭建方法,有兴趣的小伙伴可以自行尝试复现。

2. 通过搭建线性回归模型,可以进行有效的预测,有兴趣的读者可以分享一些优化方法。

3. 模型搭建好后,还需要对其进行评估和优化,评估参考R-squaredAdj.R-squaredP的值。

4. 本文仅供参考学习,不做它用。

5. 有需要本文数据集和代码的,联系志斌获取~



相关文章
|
负载均衡 Java API
Java一分钟之-Spring Cloud OpenFeign:声明式服务调用
【6月更文挑战第9天】Spring Cloud OpenFeign是声明式服务调用库,简化了微服务间调用。通过动态代理,它允许开发者用Java接口调用HTTP服务,支持服务发现、负载均衡。本文介绍了OpenFeign的基本概念,展示了如何添加依赖、开启客户端和定义服务接口。还讨论了接口调用失败、超时重试和日志配置等问题及其解决方案,并提供了自定义Feign配置的代码示例。通过学习,读者可以更好地在微服务架构中使用OpenFeign进行服务通信。
573 4
|
监控 JavaScript 小程序
社区养老|社区养老服务系统|基于springboot社区养老服务系统设计与实现(源码+数据库+文档)
社区养老|社区养老服务系统|基于springboot社区养老服务系统设计与实现(源码+数据库+文档)
374 0
|
10月前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
450 2
|
11月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python实现简单的线性回归模型
【10月更文挑战第2天】使用Python实现简单的线性回归模型
188 0
|
机器学习/深度学习 自然语言处理 并行计算
【深度学习】Attention的原理、分类及实现
文章详细介绍了注意力机制(Attention)的原理、不同类型的分类以及如何在Keras中实现Attention。文章涵盖了Attention的基本概念、计算区域、所用信息、结构层次等方面,并提供了实现示例。
1582 0
|
机器学习/深度学习 Python
利用Python实现一个简单的机器学习模型:线性回归详解
利用Python实现一个简单的机器学习模型:线性回归详解
424 2
|
机器学习/深度学习 数据可视化 算法
Python利用线性回归、随机森林等对红酒数据进行分析与可视化实战(附源码和数据集 超详细)
Python利用线性回归、随机森林等对红酒数据进行分析与可视化实战(附源码和数据集 超详细)
522 0
SQL 查找入职员工时间排名倒数第三的员工所有信息
SQL 查找入职员工时间排名倒数第三的员工所有信息
|
机器学习/深度学习 传感器 调度
【语音信号显示】麦克风实时时域和频域图matlab实现
【语音信号显示】麦克风实时时域和频域图matlab实现
|
缓存 网络协议 安全
DNS攻击和DNS污染是什么意思?底层原理是什么?
DNS攻击和DNS污染是什么意思?底层原理是什么?
1085 0