雷锋网(公众号:雷锋网)按:自从比特币的价格暴涨以来,关于数字货币的炒作一直不断。每天都有新的数字货币的信息, 它们有的被证实是骗局,有些则会在几个月成为新的顶级货币。炒币人士通常会为了一个传言而买入卖出,自然,也会有人尝试用机器学习来对数字货币的价格变化进行分析,来找出影响数字货币价格变动的因素。近日在外媒Medium上,就有一位叫做Chalita Lertlumprasert的博主发表了如何用机器学习来预测数字货币价格变化的文章,雷锋网整理如下:
机器学习分析数字货币价格变化的原理
在经典的时间序列分析中,我们认为观察到的时间序列是模式和随机变量的组合。使用这种方法,我们可以根据历史数据预测未来的价值。这种方法在大多数情况下可行,但是如果这个时间序列更加随机化呢?如果一个时间序列主要是基于当前事件的推测,而不是具有一定的内在模式呢?嗯,你一定猜到了,低价数字货币就是这样。
那么,究竟是什么在推动数字货币的价格?对于数字货币的猜测?创新?法律问题?公众舆论?供给/需求的变化?比特币的流行程度?甚至,土豪心血来潮决定购买一百万个代币?OK,现在是让数据说话的时候了。
那么,影响加密价格的因素是?
因素1:许多人说,答案是比特币(价格)。区块链技术是首先由比特币实施的分散式数据库系统,被认为是极有可能改变现代商业模式的一种技术趋势。随着比特币备受关注,人们不断推出也基于区块链技术的替代数字货币。从某种意义说,比特币几乎是所有数字加密货币之母,其首先应用了这个行业的基本技术。这就是为什么我认为当比特币价格飙升时,所有其他数字货币都会随之上升,反之亦然。以下图表是比特币(绿色)和以太坊(蓝色)的价格变化曲线。
正如你所见,这当中的对应关系看起来相当准确。但是,如果没有统计方法上的证明,我们不会急于下结论。稍后,我们将更多地讨论使用格兰杰因果检验来确定一个“协整关系对”。
因素2:很明显,法律因素或其他足以影响游戏规则的技术手段也在影响数字货币的价格。去年九月中国禁止数字货币的时候,所有数字货币价格迅速下降,一切都陷入混乱。为此,我们从 Pytrends API 获取重大事件的 Google News 搜索频率数据。下面的图表中的红色曲线显示了当数字货币价格下降时,“数字货币”(Cryptocurrency)的搜索频率达到峰值。
很有意思吧?在本项目中,搜索的关键词由 Google 关键词工具选择,这个工具不仅让你知道关键词的流行程度,还提供了相关关键词的列表。通过所提供的列表和 Pytrend API,我们获得了七个不同的关键词的搜索频率数据。在稍后的章节中我将详细介绍这些术语。
因素3:公众的认知也是另一重要影响因素。购买越多,需求越多,数字货币价格就越高。要得到这些数据些难度,付费的 Twitter API 可以解决这个问题,但因为穷,我更希望把这笔钱花到其他地方。我选择的是 redditmetrics.com,该网站可以统计 Reddit 所有子话题的历史订阅增长数据。下面则对 Nem(New Economy Movement,其发行的数字货币中文名称为新经币,代码:XEM)的子话题订阅增长(橙色)与新的历史价格(蓝色)进行了比较。
正如预期的那样,订阅的增长与价格趋势变化有着高度的重合。
以上展示只是为了让你对这一领域有一个初步的了解,并向你介绍我们正在试图解决的问题。在我的 GitHub 上可以看到一个完整的 EDA,接下来,我将介绍一个预测硬币未来价格的模型的统计方法。
如何建立模型?
在本节中,我们将深入探讨方法论。这里仅仅是每一步的总结,如果你想对代码深入挖掘,请参阅我的GitHub库。
1 确定协整关系对
我们通过 Cryptocompare API 获得了12种主要数字货币的价格历史数据。在我们对时间序列做任何事情之前,我们必须确保时间序列是固定的。为了满足平稳性的要求,时间序列必须具有常数均值、常数方差和自相关常数。而在现实中,完美定态的时间序列是不存在的,但无需担心,我们有迪基-福勒检验!
扩展迪基-福勒检验是一个统计测试,可以测试一个自回归模型是否存在单位根(雷锋网注:单位根检验是针对宏观经济数据序列、货币金融数据序列中是否具有某种统计特性而提出的一种平稳性检验的特殊方法)。测试采用自回归模型,并通过不同的滞后值对信息因素进行优化。当中的零假设(雷锋网按:零假设是做统计检验时的一类假设,内容一般是希望能证明为错误的假设)是时间序列可以用单位根表示。在统计学上,如果你的 P 值小于 0.05,这意味着可以拒绝零假设。但是——再一次强调——对于特定问题,结果应该是可解释和有意义的。事实证明,设定 0.05 的门槛,所有 12 种硬币的历史价格都不会通过定态测试,在这种情况下,我们要对时间时间序列定态化和重新进行测试。
差分化:这是用来对时间序列定态化的一种常用方法,可以消除趋势和季节性。在本项目中,我们对连续观测的差异(滞后1)进行了差分化。如果一个时间序列具有季节性因素,则滞后值应该是季节性的周期。在数字货币的例子中没有明显的季节性成分。下面的箱线图表明,以太坊在一天24小时内每小时的价格平均值相对恒定。其方差不同,但没有明显的模式。而在对时间序列进行了滞后差分后,所有的12种货币都通过了迪基-福勒检验。
格兰杰因果关系检验:这是一种统计假设检验,用于确定一个时间序列是否有助于预测另一个时间序列。在这里,我们用格兰杰因果关系检验来确某一数字货币的价格滞后值是否可以用于预测其他硬币的未来价值。
既然12个钱币的历史价格数据是定态的,我们构建了一个总的 132 组不同货币的数据对,每一个数据对都是某数字货币对应于其他数字货币的历史价格(注意:ETH-BTC 数据对和 BTC-ETH 数据对不是一回事!),用于进行格兰杰因果关系检验。检验的零假设是:每一个货币数据对中,后一种数据货币没有对前一种数据产生影响,在测试之后后我们初步发现,达世币(DASH)与比特币现金(BCH)之间相关性最强(即,比特币现金的价格对达特币价格影响最大),但进一步的研究结果表明,这种强烈的相关性是由于来自韩国交易的激增。考虑到这不是一个正常的情况,我们选择了XEM-IOT 这一对相关性最强的货币对,在本项目中,我们将用 IOT(物联网货币)的历史价格来对 XEM(新经币)的未来价格进行预测。
2.特征选择
数据查询。以下是分析的数据及其来源:
-
Cryptocompare API:XEM 和 IOT 的历史价格,每小时;
-
Pytrends API:Google News 对“Cryptocurrency”关键词的搜索频率;
-
redditmetrics.com数据:对”Cyptocurrency”、“Mem”、“IOT”子话题订阅量的增长
-
Pytrends API:对“Nem wallet download“、“Iota wallet download”, “Nem price”, Iota price”, Bitcoin price”, “GPU for mining”等 Google 关键词的搜索频率 —— 这些关键词基于 Google 关键词工具挖掘。
-
Yahoo Financial API:AMD、NVIDIA 两大挖矿军火商的股票价格
ElasticNet回归、正则化:上述查询数据可能存在关联性,如在 “Bitcoin price(比特币价格)” 和 “CryptoCurrency(虚拟货币)”可能包含类似 Google 搜索频率信息,谷歌搜索频率。使用类似的特性构建模型会造成冗余并影响预测结果。ElasticNet可将冗余预测系数缩小到零。
在本项目中,我们对上述 13 个特征变量用 ElasticNet 回归正则化,其中因变量为 XEM 的历史价格。经过算法处理后,最终剩下三个具有非零系数的预测因子。这些特性将用于构建最终模型。我同样也用也试着用 13 个特征建立了一个模型,与使用选定的 3 个特征建立的模型相比,性能差异并不显著(所有 15 个特性的 MSE=0.107,3 个特性的 MSE=0.105)。最终我选用了 3 个特征的模型。
3. 建立模型
在本项目中,我们使用 ARIMAX 模型来预测 XEM 的未来价格。ARIMAX 模型如同 ARIMA 模型通过自回归和移动平均值进行预测,但 ARIMAX 可包含其他外生变量,在此我们使用的是之前选择的 3 个外生变量。
数据预处理:我们之前已经提到了定态性和迪基-福勒检验的相关内容,在此不再展开。这些书在 ElasticNet 前已经标准化过了,我们只需进行差异化处理,并确保其通过了迪基-福勒检验。之后数据被清理并分成测试集和训练集。
ACF & PACF:数据已经确定,我们需要 1)确定时间序列是自回归或是移动平均过程;2)确定我们需要在模型中使用自回归和移动平均过程的顺序。ACF可以回答第一个问题,也可以用于确定移动平均序列中的滞后阶数。下图为 XEM 历史价格的 ACF 和 PACF。
正如我们所见,这是一个自回归过程,因为 ACF 没有截止值。PACF 在滞后之后有一个截止值,这将是我们用于 ARIMAX 模型的参数。
ARIMAX:使用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 数据或者使用不同的机器学习模型可能会显著提高其性能,目前我会考虑提出一个能用于自动交易的交易信号算法,但摸摸我的钱包,我不禁流下了悲伤的泪水。
我希望你能像我喜欢写这篇文章一样喜欢这篇文章!如果你有任何想法,请留言让我知道。
。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/129158.html