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

news2025/1/19 17:15:16

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

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

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

【使用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,这说明模型是非常准确的。

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣226:翻转二叉树

力扣226:翻转二叉树 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 示例 2: 输入:root [2,1,3]…

matlab科学计算

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

yolo.txt格式与voc格式互转,超详细易上手

众所周知,yolo训练所需的标签文件类型是.txt的,但我们平时使用标注软件(labelimage等)标注得到的标签文件是.xml类型的,故此xml2txt之间的转换就至关重要了,这点大家不可能想不到,但是网上的文章提供的代码大多数都是冗余,或者难看,难以上手,故此作者打算提供一个相对…

构建第一个ArkTS应用(纯HarmonyOS应用)

1. 安装开发工具 在华为开发者官方上下载HarmonyOS应用专用的开发工具,链接地址:HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 要想使用开发工具让项目跑起来,需要10G的磁盘空间。开发工具需要的磁盘空间为2.36G;SDK需…

【开源存储】minio对象存储部署实践

文章目录 一、前言1、介绍说明2、部署方式3、冗余模式4、约束限制4.1、规格参数4.2、API支持a、minio不支持的Amazon S3 Bucket APIb、minio不支持的Amazon S3 Object API 二、部署说明1、软件安装2、minio单机部署3、minio分布式部署3.1、前置条件3.2、开始运行3.3、操作说明 …

[PyTorch][chapter 2][李宏毅深度学习-Regression]

前言: Regression 模型主要用于股票预测,自动驾驶,推荐系统等领域. 这个模型的输出是一个scalar。这里主要以下一个线性模型为基础 它是神经网络的基础模块, 目录: 总体流程 常见问题 Numpy 例子 PyTorch 例子 一 总体流程 1 : 建…

前端页面转pdf

首先,需要安装两个库 html2canvasjspdf 先引入这个公用的html转pdf的方法 /**path:src/utils/htmlToPdf.jsname:导出页面为pdf格式 **/ import html2Canvas from "html2canvas1.4.1"; import JsPDF from "jspdf2.5.1";const htmlToPdf {get…

[linux进程控制]进程替换

文章目录 1.进程替换的概念和原理2.如何完成进程替换2.1exec系列函数加载器的底层系统调用接口基于execve的封装--库函数 2.2 int execl(const char *path, const char *arg, ...);1.在当前进程进行替换2.在子进程进行替换 2.3 int execv(const char *path, char *const argv[]…

业务数据治理体系化实施流程学习总结

目录 一、业务数据治理实施流程 步骤 1:发现问题和制定目标 步骤 2:针对问题进行拆解,设计可衡量的指标 步骤 3:制定解决SOP和检查研发标准规范 步骤 4:推广运营,以拿结果为核心目标 步骤 5&#xff…

SmartSoftHelp8,代码版权保护

1.Html网页前端添加作者开发信息 2. Html网页添加版权信息 3. Css添加作者开发信息 4. JavaScript添加作者开发信息 5. C井后端代码添加作者开发信息 6. Dll内裤添加作者开发信息 7.应用程序添加开发作者信息,著作权,应用版权信息 下载地址&#…

使用Java语言实现字母之间的大小写转换

这个类的作用为实现字母之间的大小写转换,通过加减32来完成。 输入的代码 import java.util.Scanner; public class WordChangeDemo {public static void main(String[] args){try (Scanner in new Scanner(System.in)) {System.out.println("请输入您要进…

tomcat运行项目时,前端页面中文乱码

如图&#xff1a; 解决办法&#xff1a; 在前端页面添加下面代码 <%page language"java" pageEncoding"utf-8"%>再次运行

C++ Easyx 三子棋

目录 思路 框架​编辑 读取操作 数据操作 绘制画面 游戏的数据结构 用二维数组来模拟棋盘格 赢的情况 平局情况 Code 代码细节部分 &#xff08;1&#xff09;初始化棋盘格 &#xff08;2&#xff09; 初始化棋子类型​编辑 事件处理部分 落子 框架内代码的完善 数据处…

如何调用 API | 学习笔记

开发者学堂课程【阿里云 API 网关使用教程:如何调用 API】学习笔记&#xff0c;与课程紧密联系&#xff0c;让用户快速学习知识。 课程地址&#xff1a;阿里云登录 - 欢迎登录阿里云&#xff0c;安全稳定的云计算服务平台 如何调用 API 调用 API 的三要素 要调用 API 需要三…

Nginx 具体应用

1 Nginx 1.1 介绍 一款轻量级的 Web 服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器。它占有的内存少&#xff0c;并发能力强&#xff0c;中国大陆使用 nginx 的网站有&#xff1a;百度、京东、新浪、网易、腾讯、淘宝等。第一个公开版本发布于…

1.1卷积的作用

上图解释了1∗1卷积如何适用于尺寸为H∗W∗D的输入层&#xff0c;滤波器大小为1∗1∗D&#xff0c;输出通道的尺寸为H∗W∗1。如果应用n个这样的滤波器&#xff0c;然后组合在一起&#xff0c;得到的输出层大小为H∗W∗n。 1.1∗1卷积的作用 调节通道数 由于 11 卷积并不会改…

【vue】vue-slick-carousel插件,实现横向滚动列表手动左右滚动(也可设置为自动滚动)

需求&#xff1a;图片列表横向滚动的时候&#xff0c;隐藏原始滚动条&#xff0c;通过左右箭头控制滚动条往左右按一定的步长移动。 el-carousel走马灯一滚动就是一屏&#xff0c;不适合我的需求 在npm官网搜vue-slick-carousel&#xff0c;查看更详细的配置 vue-slick-caro…

matlab 路面裂缝检测识别系统设计GUI

1、内容简介 略 23-可以交流、咨询、答疑 2、内容说明 路面裂缝检测识别系统设计GUI 基于matlab的GUI设计路面裂缝检测识别系统 matlab、GUI、直方图、裂缝检测、二值化 3、仿真分析 4、参考论文 略 链接&#xff1a;https://pan.baidu.com/s/1AAJ_SlHseYpa5HAwMJlk…

十五届海峡两岸电视主持新秀大会竞赛流程

海峡两岸电视主持新秀会是两岸电视媒体共同举办的一项活动&#xff0c;旨在为两岸年轻的电视主持人提供一个展示才华的舞台&#xff0c;促进两岸文化交流和青年交流。本届新秀会是第十二届海峡两岸电视艺术节的重要活动之一。本次竞赛赛制流程如下&#xff1a; &#xff08;1&…

遥感方向期刊总结

开眼看期刊~ 期刊分区信息搜索网址中国科学院文献情报中心期刊分区表升级版科研通期刊查询&#xff1a; 遥感领域常见期刊Nature CommunicationsRemote Sensing of EnvironmentProceedings of the National Academy of Sciences &#xff08;PNAS&#xff09;ISPRS Journal of …