识别机器学习数据以进行预测

3
作为一项学习练习,我计划实现一个机器学习算法(可能是神经网络),根据购买、出售和交易时间预测用户在股票交易中的收益。下面的数据集是我制定的测试数据。
首字母缩写:
tab=millisecond time apple bought
asb=apple shares bought
tas=millisecond apple sold
ass=apple shares sold
tgb=millisecond time google bought
gsb=google shares bought
tgs=millisecond google sold
gss=google shares sold

训练数据:

username,tab,asb,tas,ass,tgb,gsb,tgs,gss
a,234234,212,456789,412,234894,42,459289,0
b,234634,24,426789,2,234274,3,458189,22
c,239234,12,156489,67,271274,782,459120,3
d,234334,32,346789,90,234254,2,454919,2

分类:

a earned $45
b earned $60
c earned ?
d earned ?

目标:根据训练数据预测用户c和d的收入

我是否应该添加任何数据点到这个数据集中?也许我应该使用替代数据?由于这只是我自己创建的一个学习练习,可以添加任何有用的特征。

这些数据需要被归一化,我还应该了解哪些其他概念? 也许不应该将时间作为特征参数,因为股票价格会随时间波动。


一个问题:在你的训练数据中,你能分离不同股票的交易吗?例如,你可以有:a,234234,212,456789,412,$44和a,234894,42,459289,0,$0吗?这将简化学习问题。另外,正如2PacIsAlive@所说,你不需要用户名,因为对于任何用户,在给定tab、asb、tas、ass的情况下,收益是固定的。 - greeness
@ greeness 是的,可以将交易分开。我正在发明这个数据集作为学习练习,因此可以使用任何数据或格式(但希望在真实世界的情况下保持合理)。为什么您更新的数据格式简化了学习问题? - blue-sky
谢谢回复。请查看我的帖子。 - greeness
你想预测那些只买卖苹果和谷歌的人的利润,还是你也想检查其他股票? - Yuriy Zaletskyy
@Yura Zaletskyy 如果我有其他股票的数据,那么是的,也可以预测其利润。我提供的数据集只是我发明的一个,可以包括其他股票(以及特征参数)。 - blue-sky
5个回答

3
您可能希望按以下顺序解决问题:
  1. 基于全部股票历史数据,预测单个股票未来价值。
  2. 基于组合和全部股票历史数据,预测多只股票的总未来价值。
  3. 管理投资组合的买卖短期策略。 (何时以及购买/出售哪些股票)

如果您能够很好地完成1),那么对于2)来说,这可能是一个不错的起点。 3)可能是您的目标,但我将其放在最后,因为它更加复杂。

我假设在每个时间戳上,您都有一个所有可能特征的向量,例如:

  • 公司A的股票价格(目标值)
  • 其他公司B,C,...,Z的股票价格(其他公司可能直接或间接影响公司A)
  • A,B,C,...,Z的52周最低价(长期特征开始)
  • A,B,C,...,Z的52周最高价
  • A,B,C,...,Z的月度最高/最低价
  • A,B,C,...,Z的每周最高/最低价(短期特征开始)
  • A,B,C,...,Z的每日最高/最低价
  • A,B,C,...,Z的营收报告日(真正重要的特征开始)
  • A,B,C,...,Z的营收变化
  • A,B,C,...,Z的利润变化
  • A,...,Z的社交网络公司简介语义分数
  • ...(想象力在这里有帮助)

我假设您几乎在每个固定时间间隔内都拥有上述所有功能。

我认为类似于lstm的神经网络在这里非常相关。

1
不要在训练数据中使用用户名 - 网络可能会将用户名和赚取的 $ 之间建立关联。包括它将把用户纳入输出决策,而排除它可以确保网络能够预测任意用户的赚取 $。

0

使用您建议的参数似乎无法预测收益。

主要原因是输入参数与输出值不相关。

您输入的值自相矛盾 - 考虑这种情况,对于相同的输入,您是否期望不同的输出值?如果是这样,您将无法预测任何此类输入的输出。更进一步,交易员的收益不仅取决于所购/卖股票的份额,还取决于每个股票的价格。这将导致我们面临一个问题,即当我们向神经网络提供两个相等的输入但需要不同的输出时。

在这种情况下如何定义“好”的参数以预测所需的输出?我建议首先寻找那些进行此类估计的人,然后尝试定义他们考虑的参数列表。如果成功,您将获得一个巨大的变量列表。然后,您可以尝试构建一些模型,例如使用神经网络。


0
除了标准化之外,您还需要进行缩放。我有一个问题想问您,那就是股票的分类。在您的示例中,您提供了谷歌和苹果,它们被认为是蓝筹股。我想澄清一下,您是想仅针对谷歌和苹果进行收益预测,还是针对任意两只股票的组合进行预测?
如果您只想针对谷歌和苹果进行预测并提供您拥有的数据,则可以仅应用标准化和缩放,并使用某种循环神经网络。循环神经网络在预测任务中比带有反向传播训练的简单前馈模型更好。
但是,如果您想将培训算法应用于不止谷歌和苹果,我建议您按某些标准将培训数据分成几组。划分的一个例子可以根据股票的市值来进行。如果您想进行资本化划分,则可以将其分为五个组(例如)。如果您决定将股票分为五组,则还可以应用等边编码以减少NN学习的维数。

另一种你可以考虑的分组方式是股票运营领域。例如农业、技术、医疗、高端、旅游等群体。

假设你决定按照上述方式进行分组(我指的是农业、技术、医疗、高端、旅游)。那么五个群体将为你提供五个输入层到神经网络中(所谓的温度计编码)。

假设你想要投资农业股票。

那么输入将如下所示: 1,0,0,0,0, x1, x2, ...., xn

其中x1、x2、....、xn是其他输入。 或者如果你应用等边编码,那么你将少一个维度(我懒得描述它会是什么样子)。

将条目转换为神经网络的另一个想法是使用温度计编码。

还有一个需要记住的想法,通常人们在交易股票时会亏损,因此你的数据集将存在偏差。我的意思是,如果你随机选择了10个交易员,他们都可能是输家,那么你的数据集就不完全代表实际情况。因此,为了避免数据偏差,你应该拥有足够大的交易员数据集。

还有一个细节,您不需要将用户ID传递到NN中,因为NN会学习特定用户的交易风格,并将其用于预测。

0

对我来说,维度不仅是数据点。然而,你观察到的可能是线性子空间中的情况,你只需要计算上述矩阵的核。

如果核的维数大于数据点的数量,那么你就不需要再添加更多数据点。

现在还有另一件事要注意。你应该检查分类器的VC维度,不要向数据集中添加过多的数据点。但无论如何,在这个例子中,这基本上是理论性的,我只是在开玩笑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接