ARIMA模型预测后出现一条直线的原因
最近又有朋友(感谢这位朋友😁)来询问为何他的时序数据用ARIMA模型后出现的是一条直线,像下面这样(图源网络,仅作参考解释说明的示例):
是不是很奇怪,为何这里会产生一条直线?掌柜查阅了一番后发现原来是这么回事,下面进行讲解。
-
首先,使用ARIMA模型进行时序预测为何会出现是一条直线? 解答:简单来说是因为你的时序数据中存在“季节/周期性”(注:这里的季节性/周期性指的是 以同样的频率 持续重复出现)的特征。所以模型无法识别你的数据到底是哪种季节/周期特征(比如以“周”为单位的weekly季节/周期,或以“月”为单位的monthly季节/周期等),最后就只能输出一条直线来代替。 其次,如何确定时序数据中有“季节/周期性”特征存在的??? 解答: 第一种方法:可以用statsmodels库里面的seasonal_decompose 函数来分解检测时序数据中的季节/周期性。具体方法如下:
import statsmodels.api as sm #data指你自己的时序数据,model=additive代表是加法模式, #extrapolate_trend=freq表示trend 、resid频率会从最近点开始,并且会对最近点的缺失值进行填充 #更多参数设置请参考官方文档:https://www.statsmodels.org/stable/generated/statsmodels.tsa.seasonal.seasonal_decompose.html decomposition = sm.tsa.seasonal_decompose(data, model=additive, extrapolate_trend=freq) plt.rc(figure,figsize=(12,8)) fig = decomposition.plot() plt.show()
最后得到的可视化分解图如下:
可以明显的从第三个图Seasonal看出来,这个时序数据集确实是存在季节/周期性特征的。
同样用这个方法我们可以对比看,分解经典那篇的时序数据,最后得到的图片是这样的: 第三个Seasonal是一条直线说明那段时序不具有 季节/周期性。
-
第二种方法:就是直接plot 来观察 时序图(对于季节/周期性很明显的情况,比如👇这图)。 (图源:网络) 第三种方法:FFT (全称叫做 Fast Fourier Transform)。是一种计算序列的离散傅里叶变换的算法,它将原始信号(这里是时间)转换为一定的频率来表示(说人话就是👉基于时间找到周期性变化的幅度、偏移量等因素)。不过该方法对多季节的时序数据效果不太好,这里不做演示。 最后,已知有季节/周期性数据存在,所以就不能再用那个简单的ARIMA模型来处理。
参考资料: