Python 为什么将SARIMAX预测转移到训练集中?

Python 为什么将SARIMAX预测转移到训练集中?,python,statsmodels,arima,Python,Statsmodels,Arima,我正在尝试使用SARIMAX预测每日用电量。然而,在我看来,预测的序列发生了变化。有人知道这是怎么发生的吗 total_normalized Consumption Temperature Radiation weekly first difference DATUM 2018-01-08 7532.644 1.0

我正在尝试使用SARIMAX预测每日用电量。然而,在我看来,预测的序列发生了变化。有人知道这是怎么发生的吗

total_normalized
            Consumption  Temperature   Radiation  weekly first difference
DATUM                                                                    
2018-01-08     7532.644     1.073611  303.800000                 1666.145
2018-01-09     7643.685     2.169633  189.000000                  848.669
2018-01-10     7471.557     6.381944  113.800000                  470.387
2018-01-11     7419.188     5.160139  190.866667                  522.394
2018-01-12     7441.262     4.401250   95.800000                  637.488
我已将我的数据集拆分为:

train=total_normalized.iloc[:len(total_normalized)-30]

test=total_normalized.iloc[len(total_normalized)-30:]
从这里创建了内生变量和外生变量的序列/数组

endog_train_diff=train['weekly first difference']

endog_test_diff=test['weekly first difference']
exog_train=train[['Temperature','Radiation']].to_numpy()

exog_test=test[['Temperature','Radiation']].to_numpy()

然而,虽然列车组的最后一个指数为2020-08-01,测试组的第一个指数为2020-08-02,但第一个预测消耗量为2020-07-31。我在调试时注意到了这一点

model=sm.tsa.statespace.SARIMAX(endog_train_diff,exog=exog_train,order=(1,1,5),seasonal_order=(0,1,1,7),
trend='ct',enforce_stationarity=False,enforce_invertibility=False)

results=model.fit(disp=False)

forecast = results.forecast(steps=30,exog=exog_test)

这样,测试集的外部值就无法与正确的日期匹配。 我假设,这也会对预测性能产生影响


这是一个已知的问题,还是我的代码中遗漏了什么?

您可能需要澄清您的问题-您说预测从7月31日开始,但在您的图表中,第一个预测是在8月2日。是的,您是对的。我在策划时犯了一个错误。我已经更新了该图。我无法复制此结果,因此您可能需要发布一个完整的示例,其中包括显示问题的数据(如果无法共享原始数据集,您可以模拟)。您可能需要澄清您的问题-您说预测从7月31日开始,但在您的图表中,第一次预报是在8月2日。是的,你说得对。我在策划时犯了一个错误。我已经更新了该图。我无法复制此结果,因此您可能需要发布一个完整的示例,其中包含显示问题的数据(如果无法共享原始数据集,您可以模拟这些数据)。