作者:chen_h
微信号 & QQ:862251340
微信公众号:coderpai
金融市场一直是最早使用机器学习的领域之一。自 20 世纪 80 年代以来,人们一直在使用机器学习(或者说是人工智能技术)来发现市场中的一些变化模式,特别是股票,期货和外汇市场。尽管机器学习在过去预测市场趋势结果方面取得了巨大成功,但是最近发展起来的深度学习技术并没有很显著的有助于金融市场的预测。尽管深度学习和其他高大上的机器学习技术在其他别的领域取得了具体的成功,比如 Alexa,Google Assistant 和 Google Photos 等等,但是在股票市场方面并没有取得太多的进展。
我将机器学习应用于现实世界的股票金融预测问题,我从网上能查询到很多的论文,都声称利用深度学习模型在股票预测,风险评估或者交易策略中取得了巨大的成功,但我对这些论文结果持怀疑太堵。其中一些论文模型确实具有很好的预测精度,但是在正真的实盘交易中,你会发现它们的精度是如此之低,而且模型之间的差异程度非常低。
在股票交易策略中,我们还有一种是舆情交易系统,就是紧跟着一些政府政策,或者是股民的一些市场情绪来进行交易。深度学习对自然语言处理技术有较大的改进,这个有助于提高依赖文本分析的量化策略的有效性,也就是我们刚刚所说的舆情系统。这个可能是深度学习应用于股票市场的一个难得的好地方。但是即使是这样,我们的文本舆情预测还是非常不准确的。其中一个原因是,我们还无法很准确的判断股民的言论是一个真实言论还是一个灌水行为,或者这是一群机构操纵的言论,这些我们都不知道。但这些前提才是舆情系统的关键之处。
有很多问题导致了金融股票市场本质上的不可预测性的事实,在这里我想着重强调一些使其变得困难的主要原因。
正确理解数据的分布情况是至关重要的问题,我们在看机器学习论文(非股票预测)的时候作者都会来解释或者分析要用到的数据的具体分布情况,而我们做具体项目的时候也会第一步去做数据的预处理工作,其中一个很重要的关键点就是数据的分布情况。但是几乎所有跟股票市场相关的研究论文都没有涉及到这一点。
我们可以将金融数据集与图像分类数据集进行对比,以便很好的理解这一点。我们选择的图像分类数据集是 CIFAR-10 数据集。它由 10 个类别组成。每个类别包含的训练集中有 5000 个图像样本,每个类别的测试集中有包含了 1000 个图像样本。
在图像分类问题中,我们可以预测类别狗,这个类别在训练集中的像素权重分布和在测试集中的像素权重分布是非常类似的。换句话说,狗的图像在训练集中是一只狗,在测试集中也是一只狗。这个说法可能有点愚蠢,大家都知道,但是这一点真的非常重要,强调一下,狗永远是狗,不管是在训练集还是测试集。
但是这个显而易见的属性并不适用于大多数金融数据集,比如股票,期货和外汇市场。我们在实盘看到的数据内容可能与所有的历史数据分布是完全不同的。以股票市场为例,在历史上当数据满足这个分布时,股票在未来一周上涨的概率达到90%。但是当我们在正真的实盘中采用这个数据分布的时候,你会发现的概率可能只有 10%,甚至是亏损。这就是概率的完全不可预测性。事实上,当将机器学习应用于现实世界的问题时,这是一个非常常见的问题,即线上线下不匹配问题。我们除了要确保测试集和训练集具有相似的分布外,还必须确保训练好的模型仅仅在未来数据符合训练分布时才能用于生产的真实环境。
尽管大多数研究人员都会非常注意不将数据偏差性带入他们的数据分析研究中,但是几乎每个人都会将偏差性带入数据研究中,而且还会有意无意的忽略数据分布变化问题。
前进优化方法(Walk Forward Optimization) 是解决这个问题的一个非常好的方法。这个优化方法在实践中是非常知名的,但研究人员往往在论文中不会提到这一点。然而,即使是前进优化方法也并不能很好的解决我们最基础的数据分布问题 —— 虽然它会对未来数据分布做出一点假设。这就是为什么前进优化方法并不能真正让你达到高准确度,但是它非常实用。
我们所使用的机器学习或者是深度学习,都是去解决一个大数据问题。但是在金融数据中,我们可能面对的都是一个小样本数据。举个例子,比如我们要分析失业率和非农就业等劳动力统计数据之间的关系,但是这个数据他们只有每个月发布一次,我们根本就没有足够的历史数据来进行分析,可能所有的数据加起来也就几百条数据。还有一个更加极端的例子,那就是 08 年的金融危机,从历史上我们只有这一个数据点用来学习。
这就使得应用机器学习自动化学习变得非常苦难。许多研究者最终采取的是一种非常中庸的方法,就是将不太频繁的统计数据与相对频繁的数据结合起来进行使用。例如,你可以将非农工资单与每日股票收益结合起来,并最终将此组合数据集输入到模型中。但是,通常我们需要对数据进行很多次的检查,以此来消除对数据质量的担心。
在金融领域中,有一个很严重的问题,就是我们无法将一些历史上的财务数据进行量化处理,这和如何去表达人类历史的进程是很像的。比如对于一直股票数据而言,我们现在最常用的表示方法就是 K 线图,其中包含了四个价格数据:最高价,最低价,开盘价,收盘价。但是除了这四个基本价格之后,所有的数据就需要我们研究人员发挥巨大的想象力,所有也就出现了很多的技术指标来衡量我们的股票市场。所以,如何将我们的股票数据转化为一个可度量的数据是应用机器学习算法的重点。我们还是利用上面的图像分类数据集来进行说明,比如我们对狗这个类别进行识别,研究员 A 模型的输入是一张狗的照片,研究员 B 模型的输入也是一张狗的照片,研究员 C 模型的输入还是一张狗的照片,但是如果我们处理的是对股票未来涨跌分类,那么不同的研究研究就有不同的量化指标。研究员 A 模型的输入可能是股票价格,研究员 B 模型的输入可能是股票的成交量,研究员 C 模型的输入可能是市场情绪指标。每个人都有对问题的自己量化方法。再来举个金融例子,比如我们对 20 世纪 30 年代大萧条期间发生的使其已经有了很全面的了解,但是我们也非常难将这个过程转化为机器可以识别的量化指标,从而来进行预测学习。
完整的股票预测问题是非常复杂的,因为各种因素会对最终价格有不同规模的影响:
多专家模型(Mixture of experts)可以用来组合来自不同尺度(或者不同数据源)的模型 —— 但是,如何去应用多专家模型也是一个难题。请注意,多专家模型是将相同规模的模型进行组合分析的常见技术,几乎所有的定量资产管理公司都在采用这种技术。
我喜欢将价格的时间序列看做部分可观察的马尔科夫决策过程(POMDP) 。在任何时候都没有人可以非常完整的将价格时间序列进行完整画出来。因为你永远不知道明天会发生什么 —— 但是,你仍然需要对你的交易做出决定。在你做决定的时候,你拥有的数据量非常的少,与此同时,数据的分布情况也在不断的进行变化。
我试图将强化学习方法应用于金融数据分析。尽管我极其简化了问题(即简化状态和动作空间),但模型还是无法学到任何有用的东西。我花了几个星期来调试它为什么不起作用,原来强化学习需要做够多的可预测性。
机器学习适用于非常多元化的领域。其中,我发现推荐系统跟金融数据预测问题是非常相近的一个问题。但与推荐系统进行比较分析还是可以发现很多潜在的共同困难问题:
我觉得本文中最对我有价值的是:金融时间序列是一个部分可知的博弈问题,即使对人类来说也非常苦难,我们不应该期望机器学习和算法来突然超越人类的能力,但是在一定程度上,可以减轻人类的工作强度。
这些算法缠长的是能够从数据中发现一些隐藏的模式,并且对它很好的描述。但是这是一把双刃剑,因为这完全是一个黑盒模式,有时这个方式会非常有效,但是有时这个方法可能会非常的差,而且你还不知道错在哪。你唯一能说的一句话就是:这个模型不 work 了。但这对实盘操作时非常危险的一件事。在传统的股票交易中,简单的算法模式已经被全部使用了。想通过无监督学习来识别金融时间序列模式是下一阶段的路,但我觉得这是一个难以实现的梦想。