繁体   English   中英

时间序列数据帧python上的ARIMA建模

[英]ARIMA modeling on time-series dataframe python

我正在尝试使用 ARIMA 模型进行预测。 我是新手。 我试图绘制我的数据集(每小时数据)的seasonal_decompose(),下面是图?

在此处输入图片说明

我想了解这些情节,简要描述会有所帮助。 我看到最初没有趋势,一段时间后有上升趋势。 我不确定我说的对不对? 我想了解如何正确阅读这些图表。 请给出一些好的描述。

当我尝试应用 Dickey-Fuller 测试来检查我的数据是否静止并且我是否需要进一步差分时,我得到了以下结果:

Test Statistic                   -4.117543
p-value                           0.000906
Lags Used                       30.000000
Number of Observations Used    4289.000000
Critical Value (1%)              -3.431876
Critical Value (5%)              -2.862214
Critical Value (10%)             -2.567129

我指的是 2 个链接来理解这一点: http : //www.seanabu.com/2016/03/22/time-series-seasonal-ARIMA-model-in-python/

这个链接说当 test-statistic 大于临界值时,这意味着数据是平稳的; 另一方面,另一个链接说反之亦然。 我对此感到困惑,我还提到了 otexts.org,它说我们应该根据 p 值进行检查。 请建议我如何解释 ADF 测试给出的结果?

此外,当我尝试在数据集上应用 ARIMA 模型时:

from statsmodels.tsa.arima_model import ARIMA
model = ARIMA(df.y, order=(0,1,0))
model_fit = model.fit()

我的数据框将日期时间列作为索引,而 y 列具有浮点值。 当我在这个数据框上应用模型时。 我收到此类错误:

索引错误:列表索引超出范围。

当我尝试使用以下方法打印模型摘要时,会出现此错误:

print(model_fit.summary())

请帮我解决一下这个。 这样我才能更好地了解ARIMA。

ARIMA(自回归综合移动平均)时间序列的交叉验证 K 折交叉验证不适用于时间序列。 相反,使用回测技术,如前行滚动窗口

自回归的 K 折交叉验证:虽然交叉验证(通常)对时间序列 (ARIMA) 模型无效,但 K 折适用于自回归,只要所考虑的模型存在不相关的错误,并且您已经使用Ljung Box Test ,用于时间序列用例中的 XAI(可解释人工智能)。

有一些 Python 统计库可以使用这些方法,这里有两个: Python Stats TestsPython StatsModels

要获得值的差异,您可以简单地使用Python 3.6+ PEP 487 Descriptors强制执行 int8,您可以在其中强制执行始终返回 int8 的类型列表,以加快计算速度(list : list -> list of ints)

list_a = [1,2,3]
list_b = [2,3]
print(set(list_a).difference(set(list_b)))
`answer is` set([1])

至于解释 ARIMA 模型,我只能参考你

https://en.wikipedia.org/wiki/Autoregressive_integrated_moving_average

关于您在调用model_fit.summary()时收到的问题,我认为这是因为order=(0,1,0) 模型没有pq参数来仅估计常数差异。

如果您运行以下代码,您可以看到常数差异只是差异值的平均值:

#differences in forecasted values
pd.Series(model_fit.forecast(steps=10)[0]).diff(1)

#results
#0              NaN
#1    107904.396563
#2    107904.396563
#3    107904.396563
#4    107904.396563

#mean of the original time series differenced once
model_fit.model.endog.mean()
#107904.3965625

当您将其更改为order=(0,1,1)order=(1,1,0) ,摘要将打印得很好,但这当然是一个不同的模型,并且对随机过程如何演变做出不同的假设时间。

当使用 ADf stat 为您的模型生成 ARIMA 模型摘要时,您应该注意 ADF 检验、临界值和 p 值以帮助您获得洞察力。

当您的临界值小于您的 ADF 统计数据时,您最有可能拥有非平稳系列,即您的系列显示季节性或某种趋势。 然后接下来要注意的是您的 p 值; 如果它小于值 0.05,那么您的系列无疑是平稳的,否则它是季节性的。

至于你的 IndexError ,我觉得这是因为你没有为你的模型提供滞后值,你的模型基于从残差图和 acf 图中获得的观察结果。 或者您可以尝试使用 (1,0,0) 或 (1,1,0) 的简单模型。 希望有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM