时间:2024-05-04
林在超
(北方工业大学信息学院,北京 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模型。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!