用Python预测比特币价格:当过去不再重复

·

时间序列与加密货币:为什么传统预测会失效?

时间序列(Time Series)是按时间顺序排列的数据点。在金融领域,我们通常假设“历史会重演”,于是用自回归模型(Autoregressive Model)去捕捉趋势、周期与季节性。然而,比特币的价格告诉我们:当“过去不再重复”,经典框架就动摇了。

先记住这条公式:

预测值 = 可重复模式 + 无法解释的波动

只要无法解释的波动占比越高,纯粹基于历史的模型就越容易失效。本文将演示如何在一次真实场景里识别这一临界点,用PythonSkforecastLightGBM做一次没有“事后诸葛亮”的预测,并诚恳地告诉你:什么时候该说“我预测不了”。

用例:比特币日线数据(2013–2022)

自2013-04-28至2022-01-01,共3171个交易日,包含了比特币的最高价、最低价、开盘价、收盘价、成交量与总市值。数据可直接从GitHub拉取:

import pandas as pd
url = "https://raw.githubusercontent.com/skforecast/skforecast-datasets/main/data/bitcoin.csv"
btc = pd.read_csv(url, parse_dates=['date']).set_index('date').asfreq('D')

我们尝试预测的是最后一列的 close——每日收盘价。可以看到,这一价格区间横跨 128 USD → 67,500 USD,量级变化惊人。

特征工程:把减半事件当成外生变量

比特币减半(Bitcoin halving)每 210 000 个区块发生一次,大约四年一次,直接影响矿工收益,间接影响市场供需。我们已经历的三次减半分别发生在:

利用剩余区块数,可估算下一次减半大约在 2024-05-06。之后在数据里构建两列外生变量:

名称含义
reward当日区块奖励
countdown_halving距离下一次减半的天数倒计时

这两列将辅助模型捕捉可能的长周期影响。

可视化探索:价格分布有何玄机?

我们把蜡烛图、分布密度图、年度与月度箱体图跑了一遍,发现:

  1. 长期慢牛后暴力拉升:2013-2020 价格高度集中在 2 万美元以内;2021 起跳至 3-6 万美元,分布极度右偏。
  2. 年度季节性:每年12月至次年2月波动显著放大;其他月份差异不大。
  3. 缺乏短周期重复:周与日几乎没有明显循环,说明中短期没有稳定可复制的形态

👉 比特币背后真正驱动价格的是什么?这里给出一个理性投资者不可错过的视角。

这些洞察提醒我们:如果把价格本身当目标,分布不均+高噪声=模型很容易翻车。一个常用技巧是改做收益率预测涨跌方向判断,以降低对极端值的敏感。

基线:随机游走(Random Walk)

随机游走理论假设“下一刻价格=此刻价格+随机扰动”,因此最朴素却不易超越的基线是:

用它与 2021-07-01 至 2022-01-01 的实价对比,mean_absolute_error1260 USD。看似不小,但你很快发现:更复杂的模型未必更好

递归自回归实验:多lag Lightning GBM

我们用 LightGBM 作为内核对递归自回归器(ForecasterRecursive)做回测,分别尝试 lag=1,7,30。结果汇总如下:

lags均在1步预测MAE
1全同≈1260
7略降≈1257
30几乎不变≈1255

结论:在1步向前的滚动回测中,增加历史lag不显著改善误差。这与我们之前通过自相关函数(ACF/PACF)发现的“只有lag1显著”完全吻合。

FAQ:进一步疑问与解答

Q1:为什么1步滞后(lag=1)就已足够?
A:短线比特币的相邻两日价格差符合近似随机游走,更高阶lag信号极其微弱,LightGBM无法有效提取。

Q2:可以引入技术指标增加特征吗?
A:尝试RSI、MACD等指标的确能降低线下验证误差,但一旦外推,过拟合风险极高;模型对噪音的记忆大过模式。

Q3:把目标改为涨跌方向,准确率会更高吗?
A:方向分类准确率在55–58%徘徊,略优于盲猜50%,但不足以覆盖交易摩擦成本。

Q4:多步预测(t+n, n>1)是否可行?
A:误差呈线性甚至指数级放大,对高频交易难以落地。

Q5:深度学习(RNN、Transformer)能拯救吗?
A:长序列记忆对宏观序列可能有效,但比特币的跳跃性新闻事件(监管、宏观流动性)仍会把“黑天鹅”误差带进远场。

Q6:那有什么可行思路?
A:把预测目标拆小,例如只预测“次日波动区间”或“极端波动概率”,再配合资金管理。或者忠实承认自己无法预测,以资产配置替代择时。

结果:何时接受“我不知道”

通过一次完整的建模实验,我们发现:

换句话说,把过去100%投射到未来的假设在比特币市场破碎了

👉 想继续深入加密货币的波动规律?这里为你准备了可交互的链上数据接口。

最后在代码里保留的误差表,Random Walk 几乎就是门面担当,提醒我们:拒绝过度拟合的勇气也是一门技能

结语:风险意识就是最好的“预测”

在金融世界里,“不会重复的历史”才是真正的常识。本文不是要泼冷水,而是告诉你:

愿每一位用Python探索市场的数据爱好者,都能把 不确定性的镰刀 磨成 风险管理的盾牌