机器学习模型能解决什么投资问题?
利用机器学习解决投资问题的思路,其实和在互联网领域解决推荐、广告问题的思路是一样的,只不过利用的特征完全变了。推荐、广告模型利用的是用户的年龄、性别,物品的类别、价格等特征,投资领域的模型利用的是技术面因子、宏观因子、基本面因子等投资领域的特征。
训练样本和特征如何生成?在训练模型之前,我们首先要解决训练样本如何生成,以及训练所需的特征和标签如何处理的问题。那么,对于一个预测股票涨跌的问题,我们一般使用滑动窗口的形式去生成训练样本。如图 2,它是某只股票半年时间内的价格走势图。在生成训练样本时,我们先选取一个滑动窗口长度,比如 10 个数据点。然后,选择一个滑动起点,从这个起点开始,逐个数据点地向右侧滑动,每滑动一次生成一个训练样本。
在滑动过程中,每个窗口内的行情数据就作为历史数据,我们可以从中提取出行情相关的特征。而窗口外右侧的第一帧数据,就作为样本的标签。如果是涨的话,就标记该样本是正样本,跌的话就是负样本。当然,如果你希望训练的是一个回归模型,也可以把股票的涨跌幅度这个连续值当作样本标签。直到向右滑动结束,处理完全部的行情数据,我们就完成了样本的生成。特征一般分为两大部分,一是场内行情特征,二是场外特征。其中,场内行情特征指的是利用滑动窗口内部的行情数据,比如股票价格、成交量、换手率等信息处理出来的特征。场外特征是当时当刻跟这只股票相关的所有其他数据,比如这家公司基本面的数据,宏观经济数据等等。
但需要注意,不管什么特征都要遵循一个基本原则,就是一定要用滑动窗口那个所在时间段的数据生成当时当刻的特征,而不能引入窗口之后的任何数据。因为这样就相当于引入了未来信息,属于模型训练中的作弊行为。
什么样的模型结构适合股价预测?
现在,我们的样本和特征已经准备好了,下一步就是选择合适的模型结构进行股价预测了。如果你有一些机器学习的背景知识,我想通过观察行情数据的特点,你一定能够猜到到底什么模型适合股票价格的预测。
因为行情数据天然是序列化的,所以序列模型自然就是最适合处理行情数据的模型。事实上,国内的量化投资公司某方,以及国外的量化巨头 two sigma,都披露过序列模型在它们投资场景下的成功应用。序列模型也曾经在 two sigma 举办的股票预测大赛中大放异彩
对于一个序列模型来说,最重要的是要清楚它的基本结构和输入输出。下面的图 4 就是一个经典的序列模型结构示意图。其中 x1 到 xt+1 就是它的输入,y1 到 yt+1 是它的输出,每个蓝色模块间的 at,就是不同状态间传递的权重信息。
图4 序列模型的结构示意图那序列模型是如何应用在预测股价这个问题上的呢?其实这个过程是很直观的。输入 xt 其实就代表每一时刻股价相关的特征向量,你可以把我们准备好的多因子特征都放到这个向量中去。比如,向量的第一个维度代表成交量,第二个维度代表上一刻的涨跌幅度,第三个维度代表动量因子,等等。输出 yt 代表的就是我们希望利用 xt 预测出的结果,就是 t 时刻下一刻的股票涨跌结果。
现在你清楚这两点就可以,关于序列模型的具体结构先不用多想。因为成熟的机器学习工具,如 TensorFlow、PyTorch 等,都已经为你封装好了模型结构,你直接调用就可以了。
清楚了输入和输出,下一步就是利用上面介绍的滑动窗口的方法,准备好每个时刻的训练样本,然后调用 TensorFlow 等平台的训练接口,训练好一个序列模型。接下来,我们就可以利用训练好的序列模型进行预测了。在实盘预测中,由于序列模型依赖于当前时刻前 t 个时刻的所有输入特征,所以我们也要准备好 x1 到 xt+1 的输入,然后利用这些输入去预测 yt+1 这个输出,也就是下一刻的股票涨跌。
然后,再根据预测结果来决定当前的投资行为,比如买入或卖出。这就是利用序列模型预测股票的全过程。在实际操作中,当然有大量细节工作需要准备,比如特征的选取,样本的处理,预估相关服务的搭建,等等。此外,模型结构的选择也对预测结果有关键性的影响,比如经典的序列模型就包括 RNN、LSTM、GRU 等等。
机器学习模型的局限性
虽然机器学习模型已经在投资领域取得了不小的成功,但我们要清楚的是,机器学习也不是解决投资问题的“银弹”。在实际应用中,机器学习模型,特别是深度学习模型还是存在着一定的局限性。这里,我结合专业团队的一些经验总结,列出了三点主要的局限性,供你参考。
- 复杂模型容易产生严重的过拟合现象。
- 由于深度学习的黑盒特征,在模型效果变差时,我们很难给出有效的解释。
- 和推荐系统数据相比,金融数据里的噪声更大,很多数据点都是杂乱的随机波动。而且,埋藏在杂乱数据下的潜在规律也在随时变化,这让深度学习模型学习到稳定数据模式的难度变大,且模型的有效期更短。这三点局限性,不仅会困扰散户投资者,而且也让一线的量化投资团队相当头疼。
为了尽量规避这三点局限性,专业的量化团队会在模型结构优化、数据清洗、模型实时更新等多个方向上进行改进。我们可以在技术上学习这些做法,但同时也要牢记:作为散户,我们的时间、精力和资源都是有限的,一定要把有限的时间用在解决一个规模较小的问题上,这样才有可能在一个点上击败专业投资者。
此文章为7月Day25学习笔记,内容来源于极客时间《程序员的个人财富课 》,强烈推荐该课程
喜欢的朋友记得点赞、收藏、关注哦!!!