我正在学习时间序列分析,我在2个数据集上使用ARIMA
模型进行了一些实验
我在Airline passengers data
上获得了正常的锯齿形预测
ARIMA订单=(2,1,2)
但是在USD vs Indian rupee data
上,我得到的预测是直线
ARIMA订单=(2,1,2)
SARIMAX订单=(2,1,2),季节性订单=(0,0,1,30)
我尝试了不同的参数,但是对于USD vs Indian rupee data
,我总是得到直线预测。
还有一个小疑问,我读过ARIMA
模型不支持具有季节性成分的时间序列(为此我们拥有SARIMA)。那么,为什么对于航空公司乘客数据ARIMA
模型会产生具有周期的预测。
我是时间序列分析的新手,任何评论都会有很大帮助
答案 0 :(得分: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
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
。如果答案没有帮助,请提供汇率数据源。我将尝试用示例代码来解释流程。