应用案例:Tensorflow的金融预测器真的有效?

上周,谷歌TensorFlow团队发表了一篇很好的文章,展示了如何开发一个美国股市的预测器:TensorFlow Machine Learning with Financial Data on Google Cloud Platform。 用他们的话说,他们的解决方案将:

通过TensorFlow构建、训练和评估许多预测金融市场将会发生什么的模型。

他们显然在这篇文章中投入了大量的精力——互动的iPython Notebook,两个专业编辑过的视频,以及在他们网站和博客上的多篇文章。推特、评论以及媒体方面,公众对此的反应清一色是:「哇!」。 不幸的消息是,这个模型并不能预测这些市场的未来。它预测的大多是过去,对于交易来说没有实际用途。

好到难以置信!

引用谷歌的结论:

最后,我们怎么进行数据分析?我们做得很好:在预测S&P 500指数的收盘价上,正确率超过70%,这也是使用这个数据集所取得的最好成绩,所以,仅使用几个步骤和几行代码,我们已经制作出了一个不折不扣的机器学习模型。之所以会得到这个相对较低的正确率原因在于数据集本身;没有足够讯号来显著改善表现。但是,十次当中有七次,我们能够准确地确定S&P 500指数会在当天收盘时升或跌,客观上不错。

读到这里我立刻想到:这不可能是真的。如果有人十次当中有七次能准确预测出S&P市场的走向,他在短短几个月内就会非常富有。如果你拥有这个神奇的预测器,你真的可以凭空赚数十亿元。 所以,我打开他们的IPython Notebook,(在手里抱着一个生病的孩子,站在我的电脑附近阅读这篇文同时安抚宝宝) 仅十分钟后,我看到了一个很不利的地方,进行金融预测时,你应该永远不会犯的一个错误。数据泄露(date leakage),有时也被称为时间旅行 (time travelling)。将你的机器学习模型不应当知道的数据泄露给该模型的方式很多。在这个案例中,情况实际上相当简单。

那么,问题是什么?

不要担心:理解这个问题,不需要编程技能,金融市场知识或者深度学习库的经验。这个错误是...其实…简单到尴尬,并且我真的很惊讶谷歌甚至发表了这篇文章。 他们有一个叫做 「snp_0」的值,基本上是S&P市场今天收盘价和昨天收盘价之差。 然后,他们输入变量,比如 对于伦敦市场来说是一回事的「ftse_0」。因此再一次,今天收盘价和昨日收盘价之差。伦敦市场稍稍在时间上领先—— 它在标普市场收盘前4.5个小时关闭。 TensorFlow尝试从诸如上述「ftse_0」之类的输入中预测的只是snp_0 (正数意味着S&P上涨,负数意味着下跌)的方向。 明白? 我的意思是:你是否已经看出了大错误? 如果没有,只要仔细重读前面的几段,并且思考一下。我等着。 那么对需要一个明确解释的人们:

  • 当伦敦市场收盘时,你将拥有所有输入数据。

  • 你把它输入闪亮的TensorFlow模型里,它就会预测S&P市场方向。

  • 所以,现在你要下市场订单的话(根据模型预测买入或者做空股市)

  • 你只错过了一个小细节:你的时光机!

  • 因为你需要时光倒流19.5小时去下实际订单 (snp_0的变量涵盖24小时时间段,没有时光机的话,我们已经处在该时段最后4.5小时当中)

  • (不,现在下订单不会是一个好策略。这个模型没有预测最后4.5小时内会发生什么。这个信息实际上甚至不在训练数据里。)

后续

我昨天转发关于数据泄漏的推特文:

1

并通知了谷歌的伙计们:

RIXOITL4Q4FE)9Y987E6~EW

然后等待了将近一天,看看他们会不会发现自己的错误,并且修复它(或者完全收回它)。 他们没有,所以我把错误的具体解释发送到他们的邮箱。半小时后,Corrie承认问题的存在,并且承诺他们将在这个周末解决它。 我希望他们能彻底修改这个文章,模型将不再在时间过程中泄露任何数据。我也相当怀疑它是否会有任何预测能力。

最后的话

TensorFlow是一个非常好的库/框架。 但是,如果你不正确地准备了数据,你美丽的深度学习库也救不了你。 当然,除非你有时间旅行机器。在这种情况下,勇往直前,使用谷歌金融预测并且成功!

本文由机器之心编译出品,原文来自Medium ,作者Michal Illich,转载请查看要求,机器之心对于违规侵权者保有法律追诉权。

入门
登录后评论
暂无评论
暂无评论~
返回顶部