基于BP神经网络的加密货币指数的预测
2019-09-12李迎路
李迎路
一、引言
随着人们对加密货币认可度的提升、各国政府出台的宽松政策以及投资者的进入,加密货币市场呈现出火热态势,大量的线上交易平台在全球范围内建立起来,如今全球加密货币市场已达万亿级别。而加密货币自身不同于传统金融工具的性质使得其价格存在巨大的波动性,同时加密货币市场不存在涨跌限制,某种加密货币的价格在一天内的涨跌幅度可能高达30到40个百分点,投资者面临着巨大的投资风险。随着人们对加密货币市场理解与研究的深入,出于帮助投资者规避风险、增加市场透明度的目的,加密货币市场上出现了类似于股指的被称作加密货币指数的金融工具:它通过对从市场中收集到的交易信息进行加权平均来刻画市场整体的走向,或者通过特定算法对收集到的市场信息进行汇总来勾画市场中交易者的整体状态。加密货币指数能够像证券市场中的上证综指、沪深300一类的指数一样成为市场的晴雨表、为投资者提供可投资的风险相对较低的加密货币指数基金。
本文着眼于国内有关加密货币市场的预测这一课题研究较少的现状,尝试通过构建BP神经网络对加密货币指数这种新生事物的收盘价进行预测,希望能够起到抛砖引玉的作用,以激发起更多优秀的研究者的研究兴趣与热情,从而丰富这一课题的理论与实践,最终能为投身于加密货币市场的投资者提供切实可行的预测工具与理论指导。
二、文献综述
国外有大量和加密货币市场的预测有关的文献,有直接预测单一加密货币价格的,有预测加密货币指数的,也有利用创造出的加密货币指数去预测其他币种的价格。Alex Greaves和Benjamin Au分别使用线性回归、logistic回归、支持向量机、神经网络四种机器学习算法实现了对未来一小时比特币价格的预测,结果显示:神经网络的预测精度达到了55.1%,效果最好。McNally S使用循环神经网络(RNN)和长期短期记忆网络(LSTM)以及预测了比特币价格指数(Bitcoin Price Index),并且使用ARIMA模型做了对比,实证的结果发现:LSTM模型的预测效果较好,实现了52.78%的预测精度。Li等通过将推特上的信息进行汇总成两种指数,然后使用了梯度提升决策树(Extreme Gradient Boosting Regression Tree Model)预测了ZClassic价格的波动。国内有关加密货币市场预测的研究屈指可数,并且都是对单一加密货币的价格进行的预测,未发现和加密货币指数预测相关的研究,这是本文的一个创新点。梁秋等使用小波分析方法对比特币价格进行了时间跨度为一个季度预测,实证的结果显示预测结果在短期内与实际变化趋势大致相同。艾青先通过实验证明了比特币的交易趋势是可预测的,然后分别使用混合模型、多元回归模型、SVM模型、贝叶斯线性回归模型对比特币的价格进行了预测,之后又使用改进的贝叶斯模型将预测的准确率提高到了74.14%。孙坚提出了一种基于集成经验模态分解方法(EEMD)的比特币价格波动分析及预测方法。先从三个时间尺度分别对比特币价格时间序列进行理论分析和特征分析,之后对比特币价格展开预测,实证的结果显示此方法比单一的LSTM模型要好。
三、CCi30指数简介
本文选择CCi30指数作为实证部分的研究对象。CCi30指数发行于2017年1月1日,作为一个基于规则的加密货币指数,它通过跟踪30种按调整后的市值计算占市场份额最大的加密货币,来反映区块链板块的整体增长、日变化和长期走势。CCi30指数最初的目标是成为加密货币市场的晴雨表以及为消极交易者提供参与到具有增长潜力的加密货币市场的投资工具。CCi30指数通过在计算过程中引入调整函数很好地解决了比特币和莱特币市场份额占据过大从而致使权重计算不公平的问题,通过使用调整后的市值代替原始市值的方法避免了因加密货币极高的波动率带来成分的剧烈变动。
四、BP神经网络简介
1986年,为了解决感知机(Multilayer Perceptron,MLP)网络无法处理非线性问题的缺陷,Rumelhart和McClelland提出了BP神经网络(Back Propagation Neural Network)的概念,它使用多层网络学习的误差反向传播学习算法,即BP算法,较好地解决了多层网络的学习问题。经过30年的发展,BP神经网络已成为应用最为广泛的神经网络模型,它的适用范围覆盖了模式识别、数据聚类、时间序列预测等热门领域。BP神经网络自1986年诞生至今的30多年里已经得到了很大发展,相关的理论越来越成熟,各种新的学习算法、优化改进方法的出现使得网络的预测精度以及迭代速度都有了很大的提升,其应用范围得到了极大的拓展,因此本文选择了BP神经网络作为预测使用的模型。
五、CCi30指数预测模型的确立
本节为实证分析部分,是本文的中心,整个分析过程可分为3个步骤:
第一步:数据的选取和预处理,这一步用来获取实验所用的数据,并对其进行归一化处理来消除不同量纲对实验的影响。
第二步:网络拓扑结构的设计,即确定BP网络的层数以及最优隐层的节点数目。
第三步:使用第二步建立的BP神经网络对CCi30指数的收盘价进行预测,并分析预测的结果,进行总结。
本文使用的实验环境为MATLAB的神经网络工具箱。作为三大数学软件之一,MATLAB侧重于数值计算与矩阵运算,它所使用的脚本语言语法简洁,结构清晰,具有高度的可读性。神经网络工具箱是MATLAB用来实现神经网络功能所开发的官方扩展功能包,它用于实现神经网络功能的语句十分高级,往往使用几条指令就能完成网络的构建、训练与预测。
(一)数据的选取与预处理
本文所用的数据下载自CCi30的官方网站,时间范围自2018年3月1日至2019年3月26日,共计391天。在实证分析中,取前361天的数据作为训练样本,后30天的数据作为测试样本。
预测所涉及的指标为:开盘价、最高价、最低价、交易量。要预测的指标为:收盘价。为了消除量纲的影响,本文采用最常见的归一化方法——Max-Min标准化函数变换对数据进行归一化:
其中,x表示原始样本数据,x*为归一化后数据,xmin和xmax分别是样本数据最小值和最大值。(1)式为归一化处理公式,它将原始数据变换到[0,1]区间或[-1,1]区间内,(2)式为反归一化处理公式,它起到恢复预测值的量纲的作用。
(二)网络拓扑结构的设计
1.隐含层数目的确定
一个BP神经网络由输入层、隐含层、输出层构成。其中输入层和输出层都是一层,但是隐含层的数目需要额外设置。一般的观点认为设计BP神经网络时,隐含层的确定应优先考虑一层的情况。而且已有理论证明,任何非线性连续函数都可以通过使用一个三层的网络(单隐层)以任意精度逼近。所以基于以上的考虑,本文选择具有一个隐含层的三层BP神经网络。
2.隐含层节点数目的确定
输入层和输出层的结点数会随训练集(实证中所使用的数据)的确定而确定,但是隐含层的节点数目需要额外设置。隐层节点数目过多或过少都会影响神经网络的整体性能——前者会增加学习时间、出现训练过度、降低容错率和泛化能力,后者会使学习过程不收敛。因此隐层节点数目的最优选取对于提高神经网络的预测效果具有重要意义。对于隐含层最优节点数目的选取问题,现在尚没有被广泛接受的理论。一般的做法是先通过经验公式将节点的数目确定到一个大致的范围内,然后使用“试凑法”通过实验确定最优节点个数。
本文选取(3)式作为隐层节点数目范围的经验公式,n和l分别表示输入层和输出层节点数,a为1~10之间的常数。通过上述公式计算可得,隐层节点数目的范围为:3~12个。使用“试凑法”进行多次实验,最终得到以下结果:
表1 不同隐节点预测MSE
本文采用的评价指标为MSE(均方误差),MSE是最常用的性能函数,它可以计算预测值和真实值之间的差别,进而衡量网络的预测效果。由表1的结果可以知道:当隐节点数目为3的时候,模型预测的平均误差最小,且预测平均误差随隐节点数目大体呈上升趋势,因此本文选择隐节点数目为3个。
(三)最终结果和总结
使用上节确立的BP神经网络模型,使用MATLAB神经网络工具箱进行建模计算,并将真实值的折线图和神经网络输出的预测值的折线图放置在一起进行比较,得到结果如图1:
图1 改进后的BP网络预测效果
在图1中,黑色的折线表示模型给出的预测结果,灰色的折线表示真实值,预测天数为30天,由图像可知:除了个别点有比较大的偏差外,预测值总体上能够比较好地拟合真实值,本文所使用的优化了隐层节点数的模型取得了比较好的预测效果。
本文尝试构建BP神经网络对加密货币指数CCi30指数的收盘价进行预测,先确定了神经网络隐含层的层数,然后使用“试凑法”确定了隐结点数目,之后使用MATLAB进行建模计算,取得了比较好的预测效果。本文的不足之处在于仅仅从数据易于获取的角度考虑,选取了CCi30指数391天的数据作为实证分析的对象,因此内容比较单薄、片面;而且本文未对神经网络的其他参数,比如说:学习函数、训练函数、学习率进行优化。希望后续的研究者能够在这些方面展开研究,以弥补本文的不足。