内容 | Rafael Schultze-Kraft
编译 | Aholiab
深谙币圈的你,对于那些出现在币价预测文章里的走势图想必不陌生。这些图往往旨在对未来n天的币价做预测,并声称是结果基于大数据或深度学习算法。一副特别科学又靠谱的样子。
但你不知道的是,即使这些图真的是用先进的深度学习模型和算法来实现,结果也非常的不可信。
本篇文章,WATTx数据科学家,机器学习工程师Rafael Schultze-Kraft亲自上阵,为我们揭秘那些「高大上」的币价预测图的背后,都有那些不为人知的技术秘密。
炒币的人想必都对下面这张图不陌生,就是加密货币行情的走势图。这张图是我用深度神经网络做的一个比特币币价的预测,你看这曲线、这走势,还是那么回事吧?
这张图的数据确是来源于以往的走势数据,并且只能用以往的数据来训练模型。你可能会说,那有了这个走势预测的模型,不就相当于有了印钞机器了吗?
想要?拿去啊。
比特币价预测图实现代码地址:
https://github.com/neocortex/lstm-bitcoin-prediction
不过慢着,B先装到这儿,听我一句,上面说的一切都别当真!重复一遍:上面说的一切都别当真!因为用深度神经网络的手段预测的走势图是完全不可靠的!谁当真谁傻。
没耐心版,请直接刷至文章的最后一部分。
当一件事美好的不像是真的,那它可能就不是真的
这几周,我看过很多文章里都出现了加密货币行情的预测图,与上面我做的那张图类似,这些图个个都「数据精准」、煞有介事。唯一的问题就是,它们都看上去「太美好了」,以至于不像是真的。
当一件事物太过美好而不像是真的,那它很可能就不是真的」
——Emmy Rossum
当然,我不是说那些文章不好,只是从技术上说,文章里的数据都太过「精确」。所以这篇文章中,我希望能够从技术的角度分析,为什么这些预测图在真实的币圈交易中,都不具备参考性。
来认识一下预测图背后的原理——LSTMs
让我们先来看看什么是LSTMs。LSTMs(Long short-term memory),也叫「长短期记忆网络」。是一种特殊的RNN,能够学习长期的依赖关系,可以自发对信息产生长期的「记忆」行为,而不是去刻意学习。比如,你在读这段话的时候,不需要对每个字词进行理解,可以根据上文的内容进行理解。
LSTMs的核心所在是其基本组成元素「cell」的状态(cell state),也就是下图这条向右直线。cell的状态就像传送带,会沿着整条链条传送,而只有少数地方有一些线性交互。信息以这样的方式传送可以保持不变。
LSTMs通过一个叫「门」(gate)的结构控制cell的状态,并向其中删减或增加信息。你可以把门理解为一种控制信息通过的方式。门由一个Sigmoid网络层与一个按位乘操作构成。Sigmoid 层的输出值在0~1之间,表示每个部分所通过的信息。0表示「对所有信息关上大门」;1表示「我家大门常打开」。
LSTMs中「长短期」这个表达的意思是,LSTMs是一个可以记录短期记忆很长时间的模型,用来解决RNN中的梯度处理问题。
说了这么多,其实你只要知道LSTMs可以很好的实现对于重要事件的区分、处理、预测就ok了。
在我的比特币预测模型中,使用的是Python和Keras框架。你也可以在上文给出的Github地址中看到完整的实现代码。
抓取数据
首先,我们要先抓取出比特币市值的历史数据,这一操作也同样适用于其他加密货币。你可以通过cryptocompare API来实现,这个方法甚至可以抓取出从2012年10月10日到2018年4月的全部比特币价格数据。
实现代码如下:
抓取结果如下:
数据分类与训练
我把所抓取到的数据分为两组,一组用来训练模型、一组放到测试集中用作测试,比例为9:1。也就是说,2017年9月14日之前的数据,都会被用来训练;之后的数据则会被用来对受过训练的模型进行测试。
下面代码实现了每日结束时的比特币币价。
走势如下所示:
最后一步——建模
LSTM的训练方法是这样的:我们先把数据以每7天一组进行划分(几天一组都可以),我们为了方便,先以7天为单位。然后对每组数据进行zero base,这样做的目的是,每组第一条数据进入后的值为0,其他数据则会根据第一条数据显示出变化后的值。这样一来,「预测」的目的就达到了,因为数据是变化的,而非绝对的。
实现代码如下:
我的LSTM的训练模型很简单,只有一层、20个神经元,我把dropout参数设为0.25,在dense层设置一个线性激活函数。此外,我用MAE(Mean Absolute Error)作为损失函数,优化器使用的是Adam。
整个神经网络的训练,为50 epoch(一个epoch是指把所有训练数据完整的过一遍)、batch size设置为4(在不能将数据一次性通过神经网络的时候,就需要将数据集分成几个 batch)。
不过在确定神经网络的结构和参数时往往是随机的,我也并没有对它们进行任何优化,优化也不是本文的重点。
完成!高大上的预测走势图
通过以上的方法,我们就得到了文章一开始的走势图。
你可能会想:
这图看起来没毛病啊,到底有什么问题?
为啥不能供我们在实际的交易中参考呢?
让我们仔细看看最后30天的数据和显示。
看出来了吗?这张图的问题就是,当它预测某一天的数据时,显示的值其实是前一天的。整个走势图无异于相当于把前一天的数据移到了后一天。我们这样操作一下,就更能看出这一点。
看到了吗?平移一天之后,预测曲线和前一天真实币价的曲线几乎完全重合!重合!而这样的走势图,也是在那些预测币价走势的文章中最常见的。
下面是另一张真实数据和预测数据的对比图,平移一天之后,也是几乎重合。
下图是币价走势的真实数据和预测数据之间的关系。同样,如果把预测数据平移之前一天的真实数据上,两个数据几乎一致。
加引号的预测图
说了这么多,结论就是:我们看到的那些预测比特币、以太币、莱特币……的走势预测图,实际上只是把之前n天的数据挪到了未来n天,并不是真的预测!这一结论也同样适用于股市!所以不要再听信那些所谓的「专家」的预测了。
其实几乎所有号称使用深度学习技术来预测未来走势的方法都大同小异,都是通过LSTMs基于以往的数据来预测,但结果往往并不可靠。
当然,我们也可以用更复杂的技术手段,更多数据,并且对神经网络进行更多的优化。但基于历史的数据,也很难说对未来的走势具有指导性意义,这是金融界早就形成的常识。
怎么样?看了这篇文章后,你还相信那些所谓的专家预测吗?今后买币还是靠自己去分析吧。毕竟我大币圈只有赢家和输家,没有所谓的「专家」,更没有人能预测。
热门文章
他俩靠区块链养猫赚了10万美金,还将投机方式毫无保留地公布了出来
会撸猫了不起啊?有本事自己写一个撸猫撸鱼撸飞机才是牛逼
CSDN区块链大本营招采编2名:
1. 对区块链技术有一定的理解,对大公司动态有极强敏感性,且有深度剖析的楞劲儿。
2. 出稿速度快,具有每天报题和出稿的能力。
3. 有能力采访行业高端人物,能将其观点进行深刻呈现。
4. 相关媒体经验2年以上。
5. 英语6级以上,能快速编译。
6. 本科以上
待遇:
绝不低于行业水平,只要有才,我们愿意给你一切资源。
邮件发送:[email protected]
邮件注明:姓名+区块链+采编应聘