我正在用时间序列和预测做一个数据分析的项目。我有一个dataframe,其中包含了很多数据,我需要从其中处理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模型(dataframe是平稳的),然后我尝试将一条预测线应用到我的图形中。我使用了ARIMA和SARIMAX的一些参数,然后用熊猫打印图表。这条线是与时间序列相匹配的,但它并没有出现在线结束的地方。
代码:
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专栏几乎每一天都有。我想做的是未来几天的预报。
有什么想法吗?
发布于 2021-05-04 19:52:41
在实现的几个步骤中,您将列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)请确保:
。
我无法确保,因为我没有您的代码的全部结果,但是图中的错误可能来自于这些方面.
https://stackoverflow.com/questions/67283720
复制相似问题