雷锋:自从比特币价格飙升以来,关于数字货币的炒作就一直不断。每天都有关于数字货币的新信息。其中一些被证明是骗局,而另一些将在几个月后成为新的顶级货币。钱币投机者通常为了一个谣言而买卖。自然有人尝试用机器学习来分析数字货币的价格变化,找出影响数字货币价格变化的因素。近日,在外媒Medium上,一位名叫Chalita Lertlumprasert的博主发表了一篇关于如何使用机器学习来预测数字货币价格变化的文章。雷Feng.com整理如下:
数字货币价格变化的机器学习分析原理在经典的时间序列分析中,我们认为观察到的时间序列是模式和随机变量的组合。使用这种方法,我们可以根据历史数据预测未来值。这种方法在大多数情况下是可行的,但是如果这个时间序列更加随机化呢?如果一个时间序列主要是基于对时事的推测,而不是有一定的内在规律,会怎么样?嗯,你肯定猜到了,低价数字货币就是这样的。
那么,是什么推动了数字货币的价格呢?关于数字货币的猜测?创新?法律问题?舆论?供给/需求的变化?比特币的普及程度如何?连土豪都心血来潮决定买一百万代币?好了,现在该让数据说话了。
那么,影响加密价格的因素有哪些呢?因素一:很多人说答案是比特币(价格)。区块链技术是由比特币首先实现的去中心化数据库系统,被认为是有可能改变现代商业模式的技术趋势。随着对比特币的关注,人们不断推出基于区块链技术的替代数字货币。从某种意义上说,比特币是几乎所有数字加密货币之母,它最早应用了这个行业的基础技术。这就是为什么我认为当比特币价格飙升时,其他所有数字货币都会随之上涨,反之亦然。下图是比特币(绿色)和以太坊(蓝色)的价格变化曲线。
如你所见,这种对应关系似乎相当准确。但是,如果没有统计证明,我们就不要妄下结论。后面我们会更多的讲用格兰杰因果检验来确定一个“协整关系对”。
因素二:显然,法律因素或其他足以影响游戏规则的技术手段也在影响数字货币的价格。当中国在去年9月禁止数字货币时,数字货币的所有价格都迅速下跌,一切都陷入混乱。为此,我们从Pytrends API获取重大事件的Google新闻搜索频率数据。下图红色曲线显示,当数字货币价格下降时,“数字货币”的搜索频率达到峰值。
是不是很有意思?在这个项目中,搜索到的关键词是通过Google Keyword工具选取的,这个工具不仅可以让你了解关键词的流行程度,还可以提供相关关键词的列表。通过提供的列表和Pytrend API,我们获得了七个不同关键字的搜索频率数据。我将在后面的章节中详细介绍这些术语。
3.大众的认知是另一个重要因素。买的越多,需求越多,用数字货币表示的价格就越高。这些数据很难得到,付费的Twitter API可以解决这个问题,但是因为我穷,我更愿意把这些钱花在别的地方。我选的是redditmetrics.com,可以统计Reddit所有子话题的历史订阅增长数据。下面将Nem(新经济运动,其数字货币中文名称为新经济币,代码:XEM)的子话题订阅增长(橙色)与新历史价格(蓝色)进行对比。
正如预期的那样,认购量的增加与价格趋势的变化高度吻合。
上面的介绍只是让你对这个领域有一个初步的了解,向你介绍我们正在努力解决的问题。我可以在GitHub上看到完整的EDA。接下来,我将介绍一个模型的统计方法来预测硬币的未来价格。
如何建立模型?在本节中,我们将深入探讨这种方法。这里只是对每一步的总结。如果想深入挖掘代码,可以参考我的GitHub库。
1确定协整关系对
我们通过Cryptocompare API获得了12种主要数字货币的价格历史数据。在我们对时间序列做任何事情之前,我们必须确保时间序列是固定的。为了满足平稳性的要求,时间序列必须具有常均值、常方差和自相关常数。现实中,完美稳态的时间序列是不存在的,但是不用担心,我们有Dickie-Fowler检验!
扩展的Dickey-Fowler检验是一种统计检验,可以检验一个自回归模型中是否存在单位根(雷锋注:单位根检验是针对宏观经济数据序列和货币金融数据序列是否具有一定的统计特征而提出的一种特殊的平稳性检验方法)。对自回归模型进行检验,通过不同的滞后值对信息因子进行优化。其中,零假设(零假设是统计检验中的一种假设,内容一般是可以被证明是错误的假设)是时间序列可以用单位根来表示。从统计学上来说,如果你的p值小于0.05,就意味着可以拒绝零假设。但是——再次强调,3354对于一个具体的问题,结果应该是可解释的,有意义的。事实证明,在阈值为0.05的情况下,所有12种硬币的历史价格都不会通过稳态测试。在这种情况下,我们必须稳定和重新测试时间序列。
区别:这是一种常用于稳定时间序列的方法,可以消除趋势性和季节性。在这个项目中,我们区分了连续观察(滞后1)的差异。如果时间序列有季节因素,滞后值应该是一个季节周期。数字货币没有明显的季节性。下面的方框图显示,以太坊的平均每小时价格在一天24小时中是相对恒定的。方差不同,但没有明显的规律。经过时间序列的滞后差后,12种货币都通过了Dickey-Fowler检验。
格兰杰因果检验:这是一种统计假设检验,以确定一个时间序列是否有助于预测另一个时间序列。这里我们用格兰杰因果检验来确定某个数字货币的价格滞后值是否可以用来预测其他硬币的未来价值。
由于12个硬币的历史价格数据是静态的,所以我们一共构造了132个不同货币的数据对,每个数据对都是某个数字货币对应其他数字货币的历史价格(注:ETH-BTC数据对和BTC-ETH数据对不一样!)进行格兰杰因果关系检验。检验的零假设是:在每个货币数据对中,后一个数据货币对前一个数据没有影响。经过测试,我们初步发现DASH与比特币现金(BCH)的相关性最强(即比特币现金的价格对Dat币的价格影响最大),但进一步的研究结果表明,这种强相关性是由于来自南韩的交易激增。考虑到这不是一个正常的情况,我们选择了XEM-IOT,相关性最强的货币对。在这个项目中,我们将使用IOT(物联网货币)的历史价格来预测XEM(新经济货币)的未来价格。
2.特征选择
数据查询。以下是分析的数据及其来源:
crypto compare API:XEM和IOT的历史价格,每小时;
py trends API:Google News对“加密货币”关键词的搜索频率;
数据来源:redditmetrics.com:订阅\”电子货币\”、\” Mem \”和\” IOT \”副主题的用户增加
py trends API:Nem钱包下载、Iota钱包下载、Nem价格、Iota价格、比特币价格、用于挖矿的GPU等Google关键词的搜索频率。——这些关键词是基于Google关键词工具挖掘的。
雅虎API:两大矿业军火商AMD和NVIDIA的股价
ElasticNet回归和正则化:上述查询数据可能是相关的,例如“比特币价格”和“加密货币”可能包含类似Google搜索频率和Google搜索频率的信息。使用相似特征建立模型会造成冗余,影响预测结果。ElasticNet可以将冗余的预测系数降为零。
在本项目中,我们通过ElasticNet回归对上述13个特征变量进行正则化,其中因变量为XEM的历史价格。算法处理后,最终留下三个非零系数的预测器。这些特征将用于构建最终模型。我还使用并试图建立一个有13个特征的模型。与用所选的3个特征构建的模型相比,性能差异不显著(所有15个特征的MSE=0.107,3个特征的MSE=0.105)。最终我选择了一款有三个特点的车型。
3.建立模型
在这个项目中,我们使用ARIMAX模型来预测XEM的未来价格。ARIMAX模型就像ARIMA模型,可以用自回归和移动平均来预测,但是ARIMAX可以包含其他外生变量。这里,我们使用之前选择的三个外生变量。
数据预处理:我们之前已经提到了稳态和Dicky-Fowler检验,这里就不展开了。这些书在ElasticNet之前就已经标准化了。我们只需要区分它们并确保它们通过Dickey-Fowler测试。之后对数据进行清理,分为测试集和训练集。
ACF PACF:数据已经确定。我们需要1)确定时间序列是自回归还是移动平均过程;2)确定我们需要在模型中使用自回归和移动平均过程的顺序。ACF可以回答第一个问题,也可以用来确定移动平均线序列中的滞后阶数。下图是XEM历史价格的ACF和PACF。
正如我们所见,这是一个自回归过程,因为ACF没有截止值。PACF在滞后之后有一个临界值,这将是我们用于ARIMAX模型的参数。
Max:使用AR 1和3外生变量。下图是拟合值与实际值的对比。
基于拟合模型的XEM房价预测。下图是基于XEM样本的下一个600步(即600小时,25天)的预测值。
正如我们所料,模型在开始时表现更好,预测误差随着时间的推移而增加。在1-100步中,预测均方误差为0.039,而在101-600步中,预测均方误差为0.119。
综合IOT的历史价格、\” Nem Price \”的Google搜索量增长和\” Nem \”子项的订阅量,建立ARIMAX模型预测NEX的数字货币价格。100小时以内,预测结果尚可,超过100小时,就看不下去了。
这是我的第一个数据科学项目,还有很大的提升空间。如果使用付费的Twitter数据或使用不同的机器学习模型可能会显著提高其性能,目前我会考虑提出一种可用于自动交易的交易信号算法,但摸着我的钱包,我忍不住流下伤心的眼泪。
我希望你像我喜欢写这篇文章一样喜欢它!如果你有什么想法,请留言告诉我。