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

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

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

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

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

1.项目设置

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

# 绘制图表
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

加载数据

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

3.数据可视化

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

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

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

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

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

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

图片

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

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
)

图片

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

sns.heatmap(companies.corr())

图片

4.模型训练

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

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或其他类似的变体,创建并训练模型。

model: LinearRegression = LinearRegression()
model.fit(train_features, train_targets)

5.模型评估

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

coefficients = model.coef_

"""
We should see the following in our console

Coefficients  [[0.55664299 1.08398919 0.07529883]]
"""

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

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

图片

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

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美元的数字。

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

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

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

运行模型:

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

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

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

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

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

相关文章

TimeGPT:时间序列预测模型实例

时间序列预测领域正在经历一个非常激动人心的时期。在过去的三年里,我们见证了许多重要的贡献,如N-BEATS、N-HiTS、PatchTST和TimesNet等。同时,大型语言模型(LLM)近来在流行度方面取得了很大的成功,例如Ch…

【源码解析】聊聊线程池 实现原理与源码深度解析(一)

一、Java 线程池 实现原理与源码深度解析 架构 总揽线程池设计,其实可以发现都是符合顶层的接口设计,中间抽象类,最终是实际工作类 使用示例 public class MyRunnable implements Runnable{Overridepublic void run() {System.out.println…

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

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

EXPLAIN解析

针对以下sql进行解析 EXPLAIN SELECTdauk.id AS daukId,dasm.mailbox AS storeAccount,dau.id,dau.id AS userId,das.score AS score,das.sell_num AS sellNum,dapa.product_link AS productLink,dapa.able_category_ids AS ableCategoryIds,dac.parent_name AS parentName,da…

SAP_ABAP_RZ11解决SAP运行超时问题 TIME_OUT / rdisp/scheduler/prio_high/max_runtime

SAP ABAP 顾问(开发工程师)能力模型_Terry谈企业数字化的博客-CSDN博客文章浏览阅读510次。目标:基于对SAP abap 顾问能力模型的梳理,给一年左右经验的abaper 快速成长为三年经验提供超级燃料!https://blog.csdn.net/j…

Unity | 渡鸦避难所-1 | 修复资源导入后呈现洋红色(Built-in 转 URP)

1 前言 Unity 编辑器导入 Asset Store 的资源包后,在预览和使用时,发现对象显示为洋红色 以小狐狸为例,打开资源包中的场景,可以看到小狐狸和地板均显示为洋红色 这是因为 Asset Store 中的资源包大部分是针对内置渲染管线项目制…

自然语言处理:电脑如何理解我们的语言?

☁️主页 Nowl 🔥专栏《机器学习实战》 《机器学习》 📑君子坐而论道,少年起而行之 ​ 文章目录 ​编辑 常见方法 1.基于词典的方法 2.基于计数的方法 基于推理的方法 Bert input_ids attention_mask token_type_ids 结语 在广…

施密特触发器

1、作用 简单来说,施密特触发器可以将模拟信号转变成数字信号 2、为什么不使用比较器将模拟信号转变成数字信号 当输入电平高于参考电压时,输出高电平;输入电压低于参考电压时,输出低电平。这样比较器也可以实现模拟信号转换成数…

封装Servlet使用自定义注解进行参数接收

文章目录 前言一、前后对比✨二、具体实现🎇三、效果展示🎏 前言 先说项目背景,本项目是本人在校期间老师布置的作业(就一个CRUD),课程是后端应用程序设计,其实就是servlet和jsp那一套&#xf…

Python异常处理【侯小啾python领航班系列(二十六)】

Python异常处理【侯小啾python领航班系列(二十六)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…

Java三种代理模式:静态代理、动态代理和CGLIB代理

Java三种代理模式:静态代理、动态代理和CGLIB代理 代理模式 代理模式是23种设计模式种的一种。代理模式是一种结构型设计模式,它允许为其他对象提供一个替代品或占位符,以控制对这个对象的访问。代理模式可以在不修改被代理对象的基础上&am…

SPM/SCM 流量跟踪体系

SPM SPM(shopping page mark,导购页面标记) 是淘宝社区电商业务(xTao)为外部合作伙伴(外站)提供的跟踪引导成交效果数据的解决方案 注:也有解释 SPM 为超级位置模型(Super Position…

2024年甘肃省职业院校技能大赛(中职教师组)网络安全竞赛样题卷④

2024年甘肃省职业院校技能大赛(中职教师组)网络安全竞赛样题卷④ 2024年甘肃省职业院校技能大赛(中职教师组)网络安全竞赛样题卷④A模块基础设施设置/安全加固(本模块200分)A-1任务一 登录安全加固&#xf…

(C++)和为s的两个数字--双指针算法

个人主页:Lei宝啊 愿所有美好如期而遇 和为S的两个数字_牛客题霸_牛客网输入一个升序数组 array 和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果。题目来自【牛客题霸】https://www.nowcoder.com/practice/390da4f7a…

关于你对 Zookeeper 的理解

看看普通人和高手是如何回答这个问题的? 普通人 Zookeeper 是一种开放源码的分布式应用程序协调服务 是一个分布式的小文件存储系统 一般对开发者屏蔽分布式应用开发过过程种的底层细节 用来解决分布式集群中应用系统的一致性问题 高手 对于 Zookeeper 的理解…

网工学习9-STP配置

如图 1 所示,当前网络中存在环路, SwitchA 、SwitchB 、SwitchC 和 SwitchD 都运行 STP,通过 彼此交互信息发现网络中的环路,并有选择的对某个端口进行阻塞,最终将环形网络结构修剪成无 环路的树形网络结构&#xff…

python | 使用open读写文件

在目前的环境中,读取文件应该算是最基本的操作了,python也内置了读写文件的函数,让我们来看下。这里有个小点要点一下,我们使用python是没法办直接操作文件的,而是操作系统给我们预留了接口,python通过操作…

关于this和构造器的理解

1.类中的this关键字表示当前对象的引用。它可以被用于解决变量名冲突问题,或者在一个方法中调用类的另一个方法。如果在方法中没有明确指定要使用哪个变量,那么编译器就会默认使用this关键字来表示当前对象。 下面是一个输出this关键字的示例代码&#…

从朋友的反思中想到的一些关于外贸的问题

昨天有两个好消息,一个是上星期客户要开业的项目昨天顺利搭建完成,没有任何东西缺少,虽然指导安装过程中也是一堆糟心的事,还好只是有惊无险,同时也收到来自中间商的感谢信,她说没想到如此复杂的搭建甚至每…

海外的直播平台

1、Netflix Netflix以允许人们从众多设备观看系列和电影而闻名。用户可以开设一个帐户并添加不同的用户个人资料,这对于想要为整个家庭拥有单独帐户而又无需开设大量帐户并单独付款的人来说非常有用。它现在增加了一个直播服务,允许观众参加现场练习课程…