GaiaEx AcademyGaiaEx Academy
Previsione delle serie temporali per i trader crypto
SviluppatoreAI e ML12 min read

Previsione delle serie temporali per i trader crypto

Predire i movimenti di prezzo con modelli di sequenza

Condividi Post

Comprendere i dati delle serie temporali

Una serie temporale è una sequenza di punti dati ordinati nel tempo — prezzi delle azioni a ogni minuto, chiusure giornaliere di Bitcoin, letture di temperatura orarie. Ciò che distingue una serie temporale da altri dati è che l'ordine conta. Mescolare le righe in un dataset di classificazione è innocuo; mescolare una serie temporale distrugge il suo significato.

Tre proprietà definiscono il carattere di ogni serie temporale. Il trend è la direzione a lungo termine — il prezzo di BTC è passato da $3.000 all'inizio del 2019 a $60.000 entro la fine del 2021, un chiaro trend ascendente. La stagionalità (seasonality) si riferisce a pattern ripetuti a intervalli fissi — i mercati crypto spesso vedono volume aumentato durante le ore di mercato USA e attività ridotta nei weekend. La stazionarietà significa che proprietà statistiche come media e varianza restano costanti nel tempo. La maggior parte delle serie temporali finanziarie sono non-stazionarie — i prezzi derivano verso l'alto o crollano — il che crea sfide per i modelli che assumono distribuzioni stabili.

Prima di alimentare dati finanziari in qualsiasi modello, devi trasformarli. Prendere i rendimenti logaritmici (log returns) (il logaritmo naturale dei rapporti di prezzo tra periodi consecutivi) converte prezzi non-stazionari in rendimenti approssimativamente stazionari. Il differencing — sottrarre il valore precedente — ottiene un effetto simile. Queste trasformazioni non sono opzionali; sono prerequisiti perché la maggior parte dei metodi di previsione funzioni correttamente.

Decomposizione di una serie temporale finanziaria (concettuale) Trend Oscillazione stagionale tempo → Osservato = trend + stagionalità + rumore (i rendimenti spesso stabilizzano il rumore)
I prezzi reali mescolano una deriva lenta, pattern ripetuti, e casualità — i modelli puntano alle parti che vuoi predire.

ARIMA: la baseline classica

L'ARIMA (AutoRegressive Integrated Moving Average) è stato il cavallo di battaglia della previsione delle serie temporali per decenni. Combina tre componenti: AR(p) usa i precedenti p valori per predire il successivo, I(d) applica il differencing alla serie d volte per ottenere la stazionarietà, e MA(q) modella i termini di errore dalle predizioni passate.

Per i dati finanziari, l'ARIMA serve come baseline critica. Qualsiasi modello di machine learning che non riesce a battere un ARIMA ben calibrato sul tuo dataset specifico sta aggiungendo complessità senza valore. In pratica, l'ARIMA spesso performa sorprendentemente bene per previsioni a breve orizzonte di dati a bassa frequenza (candele giornaliere o settimanali) dove il rapporto segnale-rumore è gestibile.

# Baseline ARIMA per i rendimenti giornalieri BTC
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

I limiti dell'ARIMA diventano evidenti con pattern nonlineari complessi, cambi di regime, e spazi di feature ad alta dimensionalità. È qui che entra in scena il deep learning.

ARIMA(p,d,q): come valori passati ed errori alimentano la previsione AR(p) y usa yt-1…t-p I(d) d differenze MA(q) errori εt-1…t-q ŷt+1 previsione Scegli (p,d,q) con ACF/PACF, AIC, o rolling CV — poi confronta con baseline ML. I rendimenti finanziari spesso impostano d=0 usando i log-return direttamente
Autoregressione, integrazione (differencing), e shock di moving-average si combinano in un unico motore di previsione lineare compatto.

Reti LSTM per il modeling di sequenze

Le reti Long Short-Term Memory (LSTM) sono un tipo di rete neurale ricorrente progettata per apprendere dipendenze a lungo raggio nei dati sequenziali. Diversamente dalle RNN vaniglia, che soffrono di gradienti che svaniscono e scordano informazioni dopo pochi step temporali, le LSTM usano un meccanismo di gating — forget gate, input gate, e output gate — per selettivamente mantenere o scartare informazioni su centinaia di step.

Per le serie temporali finanziarie, le LSTM offrono due vantaggi rispetto all'ARIMA: possono modellare relazioni nonlineari (le dinamiche di prezzo sono raramente lineari), e possono incorporare feature di input multiple simultaneamente — non solo prezzi passati, ma volume, volatilità, funding rate, squilibrio dell'order book, e qualsiasi altro segnale che credi porti informazione predittiva.

Preparare i dati per una LSTM richiede un windowing attento. Crei sequenze di input di lunghezza fissa (es. 60 step temporali) accoppiate con il valore target (il prossimo prezzo o rendimento). La normalizzazione è critica — scala le feature a [0, 1] oppure standardizza a media zero e varianza unitaria. Ma ecco la trappola: devi fittare lo scaler solo sui dati di addestramento e trasformare i dati di validazione e test usando gli stessi parametri. Fittare sull'intero dataset perde informazioni future.

Non normalizzare mai usando statistiche calcolate dall'intero dataset. Fitta il tuo scaler solo sul set di addestramento, poi applicalo ai set di validazione e test. Questo singolo errore causa più look-ahead bias di qualsiasi altro errore nella preparazione dei dati.

# Preparazione dei dati LSTM con normalizzazione corretta
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)

Meccanismi di attenzione e Temporal Fusion Transformer

Lo stesso meccanismo di self-attention che ha revoluzionato l'elaborazione del linguaggio naturale si è dimostrato altrettanto potente per le serie temporali. Invece di processare le sequenze passo dopo passo come una LSTM, l'attention permette al modello di guardare tutti gli step temporali simultaneamente, apprendendo quali momenti storici sono più rilevanti per predire il futuro.

Il Temporal Fusion Transformer (TFT), introdotto da Google Research nel 2021, è costruito appositamente per la previsione di serie temporali multi-orizzonte. Combina diverse innovazioni:

  • Variable selection networks — Apprende automaticamente quali feature di input contano più, fornendo interpretabilità incorporata. Puoi vedere se il modello si affida più al momentum di prezzo, al volume, o ai funding rate.
  • Gated residual networks — Sopprimono gli input irrilevanti e permettono al modello di gestire interazioni di feature nonlineari complesse.
  • Multi-head attention nel tempo — Identifica quali step temporali storici sono più informativi per ogni orizzonte di predizione.
  • Output quantile — Produce intervalli di predizione (10°, 50°, 90° percentile) invece di stime puntuali, dandoti una misura dell'incertezza — essenziale per la gestione del rischio nel trading.

In pratica, i TFT hanno superato le LSTM e i modelli tradizionali su benchmark che includono la previsione della domanda elettrica, la previsione delle vendite al dettaglio, e il modeling della volatilità finanziaria. Per i mercati crypto accessibili tramite piattaforme come GaiaEx, la capacità del TFT di processare input eterogenei — metadati statici (tipo di asset, data di listing), valori futuri conosciuti (giorno della settimana, ora del giorno), e feature osservate che variano nel tempo (prezzo, volume, metriche on-chain) — lo rende particolarmente adatto.

Esempio pratico: predire la direzione del prezzo di BTC

Siamo onesti su cosa è raggiungibile. Predire il prezzo esatto di Bitcoin domani è essenzialmente impossibile. L'ipotesi del mercato efficiente (EMH) sostiene che i prezzi riflettono già tutte le informazioni disponibili, rendendo la predizione consistente un'impresa da folli. Nel crypto, la forma debole dell'EMH è discutibile — i mercati sono meno efficienti delle azioni — ma il rapporto rumore-segnale resta brutale.

Un obiettivo più realistico è l'accuratezza direzionale: BTC chiuderà più alto o più basso di dove ha aperto? Questo problema di classificazione binaria è più trattabile, e anche modesti miglioramenti sopra il 50% di accuratezza (diciamo, 53–55% consistentemente) possono essere altamente profittevoli con un adeguato position sizing e gestione del rischio.

Una pipeline pratica appare così:

  • Feature: rendimenti a 60 periodi, RSI, istogramma MACD, larghezza delle Bollinger Band, rapporto di volume (attuale vs. media a 20 periodi), funding rate dai futures perpetui, dominanza BTC, e cambio di open interest.
  • Modello: LSTM a due layer con 128 unità nascoste, dropout di 0,3, seguito da un layer denso con attivazione sigmoide per la classificazione binaria.
  • Split: Addestra su 2020–2023, valida su gen–giu 2024, testa su lug–dic 2024. Non mescolare mai — dividi sempre cronologicamente.
  • Valutazione: Accuratezza direzionale, precisione/recall sulle predizioni su vs. giù, e — soprattutto — P&L simulato assumendo una dimensione di posizione fissa per segnale.

Se il tuo modello raggiunge il 54% di accuratezza direzionale sul set di test out-of-sample con un profit factor sopra 1,2, hai qualcosa che merita di essere esplorato ulteriormente. Se mostra un'accuratezza del 65%, hai quasi certamente fatto overfitting. I vantaggi reali nei mercati finanziari sono piccoli, e chiunque affermi il contrario ti sta vendendo qualcosa.

Metriche di valutazione e approcci ensemble

Scegliere la metrica giusta determina se stai ottimizzando per la cosa giusta. Il MAE (Mean Absolute Error) ti dice la magnitudine media dei tuoi errori di predizione nelle stesse unità dei tuoi dati — intuitivo ma non penalizza in modo sproporzionato gli errori grandi. Il RMSE (Root Mean Squared Error) eleva al quadrato gli errori prima di fare la media, penalizzando pesantemente gli outlier — appropriato quando una singola predizione catastroficamente errata conta più di molte piccole. L'accuratezza direzionale misura la percentuale di volte in cui il tuo modello predice correttamente se il prezzo va su o giù — spesso la metrica più rilevante per i segnali di trading.

I metodi ensemble combinano predizioni da modelli multipli per ridurre la varianza e migliorare la robustezza. Gli approcci comuni includono:

  • Media semplice — Fai la media delle predizioni di una LSTM, un Transformer, e un ARIMA. Se ogni modello cattura aspetti diversi del segnale, l'ensemble supera qualsiasi singolo modello.
  • Stacking — Addestra un meta-modello (es. un albero gradient-boosted) per apprendere la combinazione ottimale delle predizioni dei modelli base.
  • Switching consapevole del regime — Usa un detector di regime di volatilità per selezionare a quale modello fidarsi. Una LSTM potrebbe eccellere nei mercati in trend mentre un modello mean-reversion supera in condizioni di range.

Qualunque approccio adotti, ricorda che il divario tra ricerca e produzione è vasto. Un modello che predice la direzione di BTC al 55% di accuratezza in un notebook Jupyter deve sopravvivere alla latenza, allo slippage, e ai costi di transazione quando eseguito dal vivo tramite una piattaforma come GaiaEx. Costruisci la tua pipeline di valutazione per simulare queste realtà dal primo giorno — non come un ripensamento.