当前位置:首页-元宇宙-正文

比特币今日的数据

1、摘要

本文详述了如何通过数据预览,基本数据分析、探索式数据分析,缺失数据填补等方法,实现对Kaggle上根据比特币历史数据集预测未来走势的问题进行数据分析的探索式实践。
数据来源:Kaggle—Bitcoin Historical Data

2、项目内容介绍

该项目是一个供感兴趣的人进行分析的实例项目,而非一个竞赛项目。本人试图通过分析该数据集预测其未来变化趋势。
比特币是运行时间最长,最知名的加密货币,一位匿名者使用中本聪(Satoshi Nakamoto)的名字于2009年向密码学邮件组群发了一篇学术论文,首次提出了比特币的概念。比特币作为数字交换的去中心化媒体,交易经过验证并记录在公共分布式账本(区块链)中,而不需要受信任的记录保存机构或中央中介机构。交易块包含以前交易块的加密哈希,因此被链接在一起,作为曾经发生过的所有交易的不变记录。就像市场上的任何货币或商品一样,比特币交易和金融工具很快被公众采用了比特币并继续增长。如今,比特币从无人问津到支撑起整个数字货币市场67.4%的市值,不仅如此,比特币正在努力“转正”,尝试走入传统机构投资者的投资组合之中。本次用于分析的数据集包括每隔一分钟的历史比特币市场数据,时间长度为从2012年的一月至2020年四月。
由于主要自变量为时间,所以可以将该项目定义为时间序列分析

3、数据基本情况展示

3.1 数据加载

bitstampUSD_1-min_data_2012-01-01_to_2020-04-22.csv以及
coinbaseUSD_1-min_data_2014-12-01_to_2019-01-09数据文件情形
比特币今日的数据_第1张
图:两表数据类型一览(左为2012-2020数据,右为2014-2019数据)

下文仅采用2012至2020年的数据集进行分析
比特币今日的数据_第2张
图:2012年1月至2020年4月比特币数据表前五行情形
比特币今日的数据_第3张
比特币今日的数据_第4张
图:2012年1月至2020年4月比特币数据表各变量描述性统计值
比特币今日的数据_第5张
图:数据集中所有变量说明

3.2 数据预处理

由于最高价、最低价、收盘价、开盘价、BTC交易额、现价交易额、成交量的加权平均价与前一个非空值同为在一个时间窗口内统计的数据,所以对最高价、最低价、收盘价、开盘价的缺失值补为上一个非空值,对BTC交易额、现价交易额、成交量的加权平均价的缺失值补0。
并且将Unix时间改为年月日的形式。
比特币今日的数据_第6张
图:补全缺失值后前五行数据预览

3.3 数据探索式分析

画图代码的源码 Time Series with Range Selector Buttons
比特币今日的数据_第7张
图:2014-2020比特币开盘价变化趋势图
由图可以看出在17年1月之前是增长极为缓慢的,而从17年7月至18年1月可以说是猛增的一个时间段,在此之后处于持续下跌趋势。17年1月中国人民银行及其上海总部约谈三家比特币交易所,但同年9月叫停ICO(区块链首次币发行),10月比特币中国、火币网、 Okcoin币行发布清退公告,停止人民币和比特币交易。12月芝加哥期权交易所正式挂牌上市比特币期货。18年由于疑似遭受黑客攻击,交易出现安全问题,随即印度、澳大利亚、日本、韩国、美国、中国、俄罗斯等相关部门相继出台政策监管比特币交易。直至2019年2月才逐渐回升,同时监管不定性也逐渐增加。
比特币今日的数据_第8张
比特币今日的数据_第9张
图:2008至2019年比特币大事件回顾(来源Odaily星球日报)

4、时间序列分析

比特币的价格波动一般受到黑客、社会接受度、非法活动、意识和认知、媒体影响和公众情绪、政府规定、比特币大量持有者等因素的影响。而由于用模型对比特币闭盘价或成交额等的预测是在不考虑外界消息等因素影响下,单就数据本身进行分析,所以仅可用于参考或练习。且由于17年9月至19年10月数据较为久远且波动性较大,所以暂时仅用18年12月17日至2020年4月20日的数据进行分析。并将数据集分为训练集和测试集,分割时间点为2020年4月1日,即用训练后得到的模型对后20天进行预测,并与实际值相比较。

4.1 预测过程简述

时间序列一般用于分析和预测与时间相关的序列,同时也可以处理有季节性变化的数据。而当事件发生除时间外的相关影响因素越多,预测越不准确。为了增强预测结果的准确性,考虑用ARIMA 和LSTM进行预测分析。

4.2 ARIMA

1、模型描述
AR为自回归模型,描述当前值和历史值之间的关系;I为差分,用于序列平稳;MA为移动平均模型,关注与误差项的累加。具体理论描述可以参考知乎——时间序列分析(2) ARIMA 模型
本次实验所有代码均在pycharm2020上运行,python版本为3.8。
其中用到的库有


2、数据导入、拆分训练集和测试集


3、序列平稳化


结果为


注:第一项如果比花括号内1%,5%,10%对应的值都小则代表数据较为平稳,第二项表示P-value即假设检验的依据,小于0.05表示该独立变量与输出结果有关,值越接近于0越好。
由该结果表明数据的平稳性较差,需要做差分,所以首先考虑做一阶差分


比特币今日的数据_第10张
图:一阶差分与原数据对比图

4、ACF和PACF
ACF为自相关系数,PACF为偏自相关系数,可以看出不同时序的相关性,均用于帮助确定阶数的选择


比特币今日的数据_第11张
由图可以看出仅一阶差分已较为平稳,故d值取1,而且由ACF和PACF图可以确定p,q值均为1时,保证95%的数据都基本落在置信区间内。


比特币今日的数据_第12张
图:模型评价
由图中P值可以看出,除常数外的系数均小于0.05,表示存在统计上的显著关系。说明该模型有一定的可信度。

5、利用测试集进行预测分析


比特币今日的数据_第13张
图:ARIMA模型对比特币收盘价的预测

由图可以看出,仅能预测出整体呈上升趋势,但并不精确。

6、计算误差
MSE表示均方误差(mean squared error),MAE表示平均绝对误差(mean absolute error),可以反映出预测值和被预测值之间的差异程度。


结果为


7、模型改进(调参)
以上分析是在将数据按天进行合并后得到的预测结果。而当将时间序列分析的数据按星期进行合并后,再重复以上步骤再次进行分析及预测可以得到以下模型评价和预测数据。
比特币今日的数据_第14张
图:比特币收盘价按星期合并后所得序列与其一阶差分对比图
比特币今日的数据_第15张
图:比特币收盘价按星期合并后所得序列的ACF和PACF图
比特币今日的数据_第16张
图:调参后模型评价比特币今日的数据_第17张
图:比特币收盘价按星期合并后所得序列及预测值

计算误差值


由上图可以看出当比特币收盘价按星期合并后得到的数据更少,而因为测试集定为2020年4月1日至20日,按星期合并相当于只预测四个数据,即2020年4月6日,4月13日,4月20日,4月27日(均为周一)。由此可以看到预测的大致趋势相近,可用于参考的价值更大。但是由于计算出的均方误差值更大,所以仍然要综合不同角度进行分析。

8、模型评价以及改进
我们可以看到上述模型在比特币价格数据预测中的表现并不是很好。比特币的价格非常不稳定,非常随机,经常容易受到外部因素(或新闻)的影响,比如货币监管、投资或社交媒体上的谣言。所以如果能够加入来自新闻或社会媒体的额外数据,会使该模型表现得更好、预测所得结果更加准确。在实际应用中不仅要加上市场或社会影响因素,更要结合对不同时间如月、星期、天甚至是小时的预测情形进行判断。

4.3 LSTM

1、模型描述
LSTM为长短期记忆人工神经网络(Long-Short Term Memory),是RNN(Recurrent Neural Network循环神经网络)的变形,能够有效的防止RNN中梯度爆炸和梯度丢失的问题。模仿人的记忆设定,增添主线。主要通过三个本结构来实现信息的控制和保护,这三个结构为遗忘门,输入门和输出门。
具体理论介绍可以参考知乎—人人都能看懂的LSTM介绍及反向传播算法推导(非常详细)以及难以置信!LSTM和GRU的解析从未如此清晰(动图+视频)

用到的库有


2、数据导入、拆分训练集和测试集
LSTM需要预先对数据进行归一化处理以消除量纲的影响,要将数据缩放在0到1之间


比特币今日的数据_第18张
图:经过处理后得到的比特币收盘价训练集数据图

3、建立LSTM模型
设定参数值:门的激活函数为sigmoid函数,LSTM的网络节点数设定为240, batch_size表示梯度下降计算参数个数,个数太多计算速度慢,个数太少会导致收敛效果不好。epochs为训练代数。


4、预测并与测试集进行对比


比特币今日的数据_第19张
比特币今日的数据_第20张
图:比特币收盘价的预测值和实际值比较(预测单位为小时)

5、计算误差


结果为


6、修改时间周期
比特币今日的数据_第21张
比特币今日的数据_第22张
图:将比特币收盘价按天合并后预测结果
比特币今日的数据_第23张
图:将比特币收盘价按星期合并后预测结果

与在之前AMIRA模型操作一致,将比特币的收盘价按天和星期进行合并,再重新进行预测,可以看到预测结果不再与之前一样“贴合”,预测值均高于实际值,仍然是可以看到整体趋势相近。

6、调参
由于LSTM涉及到的参数较多,单独改变一个参数就能对预测结果产生较大影响,再者使用完全相同的参数得到的模型预测得到的结果也不尽相同。所以现在测试不同参数对模型预测结果产生怎样的影响。

  1. 网络节点数(也可以理解为维数)


比特币今日的数据_第24张图:网络节点数分别取23,56,128,256时预测值与真实值之差的结果箱线图

由该箱线图可以看到,网格数太小时异常值较多,预测结果波动性较大。网格数为128时,预测值分布较为集中。
分别运行三次后得到四组数据的标准差、MAE、MSE(均保留两位小数)和绝对误差(保留三位小数)的最优值如下表所示

dim 标准差 绝对误差 MSE MAE
23 31.72 0.042 8773.44 88.14
56 11.50 0.003 1002.03 29.49
128 14.11 0.006 5622.74 73.64
256 14.58 0.003 1094.79 29.70

综合以上可以看出当网络节点数取值为56时效果较好。需要说明的是由于取相同参数的模型每次训练结果仍然不同,所以每种取值都需要多做几次实验。除此之外,在控制变量的前提下修改其余参数的取值,观察结论是否相同。

  1. epochs训练代数

比特币今日的数据_第25张
图:迭代次数分别取20,30,80,100时预测值与真实值之差的结果箱线图

同样也可得出下表

epochs取值 标准差 绝对误差 MSE MAE
10 6.18 0.034 7475.73 86.24
20 7.13 0.014 9284.40 96.09
30 16.62 0.052 16044.28 125.57
50 7.70 0.021 1581.20 126.70
80 19.97 0.005 1007.08 26.36
100 11.50 0.003 1002.03 29.49

通过该表可知,epochs取值在50以上时,均方误差再不断减小。而由于epochs越大会导致计算时间越长,所以在接下来的实验中倾向于用80进行计算。

  1. batch_size模型内参数个数

比特币今日的数据_第26张
图:batch_size分别取20,30,50,80时预测值与真实值之差的结果箱线图

batch_size 标准差 绝对误差 MSE MAE
10 27.39 0.005 1294.03 29.06
20 20.79 0.007 2408.49 44.46
30 24.52 0.007 2569.87 44.39
50 14.58 0.015 11219.96 104.92
80 11.72 0.019 17198.65 130.62

由此看出,当batch_size取值为10或20时效果比较好,同时也可以较快的得出结果。

7、模型评价与改进
仅就目前结果而言,由与实际值比较仍然由较大的误差值,所以可以看出模型是过拟合的。LSTM模型应用于时间序列分析时还可以调节的参数很多,比如添加L1或L2正则化项来避免过拟合,设置Dropout以随机丢失(或者说遗忘)节点,考虑偏方差权衡等等。

5、总结与展望

本文通过对比特币历史数据集进行数据清洗、可视化展示、探索式分析,并使用ARIMA和LSTM两个模型对比特币2020年4月1日至20日的收盘价做出预测。而由于比特币开盘价、收盘价、成交额等等和股票相似都容易受到市场的影响,所以在建模分析时仅对数据集本身做出分析,而未考虑加入市场因素的影响。对于ARIMA模型,可以预测大致价格波动趋势,但具体数值的预测并不精确。而对于LSTM模型,从图中我们可以看到对测试集的预测结果非常贴合,同时各项指标数据也显示拟合效果比较好。目前仅尝试使用这两个模型进行分析,在时间序列分析中,还有XGBoost,Prophet等等模型需要实践应用,结合不同模型综合分析将会得到更多更有趣的结论。

6、后记

通过阅读大量相关文章发现,LSTM模型的学习策略是预测一个尽可能与前一天贴合的值,这样就能得出我们想要的结果也就是尽可能小的MSE等值。故而实质上,本文所建立的LSTM模型是基于历史数据的特征对未来的预测。有篇文章说了这样一句话——“过去的业绩不代表未来的产出”。所以此次对比特币数据集的探索式分析以及建模预测的学习和实验,相当于是对两大时间序列分析模型的简单应用实战,并不是说这两个模型在实际预测的价值不大,而是需要基于这些模型进行更深层次的学习和改进。如果读者有好的意见和建议,或者有什么疑问,欢迎与我讨论,非常感谢。