【问题标题】:Parameters of ARIMA and SARIMAXARIMA 和 SARIMAX 的参数
【发布时间】:2021-04-27 13:10:07
【问题描述】:

我正在做一个关于时间序列和预测的数据分析项目。我有一个数据框,其中包含我需要处理的大量数据Covid cases。数据框如下所示:

            Covid cases  Confirmed Infections Difference
date                                                    
2020-02-24           19                              NaN
2020-02-25            0                            -19.0
2020-02-26            0                              0.0
2020-02-27            1                              1.0
2020-02-28            2                              1.0
...                 ...                              ...
2021-02-25         1502                           -136.0
2021-02-26         1468                            -34.0
2021-02-27         1474                              6.0
2021-02-28          715                           -759.0
2021-03-01          298                           -417.0

为了进行预测,我使用 ARIMA 模型(数据框是固定的),然后我尝试将预测线应用于我的图表。我正在为 ARIMA 和 SARIMAX 使用一些参数,然后用 pandas 打印图表。这条线适合时间序列,但它没有出现在这条线的结束处。

代码:

def timeseries(dataframe, city_name):
    cols = ['ID', 'name']  # Creating columns to be dropped
    dataframe.drop(cols, axis=1, inplace=True)  # Dropping columns that I don't need
    dataframe.columns = ["date", "Covid cases"]
    dataframe.describe()
    dataframe.set_index('date', inplace=True)
    dataframe.plot(figsize=(15, 6))  # Setting figure size
    dataframe['Confirmed Infections Difference'] = dataframe['Covid cases'] - dataframe['Covid cases'].shift(1)
    adfuller_test(dataframe['Confirmed Infections Difference'].dropna())
    model = ARIMA(dataframe['Covid cases'], order=(1, 1, 1))
    model_fit = model.fit(disp=0)
    print(model_fit.summary())
    dataframe['forecast'] = model_fit.predict(start=90, end=103, dynamic=True)
    model = sm.tsa.statespace.SARIMAX(dataframe['Covid cases'], order=(1, 1, 1), seasonal_order=(1, 1, 1, 12))
    results = model.fit()
    dataframe['forecast'] = results.predict(start=90, end=103, dynamic=True)
    future_dates = [dataframe.index[-1] + DateOffset(months=x) for x in range(0, 24)]
    future_datest_df = pd.DataFrame(index=future_dates[1:], columns=dataframe.columns)

    future_datest_df.tail()

    future_df = pd.concat([dataframe, future_datest_df])

    future_df['forecast'] = results.predict(start=104, end=120, dynamic=True)
    future_df[['Covid cases', 'forecast']].plot(figsize=(12, 8))

这是结果图:

因此,您可以理解预测似乎没有正确应用。我想这是我提供给 ARIMA 和 SARIMAX 的一些参数的问题。

预期图示例:

提醒:date 专栏是关于每一天的。我想要的预测是未来几天。

有什么想法吗?

【问题讨论】:

    标签: python pandas dataframe forecast


    【解决方案1】:

    在实施的几个步骤中,您将列 dataframe['forecast'] 与新计算的结果相等(除了为不同模型预测值两次并将数据帧与类似名称的列连接起来):

    print(model_fit.summary())
    dataframe['forecast'] = model_fit.predict(start=90, end=103, dynamic=True)
    
    # ...
    
    dataframe['forecast'] = results.predict(start=90, end=103, dynamic=True)
    
    # ...
    
    future_df = pd.concat([dataframe, future_datest_df])
    
    future_df['forecast'] = results.predict(start=104, end=120, dynamic=True)
    

    请确保:

    • 您没有用均衡器完全替换列值,而不是附加新的数据帧条目;
    • 由于列名称相似,您得到了要在最后绘制的正确列。

    我无法确定,因为我没有您的代码的完整结果,但情节中的错误可能来自其中一些方面...

    【讨论】:

      猜你喜欢
      • 2020-04-18
      • 2018-06-06
      • 2021-10-22
      • 2023-03-27
      • 2020-03-25
      • 2020-05-18
      • 2017-07-24
      • 1970-01-01
      • 2017-07-31
      相关资源
      最近更新 更多