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 這樣的平臺實盤執行時,必須經受住延遲、滑點和交易成本的考驗。從第一天起就把這些現實納入你的評估流水線去模擬——而不要把它當作事後才想起的補丁。