【问题标题】:Python rolling forecast update lagsPython滚动预测更新滞后
【发布时间】:2020-02-23 15:18:35
【问题描述】:

我想用sklearn.linear_model.LinearRegression 实现一个OLS。

我有一个包含 100 个数据点和相应数据的时间序列。

我的总体目标是预测未来 6 周。我在 x_train 中有多个解释变量用于我的输出。这些包括例如日期、月份以及我的滞后变量等。我用自相关图检查了滞后的重要性,它告诉我,滞后 1-12 是显着的,所以这 12 个滞后是 12 个解释变量。

我创建了 12 个滞后变量:

lag_variables=pd.concat([data.shift(1), data.shift(2),...., data.shift(12)]

这些滞后变量是我的 x_train 数据框中的 12 列,我从中选择我的特征。

但是,如果我想预测 6 个数据点,我需要更新我的滞后。 因为例如在第 5 周,我没有任何滞后 1-4,因为我在预测时不知道它们。第 1 周我知道滞后 1-12,第 2 周我知道滞后 2-12,依此类推。

Python 现在给我一个错误,因为我的 x_train 包含 nan 值,因为我不知道所有滞后。

所以我的想法是,每周单独预测,所以首先我预测第 1 周。然后,在我预测第 1 周之后,我有第 1 周的实际值,我可以用真正的价值。我基本上是在做一个有滞后的 rollig 预测。

我尝试了以下方法:

hist_x_train=[x for x in x_train]
hist_x_test=[x for x in x_test]
hist_y_train=[x for x in y_train]
hist_y_test=[x for x in y_test]

predictions=list()

for t in range(len(x_test)):
    model=best_praams   #gridsearch before the loop, chosses best parameter
    model.fit(hist_x_train, hist_y_train)
    y_pred=model.predict(hist_x_test[t])
    predictions.append(y_pred)
    hist_x_train.append(hist_x_test[t])
    hist_y_train.append(y_pred)
    print(y_test[t]) # this is my actual real value for that period; I don't     
   # know how to update this in x_train, so it shows up as a lag 

从技术上讲,如果我的 x_train 没有任何滞后,滚动预测的工作原理就是这样,但我不知道如何处理滞后。

谁能帮帮我?

非常感谢!

【问题讨论】:

  • 我有点困惑,你能详细说明一下吗?也许您可以举例说明您希望做什么?您是在尝试测试数据还是只是在尝试预测变量?您的模型是否针对滞后变量进行了训练?您在这里所做的总体目标是什么?谢谢
  • 我已经编辑了这个问题,希望它变得清晰。我很高兴能得到一个答案,因为我有点迷路了。
  • 我想我现在明白了。随着您进入未来,您将不会拥有所有滞后变量。听起来您也不想将您的预测用作滞后。如果是这种情况,您将需要为不同的滞后变量子集创建不同的模型。
  • 抱歉再次询问,但我会创建 6 个不同的 Dataframes,然后给出 6 个不同的 x_train 和 x_test 变量?
  • 大部分情况下您将拥有相同的训练数据,您只需要训练数据以预测不同的 Y 值。例如,假设您有 12 周的滞后变量,您训练该数据以预测下周 y_1、下周 y_2 等等。每个 y 将使用相同的滞后变量,但您将有不同的目标进行训练。通过这种方式,您可以训练模型预测未来几周,而不仅仅是第一周。

标签: python


【解决方案1】:

使用预测更新训练数据会导致级联错误,这使得下一个预测在一段时间后几乎恒定或为零,应该避免这种情况。而是一次性预测未来 6 周,或使用多个模型(此处为 6 个模型)预测未来 6 周,安排您的 y_labels (y_1, y_2..... y_6) 使 y_1 滞后 1 周, 和 y_2 2 周,依此类推。然后进行相应的训练。

【讨论】:

  • 感谢您的回答。我不想将预测用作滞后值,我想使用真实值。如果我的滞后 1、2、3、4 显着,我如何一次预测接下来的 6 周?因为在第 5 周,我没有滞后 1、2、3、4,因为我不知道预测时的实际值。这是我的问题
猜你喜欢
  • 2023-04-06
  • 2018-01-30
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
  • 2020-10-22
  • 2017-06-14
  • 2014-12-16
相关资源
最近更新 更多