ARIMA 和 SARIMAX 的参数
Parameters of ARIMA and SARIMAX
我正在做一个关于时间序列和预测的数据分析项目。我有一个数据框,其中包含我需要处理的大量数据 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
专栏是关于每一天的。我要的预报是接下来几天的。
有什么想法吗?
在实施的几个步骤中,您将 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)
请确保:
- 您没有用均衡完全替换列值,而是附加了新的数据帧条目;
- 由于名称相似的列,您将在最后绘制正确的列。
我不能确定,因为我没有你的代码的完整结果,但情节中的错误可能来自这些方面...
我正在做一个关于时间序列和预测的数据分析项目。我有一个数据框,其中包含我需要处理的大量数据 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
专栏是关于每一天的。我要的预报是接下来几天的。
有什么想法吗?
在实施的几个步骤中,您将 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)
请确保:
- 您没有用均衡完全替换列值,而是附加了新的数据帧条目;
- 由于名称相似的列,您将在最后绘制正确的列。
我不能确定,因为我没有你的代码的完整结果,但情节中的错误可能来自这些方面...