近几天郑州下雨
气温骤降
已经习惯于夏季结束后
冬季的到来
已然蜷缩一团
所以,天气转凉,自己多穿点
一个人的时候
自己照顾好自己!
2019年马上过去,我也正在忙一件大事
至于是什么
暂时保密,我也不知道能不能实现
暂且消失一段时间
大家等我消息好了
本文选取2015年1月1日到2015年2月6日某餐厅的菜品销售数据进行建模。对数据进行预处理,建立ARIMA时间序列模型,做平稳性检验,并作一阶差分,通过模型识别与定阶,建立ARIMA(1,1,0)模型,最后应用选定的时间序列方法预测未来的餐厅菜品销售量。
我们预测出,未来五天的餐厅菜品销售量分别为4856.4、4881.4、4897.3、4897.3、4907.4
研究背景
由于餐饮行业是生产和销售同时进行的,因此销售预测对于餐饮企业十分必要。如何基于菜品历史销售数据,做好餐饮销售预测,以便减少菜品脱销现象和避免因备料不足而造成的生产延误,从而减少菜品生产等待时间,提供给客户更优质的服务,同时可以减少安全库存量,做到生产准时制,降低物流成本,餐饮销售预测可以看作是基于时间序列的短期数据预测,预测对象为菜品销售量。
问题分析
在实际生活中,自然界中绝大部分序列都是非平稳的。因而对非平稳序列的分析更普遍、更重要,创造出来的分析方法也更多。对非平稳时间序列的分析方法可以分为确定性因素分解的时序分析和随机时序分析两大类。确定性因素分解的方法把所有序列的变化都归结为四个因素(长期趋势、季节变动、循环变动和随机波动)的综合影响,其中长期趋势和季节变动的规律性信息通常比较容易提取,而由随机因素导致的波动则非常难以确定和分析,对随机信息浪费严重,会导致模型拟合精度不够理想。随机时序分析法的发展就是为了弥补确定性因素分解方法的不足。根据时间序列的不同特点,随机时序分析可以建立的模型有ARIMA模型、残差自回归模型、季节模型、异方差模型等。
模型建立与求解
首先,我们从网站上搜取数据,数据来源于网络
日期 | 销量 | 日期 | 销量 |
2015/1/1 | 3023 | 2015/1/19 | 3421 |
2015/1/2 | 3039 | 2015/1/20 | 3443 |
2015/1/3 | 3056 | 2015/1/21 | 3428 |
2015/1/4 | 3138 | 2015/1/22 | 3554 |
2015/1/5 | 3188 | 2015/1/23 | 3615 |
2015/1/6 | 3224 | 2015/1/24 | 3646 |
2015/1/7 | 3226 | 2015/1/25 | 3614 |
2015/1/8 | 3029 | 2015/1/26 | 3574 |
2015/1/9 | 2859 | 2015/1/27 | 3635 |
2015/1/10 | 2870 | 2015/1/28 | 3738 |
2015/1/11 | 2910 | 2015/1/29 | 3707 |
2015/1/12 | 3012 | 2015/1/30 | 3827 |
2015/1/13 | 3142 | 2015/1/31 | 4039 |
2015/1/14 | 3252 | 2015/2/1 | 4210 |
2015/1/15 | 3342 | 2015/2/2 | 4493 |
2015/1/16 | 3365 | 2015/2/3 | 4560 |
2015/1/17 | 3339 | 2015/2/4 | 4637 |
2015/1/18 | 3345 | 2015/2/5 | 4755 |
运用ARIMA模型对非平稳时间序列进行建模,研究思路图如下。
图1 研究思路图
差分运算
p阶差分:相距一期的两个序列值之间的减法运算称为1阶差分运算。
k步差分:相距k期的两个序列值之间的减法运算称为k步差分运算。
ARIMA模型
差分运算具有强大的确定性信息提取能力,许多非平稳序列差分后会显示出平稳序列的性质,这时称这个非平稳序列为差分平稳序列。对差分平稳序列可以使用ARMA模型进行拟合ARIMA模型的实质就是差分运算与ARMA模型的组合,掌握了ARMA模型的建模方法和步骤以后,对序列建立ARIMA模型是比较简单的。差分平稳时间序列建模步骤下图所示。
图2 ARMA模型建模流程图
序列平稳性检验
图3 时序图
由时序图可以看出,该序列具有明显的单调递增趋势,可以判断为是非平稳序列。
图4 自相关图
由自相关图可以看出,自相关系数长期大于零,说明序列间具有很强的长期相关性。
单位根检验
stat | cValue | p值 |
3.6862 | -1.9486 | 0.9748 |
单位根检验统计量对应的p值显著大于0.05,最终将该序列判断为非平稳序列。
一阶差分
图5 时序图
一阶差分之后序列的时序图在均值附近比较平稳的波动。
图6 自相关图
自相关图有很强的短期相关性。
一阶差分后序列的单位根检验
stat | cValue | p值 |
-2.6532 | -1.9489 | 0.0169 |
一阶差分后序列的白噪声检验
stat | cValue | p值 |
101.6541 | 12.5916 | 0.0007 |
单位根检验p值小于0.05,所以一阶差分之后的序列是平稳序列。
模型定阶
图7 一阶差分后偏自相关图
一阶差分后自相关图显示出1阶截尾,偏自相关图显示出拖尾性,考虑用MA(1)模型拟合1阶差分后的序列,即对原始序列建立ARIMA(0,1,1)模型。
对一阶差分后的序列拟合AR(1)模型进行分析。
模型检验:
残差为白噪声序列,p值为0.627016。
参数检验和参数估计:
对时间序列使用ARIMA(1,1,0)模型,对一阶时间序列使用了ARMA(1,0)模型。估计的参数为0.6353,AIC值为417.68。
ARIMA模型预测
应用ARIMA(1,1,0)对表2015年1月1日到2015年2月6日某餐厅的销售数据做为期5天的预测,结果如下:
2/7 | 2/8 | 2/9 | 2/10 | 2/11 |
4856.4 | 4881.4 | 4897.3 | 4897.3 | 4907.4 |
图8 销售量散点图
由销售量的散点图,我们可以看出,随着时间的变化,销售量逐渐递增。
本文所使用的代码如下所示:
ARIMA模型程序:
library(forecast)
library(fUnitRoots)
Data <- read.csv("C:/Users/27342/Desktop/arima_data.csv", header = TRUE)[, 2]
sales <- ts(Data)
plot.ts(sales, xlab = "时间", ylab = "销量 / 元")
# 单位根检验
unitrootTest(sales)
# 自相关图
acf(sales)
# 一阶差分
difsales <- diff(sales)
plot.ts(difsales, xlab = "时间", ylab = "销量残差 / 元")
# 自相关图
acf(difsales)
# 单位根检验
unitrootTest(difsales)
# 白噪声检验
Box.test(difsales, type="Ljung-Box")
# 偏自相关图
pacf(difsales)
# ARIMA(1,1,0)模型
arima <- arima(sales, order = c(1, 1, 0))
arima
forecast <- forecast(arima, h = 5, level = c(99.5))
forecast