首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARIMA和SARIMAX的参数

ARIMA和SARIMAX的参数
EN

Stack Overflow用户
提问于 2021-04-27 13:10:07
回答 1查看 410关注 0票数 0

我正在用时间序列和预测做一个数据分析的项目。我有一个dataframe,其中包含了很多数据,我需要从其中处理Covid cases。数据文件看起来是这样的:

代码语言:javascript
复制
            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模型(dataframe是平稳的),然后我尝试将一条预测线应用到我的图形中。我使用了ARIMA和SARIMAX的一些参数,然后用熊猫打印图表。这条线是与时间序列相匹配的,但它并没有出现在线结束的地方。

代码:

代码语言:javascript
复制
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专栏几乎每一天都有。我想做的是未来几天的预报。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-04 19:52:41

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

代码语言:javascript
复制
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)

请确保:

  • --您没有完全用等式替换列值,而不是附加新的dataframe条目;
  • --您正在获得正确的列,因为它们的名称类似。

我无法确保,因为我没有您的代码的全部结果,但是图中的错误可能来自于这些方面.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67283720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档