首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas:使用预测作为基本事实的时间序列

Pandas:使用预测作为基本事实的时间序列
EN

Stack Overflow用户
提问于 2018-03-09 04:10:12
回答 1查看 248关注 0票数 0

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

我已经使用Pandas shift创建了7个lag特性,所以我有t-7, t-6, ..., t-1特性和我的整个DataFrame df的当天收盘价。我做了一个test_df,它只是最近两周的数据。对于每一行的滞后特性,test_df都具有真实值。

我想通过将自己限制在训练集中的值(过去两周之前df中的所有值)和我的预测来模拟预测未来的值。

所以我打算这样做:

代码语言:javascript
复制
# for each row in test_df
    # prediction = model.predict(row)
    # row["t"] = prediction

我认为这很接近,但它没有修复其他落后的功能,如t-1, t-2, ..., t-7。我需要这样做:

代码语言:javascript
复制
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是这样的:

代码语言:javascript
复制
  closing_price  t-1  t-2  t-3  t-4  t-5
0          None    7    6    5    4    3

假设我对closing_price的预测是15,那么我更新后的DataFrame应该是这样的:

代码语言:javascript
复制
   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

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-03-09 04:38:09

编辑:因此,您实际上根本不需要时间序列拆分,因为您只尝试预测一行的值。看起来您知道如何创建移位后的数据帧,因此假设您已经将列车数据存储在一个数据帧df中,其中最后一行的'closing_price‘元素是None。您将使用:

代码语言:javascript
复制
Xtrain = df[:-1]
ytrain = Xtrain.pop('closing_price')
Xtest = df.tail(1)
Xtest.pop('closing_price')
reg.fit(Xtrain, ytrain)
prediction = reg.predict(Xtest)

在此基础上,您可以使用df.set_valueprediction放入现有的数据帧中,或者完全创建一个新的数据帧(如果您正在逐步执行此操作)。

如果我对你的问题的理解是正确的(如果我没有理解正确,请评论!),我想你正在寻找的是scikit learn Time Series Split。这将允许您仅使用历史数据在不同的时间点创建多个预测。

从他们的文档中:

代码语言:javascript
复制
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]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49181653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档