曹惠茹,許沛鑫,陳俊炯,鐘 麟,李小敏※
(1.廣州工程技術(shù)職業(yè)學(xué)院信息工程學(xué)院,廣州 510075;2.仲愷農(nóng)業(yè)工程學(xué)院機電工程學(xué)院,廣州 510550)
自2003 年以來,國內(nèi)豬肉價格存在明顯的波動,究其根本是由于豬飼料的主要成分玉米和大豆等價格也隨時間而增長,此外,受仔豬的供需矛盾影響,豬肉價格同樣也存在明顯的波動。而豬肉是我國肉類消費的主要對象,其價格偏差過大過小都會影響到居民的日常生活,因此,建立一個有效的模型預(yù)測生豬價格具有重要意義。國內(nèi)外學(xué)者實現(xiàn)數(shù)據(jù)預(yù)測的方法大概可分為3 個方向,即傳統(tǒng)統(tǒng)計學(xué)、機器學(xué)習、深度學(xué)習。在傳統(tǒng)統(tǒng)計學(xué)方法上,廣泛使用ARIMA 模型[1-4]。Akshita Gupta 等[5]使用了ARIMA、Wavelet-ARIMA和機器學(xué)習3 種模型進行中期日負荷預(yù)測,結(jié)果表明機器傾斜算法優(yōu)于時間序列算法。Lun Wang[6]基于X12-ARIMA-GARCH 家族模型對上海銅期貨價格進行預(yù)測,具有較好的擬合和預(yù)測能力。張瑩瑩[7]基于ARIMA模型對豬肉價格進行了短期預(yù)測,預(yù)測曲線擬合度較好。在機器學(xué)習方法上,多使用SVM[8-10]模型。Ali Shiri 等[11]基于SVM 預(yù)測德國電價,并通過對比分析,確定了使用了西德克薩斯中質(zhì)原油(WTI)的日價格的SVM 模型更加有效。Hasan 等[12]比較使用了k近鄰算法,樸素貝葉斯和支持向量機等來預(yù)測洋蔥的價格,將洋蔥價格分為高中低3 類。蔡超敏等[13]使用集成模型EMD-SVM,并與SVM、EMD-BP、BP等模型比較,顯示出了較高的預(yù)測精度。姜百臣等[14]通過改進后的SVM 模型對豬肉價格進行預(yù)測,相較于原始模型,預(yù)測精度良好,RMSE 為1.62。張大斌等[15]利用GEEMD 的分解能力,通過遺傳算法優(yōu)化SVR預(yù)測模型,提高了SVR 預(yù)測模型對豬肉價格的預(yù)測精度。在深度學(xué)習方法上,則多使用RNN 或RNN 變種LSTM等,Karim Moharm[16]基于雙向長短期記憶網(wǎng)絡(luò)構(gòu)建8 組對照組預(yù)測風速,其對風速數(shù)據(jù)集的理解具有良好的性能。Rijo Jackson Tom[17]利用Bi-LSTM預(yù)測比特幣的價格,該模型能夠以平均絕對誤差為13%的方式跟蹤測試數(shù)據(jù)集。Feng Li 等[18]使用LSTM-RNN 提出了一種考慮儲能效應(yīng)的短期負荷預(yù)測方法,MAPE 為3.0,RMSE為0.72。Van Bui[19]提出基于多尺度RNN 的深度學(xué)習可以高精度地反映其反應(yīng)性和準確性,并顯示了作為輸出負載預(yù)測問題的魯棒解決方案的潛力。黃琪[20]采用特征選擇和LSTM 模型對同期豬肉價格進行了定性比較合適分析,顯示LSTM有更好的預(yù)測效果。
顯然,在價格預(yù)測或其他預(yù)測方面眾多學(xué)者取得了不錯的成果,但豬肉等大宗商品的價格預(yù)測,卻鮮有人進行研究。結(jié)合以上問題,本文構(gòu)建了雙向循環(huán)神經(jīng)網(wǎng)絡(luò)和雙向長短期記憶網(wǎng)絡(luò)組合模型Bi-RNN-LSTM,該模型在國家數(shù)據(jù)庫提供的活豬(中等)集貿(mào)市場價格當期值數(shù)據(jù)上擁有優(yōu)秀的預(yù)測結(jié)果,能在一定程度上幫助國家宏觀調(diào)控豬肉價格,避免由于豬肉價格的波動較大而引起的一系列民生問題。
圖1 雙向RNN結(jié)構(gòu)
(1)前向隱藏RNN層
(2)反向隱藏RNN層
(3)前反向隱藏層合并RNN 隱藏層(RNN 新隱藏層)
(4)RNN輸出層
注:←表示反向傳播,→表示正向傳播。
Bi-LSTM同樣擁有兩個中間隱藏層,但其由于存在遺忘門(Forget gate)、輸入門(Input gate)、輸出門(Output gate),因此將3 個門視為一個operation 單元,簡化示意圖如圖2(圖中σ 為Sigmoid 函數(shù),F(xiàn)t為遺忘門,It為輸入門,Ot為輸出門,⊙為Hadamard 乘積)所示。相對于Bi-RNN,每一次由輸入層輸入時,不會直接將序列數(shù)據(jù)抵達隱藏層,而是經(jīng)過前向operation 單元后,由前向operation 單元進行相關(guān)計算,前向operation輸出對應(yīng)的記憶單元(c)供給下一個operation,而輸出的ht則和反向operation 輸出的ht'合并為一個隱藏層,再進行輸出。
圖2 操作單元
對于operation 單元而言,則有:
(1)輸入門
(2)遺忘門
(3)輸出門
(4)候選記憶單元
(5)記憶單元
(6)隱藏層
而對于總體結(jié)構(gòu)而言,其計算公式與Bi-RNN 相似,僅需經(jīng)過1 個operation 單元,本文在此不再贅述。
圖3 相關(guān)系數(shù)熱圖
分析生豬價格的影響因素,可由兩個主要方向確定輸入特征,崽豬和飼料。因此可對由國家數(shù)據(jù)庫提供的畜產(chǎn)品集貿(mào)市場價格和糧食集貿(mào)市場價格數(shù)據(jù)之間進行相關(guān)系數(shù)的計算。此外,由于輸入特征對標簽的影響是相對滯后幾個月份的,因此本文將時間序列錯開進行相關(guān)性分析,即對2003 年1 月至2018 年8 月的輸入特征數(shù)據(jù)和2003 年5月至2018 年12 月的豬肉價格數(shù)據(jù)進行相關(guān)性分析,各系數(shù)分析計算結(jié)果熱圖如圖3 所示。其中:Kendall 為肯德爾相關(guān)系數(shù);Person 為皮爾遜相關(guān)系數(shù);Spearman 為斯皮爾曼相關(guān)系數(shù)。由圖可知,對于肯德爾相關(guān)系數(shù),糧食作物與豬肉價格相關(guān)性均在0.5 左右,而仔豬達到了0.6,對于皮爾遜相關(guān)系數(shù),相關(guān)性最高的為仔豬、玉米,而大豆與秈稻、粳稻均約為0.79,對于斯皮爾曼相關(guān)系數(shù),相關(guān)性最高的為仔豬、玉米,而其他的則相關(guān)性接近??紤]到豬飼料的主要成分有豆粕,而本文做相關(guān)性分析時使用的是大豆,因此相關(guān)系數(shù)偏低,結(jié)合實際,最終選取玉米、仔豬、大豆作為輸入特征。
圖4 模型總結(jié)構(gòu)
首先,實驗以訓(xùn)練集數(shù)據(jù)輸入,為消除奇異樣本數(shù)據(jù),將所有輸入特征和標簽進行歸一化處理,再經(jīng)過RNN層,為防止過擬合,將RNN 層的輸出先經(jīng)過Dropout層,進而再輸入LSTM 層,同樣對再LSTM 層的輸出經(jīng)過Dropout 層,最終將Dropout 層的輸出作為Bi -LSTM 層的輸入,再經(jīng)過Bi-RNN 層,最后經(jīng)過全連接層Dense即可得到輸出,反復(fù)訓(xùn)練后,最終保存模型訓(xùn)練參數(shù),將測試集數(shù)據(jù)歸一化后進入模型,將模型所得結(jié)果逆歸一化即可得到最終預(yù)測結(jié)果,模型構(gòu)建過程如圖4所示。
為對模型預(yù)測結(jié)果進行評價,采用平均絕對誤差(Mean Absolute Error,MAE)、平均絕對百分比誤差(Mean Absolute Percentage Error,MAPE)、對稱平均絕對百分比誤差(Symmetric Mean Absolute Percentage Error,SMAPE)、均方誤差(Mean Squared Error,MSE)、均方根誤差(Mean Squared Log Error,RMSE)等5 個誤差評價指標,其中,MAE、MSE、RMSE 越小表示誤差越小,MAPE和SMAPE 為0%表示完美模型,100%表示劣質(zhì)模型。
式中:yi為豬肉價格真實值;為豬肉價格預(yù)測值;n為時間序列長度。
為比較不同訓(xùn)練次數(shù)下的模型精度,設(shè)訓(xùn)練次數(shù)初值為100,公差為100,最終項為9。受模型訓(xùn)練次數(shù)和運行環(huán)境的影響,同時因為存在Dropout層,所以每一次訓(xùn)練模型學(xué)習到的參數(shù)都存在變化,因此本文訓(xùn)練時每n項都訓(xùn)練兩遍,取最優(yōu)結(jié)果。
表1 模型訓(xùn)練結(jié)果(單元素長度為4)
圖5 Bi_RNN_LSTM最優(yōu)組預(yù)測值
由表1 可知,隨著模型訓(xùn)練次數(shù)的逐漸上升,模型精度大體提高,當Epoch為400/600 時,模型達到最優(yōu)結(jié)果,MSE 僅為0.48,RMSE為0.69,MAE為0.53,MAPE 為3.37%,SMAPE 為3.37%,epoch 為400 時預(yù)測值與真實值的折線圖如圖5 所示。
為比較不同模型最優(yōu)組的精度,本文在同一組數(shù)據(jù)集上訓(xùn)練了單層深度學(xué)習模型RNN、LSTM、GRU 以及雙向RNN、LSTM、GRU,其預(yù)測結(jié)果如圖6 所示。
圖6 其他模型預(yù)測值
考慮到不同輸入特征長度可能會對訓(xùn)練的精度造成影響,因此,設(shè)立不同輸入特征長度的模型作為對照,在原輸入單元素長度為4(原輸入特征含4 種元素,共計16 個輸入特征)的基礎(chǔ)上,設(shè)立單元素輸入特征長度為3 和5 作為對比。
表2 模型訓(xùn)練結(jié)果(單元素長度為3)
從表2 可看出元素輸入特征長度為3 時最優(yōu)組的MSE、RMSE、MAE、MAPE、SMAPE 依次為0.63、0.8、0.59、3.58、3.64;從表3 可看出最優(yōu)組的MSE、RMSE、MAE、MAPE、SMAPE依次為0.82、0.9、0.69、4.29%、4.32%。相對于單元素輸入特征長度為4 時的誤差指標來說其精度均略低于單元素輸入特征長度為4 的實驗組,單元素輸入長度為3、4、5 的模型預(yù)測值與真實值間折線圖如圖7 所示。
圖7 不同長度下的預(yù)測值
豬肉價格的提前預(yù)測關(guān)系到民生根本,本文使用深度學(xué)習組合模型,發(fā)揮各模型的優(yōu)點,最終構(gòu)建出精度高的豬肉價格預(yù)測模型,通過模型預(yù)測值得出以下結(jié)論。
(1)模型訓(xùn)練次數(shù)的提高能有效地提高模型的預(yù)測精度,但當訓(xùn)練次數(shù)過高時,模型的精度又會下降;而對于單元素輸入特征長度為4 的實驗來說,其400 次與600 次時的預(yù)測誤差基本相等,且在模型訓(xùn)練中精度最為精準。
(2)對于深度學(xué)習模型來說,單層單向模型的預(yù)測誤差大,而單層雙向模型的預(yù)測誤差則相對較好,但由于結(jié)構(gòu)簡單,導(dǎo)致其誤差仍偏大。
(3)在不同單元素輸入特征長度的情況下,總體上模型的預(yù)測值與真實值基本擬合,這說明本文模型在豬肉價格時間序列上的可適度高。
對比本文使用的模型,證明了使用多層單雙向的深度學(xué)習模型預(yù)測效果最好。