【发布时间】: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