ARIMA模型产生直线预测

时间:2019-07-17 16:01:40

标签: python time-series statsmodels arima

我正在学习时间序列分析,我在2个数据集上使用ARIMA模型进行了一些实验

  1. Airline passengers data
  2. 美元vs印度卢比数据

我在Airline passengers data上获得了正常的锯齿形预测

ARIMA订单=(2,1,2)

Model Results

enter image description here

但是在USD vs Indian rupee data上,我得到的预测是直线

ARIMA订单=(2,1,2)

Model Results

enter image description here

SARIMAX订单=(2,1,2),季节性订单=(0,0,1,30)

Model Results

enter image description here

我尝试了不同的参数,但是对于USD vs Indian rupee data,我总是得到直线预测。

还有一个小疑问,我读过ARIMA模型不支持具有季节性成分的时间序列(为此我们拥有SARIMA)。那么,为什么对于航空公司乘客数据ARIMA模型会产生具有周期的预测。

我是时间序列分析的新手,任何评论都会有很大帮助

1 个答案:

答案 0 :(得分:1)

最近经历过类似的问题,我建议以下内容:

  1. 可视化数据的季节性分解,以确保数据中存在季节性。请确保数据帧中包含频率分量。您可以使用以下命令在pandas数据框中强制执行频率:

    dh = df.asfreq('W') #for weekly resampled data and fillnas with appropriate method

以下是执行季节性分解的示例代码:

import statsmodels.api as sm

decomposition = sm.tsa.seasonal_decompose(dh['value'], model='additive', 
                            extrapolate_trend='freq') #additive or multiplicative is data specific
fig = decomposition.plot()
plt.show()

该图将显示您的数据中是否存在季节性。请随时阅读有关季节性分解的惊人文档。 Decomposition

  1. 如果您确定模型的季节性成分为 30 ,那么使用pmdarima套餐就可以得到不错的结果。该软件包对于为模型找到最佳pdq值非常有效。这是它的链接:pmdarima example code pmdarima

如果不确定季节性,请就数据的季节性影响咨询领域专家,或尝试对模型中的不同季节性成分进行试验并估算误差。

在训练模型之前,请确保通过Dickey-Fuller测试检查数据的平稳性。 pmdarima支持通过以下方式查找d组件:

from pmdarima.arima import ndiffs
kpss_diff = ndiffs(dh['value'].values, alpha=0.05, test='kpss', max_d=12)
adf_diff = ndiffs(dh['value'].values, alpha=0.05, test='adf', max_d=12)
n_diffs = max(adf_diff , kpss_diff )

在我在此处提供的文档的帮助下,您也可以找到d。如果答案没有帮助,请提供汇率数据源。我将尝试用示例代码来解释流程。