熊猫:时间序列使用预测作为基本事实

时间:2018-03-08 20:10:12

标签: python pandas

根据我已经拥有的数据(大约一年),我正在学习时间序列并试图预测未来两周的收盘价格。

我已经使用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

谢谢!

1 个答案:

答案 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)

从那里,您可以predictionfrom 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