【问题标题】:ARIMA modeling on time-series dataframe python时间序列数据框python上的ARIMA建模
【发布时间】:2017-07-10 02:54:58
【问题描述】:

我正在尝试使用 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/

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

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

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

我的数据框有 datetime 列作为索引,y 列有浮点值。当我在这个数据框上应用模型时。我遇到了这种错误:

IndexError:列表索引超出范围。

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

print(model_fit.summary())

请帮我解决这个问题。以便我更好地了解 ARIMA。

【问题讨论】:

    标签: python python-3.x time-series arima


    【解决方案1】:

    ARIMA(自回归综合移动平均)时间序列的交叉验证: K 折交叉验证不适用于时间序列。相反,请使用 walk-forwardrolling windows 等回测技术。

    自回归的 K 折交叉验证: 虽然交叉验证(通常)对时间序列 (ARIMA) 模型无效,但只要考虑的模型具有不相关的错误,并且您已经使用 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])
    

    【讨论】:

      【解决方案2】:

      至于解释 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) 时,摘要将正常打印,但这当然是不同的模型,并且对随机过程如何随时间演变做出不同的假设。

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2017-12-31
          • 2017-05-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-19
          • 2017-12-24
          • 2020-12-06
          • 2020-09-06
          • 2013-05-01
          相关资源
          最近更新 更多