李潔瓊, 劉 振
(1.西安職業技術學院基礎課教學部, 西安 710077;2.西安文理學院化學工程學院, 西安 710065)
中國是農業大國, 確保農產品價格穩定一直是政府關注的重點, 也是宏觀調控的難點。由于農產品銷售周期不同, 價格波動較大[1]。物價波動不僅影響人們的生活質量和農民收入, 還會引發社會性問題。隨著大數據、人工智能等技術快速發展, 農產品價格預測成為可能[2]。如何準確、實時地預測農產品的短期價格, 是數學建模長期以來不斷探索的研究領域。因此, 對農產品價格預測模型進行研究具有重要的現實意義。
目前, 許多國內外學者對農產品價格預測模型進行了大量研究, 并取得了一些優異的成果。張順利等[3]將長短期記憶神經網絡用于蘋果價格預測模型, 比傳統預測模型能更好地預測均值絕對誤差、均方誤差和均方根誤差。范俊明等[4]提出了一種基于LSTM 深度學習的大豆期貨價格預測模型, 比傳統模型具有更高的預測精度, 為大豆期貨價格預測提供了新思路。王會娟等[5]提出了一種基于TEI@I 方法的玉米期貨價格預測模型, 相比于傳統預測模型, 該方法可以有效地進行玉米期貨價格預測, 與實際值較為接近。劉斌等[6]將分布式神經網絡用于蘋果價格預測。結果表明, 該方法可以有效反映蘋果價格波動情況, 為蘋果市場穩定發展提供一定的參考。但上述研究在實際使用中存在準確率低和效率低等問題, 適應性有待進一步提高。
本研究提出了一種結合卷積神經網絡(Convolutional neural network, CNN)和門控循環單元(Gated recurrent unit, GRU)的農產品價格預測模型。通過CNN 獲取局部特征, 通過GRU 獲取數據的時序依賴, 然后將CNN 和GRU 獲得的特征連接起來, 通過解碼器獲得預測輸出。通過試驗與傳統模型進行對比分析, 驗證了模型的優越性。
全連接神經網絡由于參數較多, 導致計算速度慢和過擬合等問題[7]。因此, 需要一種新的網絡結構, 而卷積神經網絡可以做到。卷積神經網絡作為深度學習的典型算法之一, 它由多個卷積層、頂部的全連接層以及相關的權重和池化層組成[8]。這種結構允許卷積神經網絡使用圖像處理中常用的二維輸入數據結構, 而時間序列展開類似于圖像(圖1)。卷積層的作用是提取輸入數據的特征。池化層是進行特征選擇和信息過濾。全連接層是卷積神經網絡的全連接層, 相當于常規前饋神經網絡的隱藏層。

圖1 卷積神經網絡結構
GRU 是在2014 年提出的遞歸神經網絡的門控機制[9]。GRU 與長短期記憶網絡相比去掉了一個遺忘門。與循環神經網絡相比, GRU 做了以下改進。
1)重置門和更新門如公式(1)和公式(2)所示[10]:
式中,rt和zt分別為重置門和更新門;W為權重;b為偏置參數;ht為t時刻隱藏狀態;it為t時刻的輸入;σ為sigmoid 函數。
2)候選隱藏狀態如公式(3)所示[11]:
GRU 通過重置門和更新門來確定剩余的隱藏信息, 作為下一時刻的預測輸入。
由于農產品價格預測的高度隨機性和不確定性, 存在預測誤差在所難免。這些誤差可以幫助人們更好地了解預測模型并不斷優化預測方法。常用的指標包括均方根誤差(RMSE)、平均相對誤差(MAE)、平均絕對百分比誤差(MAPE)和R2決定系數。
1)均方根誤差如公式(5)所示。如果預測值等于實際值, 則均方根誤差為0。均方根誤差越大, 值越大[13]。
2)平均相對誤差如公式(6)所示, 平均相對誤差能較好地反映預測值誤差的實際情況。當預測值與真實值完全相等時平均相對誤差等于0, 平均相對誤差越大, 值越大。
3)平均絕對百分比誤差如等公式(7)所示。值越接近0, 模型的預測值越接近實際值, 平均絕對百分比誤差越接近1, 模型與實際值的偏差越大[14]。
4)R2決定系數如公式(8)所示。值越接近1, 模型的預測值越接近實際值, 反映預評估的符合程度[15]。
式中,On和分別為n時刻的實際值和預測值;M為預測樣本總數;O~為實際值的平均值。
農產品價格波動與時間相關, 因此, 需要一個獲取時間序列潛在規律的神經網絡。GRU 可以有效捕捉數據的時間依賴性, CNN 可以從全局的角度找到數據規律。為此, 本研究提出了一種結合CNN 和GRU 的混合模型, 利用CNN 獲取局部特征, 使用GRU 獲取數據的時序依賴, 然后將二者獲取的特征進行拼接, 通過解碼器得到預測值輸出。模型的整體預測結構如圖2 所示。

圖2 模型的整體預測結構
數據集中的每組數據都有時序性, 這與GRU 模型的工作方式是一致的, 因此模型使用GRU 來捕獲每個時間序列的依賴關系。以滑動窗口中得到的數據為輸入, 定義第n個窗口中的數據為xn, 對GRU 第n個窗口的隱藏狀態進行更新, 如公式(9)所示[16]。
式中,fe為GRU 更新函數。
將xn輸入到模型中時, 通過重置門和更新門進行處理, 如公式(10)所示:
式中, 輸入xn經過線性變換, 即乘以權矩陣Wir, 上一刻的ht-1與對應權重Whr相乘;Sigmoid 函數將這兩部分結合起來, 壓縮到[0, 1];獲取hn決定信息,rn遺忘信息。
更新門與重置門類似, 只是將權重改為Wiz和Whz, 兩部分通過sigmoid 函數合并, 壓縮到[0, 1], 獲取hn和rn用于更新。
然后通過公式(12)計算當前記憶內容。
這個過程使用之前獲得的更新門輸出, 將輸出乘以前一時刻的記憶內容, 得到前一時刻的信息并發送到當前時刻。此外, 更新門的輸出處理后乘以當前兩部分的疊加就是最終的輸出內容。
解碼過程將卷積網絡提取的特征cn與編碼得到的隱藏層狀態hn拼接, 作為解碼器的初始狀態。
式中,fd為編碼器的GRU 更新函數。
解碼器的初始狀態是將GRU 狀態和CNN 提取的特征拼接起來, 使用前一時刻的實際目標變量數據作為初始輸入y1n, 將輸出循環輸入GRU。
通過GRU 獲取數據的時序依賴, 但無法獲取不同維度和時間的特征關系, 因此需要加入卷積神經網絡。
卷積神經網絡通過卷積運算得到一系列特征, 使用卷積核對時間窗口中的矩陣數據進行卷積, 卷積是在h×h的窗口中進行卷積, 如公式(15)所示:
卷積核處理是通過設置好的卷積核對數據進行點乘校驗, 得到相應的結果。但是, 數據在一次卷積操作中往往無法處理完全, 需要滑動到下一個位置進行處理, 按照設置的步長滑動。
經過卷積運算, 提取出特征向量cn。卷積過程中使用ReLU 激活函數提高網絡的稀疏性, 使提取的特征代表性越強, 泛化能力越強, 求導速度越快。ReLU 函數可以作為卷積層的激活函數。函數的定義如公式(16)所示[17]:
在該模型中, 特征向量經過池化層得到局部最優特征, 如公式(17)所示:
步驟1:對價格歷史數據進行預處理。
步驟2:通過CNN 獲取局部特征, 通過GRU 獲取數據的時序依賴, 作為解碼器的輸入。
步驟3:優化集成學習模型。采用COCOB 優化器, 將正則化因子引入全連接層, 添加Dropout 層實現模型優化, 防止過擬合。
步驟4:以處理后的數據為輸入, 訓練模型, 不斷調整參數直到最優。
通過試驗與傳統模型進行對比分析, 驗證模型的優越性和合理性。農業數據來自中國蔬菜網, 數據在剪裁后輸入模型中。試驗環境為聯想PC, 操作系統為Ubuntu 18.04.1 64 位, Intel i5 82050u CPU, 1.6 GHz×8 主頻, 8 GB 內存[18]。
模型參數:輸入窗口為30 px×9 px, 時間長度為30 min, 卷積核為3 px×3 px, GRU 隱藏層維度為30維, 編碼器GRU 數為2 個, 解碼 器GRU 數為1 個。數據集按7:3 的比例劃分為訓練集和測試集, 通過訓練集對模型進行訓練。
為驗證模型的優越性和有效性, 將學習率設為0.001, 迭代次數設為10 000 次, 以白菜價格近10 年的數據為輸入數據, 建立模型, 通過訓練集對模型進行訓練。在Tensorboard 中獲得訓練集損失函數圖。從圖3 可知, 隨著迭代次數的不斷增加, 訓練集損失值逐漸降低。訓練集損失值在迭代達3 000 次左右時開始趨于平穩, 達到預期效果, 再增加迭代, 訓練集損失值也非常平穩。

圖3 訓練集損失變化
為了驗證模型的有效性, 將本研究構建的模型與LSTM 模型、GRU 模型進行了比較, 并預測未來某一天數據。從表1 可知, 本研究構建的預測模型表現較好,RMSE為10.04%,MAE為6.31%,MAPE為3.001 2%,R2為0.960 8。對比模型中, GRU 模型性能較好, 各項指標均優于LSTM 模型。

表1 評價指標結果
為了測試本研究構建模型的優越性, 使用訓練好的模型對測試集進行了預測, 共1 095 d。不同模型測試數據集的預測結果如圖4 所示。與其他模型相比, 本研究構建的模型預測值與實際值基本一致。LSTM 模型和GRU 模型的預測與實際值有一定的偏差, 其效果比本研究構建的模型差很多, 這表明本研究構建的模型表現良好。
不同模型預測前7 天數據RMSE對比如表2 所示。隨著預測天數的增加, 本研究構建的模型、LSTM 模型和GRU 模型的預測性能變差。但與LSTM 模型、GRU 模型相比, 本研究構建模型的RMSE波動較小, 性能下降的速度最慢, 表明本研究構建的模型在測試集上的效果最優。

表2 RMSE 對比
在預測多天數據時, 隨著預測天數增多, 訓練所需的時間不斷延長, 第8 天的預測時間相比于第7 天增加明顯, 但預測性能不斷下降。因此, 預期天數的最佳賦值為7 d。這是因為本研究構建的模型可以使用歷史數據對農產品價格進行預測, 但隨著預測時間的增加, 數據包含的有效信息不斷減少, 導致誤差不斷增加, 直到信息被完成挖掘。總的來說, 通過農產品歷史數據, 本研究構建的模型可以有效地進行短期預測, 誤差也滿足要求。
本研究提出了一種結合CNN 和GRU 的農產品價格預測模型。通過CNN 獲取局部特征, 通過GRU獲得數據的時序依賴, 然后將CNN 和GRU 獲得的特征連接起來, 由解碼器獲得預測輸出。研究結果表明, 本研究構建的模型預測性能優于LSTM 模型和GRU 模型, 可以有效地進行短期預測。如果預測時間超過7 d, 預測時間會明顯增加, 性能也會逐漸下降。從目前的試驗設備和數據規模來看, 該研究尚處于起步階段, 模型僅具有較高的短期預測性能。基于此, 逐步增加更多的價格影響因素, 不斷完善和優化模型將是下一步工作的重點。