林在超
(北方工業大學信息學院,北京 100144)
預測技術被廣泛應用于股票預測、樓盤預測中,但對農產品的預測卻比較少。針對農作物季節性特點,通過分析不同的農作物價格,采用比較常用的預測模型——ARIMA并加以改進,用于農產品價格預測,以便更好地掌握農產品價格走勢情況,從而為農產品供應和分配提供決策支持。
為了解決現實生活中的預測問題,自20世紀70年代Box和Jenkins[1]提出了一種時間序列的預測方法之后,ARIMA發展并逐漸被廣泛應用;同時為了獲得更好的預測效果,廣大的研究人員開始在經典的ARIMA上加以改進。2018年,劉艷菲等[2]提出了應用一階滯后濾波的序列重構方法結合ARIMA模型,有效的抑制了周期性和隨機性的干擾,通過比較改進前后的模型預測效果表明,改進后的ARIMA有更好的模型適應性和預測精度;2020年,閔盈盈[3]通過等距節點公式在一段時間上進行數據近似計算從而對ARIMA模型改進,相比改進前的ARIMA模型和指數平滑預測模型,預測精度確有所提高;2021年,張文華[4]在ARIMA建模的數據預處理階段通過對原數據進行對數變換以提高殘差數據的方差齊性,實驗表明該模型在短期預測時有較高的精度。本文在深入理解ARIMA原理的基礎之上,通過一種區別于傳統預測訓練流程的方式進行ARIMA建模,并應用到農作物價格數據的預測,從而為農業領域的預測提供技術支撐。
ARIMA全稱差分自回歸移動平均模型(auto regressive integrated moving average),是由AR和MA兩個模型組成的。自回歸模型AR描述了當前值與歷史值之間的關系,用變量自身的歷史事件數據對自身進行預測,輸入的數據必須滿足平穩性和自相關性,p階自回歸過程的公式如(1)所示,其中yt是當前值,μ是常數項(序列的均值),p是階數(表示當前值和前邊多少個歷史值有關),γi是自相關系數,εt是誤差;移動平均模型MA著眼于自回歸模型中誤差項的累加,即AR模型εt的累加和,以消除預測中的隨機波動,q階移動平均過程的公式如(2)所示,其中yt是當前值,q表示階數,θi是系數,εt是誤差項:將AR和MA組合就得到了ARMA模型,結合了兩個模型的優點,故比較常用。

ARIMA建模流程如圖1所示。

圖1 ARIMA建模流程
ARIMA在短期時間序列預測時有較好的表現,但如果目標時間離歷史數據越遠預測效果越差,因為隨著時間的推移,時間序列的自相關性顯著降低。滾動ARIMA就能很好地避免這一問題,關鍵部分如圖2所示。

圖2 滾動ARIMA的“滾動”原理
圖中d1,d2,到dk為訓練集,dk+1,dk+2到dn為測試集。要對測試集進行預測,首先將整個訓練集d1,d2,…,dk存入一個歷史列表中,對其進行第1次訓練并預測測試集第1個時間點dk+1的值;接下來就是”滾動”的核心部分:對整個測試集進行遍歷,每次遍歷都將dx追加至歷史值列表,然后對新的歷史列表訓練并向后預測1步;重復上一步驟直至測試集遍歷完成,此時dx=dn。
滾動ARIMA解決了上文提到的經典ARIMA在預測序列越往后預測效果越差的問題,因為它使用t時刻前所有的值來預測t的值。但滾動ARIMA也有一定的局限性,因為每次迭代都要重新使用動態追加的歷史值來預測下一步,所以耗時較長,假設測試集的長度為n,那么傳統建模方式ARIMA的復雜度為O(1),而滾動ARIMA的時間復雜度為O(n)。
經典ARIMA和滾動ARIMA在模型構建流程上一致,主要區別在于模型的訓練流程。圖3展示了經典ARIMA的訓練流程,將時間序列切分為訓練集和測試集后,對訓練集進行訓練、按照1的建模流程得到ARIMA模型后,直接對整個測試集預測1次,因此1次預測的步長等于測試集的長度。如圖4所示,滾動ARIMA的區別之處在于,在訓練開始前,先將所有的訓練集保存在history中,再對history訓練并向后預測1個步長;接下來就開始在測試集上滾動:遍歷測試集,每次向history追加一步后重新對hostory訓練,再向后預測1個步長并將單個預測值追加到預測序列中,依次進行迭代直至遍歷完整個測試集。

圖3 經典ARIMA訓練預測流程

圖4 滾動ARIMA訓練預測流程
本文所使用的數據為Lahore城市Apple(Ammre)農作物數據,日期范圍為2010年1月至2021年8月,采樣頻率為1天,數據按照9∶1的比例被劃分為訓練集和測試集。該作物的價格數據成季節性,只能獲取到每年特定季節(上市)的數據,所以會存在某段日期缺失數據的情況。在此對原始時間序列進行刪除缺失值的預處理,原始數據集和缺失處理后的數據集如圖5、圖6所示。

圖5 未處理的原始數據

圖6 缺失值處理后的數據集
本實驗的環境為Python3.6并基于statsmodel模塊,經典ARIMA和滾動ARIMA建模后進行預測得到的結果如圖7、圖8,其中藍色曲線為原始數據集,紅色曲線為訓練集的測試序列,綠色曲線為測試集預測序列。從預測結果曲線圖可以看出,兩者在訓練集上預測的誤差(RMSE)一致;但在測試集上,經典ARIMA在預測初期就出現了較大的偏差甚至形成了一條近似平滑的直線,而滾動ARIMA的預測曲線基本和測試集重合,即有著較高的預測精度。

圖7 經典ARIMA的預測效果

圖8 滾動ARIMA的預測效果
另外,為檢測滾動ARIMA是否在一般情況下比經典ARIMA有更高的精度,本文還選擇了其他9種作物的數據進行預測,表1展示了多種農作物在兩種預測方式下得到的預測誤差對比。可以看到,滾動ARIMA預測結果序列的RMSE遠低于經典ARIMA,即預測精準度更高。

表1 傳統ARIMA和滾動ARIMA在多種作物預測的誤差對比
該文在研究傳統ARIMA時間序列模型的基礎之上,提出了一種在時間序列上滾動的訓練預測流程。結合Python的ARIMA模塊,分別對10余種農作物的時間序列價格數據進行建模預測,最終的實驗結果表明,相比于傳統訓練流程的ARIMA預測,滾動ARIMA獲得了更高的預測精度。但該文的研究僅限于一元時間序列分析,未來會考慮在多元時間序列中實現并應用滾動ARIMA模型。