产生直线预测的 ARIMA 模型

Posted

技术标签:

【中文标题】产生直线预测的 ARIMA 模型【英文标题】:ARIMA model producing a straight line prediction 【发布时间】:2019-11-26 12:52:50 【问题描述】:

我在 2 个数据集上使用 ARIMA 模型进行了一些实验

    Airline passengers data 美元兑印度卢比数据

我在Airline passengers data 上得到一个正常的锯齿形预测

ARIMA order=(2,1,2)

Model Results

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

ARIMA order=(2,1,2)

Model Results

SARIMAX order=(2,1,2),seasonal_order=(0,0,1,30)

Model Results

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

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

【问题讨论】:

ARIMA produced slope straight line @Zeeshan 好的,如果 ARIMA 或季节性 ARIMA 找不到季节性模式,那么它会预测平均值(即直线)。我还尝试过“指数平滑”、“holts 冬季指数平滑”并获得相同的直线。因此,您建议的任何其他模型都能提供更好的预测。 试试脸书先知。 【参考方案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

    如果您确定模型的季节性分量是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。如果回答没有帮助,请提供汇率数据来源。我将尝试用示例代码来解释流程。

【讨论】:

以上是关于产生直线预测的 ARIMA 模型的主要内容,如果未能解决你的问题,请参考以下文章

R语言使用ARIMA模型预测股票收益

机器学习笔记之五用ARIMA模型做需求预测用ARIMA模型做需求预测

时间序列预测模型ARIMA浅析

滚动率预测模型是不是与 ARIMA 相同

R语言时间序列和ARIMA模型预测拖拉机销售的制造案例研究

使用 ARIMA 进行预测