如何为基于时间序列的模型正确设置目标?

数据挖掘 机器学习 Python 分类 时间序列 数据科学模型
2022-01-19 20:39:21

我需要帮助确定为交易金融工具(股票、外币、crpyto 等)的机器学习模型创建目标变量的最佳方法。

以下是一些有助于回答问题的示例数据。

Time: When the data was recorded  
Price: Is the current price of the instrument and is the price I would be buying at.  
price_good: Price level that I need to sell at to make a profit  
price_bad: Price level that I need to sell at to minimize losses  
good_id: Returns the ID of the first row where price >= price_good  
bad_id: Returns the ID of the first row where price <= price_bad   
target: If good_id < bad_id, target = 1. Else target = 0  

我的理想情况是 price_good 发生在 price_bad 之前。我遇到的问题是如何正确设置目标字段。我有两种方法可以解决这个问题-

选项 #1 -此选项使用所有数据,对创建目标字段没有限制,但在生产中的工作方式略有不匹配。

id         time       price    price_good   price_bad    good_id   bad_id   target
1          01-01-19   100      110          90           4         nan      1
2          01-02-19   105      115          95           4         nan      1
3          01-03-19   109      120          99           4         nan      1 
4          01-04-19   121      131          111          nan       5        0
5          01-05-19   110      120          97           nan       nan      nan    

选项 #2 -此选项不使用所有数据,并且在初始行达到其目标之前不允许设置目标,这就是它在生产中的工作方式。

id         time       price    price_good   price_bad    good_id   bad_id   target
1          01-01-19   100      110          90           4         nan      1
2          01-02-19   105      115          95           nan       nan      nan
3          01-03-19   109      120          99           nan       nan      nan 
4          01-04-19   121      131          111          nan       5        0
5          01-05-19   110      120          97           nan       nan      nan   

“生产中”是指在模型构建后它将如何工作。例如,如果我的模型预测 id:1 将达到 target_good,那么在该交易达到与选项 #2 一致的 price_good 或 price_bad 之前,我将无法进行任何其他交易。但是,如果我有更多的资金可以投资,我将丢失有关我可以从选项 #1 进行的所有其他交易的信息。

如果我选择选项#1,模型有时会“过度拟合”,因为它的数据在时间上更接近,并且使用的信息大多相同。

如果我选择选项 #2,它可以更准确地表示它在生产中的工作方式,但我会丢失大量数据点。例如,如果我从 id:2 而不是 id:1 开始呢?我最终会得到构建模型的不同数据点。我可以从多个地方开始测试以找到最佳的起始位置,但这需要大量的迭代和资源来测试。

关于如何正确建模的任何提示?谢谢!

1个回答

你有一个有趣的,如果过度分析的问题。我只想说你的问题本身限制了你的潜在利润。你想在这件事上给你的电脑更多的选择。整个 price_good, price_bad 方法是 price_bad。计算机应该决定这场比赛中的一切,你需要考虑以前的股票历史、股票收益,甚至可能来自 Twitter 的公众情绪等。

这看起来确实是实现某种 q-learning 变体的最佳方案。您将需要大量数据,而股票市场因外行人难以从中获得任何意义而臭名昭著。

什么是 Q 学习?

Q 学习是一种深度学习方法,它允许计算机找到理想的动作集以最大化最终得分。该系统由 3 部分组成:预测目标的深度学习网络、包含给定时间的状态和可能的动作的 aq 表,以及最终得分的变化。

在此处阅读更多信息:https ://towardsdatascience.com/simple-reinforcement-learning-q-learning-fcddc4b6fe56

真的,在继续之前阅读:)

第1步:

您创建 q 表(包含许多可能操作的表)。在这种情况下,您的状态将是您持有的股票数量、您购买的流动资金以及股票的n个连续价格的向量(您还需要股票的下一个价格以供后续步骤)。然后您将做出选择:您要出售多少股票?这个数字可以是任何实整数。负数表示卖出,正数表示买入,0 表示持有。

编辑:我想多解释一下“股票的n个连续价格”是怎么回事。这就是您的“时间序列”位发挥作用的地方。它是一个在任何给定时间查看价格框架的向量,但不一定是最新的框架。这只是一种让您了解过去如果您进行交易会发生什么的方式。例如,如果我有一个价格向量,看起来像下面的 all_prices,则框架看起来像:

 all_prices = [12, 13, 14, 13, 14, 15, 16, 17, 18]
 frame1 = [12, 13, 14, 13]
 frame2 = [13, 14, 13, 14]
 frame3 = [14, 13, 14, 15]
 frame4 = [13, 14, 15, 16]

对于每个州,您都必须在表中添加每个可能操作的行(在全部卖出和用我拥有的现金购买之间的所有事情)。然后对于每一行,您将计算该操作的奖励。现在,奖励是根据股票的下一个价格计算的。它可以是消极的(坏的)或积极的(好)。

因此,对于单个股票,该表格如下所示:

 *n_shares* | *cash* | *price_at_t=1* | *price_at_t=2* | .... | *last_reward* | *action*
 50         | 1000   | 13.41          | 12.45          | .... | 0             | -10
 50         | 1000   | 13.41          | 12.45          | .... | 0             | -5
 50         | 1000   | 13.41          | 12.45          | .... | 0             | 0
 50         | 1000   | 13.41          | 12.45          | .... | 0             | 5
 50         | 1000   | 13.41          | 12.45          | .... | 0             | 10

第2步:

您将在每一行(状态)上训练一些深度学习网络来预测奖励。耶!

第 3 步:

当你真的想对你的数据做出决定时,你会创建一个包含所有可能状态和动作的表格,并让你的神经网络预测奖励(现在它是未知的)。您可以选择最大化长期回报的行动。

一些注意事项

现在上面真的没有看那么多数据。您可以添加更多内容,并可能创建更好的模型。我从来没有这样做过,但我对这样的事情没有特别高的希望。不过,我绝对愿意重新考虑。或许,如果您以每个时间点为收盘价来看待这一点,并且每天您都会获得一次卖出、买入或持有的找零,这可能是可行的。否则,您将需要一个允许您进行交易的 API(非常酷,但我还没有听说过这样的面向消费者的东西)。

有更好的解决方案吗? 是的,这只是一个简单的强化学习解决方案。我们可以做得更好,但这对我来说似乎是一个简单的起点。

如果你把你所有的钱都丢了,我要负责吗? 没有。

以上是正常的q-learning吗? 并不真地。我采取了一些捷径并掩盖了它的某些方面。我确实希望它不会太复杂,并且它可以帮助您了解如何更好地解决问题。

之后你会成为亿万富翁吗? ....也许。但愿如此。如果它开始起作用,告诉我,我会和你一起投资。