農林漁牧網

您現在的位置是:首頁 > 林業

R資料分析,基於AMIMA模型餐廳銷售時間序列分析

2021-09-05由 大話資料分析 發表于 林業

時間序列分析法包括什麼等具體方法

本文選取2015年1月1日到2015年2月6日某餐廳的菜品銷售資料進行建模。對資料進行預處理,建立ARIMA時間序列模型,做平穩性檢驗,並作一階差分,透過模型識別與定階,建立ARIMA(1,1,0)模型,最後應用選定的時間序列方法預測未來的餐廳菜品銷售量。我們預測出,未來五天的餐廳菜品銷售量分別為4856。4、4881。4、4897。3、4897。3、4907。4。

研究背景

由於餐飲行業是生產和銷售同時進行的,因此銷售預測對於餐飲企業十分必要。如何基於菜品歷史銷售資料,做好餐飲銷售預測,以便減少菜品脫銷現象和避免因備料不足而造成的生產延誤,從而減少菜品生產等待時間,提供給客戶更優質的服務,同時可以減少安全庫存量,做到生產準時制,降低物流成本,餐飲銷售預測可以看作是基於時間序列的短期資料預測,預測物件為菜品銷售量。

問題分析

在實際生活中,自然界中絕大部分序列都是非平穩的。因而對非平穩序列的分析更普遍、更重要,創造出來的分析方法也更多。對非平穩時間序列的分析方法可以分為確定性因素分解的時序分析和隨機時序分析兩大類。確定性因素分解的方法把所有序列的變化都歸結為四個因素(長期趨勢、季節變動、迴圈變動和隨機波動)的綜合影響,其中長期趨勢和季節變動的規律性資訊通常比較容易提取,而由隨機因素導致的波動則非常難以確定和分析,對隨機資訊浪費嚴重,會導致模型擬合精度不夠理想。隨機時序分析法的發展就是為了彌補確定性因素分解方法的不足。根據時間序列的不同特點,隨機時序分析可以建立的模型有ARIMA模型、殘差自迴歸模型、季節模型、異方差模型等。

模型建立與求解

首先,我們從網站上搜取資料,資料來源於網路

R資料分析,基於AMIMA模型餐廳銷售時間序列分析

運用ARIMA模型對非平穩時間序列進行建模,研究思路圖如下。

R資料分析,基於AMIMA模型餐廳銷售時間序列分析

圖1 研究思路圖

差分運算

p階差分:相距一期的兩個序列值之間的減法運算稱為1階差分運算。

k步差分:相距k期的兩個序列值之間的減法運算稱為k步差分運算。

ARIMA模型

差分運算具有強大的確定性資訊提取能力,許多非平穩序列差分後會顯示出平穩序列的性質,這時稱這個非平穩序列為差分平穩序列。對差分平穩序列可以使用ARMA模型進行擬合ARIMA模型的實質就是差分運算與ARMA模型的組合,掌握了ARMA模型的建模方法和步驟以後,對序列建立ARIMA模型是比較簡單的。差分平穩時間序列建模步驟下圖所示。

R資料分析,基於AMIMA模型餐廳銷售時間序列分析

圖2 ARMA模型建模流程圖

序列平穩性檢驗

R資料分析,基於AMIMA模型餐廳銷售時間序列分析

圖3 時序圖

由時序圖可以看出,該序列具有明顯的單調遞增趨勢,可以判斷為是非平穩序列。

R資料分析,基於AMIMA模型餐廳銷售時間序列分析

圖4 自相關圖

由自相關圖可以看出,自相關係數長期大於零,說明序列間具有很強的長期相關性。

單位根檢驗

單位根檢驗統計量對應的p值顯著大於0。05,最終將該序列判斷為非平穩序列。

一階差分

R資料分析,基於AMIMA模型餐廳銷售時間序列分析

圖5 時序圖

一階差分之後序列的時序圖在均值附近比較平穩的波動。

R資料分析,基於AMIMA模型餐廳銷售時間序列分析

圖6 自相關圖

自相關圖有很強的短期相關性,一階差分後序列的單位根檢驗,單位根檢驗p值小於0。05,所以一階差分之後的序列是平穩序列。

模型

定階

R資料分析,基於AMIMA模型餐廳銷售時間序列分析

圖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天的預測,結果如下:

R資料分析,基於AMIMA模型餐廳銷售時間序列分析

圖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))arimaforecast <- forecast(arima, h = 5, level = c(99。5))forecast