Cripto Trend & Sentiment

Cripto Trend & Sentiment

Machine learning su due anni di dati orari per prevedere il prezzo di Bitcoin e capire cosa muove il Fear & Greed Index.

Machine LearningDeep LearningSerie storicheCrypto

Sintesi

Project work finale del corso Data Science e Generative AI (Crif, aprile 2025). Partendo da 17.515 osservazioni orarie su Bitcoin, altre cripto, materie prime, indici azionari e indicatori di sentiment, il progetto prova a rispondere a due domande: si può prevedere il prezzo di BTC dai soli dati di mercato? E quali forze muovono il Fear & Greed Index? I risultati del notebook sono stati riverificati durante la ristrutturazione del codice: dove la verifica cambia la lettura, la pagina lo dice.

729giorni di dati orari (apr 2023 – apr 2025)
28variabili di mercato, ridotte con PCA
–errore medio LSTM a 1 ora
–accuratezza su/giù a 1 settimana
–R² Fear & Greed: split casuale · cronologico

Il prezzo non si prevede con i soli dati di mercato: l'LSTM segue la forma della curva ma sottostima il livello di circa 18.000 $ in quasi tutte le ore di test, e il classificatore su/giù fa peggio di chi dice sempre "sale". Anche il sentiment non si prevede: il Random Forest del notebook arriva a R² 0,985, ma solo perché lo split casuale mette nel train e nel test ore dello stesso giorno, con lo stesso valore dell'indice. Su un periodo futuro l'R² scende a zero. Resta un risultato descrittivo: il Fear & Greed è legato soprattutto al rendimento recente di BTC e all'interesse su Google.

Dati e obiettivo

Il dataset (data/raw/Dataset.zip) unisce in una sola tabella oraria 131 colonne, dal 16/04/2023 al 14/04/2025. Nessun valore mancante né riga duplicata. Non tutte le serie sono davvero orarie: il Fear & Greed cambia una volta al giorno e Google Trends circa una volta a settimana, e il valore viene ripetuto su tutte le ore (questo conta per la validazione, vedi capitolo 5). Le variabili si dividono in quattro gruppi:

GruppoVariabiliDati
CriptoBTC, ETH, BNB, SOL, XRP, DOGEOHLC e volume su USDT
Materie primeOro, argento, petrolio, mais, grano, soia, boviniFutures OHLC e volume
IndiciS&P 500, Dow, NASDAQ, Russell, TSX, DAX, CAC, FTSE, Euro Stoxx 50, IBOVESPA, IPC (Messico)OHLC e volume
Macro e sentimentFear & Greed Index, funding rate, VIX, Google Trends "bitcoin" e "buy crypto"Fear & Greed giornaliero e Google Trends circa settimanale, ripetuti su ogni ora

Il lavoro segue la consegna del corso in tre fasi: analisi descrittiva di BTC rispetto agli altri asset, previsione del market trend (prezzo e direzione) e stima del Fear & Greed Index.

Bitcoin e gli altri mercati

Tutte le serie sono normalizzate a base 100 sul primo giorno, così asset con prezzi molto diversi si confrontano sulla stessa scala. Scegli il gruppo da affiancare a BTC.

Gruppo

Valore 200 = raddoppiato rispetto ad aprile 2023. Zoom trascinando, doppio clic per tornare alla vista intera, clic sulla legenda per nascondere una serie.

La correlazione del prezzo orario di BTC con le altre variabili è alta e positiva con quasi tutti gli indici, le cripto e i metalli preziosi, negativa con le materie prime agricole, il petrolio e l'indice messicano IPC.

Correlazione di Pearson sulle serie orarie (prezzi di chiusura e indicatori). Sono correlazioni tra livelli in tendenza: dicono che due serie sono salite o scese insieme in questi due anni, non che una influenzi l'altra. Su serie con trend anche variabili indipendenti possono risultare molto correlate.

Sul rendimento a un anno BTC ha fatto molto più degli indici e dell'oro, con oscillazioni molto più ampie.

Rendimento percentuale rispetto allo stesso giorno di un anno prima (disponibile da aprile 2024).

Il Fear & Greed Index non segue il livello del prezzo (correlazione 0,22) ma il suo andamento recente: con il rendimento di BTC degli ultimi 30 giorni la correlazione sale a 0,68. Sale dopo i rialzi e crolla nelle correzioni, indipendentemente dal livello.

Confronto

Fear & Greed (asse destro, 0 = paura estrema, 100 = avidità estrema) confrontato con il rendimento di BTC a 30 giorni o con il prezzo giornaliero (asse sinistro).

Previsione del prezzo con LSTM

Le 28 variabili di mercato sono molto collineari (VIF fino a oltre 2.000 per l'S&P 500). Una PCA le riduce a 9 componenti che spiegano il 95% della varianza. Su queste componenti una rete LSTM (64 unità + due strati densi) legge una settimana di storia (168 ore) e prevede il prezzo dell'ora successiva. Attenzione: tra gli input non c'è il prezzo passato di BTC, solo le componenti degli altri mercati e del sentiment. Il notebook lo chiama "autoregressivo", ma il modello stima BTC a partire dagli altri asset. Train sull'80% iniziale, test sul 20% finale (da fine novembre 2024 ad aprile 2025).

Riduzione con PCA

Prima della rete le variabili passano da una PCA (standardizzazione + componenti principali). La prima componente da sola raccoglie – della varianza: quasi tutti i mercati si muovono insieme. Si tengono le componenti fino al 95% cumulato.

Barre: varianza spiegata da ogni componente. Linea: varianza cumulata. Le barre arancioni sono le componenti tenute (soglia 95%, linea tratteggiata).

Pesi (loadings) delle 28 variabili sulle componenti tenute: arancio = peso positivo, azzurro = negativo. Passa il mouse su una cella per il valore.

La rete LSTM

Previsione

Una previsione ogni 2 ore sul periodo di test. "Con correzione" somma alle previsioni lo scarto medio misurato sul test stesso.

Il modello coglie la forma dei movimenti ma resta sotto il prezzo reale nel 99,9% delle ore di test: errore medio 18.057 $, R² −5,2. La sottostima ha una causa precisa: nel test BTC supera i massimi del training, e una rete che non vede il prezzo passato non sa estrapolare oltre i livelli già visti. Sommando lo scarto medio la curva si sovrappone meglio (R² 0,49), ma la correzione è calcolata sul test: è una diagnosi della sottostima, non una previsione utilizzabile.

Il notebook prova anche un LSTM multi-step che produce in un colpo solo le 336 ore (due settimane) successive, per evitare l'accumulo d'errore della previsione ricorsiva. Ecco l'ultima finestra disponibile del test:

Previsione a due settimane fatta con i dati fino al 31/03/2025, confrontata con il prezzo reale. Errore medio su tutto il test: 23.768 $. La previsione è quasi piatta e oscilla ora per ora: indica un livello medio, non la traiettoria. Il notebook presenta questa curva come la previsione delle "prossime 2 settimane", ma in realtà copre il periodo 31/03–14/04/2025, già presente nei dati. Anche il "leggero rialzo" che ne ricava (trend polinomiale da circa 88.600 a 89.400 $ dopo la correzione) riguarda quindi il passato.

Le curve di addestramento confermano il problema: la loss sul validation resta tre-quattro volte sopra quella di training e, dopo il minimo, risale. L'early stopping ferma la rete dopo 21 epoche (single-step) e 12 (multi-step).

Modello

MSE sui dati scalati 0–1, scala logaritmica. Il validation è l'ultimo 10% del training (circa settembre–novembre 2024). Il gap tra le due curve indica overfitting: nel test BTC arriva a 108.000 $, mentre nel training non supera i 94.000 $: la rete non ha mai visto quei livelli.

Sale o scende? Classificazione

Invece del prezzo esatto, un LightGBM prova a dire se tra una settimana BTC sarà più alto di oggi. Per simulare un uso reale il modello viene riaddestrato ogni settimana (walk-forward) e tra train e test c'è un gap di 168 ore (purging), perché la target di ogni riga guarda una settimana avanti e altrimenti "vedrebbe" il periodo di test.

–accuratezza
–accuratezza bilanciata
–settimane in rialzo (baseline "sempre su")

Accuratezza mese per mese delle previsioni orarie fuori campione (8.300 ore). La linea tratteggiata è il 50%, il lancio della moneta.

Matrice di confusione: righe = direzione reale, colonne = direzione prevista.

Il classificatore non batte il caso: accuratezza 0,49, sotto il 52,8% che si otterrebbe dicendo sempre "sale". Senza informazioni esterne (tassi, politica monetaria, notizie) lo storico dei prezzi non basta a prevedere la direzione.

Stimare il Fear & Greed Index

La seconda domanda cambia prospettiva: non prevedere il futuro, ma capire quanto il sentiment è spiegato dai mercati nello stesso istante. Le 28 variabili sono quasi le stesse del market trend: qui BTC entra tra gli input e il Fear & Greed diventa la variabile da stimare. Vengono compresse con una PCA al 90% di varianza.

Varianza cumulata spiegata dalle componenti nelle due analisi. Il market trend usa la soglia 95% (9 componenti), il Fear & Greed il 90% (6 componenti).

Ogni componente ha ricevuto un nome in base alle variabili con peso maggiore:

ComponenteVariabili principali (peso)

Pesi di tutte le variabili sulle 6 componenti del Fear & Greed (arancio = positivo, azzurro = negativo).

Sedici regressori sono stati confrontati in cross-validation a 5 fold. I modelli ad albero e i vicini più prossimi dominano, i modelli lineari si fermano a R² 0,55. Il successo del K-Nearest Neighbors è però un primo campanello d'allarme: funziona se nel train c'è quasi sempre un'ora "gemella" di quella da stimare.

R² medio dei 5 fold. Passa il mouse su una barra per leggere anche l'MSE medio (errore al quadrato, in punti di indice).

Il Random Forest, con iperparametri scelti via grid search (200 alberi, foglie minime da 2), sul test raggiunge R² 0,98 e un errore medio di 1,0 punti su una scala 0–100.

1.500 punti estratti a caso dal test. Più i punti stanno sulla diagonale, più la stima è esatta.

Verifica: il risultato regge?

Il Fear & Greed cambia una volta al giorno, e con lo split casuale le altre ore dello stesso giorno finiscono nel train, con lo stesso valore dell'indice e componenti quasi identiche. Ripetendo lo stesso Random Forest con divisioni via via più severe:

R² sul test (barre) ed errore medio in punti di indice (nel tooltip). "Per giorno" e "Per settimana": giorni o settimane interi tutti nel train o tutti nel test. "Cronologico": train sui primi 19 mesi, test sugli ultimi 5.

Su un periodo mai visto l'R² scende a 0,00 (errore medio 17 punti su 100): il modello non fa meglio della media. L'R² di 0,985 misura quanto il Random Forest ricorda i giorni già visti, non quanto capisce il sentiment.

Cosa muove il sentiment

Il Random Forest non generalizza, ma resta utile guardare come il sentiment si è mosso insieme a ciascuna componente nei due anni analizzati. Per capirne la forma del legame tra ogni componente e il Fear & Greed il progetto usa due curve: una regressione polinomiale di grado 3 (forma globale, interpretabile) e il LOWESS, una regressione locale che segue i dati senza imporre una forma.

Componente

ComponenteRelazione con il Fear & Greed (correlazione)
Crypto Search Trends and SentimentIl legame più forte (correlazione 0,64): più ricerche su Google, più avidità.
Market Sentiment and Funding RatesPositiva (0,35): funding rate alti (leva in acquisto) e VIX basso accompagnano l'ottimismo.
Global Market MovementDebolmente crescente, a onde (0,12): il livello dei mercati conta poco, conta di più il loro andamento recente.
Commodity and Equity Market DynamicsA U rovesciata, quasi nessuna correlazione lineare (0,06).
Commodities Price MovementsDebolmente inversa (−0,11): petrolio e bovini in salita coincidono con un po' più di paura.
Emerging Market and Macro TrendsA U, effetto debole (0,01).

Limiti e sviluppi

Rileggendo il lavoro durante la ristrutturazione del codice sono emersi alcuni punti che cambiano l'interpretazione dei numeri del notebook:

  • La "correzione" dell'LSTM usa il test. Lo scarto medio sommato alle previsioni è misurato sugli stessi dati che si vogliono prevedere: utile per vedere la sottostima, non come performance.
  • L'LSTM non vede il prezzo di BTC. Gli input sono solo le componenti degli altri mercati: aggiungere il prezzo passato (e prevedere rendimenti invece di livelli) è il primo miglioramento da provare.
  • La "previsione futura" multi-step è nel passato. L'ultima finestra di test copre 31/03–14/04/2025, già nel dataset.
  • R² del Fear & Greed dovuto allo split casuale. Con un valore al giorno ripetuto sulle 24 ore, lo split casuale fa trapelare il test nel train: con uno split cronologico l'R² è nullo.
  • PCA fittata su tutto il dataset, test compreso, prima dello split: una piccola fuga di informazione in entrambe le analisi.
  • IPC è l'indice azionario messicano (^MXX), non l'indice dei prezzi al consumo come interpretato nel notebook: la componente "Market Sentiment and Funding Rates" va letta senza la parte sull'inflazione.
  • Correlazioni tra livelli. Serie con trend risultano correlate anche senza un legame reale: per le relazioni tra asset sono più affidabili le correlazioni tra rendimenti.
  • Nessuna variabile esogena. Tassi, politica monetaria, eventi geopolitici e notizie su Bitcoin sono i candidati naturali per migliorare le previsioni, insieme a modelli a scenari.

Struttura del codice

Il progetto nasce come notebook Colab. Il codice è stato riorganizzato in un pacchetto Python (src/cripto_trend) con script riproducibili che restituiscono gli stessi risultati dei notebook.

PercorsoContenuto
src/cripto_trend/data.pyCaricamento dello zip, pulizia, selezione colonne e gruppi
src/cripto_trend/features.pyBase 100, rendimenti, VIF, PCA, finestre temporali per LSTM
src/cripto_trend/models/lstm.py, classification.py (walk-forward con purging), sentiment.py (regressori, LOWESS)
scripts/run_descrittiva.py, run_market_trend.py, run_fear_greed.py, build_pagina.py
notebooks/Notebook originali del corso, invariati
models/LSTM addestrate (.keras) e storie di training

Per riprodurre i risultati e rigenerare i grafici di questa pagina:

pip install -e ".[dl]"
python scripts/run_market_trend.py   # usa le LSTM salvate, --train per riaddestrarle
python scripts/run_fear_greed.py
python scripts/build_pagina.py       # aggiorna i dati di docs/index.html