GaiaEx AcademyGaiaEx Academy
用 LSTM 与 Transformer 模型做时间序列预测
开发者AI 与机器学习12 min read

用 LSTM 与 Transformer 模型做时间序列预测

用序列模型预测价格走势

分享文章

理解时间序列数据

时间序列是按时间排序的一连串数据点——每分钟的股价、每日的比特币收盘价、每小时的气温读数。时间序列区别于其他数据的地方在于顺序很重要。在分类数据集里打乱行的顺序无伤大雅;但打乱时间序列就会摧毁它的意义。

有三个属性决定了任何时间序列的特征。趋势是长期的方向——BTC 价格从 2019 年初的 $3,000 一路涨到 2021 年底的 $60,000,这是一段清晰的上升趋势。季节性指的是在固定间隔上重复出现的模式——加密市场常常在美国交易时段成交量上升,而周末活动减少。平稳性意味着均值、方差等统计属性随时间保持恒定。大多数金融时间序列都是非平稳的——价格要么向上漂移,要么暴跌——这给那些假设分布稳定的模型带来了挑战。

在把金融数据喂给任何模型之前,你都需要先对它做变换。取对数收益率(相邻两期价格比值的自然对数)能把非平稳的价格转换为近似平稳的收益率。差分——即减去前一个值——也能达到类似的效果。这些变换不是可有可无的;它们是大多数预测方法能够正确运作的前提。

分解一段金融时间序列(概念示意) 趋势 季节性波动 time → 观测值 = 趋势 + 季节性 + 噪声(收益率常能让噪声更稳定)
真实价格混合了缓慢的漂移、重复的模式和随机性——模型瞄准的是你想要预测的那一部分。

ARIMA:经典的基准模型

ARIMA(自回归整合移动平均,AutoRegressive Integrated Moving Average)几十年来一直是时间序列预测的主力工具。它结合了三个组成部分:AR(p) 用前 p 个值来预测下一个值,I(d) 对序列做 d 次差分以达到平稳,MA(q) 则对过去预测的误差项进行建模。

对于金融数据,ARIMA 充当一个关键的基准。任何机器学习模型,只要在你的特定数据集上无法击败调校良好的 ARIMA,那它就是在增加复杂度却不创造价值。在实践中,对于信噪比尚可掌控的低频数据(每日或每周 K 线)的短周期预测,ARIMA 的表现常常出人意料地好。

# ARIMA baseline for BTC daily returns
from statsmodels.tsa.arima.model import ARIMA
import pandas as pd

returns = prices.pct_change().dropna()
model = ARIMA(returns, order=(2, 0, 1))  # AR(2), no differencing (returns already stationary), MA(1)
fitted = model.fit()
forecast = fitted.forecast(steps=5)
print(f"AIC: {fitted.aic:.2f}")  # Lower AIC = better model

当面对复杂的非线性模式、机制切换以及高维特征空间时,ARIMA 的局限就显现出来了。这正是深度学习登场的地方。

ARIMA(p,d,q):过去的值与误差如何汇入预测 AR(p) y uses yt-1…t-p I(d) d differences MA(q) errors εt-1…t-q ŷt+1 forecast 用 ACF/PACF、AIC 或滚动交叉验证来选 (p,d,q)——然后和 ML 基准做对比。 金融收益率在直接使用对数收益率时常令 d=0
自回归、整合(差分)和移动平均冲击合并成一个紧凑的线性预测引擎。

用 LSTM 网络做序列建模

长短期记忆(LSTM,Long Short-Term Memory)网络是一类循环神经网络,专为学习序列数据中的长程依赖而设计。普通 RNN 会遭遇梯度消失,仅仅几个时间步之后就会遗忘信息;而 LSTM 不同,它使用一套门控机制——遗忘门输入门输出门——来在数百个步长里有选择地保留或丢弃信息。

对于金融时间序列,LSTM 相对 ARIMA 有两个优势:它能刻画非线性关系(价格动态很少是线性的),并且能同时纳入多个输入特征——不只是历史价格,还有成交量、波动率、资金费率、订单簿失衡,以及任何你认为携带预测信息的信号。

为 LSTM 准备数据需要谨慎地做开窗。你要构造固定长度的输入序列(例如 60 个时间步),并把它与目标值(下一期的价格或收益率)配成一对。归一化至关重要——把特征缩放到 [0, 1],或者标准化为零均值、单位方差。但这里有一个陷阱:你必须只在训练数据上拟合缩放器,再用相同的参数去变换验证集和测试集。在整个数据集上拟合会泄露未来信息。

绝不要用从整个数据集计算出的统计量来做归一化。只在训练集上拟合你的缩放器,然后把它应用到验证集和测试集。这一个错误造成的前视偏差,比任何其他数据准备失误都要多。

# LSTM data preparation with proper normalization
import numpy as np
from sklearn.preprocessing import MinMaxScaler

def create_sequences(data, window=60):
    X, y = [], []
    for i in range(window, len(data)):
        X.append(data[i - window:i])
        y.append(data[i, 0])  # Predict next close
    return np.array(X), np.array(y)

# Fit scaler on training data ONLY
scaler = MinMaxScaler()
train_scaled = scaler.fit_transform(train_data)
test_scaled = scaler.transform(test_data)  # Transform, don't fit

X_train, y_train = create_sequences(train_scaled)
X_test, y_test = create_sequences(test_scaled)

注意力机制与时间融合 Transformer

那个曾经彻底改变了自然语言处理的自注意力机制,对时间序列同样威力十足。注意力不像 LSTM 那样逐步处理序列,而是让模型同时看到所有时间步,学习历史上哪些时刻对预测未来最为相关。

时间融合 Transformer(TFT,Temporal Fusion Transformer)由 Google Research 于 2021 年提出,专为多周期时间序列预测而打造。它融合了多项创新:

  • 变量选择网络——自动学习哪些输入特征最重要,提供内建的可解释性。你可以看出模型更依赖价格动量、成交量还是资金费率。
  • 门控残差网络——抑制无关的输入,并使模型能够处理复杂的非线性特征交互。
  • 跨时间的多头注意力——识别出对每个预测周期而言,历史上哪些时间步信息量最大。
  • 分位数输出——产出预测区间(第 10、50、90 百分位)而非单点估计,给你一个对不确定性的度量——这对交易中的风险管理至关重要。

在实践中,TFT 在多个基准上的表现已经超越了 LSTM 和传统模型,包括用电需求预测、零售销售预测和金融波动率建模。对于像 GaiaEx 这样的平台所能接触到的加密市场,TFT 处理异质输入的能力——静态元数据(资产类型、上线日期)、已知的未来值(星期几、一天中的时刻)以及观测到的时变特征(价格、成交量、链上指标)——让它格外契合。

实战案例:预测 BTC 价格方向

我们要对能做到什么坦诚一点。预测比特币明天的确切价格,本质上是不可能的。有效市场假说(EMH)主张价格已经反映了所有可得信息,因而要稳定地做出预测无异于痴人说梦。在加密领域,EMH 的弱式形式还有得商榷——市场不像股票那样有效——但噪声相对信号的比例依然残酷。

一个更现实的目标是方向准确率:BTC 的收盘价会高于还是低于开盘价?这个二元分类问题更易于处理,而且哪怕只比 50% 的准确率略有提升(比如能稳定保持 53–55%),配合合适的头寸规模与风险管理,也能带来相当可观的利润。

一条实用的流水线大致是这样:

  • 特征:60 期收益率、RSI、MACD 柱状图、布林带宽度、成交量比率(当前对比 20 期均值)、来自永续合约的资金费率、BTC 主导率,以及未平仓合约量的变化。
  • 模型:两层 LSTM,含 128 个隐藏单元、0.3 的 dropout,后接一个用 sigmoid 激活的全连接层做二元分类。
  • 划分:在 2020–2023 年上训练,在 2024 年 1–6 月上验证,在 2024 年 7–12 月上测试。绝不打乱顺序——始终按时间顺序划分。
  • 评估:方向准确率、对涨跌预测的精确率/召回率,以及——最重要的——假设每个信号采用固定头寸规模时模拟出的盈亏。

如果你的模型在样本外测试集上达到了 54% 的方向准确率,且利润因子高于 1.2,那你就有了值得进一步探索的东西。如果它显示出 65% 的准确率,那你几乎可以肯定是过拟合了。金融市场里真实的优势都很微小,凡是声称相反的人,都是在兜售点什么。

评估指标与集成方法

选对指标,决定了你究竟是不是在为正确的目标做优化。MAE(平均绝对误差,Mean Absolute Error)以与数据相同的单位告诉你预测误差的平均幅度——直观,但不会对大误差施加不成比例的惩罚。RMSE(均方根误差,Root Mean Squared Error)在求平均前先把误差平方,对离群值施加重罚——当一次灾难性的错判比许多次小误差更重要时,它就很合适。方向准确率衡量模型正确预测价格上涨还是下跌的次数占比——对交易信号而言,这往往是最相关的指标。

集成方法把多个模型的预测组合起来,以降低方差、提升稳健性。常见的做法包括:

  • 简单平均——把 LSTM、Transformer 和 ARIMA 的预测取平均。如果每个模型捕捉到信号的不同侧面,那么集成的表现会胜过任何单一模型。
  • 堆叠(Stacking)——训练一个元模型(例如梯度提升树)来学习如何最优地组合基模型的预测。
  • 机制感知切换——用一个波动率机制检测器来决定该信任哪个模型。LSTM 可能在趋势行情中表现出色,而均值回归模型在震荡行情中更胜一筹。

无论你采取哪种方法,都要记住:研究与生产之间的鸿沟巨大无比。一个在 Jupyter notebook 里能以 55% 的准确率预测 BTC 方向的模型,当它通过像 GaiaEx 这样的平台实盘执行时,必须经受住延迟、滑点和交易成本的考验。从第一天起就把这些现实纳入你的评估流水线去模拟——而不要把它当作事后才想起的补丁。