SARIMAX get_forecast()未能按预期工作

问题描述 投票:0回答:1

[我正在研究一个时间序列分析项目,以预测股票价格,使用get_forecast()时遇到一个问题,而get_predictions()很好,并且该模型成功拟合:

mod = sm.tsa.statespace.SARIMAX(ts_log, order=(1, 1, 1))
results = mod.fit()

print(results.fittedvalues)>>>输出:观察中所有日期的收盘价(最后一个日期为'2020-05-18')

然后,当我尝试使用get_forecast()(请参见下面的代码)时,输出将返回10个“样本中”预测,而不是有10个“样本中”预测。

pred2 = results.get_forecast(steps=10)

pred2_ci = pred2.conf_int()

print(pred2_ci)>>>输出:从日期“ 2018-11-26”开始的10个“样本中”预测,而不是从日期“ 2020-05-19”开始的10个“样本外”预测....

完整代码(绘图功能和线条除外):

Main = pd.read_csv("StockPrices.csv")
Main1 = Main.drop(['Open', 'High', 'Low', 'Volume', 'Turnover', 'Date'], axis=1)
Main2 = Main1.loc[Main1['Equity'] == 'ABN AMRO Bank']
Main2.set_index('Date2', inplace=True)
Main2.index = pd.DatetimeIndex(Main2.index).to_period('D')
Main2 = Main2.drop(['Equity'], axis=1)
Main["Date2"] = pd.to_datetime(Main["Date"])

ts = Main2['Last']
ts_log = np.log(ts)
moving_avg = pd.Series(ts_log).rolling(12).mean()

ts_log_moving_avg_diff = ts_log - moving_avg
ts_log_moving_avg_diff.dropna(inplace=True)
ts_log_diff = ts_log - ts_log.shift()
ts_log_diff.dropna(inplace=True)

decomposition = seasonal_decompose(ts_log, freq=70)
trend = decomposition.trend
seasonal = decomposition.seasonal
residual = decomposition.resid

ts_log_decompose = residual
ts_log_decompose_pd = pd.Series(ts_log_decompose)
ts_log_decompose_pd.dropna(inplace=True)

lag_acf = acf(ts_log_diff, nlags=20)
lag_pacf = pacf(ts_log_diff, nlags=20, method='ols')

model = ARIMA(ts_log, order=(1, 1, 0))
results_AR = model.fit(disp=-1)

model = ARIMA(ts_log, order=(0, 1, 1))
results_MA = model.fit(disp=-1)

model = ARIMA(ts_log, order=(1, 1, 1))
results_ARIMA = model.fit(disp=-1)

predictions_ARIMA_diff = pd.Series(results_ARIMA.fittedvalues, copy=True)
predictions_ARIMA_diff_cumsum = predictions_ARIMA_diff.cumsum()
predictions_ARIMA_log = pd.Series(ts_log.iloc[0], index=ts_log.index)
predictions_ARIMA_log = predictions_ARIMA_log.add(predictions_ARIMA_diff_cumsum, fill_value=0)
predictions_ARIMA = np.exp(predictions_ARIMA_log)

mod = sm.tsa.statespace.SARIMAX(ts_log, order=(1, 1, 1)) 
results = mod.fit()

pred2 = results.get_forecast(steps=10)
pred2_ci = pred2.conf_int() 

print(pred2_ci)>>>这是有问题的行:由于未知原因,输出会给出样本内预测而不是样本外预测…

[请点击下面的链接查看图像,此问题使我整整一周发疯,该示例在2020年5月结束,但在2018年首次进行了超出样本的预测!!:] >

enter image description here

enter image description here

enter image description here

[我正在研究一个时间序列分析项目,以预测股票价格,使用get_forecast()时遇到一个问题,而get_predictions()很好,并且模型适合...

time-series prediction statsmodels arima forecast
1个回答
0
投票
这看起来像是一个错误,该错误处理的数据的期间索引之间存在间隙。 SARIMAX可以处理缺失值,因此您可以从以下开始:
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.