畢業(yè)設(shè)計(jì) 大數(shù)據(jù)銷量數(shù)據(jù)預(yù)測(cè)可視化系統(tǒng)
0 前言
?? 這兩年開(kāi)始畢業(yè)設(shè)計(jì)和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長(zhǎng)自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。
為了大家能夠順利以及最少的精力通過(guò)畢設(shè),學(xué)長(zhǎng)分享優(yōu)質(zhì)畢業(yè)設(shè)計(jì)項(xiàng)目,今天要分享的是
?? ?基于大數(shù)據(jù)的銷量數(shù)據(jù)預(yù)測(cè)
??學(xué)長(zhǎng)這里給一個(gè)題目綜合評(píng)分(每項(xiàng)滿分5分)
工作量:3分
創(chuàng)新點(diǎn):3分
畢設(shè)幫助,選題指導(dǎo),技術(shù)解答,歡迎打擾,見(jiàn)B站個(gè)人主頁(yè)
https://space.bilibili.com/33886978
餐廳銷量預(yù)測(cè)
一、建模流程
二、模型簡(jiǎn)介
2.1自回歸模型AR
2.2移動(dòng)平均模型MA
2.3自回歸移動(dòng)平均模型ARMA
2.ARIMA模型介紹
三、模型識(shí)別
四、模型檢驗(yàn)
(1)用途
(1)什么是純隨機(jī)序列?
(2)檢驗(yàn)純隨機(jī)性
(1)用途
(1)什么是平穩(wěn)序列?
(2)檢驗(yàn)平穩(wěn)性
4.1半穩(wěn)性檢驗(yàn)
◆白噪聲檢驗(yàn)(純隨機(jī)性檢驗(yàn))
五、Python實(shí)戰(zhàn)
(一)導(dǎo)入工具及數(shù)據(jù)
(二)原始序列的檢驗(yàn)
(三)一階差分序列的檢驗(yàn)
(四)定階(參數(shù)調(diào)優(yōu))
(五)建模與預(yù)測(cè)
一、建模流程
二、模型簡(jiǎn)介
2.ARIMA模型介紹
2.1自回歸模型AR
自回歸模型描述當(dāng)前值與歷史值之間的關(guān)系,用變量自身的歷史時(shí)間數(shù)據(jù)對(duì)自身進(jìn)行預(yù)測(cè)。自回歸模型必須滿足平穩(wěn)性的要求。
自回歸模型首先需要確定一個(gè)階數(shù)p,表示用幾期的歷史值來(lái)預(yù)測(cè)當(dāng)前值。p階自回歸模型的公式定義為: ?

上式中yt是當(dāng)前值,u是常數(shù)項(xiàng),p是階數(shù) ri是自相關(guān)系數(shù),et是誤差。
自回歸模型有很多的限制: ? 1、自回歸模型是用自身的數(shù)據(jù)進(jìn)行預(yù)測(cè) ? 2、時(shí)間序列數(shù)據(jù)必須具有平穩(wěn)性 ? 3、自回歸只適用于預(yù)測(cè)與自身前期相關(guān)的現(xiàn)象
2.2移動(dòng)平均模型MA
移動(dòng)平均模型關(guān)注的是自回歸模型中的誤差項(xiàng)的累加 ,移動(dòng)平均法能有效地消除預(yù)測(cè)中的隨機(jī)波動(dòng),q階自回歸過(guò)程的公式定義如下: ?

2.3自回歸移動(dòng)平均模型ARMA
自回歸模型AR和移動(dòng)平均模型MA模型相結(jié)合,我們就得到了自回歸移動(dòng)平均模型ARMA(p,q),計(jì)算公式如下: ?

三、模型識(shí)別

? 自相關(guān)函數(shù)ACF:時(shí)間序列觀測(cè)值與其過(guò)去的觀測(cè)值之間的線性相關(guān)性。
偏自相關(guān)函數(shù)PACF:在給定中間觀測(cè)值的條件下,時(shí)間序列觀測(cè)值預(yù)期過(guò)去的觀測(cè)值之間的線性相關(guān)性
拖尾和截尾 ? 拖尾指序列以指數(shù)率單調(diào)遞減或震蕩衰減,而截尾指序列從某個(gè)時(shí)點(diǎn)變得非常?。??

四、模型檢驗(yàn)
4.1半穩(wěn)性檢驗(yàn)
(1)用途
建模之前,檢驗(yàn)時(shí)間序列數(shù)據(jù)是否滿足平穩(wěn)性,才能進(jìn)-步建模
(1)什么是平穩(wěn)序列?
如果時(shí)間序列在某-常數(shù)附件波動(dòng)且波 動(dòng)范圍有限,數(shù)學(xué)表達(dá)即常數(shù)均值和常數(shù)方差,并且延遲k期的序列變量的自協(xié)方差和自相關(guān)系數(shù)是相等的,則稱該序列為平穩(wěn)序列。
(2)檢驗(yàn)平穩(wěn)性
方法一:圖檢驗(yàn)(偏主觀) ? 時(shí)序圖檢驗(yàn):在某-常數(shù)附近波動(dòng)且波動(dòng)范圍有限。 ? 自相關(guān)圖檢驗(yàn):平穩(wěn)序列具有短期相關(guān)性,但隨著延遲期數(shù)k的增加,自相關(guān)系數(shù)會(huì)快速衰減趨向于零。 ? 方法二:單位根檢驗(yàn) ? 不存在單位根即是平穩(wěn)序列。
◆白噪聲檢驗(yàn)(純隨機(jī)性檢驗(yàn))
(1)用途
建模之前,檢驗(yàn)數(shù)據(jù)是否滿足白噪聲檢驗(yàn),非白噪聲才能進(jìn)一步建模。 ? 建模后,檢驗(yàn)殘差是否滿足白噪聲檢驗(yàn),通過(guò)檢驗(yàn),建模才成立。
(1)什么是純隨機(jī)序列?
如果-個(gè)序例是純隨機(jī)序列,那么序列值之間沒(méi)有任何關(guān)系,則自相關(guān)系數(shù)為零(理論)或接近于零(實(shí)際) .
(2)檢驗(yàn)純隨機(jī)性
方法- -:圖檢驗(yàn) ? 自相關(guān)圖檢驗(yàn):自相關(guān)系數(shù)為零或接近于零 ? QQ圖檢驗(yàn):大部分點(diǎn)在直線上,則數(shù)據(jù)符合正態(tài)分布 ? 方法二: D-W檢驗(yàn)或L .B統(tǒng)計(jì)量檢驗(yàn)
五、Python實(shí)戰(zhàn)
(一)導(dǎo)入工具及數(shù)據(jù)
? ? ?#導(dǎo)入數(shù)據(jù) ? ?sale=pd.read_excel("C://Python//分享資料2//arima_data.xls") ? ?print(sale.head()) ? ?print(sale.info())
查看數(shù)據(jù) ?

?

共有37個(gè)整數(shù)型樣本數(shù)據(jù)
(二)原始序列的檢驗(yàn)
? ? ?#時(shí)序圖觀看是否平穩(wěn)序列 ? ?plt.figure(figsize=(10,5)) ? ?sale['銷量'].plot() ? ?plt.legend(['銷量']) ? ?plt.show()

上圖為一個(gè)單調(diào)遞增的序列,說(shuō)明數(shù)據(jù)是不平穩(wěn)的。
自相關(guān)圖
? ? ?# 查看自相關(guān)圖 ? ?sale['銷量']=sale['銷量'].astype('float') ? ?plot_acf(sale['銷量'],lags=35).show() ? ?#解讀:自相關(guān)系數(shù)長(zhǎng)期大于零,沒(méi)有趨向于零,說(shuō)明序列間具有很強(qiáng)的長(zhǎng)期相關(guān)性。

平穩(wěn)性檢驗(yàn)
? ? ?print('原始序列的ADF檢驗(yàn)結(jié)果為',ADF(sale['銷量'])) ? ?#解讀:P值(第二個(gè))大于顯著性水平α(0.05),接受原假設(shè)(非平穩(wěn)序列),說(shuō)明原始序列是非平穩(wěn)序列。

(三)一階差分序列的檢驗(yàn)
? ? ?#方法:?jiǎn)挝桓鶛z驗(yàn) ? ?# print('原始序列的ADF檢驗(yàn)結(jié)果為',ADF(sale['銷量'])) ? ?
d1_sale=sale.diff(periods=1, axis=0).dropna()
d1_sale=d1_sale['銷量']
#時(shí)序圖
plt.figure(figsize=(10,5))
d1_sale.plot()
plt.show()
#解讀:在均值附件比較平穩(wěn)波動(dòng)
#自相關(guān)圖
plot_acf(d1_sale,lags=34).show()
#解讀:有短期相關(guān)性,但趨向于零。
#平穩(wěn)性檢驗(yàn)
print('原始序列的ADF檢驗(yàn)結(jié)果為:',ADF(d1_sale))
#解讀:P值小于顯著性水平α(0.05),拒絕原假設(shè)(非平穩(wěn)序列),說(shuō)明一階差分序列是平穩(wěn)序列。


? 平穩(wěn)性檢驗(yàn)ADF小于0.05,說(shuō)明一階差分是平穩(wěn)的 ?

白噪聲檢驗(yàn)
? ? ?print('一階差分序列的白噪聲檢驗(yàn)結(jié)果為:',acorr_ljungbox(d1_sale,lags=1))#返回統(tǒng)計(jì)量、P值 ? ?#解讀:p值小于0.05,拒絕原假設(shè)(純隨機(jī)序列),說(shuō)明一階差分序列是非白噪聲。

? p值小于0.05,拒絕原假設(shè)(純隨機(jī)序列),說(shuō)明一階差分序列是非白噪聲。
(四)定階(參數(shù)調(diào)優(yōu))
確定P值和Q值
? ? ?# 參數(shù)調(diào)優(yōu):BIC ? ?# # ?模型調(diào)優(yōu)的方法:AIC和BIC ? ?# # ?值越小越好 ? ?# # ?參數(shù)調(diào)優(yōu)的方法非常多,用不同方法得出的結(jié)論可能不同 ? ?# from pandas.core.frame import DataFrame ? ?# pmax=int(len(d1_sale)/10) #一般階數(shù)不超過(guò)length/10 ? ?# qmax=int(len(d1_sale)/10) #一般階數(shù)不超過(guò)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方法得到最優(yōu)的p值是%d,q值是%d'%(p,q)) ? ? ? ?
# pmax=int(len(d1_sale)/10) #一般階數(shù)不超過(guò)length/10
# qmax=int(len(d1_sale)/10) #一般階數(shù)不超過(guò)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方法得到最優(yōu)的p值是%d,q值是%d'%(p,q))
用AIC和BIC方法得到的最優(yōu)的P值和Q值為0,1
(五)建模與預(yù)測(cè)
? ? ?#構(gòu)建模型 ? ?model=ARIMA(sale['銷量'],(0,1,1)).fit() ? ?#查看模型報(bào)告 ? ?print(model.summary2())

殘差檢驗(yàn)
? ? ?#殘差檢驗(yàn) ? ?#自相關(guān)圖 ? ?resid=model.resid ? ?plot_acf(resid,lags=35).show() ? ?
#解讀:有短期相關(guān)性,但趨向于零。
#偏自相關(guān)圖
plot_pacf(resid,lags=20).show()
#偏自相關(guān)圖
plot_pacf(resid,lags=35).show()
#

如圖所示一階,二階,三階都是非常小的數(shù),說(shuō)明它們之間的相關(guān)性比較小,可能是一個(gè)純隨機(jī)序列
? ? ?#qq圖:線性即正態(tài)分布 ? ?qqplot(resid, line='q', fit=True).show() ? ?#解讀:殘差服從正態(tài)分布,均值為零,方差為常數(shù)

上圖可以看出數(shù)據(jù)均勻的落在直線的周圍,說(shuō)明數(shù)據(jù)服從正態(tài)分布:均值為0,方差為常數(shù),是一個(gè)純隨機(jī)序列。
預(yù)測(cè)
? ? ?print('未來(lái)七天的銷量數(shù)據(jù):\n') ? ?print(model.forecast(7))

? ? ?#預(yù)測(cè) ? ?# print('未來(lái)七天的銷量數(shù)據(jù):\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=['日期','銷量','未來(lái)7天銷量'] ? ?plt.figure(figsize=(10,5)) ? ?data[['銷量','未來(lái)7天銷量']].plot() ? ?plt.show()

畢設(shè)幫助,選題指導(dǎo),技術(shù)解答,歡迎打擾,見(jiàn)B站個(gè)人主頁(yè)
https://space.bilibili.com/33886978