根据我已经拥有的数据(大约一年),我正在学习时间序列并试图预测未来两周的收盘价格。
我已经使用Pandas shift
创建了7个延迟功能,因此我的功能t-7, t-6, ..., t-1
和当前一天的整个数据框的结算价格为df
。我做了test_df
,这只是最近两周的数据。 test_df
具有每个行的滞后特征的真实值。
我希望通过将自己限制在训练集中的值(过去两周之前df
中的所有内容)和我的预测来模仿预测未来值。
所以我打算做一些事情:
# for each row in test_df
# prediction = model.predict(row)
# row["t"] = prediction
我认为这很接近,但它并没有解决其他滞后功能,例如t-1, t-2, ..., t-7
。我需要这样做:
row 2, t = prediction for row 1
row 2, t-1 = t for row 1
...
row 2, t-i = t-i+1 for row 1
我会在test_df
中的所有行重复此操作。
我可以通过编写自己的函数来做到这一点,但我想知道是否有办法利用Pandas更轻松地完成这项工作。
为清晰起见编辑:
假设我正在查看我的第一个测试行。我没有closing_price
,所以我使用我的模型根据滞后特征进行预测。在预测之前,我的df
看起来像这样:
closing_price t-1 t-2 t-3 t-4 t-5
0 None 7 6 5 4 3
假设我对closing_price
的预测是15.然后我更新的DataFrame应如下所示:
closing_price t-1 t-2 t-3 t-4 t-5
0 15.0 7.0 6.0 5.0 4.0 3.0
1 NaN 15.0 7.0 6.0 5.0 4.0
谢谢!
答案 0 :(得分:0)
编辑:所以你根本不需要时间序列分割,因为你只是试图预测一行的值。您似乎知道如何创建转移的数据框,因此假设您已将列车数据存储在数据框df
中,其中< closing_price'最后一行的元素是None
。您将使用:
Xtrain = df[:-1]
ytrain = Xtrain.pop('closing_price')
Xtest = df.tail(1)
Xtest.pop('closing_price')
reg.fit(Xtrain, ytrain)
prediction = reg.predict(Xtest)
从那里,您可以prediction
将from sklearn.model_selection import TimeSeriesSplit
X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
y = np.array([1, 2, 3, 4])
tscv = TimeSeriesSplit(n_splits=3)
print(tscv)
for train_index, test_index in tscv.split(X):
print("TRAIN:", train_index, "TEST:", test_index)
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
放入现有的数据框df.set_value,或者如果您正在逐步执行此操作,则可以创建一个新的数据框。
如果我正确理解您的问题(如果我不是,请发表评论!),我认为您正在寻找scikit-learn Time Series Split。这样,您只需使用历史数据即可在不同时间点创建多个预测。
从他们的文件:
com.ibm.mq.osgi.allclientprereqs_8.0.0.8.jar