【发布时间】: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