计算机毕设 基于机器学习的餐厅销量预测 -大数据 python

news2024/12/29 10:32:56

文章目录

  • 0 前言
  • 餐厅销量预测
  • 模型简介
    • 2.ARIMA模型介绍
      • 2.1自回归模型AR
      • 2.2移动平均模型MA
      • 2.3自回归移动平均模型ARMA
  • 三、模型识别
  • 四、模型检验
    • 4.1半稳性检验
      • (1)用途
      • (1)什么是平稳序列?
      • (2)检验平稳性
    • ◆白噪声检验(纯随机性检验)
      • (1)用途
      • (1)什么是纯随机序列?
      • (2)检验纯随机性
  • 五、Python实战
    • (一)导入工具及数据
    • (二)原始序列的检验
    • (三)一阶差分序列的检验
    • (四)定阶(参数调优)
    • (五)建模与预测
  • 最后


0 前言

🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩 **基于机器学习的餐厅销量预测 **

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:3分

餐厅销量预测

模型简介

2.ARIMA模型介绍

2.1自回归模型AR

自回归模型描述当前值与历史值之间的关系,用变量自身的历史时间数据对自身进行预测。自回归模型必须满足平稳性的要求。

自回归模型首先需要确定一个阶数p,表示用几期的历史值来预测当前值。p阶自回归模型的公式定义为:
在这里插入图片描述

上式中yt是当前值,u是常数项,p是阶数
ri是自相关系数,et是误差。

自回归模型有很多的限制:
1、自回归模型是用自身的数据进行预测
2、时间序列数据必须具有平稳性
3、自回归只适用于预测与自身前期相关的现象

2.2移动平均模型MA

移动平均模型关注的是自回归模型中的误差项的累加 ,移动平均法能有效地消除预测中的随机波动,q阶自回归过程的公式定义如下:
在这里插入图片描述

2.3自回归移动平均模型ARMA

自回归模型AR和移动平均模型MA模型相结合,我们就得到了自回归移动平均模型ARMA(p,q),计算公式如下:
在这里插入图片描述

三、模型识别

在这里插入图片描述
自相关函数ACF:时间序列观测值与其过去的观测值之间的线性相关性。

偏自相关函数PACF:在给定中间观测值的条件下,时间序列观测值预期过去的观测值之间的线性相关性

拖尾和截尾
拖尾指序列以指数率单调递减或震荡衰减,而截尾指序列从某个时点变得非常小:
在这里插入图片描述

四、模型检验

4.1半稳性检验

(1)用途

建模之前,检验时间序列数据是否满足平稳性,才能进-步建模

(1)什么是平稳序列?

如果时间序列在某-常数附件波动且波 动范围有限,数学表达即常数均值和常数方差,并且延迟k期的序列变量的自协方差和自相关系数是相等的,则称该序列为平稳序列。

(2)检验平稳性

方法一:图检验(偏主观)
时序图检验:在某-常数附近波动且波动范围有限。
自相关图检验:平稳序列具有短期相关性,但随着延迟期数k的增加,自相关系数会快速衰减趋向于零。
方法二:单位根检验
不存在单位根即是平稳序列。

◆白噪声检验(纯随机性检验)

(1)用途

建模之前,检验数据是否满足白噪声检验,非白噪声才能进一步建模。
建模后,检验残差是否满足白噪声检验,通过检验,建模才成立。

(1)什么是纯随机序列?

如果-个序例是纯随机序列,那么序列值之间没有任何关系,则自相关系数为零(理论)或接近于零(实际) .

(2)检验纯随机性

方法- -:图检验
自相关图检验:自相关系数为零或接近于零
QQ图检验:大部分点在直线上,则数据符合正态分布
方法二: D-W检验或L .B统计量检验

五、Python实战

(一)导入工具及数据


​ #导入数据
​ sale=pd.read_excel(“C://Python//分享资料2//arima_data.xls”)
​ print(sale.head())
​ print(sale.info())

查看数据
在这里插入图片描述
在这里插入图片描述

共有37个整数型样本数据

(二)原始序列的检验


​ #时序图观看是否平稳序列
​ plt.figure(figsize=(10,5))
​ sale[‘销量’].plot()
​ plt.legend([‘销量’])
​ plt.show()

在这里插入图片描述

上图为一个单调递增的序列,说明数据是不平稳的。

自相关图


​ # 查看自相关图
​ sale[‘销量’]=sale[‘销量’].astype(‘float’)
​ plot_acf(sale[‘销量’],lags=35).show()
​ #解读:自相关系数长期大于零,没有趋向于零,说明序列间具有很强的长期相关性。

在这里插入图片描述

平稳性检验


​ print(‘原始序列的ADF检验结果为’,ADF(sale[‘销量’]))
​ #解读:P值(第二个)大于显著性水平α(0.05),接受原假设(非平稳序列),说明原始序列是非平稳序列。

在这里插入图片描述

(三)一阶差分序列的检验


​ #方法:单位根检验
​ # print(‘原始序列的ADF检验结果为’,ADF(sale[‘销量’]))

d1_sale=sale.diff(periods=1, axis=0).dropna()
d1_sale=d1_sale['销量']
#时序图
plt.figure(figsize=(10,5))
d1_sale.plot()
plt.show()
#解读:在均值附件比较平稳波动

#自相关图
plot_acf(d1_sale,lags=34).show()
#解读:有短期相关性,但趋向于零。

#平稳性检验
print('原始序列的ADF检验结果为:',ADF(d1_sale))

#解读:P值小于显著性水平α(0.05),拒绝原假设(非平稳序列),说明一阶差分序列是平稳序列。

在这里插入图片描述

在这里插入图片描述
平稳性检验ADF小于0.05,说明一阶差分是平稳的
在这里插入图片描述

白噪声检验


​ print(‘一阶差分序列的白噪声检验结果为:’,acorr_ljungbox(d1_sale,lags=1))#返回统计量、P值
​ #解读:p值小于0.05,拒绝原假设(纯随机序列),说明一阶差分序列是非白噪声。

在这里插入图片描述
p值小于0.05,拒绝原假设(纯随机序列),说明一阶差分序列是非白噪声。

(四)定阶(参数调优)

确定P值和Q值


​ # 参数调优:BIC
​ # # 模型调优的方法:AIC和BIC
​ # # 值越小越好
​ # # 参数调优的方法非常多,用不同方法得出的结论可能不同
​ # from pandas.core.frame import DataFrame
​ # pmax=int(len(d1_sale)/10) #一般阶数不超过length/10
​ # qmax=int(len(d1_sale)/10) #一般阶数不超过length/10
​ # bic_matrix=[]
​ # for p in range(pmax+1):
​ # tmp=[]
​ # for q in range(qmax+1):
​ # try:
​ # tmp.append(ARIMA(sale,(p,1,q)).fit().bic)
​ # except:
​ # tmp.append(None)
​ # bic_matrix.append(tmp)
​ # p,q=DataFrame(bic_matrix).stack().idxmin() #最小值的索引
​ # print(‘用BIC方法得到最优的p值是%d,q值是%d’%(p,q))

# pmax=int(len(d1_sale)/10) #一般阶数不超过length/10
# qmax=int(len(d1_sale)/10) #一般阶数不超过length/10

# aic_matrix=[]
# for p in range(pmax+1):
#     tmp=[]
#     for q in range(qmax+1):
#         try:
#             tmp.append(ARIMA(sale,(p,1,q)).fit().aic)
#         except:
#             tmp.append(None)
#     aic_matrix.append(tmp)
# aic_matrix=pd.DataFrame(aic_matrix)
# p,q=aic_matrix.stack().idxmin() #最小值的索引
# print('用AIC方法得到最优的p值是%d,q值是%d'%(p,q))

用AIC和BIC方法得到的最优的P值和Q值为0,1

(五)建模与预测


​ #构建模型
​ model=ARIMA(sale[‘销量’],(0,1,1)).fit()
​ #查看模型报告
​ print(model.summary2())

在这里插入图片描述

残差检验


​ #残差检验
​ #自相关图
​ resid=model.resid
​ plot_acf(resid,lags=35).show()

#解读:有短期相关性,但趋向于零。

#偏自相关图
plot_pacf(resid,lags=20).show()

#偏自相关图
plot_pacf(resid,lags=35).show()
# 

在这里插入图片描述

如图所示一阶,二阶,三阶都是非常小的数,说明它们之间的相关性比较小,可能是一个纯随机序列


​ #qq图:线性即正态分布
​ qqplot(resid, line=‘q’, fit=True).show()
​ #解读:残差服从正态分布,均值为零,方差为常数

在这里插入图片描述

上图可以看出数据均匀的落在直线的周围,说明数据服从正态分布:均值为0,方差为常数,是一个纯随机序列。

预测


​ print(‘未来七天的销量数据:\n’)
​ print(model.forecast(7))

在这里插入图片描述


​ #预测
​ # print(‘未来七天的销量数据:\n’)
​ # print(model.forecast(7))
​ forecast=pd.Series(model.forecast(7)[0],index=pd.date_range(‘2015-2-7’,periods=7,freq=‘D’))
​ data=pd.concat((sale,forecast),axis=0)
​ data.columns=[‘日期’,‘销量’,‘未来7天销量’]
​ plt.figure(figsize=(10,5))
​ data[[‘销量’,‘未来7天销量’]].plot()
​ plt.show()

在这里插入图片描述

最后

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

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

相关文章

LLM本地知识库问答系统(一):使用LangChain和LlamaIndex从零构建PDF聊天机器人指南

随着大型语言模型(LLM)(如ChatGPT和GPT-4)的兴起,现在比以往任何时候都更容易构建比普通熊更智能的智能聊天机器人,并且可以浏览堆积如山的文档,为您的输入提供准确的响应。 在本系列中&#xf…

基于微信小程序的汽车租赁系统的设计与实现ljx7y

汽车租赁系统,主要包括管理员、用户二个权限角色,对于用户角色不同,所使用的功能模块相应不同。本文从管理员、用户的功能要求出发,汽车租赁系统系统中的功能模块主要是实现管理员后端;首页、个人中心、汽车品牌管理、…

LAMP介绍与配置

一.LAMP 1.1.LAMP架构的组成 CGI(通用网关接口)和FastCGI(快速公共网关接口)都是用于将Web服务器与后端应用程序(如PHP、Python等)进行交互的协议/接口。 特点 CGI FastCGI 运行方式 每个请求启动…

【C语言】2023.8.27C语言入学考试复盘总结

前言 本篇文章记录的是对于2023年8月27日的 C语言 的入学考试的整理总结 成绩:220/240 题目:9/12 错题整理 首先先对于我没做出来的三道题做一个整理 错题1:7-4 分段函数PLUS 题干 以下是一个二元分段函数,请你根据所给的函…

列式存储引擎-内核机制-Parquet格式

列式存储引擎-内核机制-Parquet格式 Parquet是一种开源的列式存储结构,广泛应用于大数据领域。 1、数据模型和schema Parquet继承了Protocol Buffer的数据模型。每个记录由一个或多个字段组成。每个字段可以是atomic字段或者group字段。Group字段包含嵌套的字段&…

软件工程(九) UML顺序-活动-状态-通信图

顺序图和后面的一些图,要求没有用例图和类图那么高,但仍然是比较重要的,我们也需要按程度去了解。 1、顺序图 顺序图(sequence diagram, 顺序图),顺序图是一种交互图(interaction diagram),它强调的是对象之间消息发送的顺序,同时显示对象之间的交互。 下面以一个简…

Python WEB框架之FastAPI

Python WEB框架之FastAPI 今天想记录一下最近项目上一直在用的Python框架——FastAPI。 个人认为,FastAPI是我目前接触到的Python最好用的WEB框架,没有之一。 之前也使用过像Django、Flask等框架,但是Django就用起来太重了,各种…

remove elements in c++

https://www.youtube.com/watch?vq5OfB6ZXT6E&listPL5jc9xFGsL8E_BJAbOw_DH6nWDxKtzBPA&index4

AUTOSAR规范与ECU软件开发(实践篇)6.7 服务软件组件与应用层软件组件端口连接

在生成了BSW模块的代码后, 切换到ISOLAR-A系统级设计界面,会发现产生一些基础软件模块的服务软件组件: BswM、 ComM、 Det和EcuM等, 如图6.60所示。 图6.60 生成了BSW后的服务软件组件 此时, 如果涉及服务软件组件与应用层软件组件的交互, 就需要为应用层软件组…

PowerDesigner学习笔记

备注:文章主要对概念数据模型进行深入分析 1.对各种模型图初步认识 1.1.概念数据模型 (CDM) (Conceptual Data Model) 对数据和信息进行建模,利用实体-关系图(E-R图)的形式组织数据,检验数据设计的有效性和合理性。 …

【leetcode 力扣刷题】字符串翻转合集(全部反转///部分反转)

字符串翻转合集 344. 反转字符串541. 反转字符串Ⅱ151. 反转字符串中的单词剑指 Offer 58 - II. 左旋转字符串反转单词思路循环挪动子串和子串的拼接 344. 反转字符串 题目链接:344. 反转字符串 题目内容: 题目中重点强调了必须原地修改输入数组&#…

Java --- 异常处理

目录 一、什么是异常 二、异常抛出机制 三、如何对待异常 四、 Java异常体系 4.1、Throwable 4.2、Error 4.2、Exception 4.2.1、编译时异常 4.2.2、运行时期异常 五、异常处理 5.1、捕获异常(try-catch) 5.1.2、catch中异常处理方式 …

顺序表链表OJ题(1)——【LeetCode】

W...Y的主页 😊 代码仓库分享 💕 前言: 今天我们来回顾一下顺序表与链表,针对这一块我们也有许多OJ题目供大家参考。当我们学习完顺序表链表后避免不了一些习题的练习,这样才能巩固我们学习的内容。 话不多说&#xf…

C++:常成员变量、常成员函数、常对象

常成员变量: 1.用const修饰,可位于类型前后,若是成员变量类型为指针则只可位于类型后。 即:int *const p; 2.只能通过构造函数的初始化表对常成员变量进行初始化。 3.常成员所在类中的所有构造函数都必须对常成员变量初始化…

06.sqlite3学习——DQL(数据查询)(全)

目录 SQLite——DQL(数据查询) 数据集 select语句 条件查询 比较 确定范围 确定集合 like 查询记录 查询不重复的记录 排序和限制 排序 限制 聚合 聚合函数 语法 SQLite Group By详解 语法 实例 SQLite Having 子句 语法 实例 多…

浪潮云海护航省联社金融上云,“一云多芯”赋能数字农业

农村金融是现代金融体系的重要组成部分,是农业农村发展的重要支撑力量,而统管全省农商行及农信社的省级农村信用社联合社(以下简称:省联社)在我国金融系统中占据着举足轻重的地位。省联社通常采用“大平台小法人”的发…

Leetcode 2651.计算列车到站时间

给你一个正整数 arrivalTime 表示列车正点到站的时间(单位:小时),另给你一个正整数 delayedTime 表示列车延误的小时数。 返回列车实际到站的时间。 注意,该问题中的时间采用 24 小时制。 示例 1: 输入&…

计算机系统真题

计算机系统真题 考点计算机系统存储体系磁盘调度算法 考点 计算机系统 PC找到指令,存储到IR中 根据ID分析指令的操作,并执行指令,AR访问操作数 A pc存指令的地址 内存按照字节编址: 在统一单位,转换一下: 3x2的平方 …

飞腾E2000 UEFI使用设备树方式启动linux系统

以往我们使用uboot引导系统启动,是采用uboot引导设备树+内核+文件系统的方式。 那么使用UEFI如何通过设备树+内核+文件系统的方式进行引导呢?这篇文章主要就介绍了这种操作方法。 一、使用Buildroot交叉编译生成E2000 Linux系统 详细请参考嵌入式软件部提供的 E2000 Linux…

服务器部署前后端项目-SQL Father为例

hello~大家好哇,好久没更新博客了。现在来更新一波hhh 现在更新一下部署上的一些东西,因为其实有很多小伙伴跟我之前一样,很多时候只是开发了,本地前后端都能调通,也能用,但是没有部署到服务器试过&#x…