产生直线预测的 ARIMA 模型
ARIMA model producing a straight line prediction
我在 2 个数据集上使用 ARIMA
模型做了一些实验
- Airline passengers data
- 美元兑印度卢比数据
我在 Airline passengers data
上得到了正常的之字形预测
ARIMA 顺序=(2,1,2)
但是在 USD vs Indian rupee data
,我得到的预测是一条直线
ARIMA 顺序=(2,1,2)
SARIMAX 顺序=(2,1,2), seasonal_order=(0,0,1,30)
我尝试了不同的参数,但对于 USD vs Indian rupee data
我总是得到直线预测。
还有一个疑问,我读到 ARIMA
模型不支持具有季节性成分的时间序列(因为我们有 SARIMA)。那么为什么航空公司乘客数据 ARIMA
模型会产生周期性预测?
最近遇到了类似的问题,我建议如下:
可视化数据的季节性分解,以确保数据中存在季节性。请确保数据帧中包含频率分量。您可以使用以下命令在 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
值方面非常有效。这是它的 link: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
。如果回答没有帮助,请提供汇率的数据来源。我将尝试用示例代码来解释流程。
我在 2 个数据集上使用 ARIMA
模型做了一些实验
- Airline passengers data
- 美元兑印度卢比数据
我在 Airline passengers data
ARIMA 顺序=(2,1,2)
但是在 USD vs Indian rupee data
,我得到的预测是一条直线
ARIMA 顺序=(2,1,2)
SARIMAX 顺序=(2,1,2), seasonal_order=(0,0,1,30)
我尝试了不同的参数,但对于 USD vs Indian rupee data
我总是得到直线预测。
还有一个疑问,我读到 ARIMA
模型不支持具有季节性成分的时间序列(因为我们有 SARIMA)。那么为什么航空公司乘客数据 ARIMA
模型会产生周期性预测?
最近遇到了类似的问题,我建议如下:
可视化数据的季节性分解,以确保数据中存在季节性。请确保数据帧中包含频率分量。您可以使用以下命令在 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
值方面非常有效。这是它的 link: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
。如果回答没有帮助,请提供汇率的数据来源。我将尝试用示例代码来解释流程。