scikit-learn线性回归法进行利润预测

news/2024/7/23 11:05:11 标签: scikit-learn, 线性回归, python

大家好,生成式人工智能无疑是一个改变游戏规则的技术,但对于大多数商业问题来说,回归和分类等传统的机器学习模型仍然是首选。

私募股权或风险投资这样的投资者利用机器学习,首先必须了解关注的数据以及它是如何被使用的。投资公司的决策不仅仅基于可量化的数据,如支出、增长和烧钱率等,还包括创始人的记录、客户反馈、产品体验等定性数据。

本文将介绍线性回归的基础知识,完整的代码可以从下面的链接获取。

线性回归模型进行利润预测 】">【使用Python机器学习线性回归模型进行利润预测 】

1.项目设置

本文将使用Jupyter Notebook进行这个项目,首先导入一些库。

python"># 绘制图表
import matplotlib.pyplot as plt
# 数据管理和处理
from pandas import DataFrame
# 绘制热力图
import seaborn as sns
# 分析
from sklearn.metrics import r2_score
# 用于训练和测试的数据管理
from sklearn.model_selection import train_test_split
# 导入线性模型
from sklearn.linear_model import LinearRegression
# 代码注释
from typing import List

2.数据

为了简化问题,本文将使用区域数据。这些数据代表了公司的支出类别和利润。可以看到一些不同数据点的示例。本文希望使用支出数据来训练一个线性回归模型并预测利润。

重要的是要理解本文将使用的数据描述的是一家公司的支出情况,只有将支出数据与收入增长、当地税收、摊销和市场状况等数据结合起来时,才能得到有意义的预测能力。

R&D SpendAdministrationMarketingSpend Profit
165349.2136897.8471784.1192261.83
162597.7151377.59443898.53191792.06
153441.51101145.55407934.54191050.39

加载数据

python">companies: DataFrame = pd.read_csv("companies.csv", header = 0)

3.数据可视化

了解数据对于确定要使用的特征、需要进行归一化和转换的特征、从数据中删除异常值以及对特定数据点进行的处理是很重要的。

可以直接访问利润,使用DataFrame绘制直方图(Pandas使用Matplotlib来绘制数据帧):

python">companies['Profit'].hist( color='g', bins=100);

可以看到,利润超过20万美元的异常值非常少,由此还可以从中推断出本文的数据代表的是具有特定规模的公司。由于异常值的数量相对较少,可以将其保留。 

下面绘制支出特征直方图,希望可以看到使用特征的直方图并查看其分布情况,Y轴表示数字频率,X轴表示支出。

python">companies[[
  "R&D Spend", 
  "Administration", 
  "Marketing Spend"
]].hist(figsize=(16, 20), bins=50, xlabelsize=8, ylabelsize=8)

图片

还可以看到有一个健康的分布,只有少量的异常值,可以预期在研发和市场营销上花费更多的公司利润更高。从下面的散点图中可以看出,研发支出和利润之间存在明显的相关性。

python">profits: DataFrame = companies[["Profit"]]
research_and_development_spending: DataFrame = companies[["R&D Spend"]]

figure, ax = plt.subplots(figsize = (9, 9))
plt.xlabel("R&D Spending")
plt.ylabel("Profits")
ax.scatter(
  research_and_development_spending, 
  profits, 
  s=60, 
  alpha=0.7, 
  edgecolors="k",
  color='g',
  linewidths=0.5
)

图片

通过相关热图进一步探索支出和利润之间的相关性,从图中可以看出,研发和市场营销支出与利润的相关性比行政支出更高。

python">sns.heatmap(companies.corr())

图片

4.模型训练

需要将数据集分割为训练集和测试集两部分,Sklearn提供了一个辅助方法来完成这个任务。鉴于本文的数据集很简单且足够小,可以按照以下方式将特征和目标分离开来。

python">features: DataFrame = companies[[
    "R&D Spend", 
    "Administration", 
    "Marketing Spend",
]]
targets: DataFrame = companies[["Profit"]]

train_features, test_features, train_targets, test_targets = train_test_split(
  features, 
  targets,
  test_size=0.2
)

大多数人会使用不同的命名约定,如X_trainy_train或其他类似的变体,创建并训练模型。

python">model: LinearRegression = LinearRegression()
model.fit(train_features, train_targets)

5.模型评估

对模型的性能及其可用性进行评估,首先查看计算得到的系数。在机器学习中,系数是用来与每个特征相乘的学习到的权重或数值,期望看到每个特征都有一个学习系数。

python">coefficients = model.coef_

"""
We should see the following in our console

Coefficients  [[0.55664299 1.08398919 0.07529883]]
"""

正如上述所看到的,有3个系数,每个特征对应一个系数(“研发支出”、“行政支出”、“市场营销支出”)。还可以将其绘制成图表,以便更直观地了解每个系数。

python">plt.figure()
plt.barh(train_features.columns, coefficients[0])
plt.show()

图片

为了解模型的误差率,将使用Sklearn的R2得分:

python">test_predictions: List[float] = model.predict(test_features)
root_squared_error: float = r2_score(test_targets, test_predictions)
"""float
We should see an ouput similar to this
0.9781424529214315
"""

离1越近,模型就越准确,实际上可以用一种非常简单的方式对这一点进行测试。

可以取数据集的第一行,如果使用下面的支出模型来预测利润,期望得到一个足够接近192261美元的数字。

python">"R&D Spend" |  "Administration" |  "Marketing Spend" | "Profit"
165349.2       136897.8            471784.1            192261.83

接下来创建一个推理请求:

python">inference_request: DataFrame = pd.DataFrame([{
  "R&D Spend":165349.2, 
  "Administration":136897.8, 
  "Marketing Spend":471784.1 
}])

运行模型:

python">inference: float = model.predict(inference_request)
"""
We should get a number that is around
199739.88721901
"""

现在可以看到的误差率是abs(199739-192261)/192261=0.0388,这说明模型是非常准确的。

综上,处理数据、搭建模型和分析数据有很多方法,没有一种解决方案适用于所有情况。当用机器学习解决业务问题时,其中一个关键过程是搭建多个旨在解决同一个问题的模型,并选择最有前途的模型。


http://www.niftyadmin.cn/n/5236777.html

相关文章

kernel | 不想老是编译内核?sysfs和debugfs了解一下

编译内核是一件让大家都抗拒的事情,因为编译一次内核需要的时间成本比较漫长,而且如果每次代码的微小改动或者想要额外调用某一个函数执行某一个动作就要不断的编译内核的话,就相当于CPU大量的时间都用在了idle,开发效率将会是相当…

深度学习——第3章 Python程序设计语言(3.2 Python程序流程控制)

3.2 Python程序流程控制 目录 1.布尔数据类型及相关运算 2.顺序结构 3.选择(分支)结构 4.循环结构 无论是在机器学习还是深度学习中,Python已经成为主导性的编程语言。而且,现在许多主流的深度学习框架,例如PyTorc…

【23-24 秋学期】NNDL 作业10 BPTT

习题6-1P 推导RNN反向传播算法BPTT. 习题6-2 推导公式(6.40)和公式(6.41)中的梯度. 习题6-3 当使用公式(6.50)作为循环神经网络的状态更新公式时, 分析其可能存在梯度爆炸的原因并给出解决方法. 习题6-2P 设计简单RNN模型,分别…

【腾讯云HAI域探密】- AIGC应用助力企业降本增效之路

一、前言: 近年来,随着深度学习、大数据、人工智能、AI等技术领域的不断发展,机器学习是目前最火热的人工智能分支之一,是使用大量数据训练计算机程序,以实现智能决策、语音识别、图像处理等任务。 作者也是经过了以…

第四章 React之Typescript

一、专栏介绍 欢迎加入本专栏!我将带领您从零开始快速掌握React,从搭建项目到深入理解React项目。后续还会将主流的Umi Max作为前端应用框架,并借助Ant Design Pro来设计用户界面。在这个专栏中,我将为您揭示开发过程中常见功能的…

【数据挖掘】国科大刘莹老师数据挖掘课程作业 —— 第一次作业

homewrok 1 1. 假定数据仓库中包含 4 个维:date, product, vendor, location;和两个度量:sales_volume 和 sales_cost。 (a) 画出该数据仓库的星形模式 图 1 星形模式图 (b) 由基本方体 [date, product, vendor, location] 开始&#x…

从马帮到金蝶云星空通过接口配置打通数据

从马帮到金蝶云星空通过接口配置打通数据 接入系统:马帮 上海马帮科技有限公司,是一家专注于提供全流程跨境电商ERP管理软件解决方案的企业。聚焦服务于各阶段、各领域的跨境电商从业者,旗下包含专业版ERP、亚马逊专用版ERP、东南亚海外版ERP…

K210开发板之VSCode开发环境使用中添加或删除文件(编译失败时)需要注意事项

在最初开始接触,将VScode和编译环境搭载好后,就开始运行第一个程序了,为了后续方便开发测试,这里我自己对照官方提供的例子,自己调试,写了一个简单的文件系统 后续,所有关于开发的源文件都在...…