← Torna agli articoli
August 18, 2026
5 min di lettura

PCMCI: Causal Discovery in Multivariate Crypto Time Series

PCMCI: Causal Discovery in Multivariate Crypto Time Series
#causal-inference
#PCMCI
#causal-discovery
#time-series
#crypto

PCMCI, sviluppato da Jakob Runge (2018, 2020), è un algoritmo di scoperta causale per serie temporali multivariate. Combina l'algoritmo PC per l'apprendimento del modello grafico con un test MCI (Momentary Conditional Independence) il cui set di condizionamento è costruito per neutralizzare tre cose contemporaneamente: driver comuni, percorsi indiretti e autocorrelazione della variabile sorgente. Quest’ultimo pezzo è quello che vale la pena leggere attentamente: è il motivo per cui PCMCI non eredita il tasso di falsi positivi che affonda gli ingenui test lead-lag sulle serie ad alto slancio.

Questo articolo analizza la costruzione in due fasi partendo dai principi primi, la implementa con la libreria tigramite e presenta lo studio dei dati reali di cui il metodo ha bisogno prima che qualcuno di essi diventi un input di trading.

Ciò che questo aggiunge a ciò che è già qui

Correlazione, cointegrazione e causalità come strutture relazionali distinte

Il blog ha già svolto il lavoro di correlazione. Il comovimento delle criptovalute è in gran parte un artefatto dovuto a un fattore comune: correlazione del segnale tra coppie mostra che PC1 da solo assorbe il 65% della varianza in un libro a dieci coppie. Un'elevata correlazione a coppie non è una relazione negoziabile, motivo per cui arbitraggio statistico e trading a coppie tende invece alla cointegrazione. E la dipendenza stessa non è nemmeno stabile: correlazione dinamica DCC-GARCH enumera il motivo per cui una correlazione campionaria statica presuppone stazionarietà della dipendenza, volatilità marginale costante e simmetria attraverso la direzione, nessuna delle quali è valida.

Nessuno di questi produce un grafico diretto. Ti dicono che BTC, ETH e SOL si muovono insieme e che un fattore comune spiega la maggior parte di ciò; non ti dicono se BTC guida direttamente SOL o se l’associazione è mediata interamente attraverso ETH. La causalità di Granger è la consueta possibilità di trovare una direzione, ma il Granger standard è bivariato: non può separare un fattore comune non osservato dalla causalità autentica.

Esiste una terza modalità di fallimento che qui conta più di quanto sembri. Ciascuna serie di rendimenti crittografici comporta un'autocorrelazione positiva e l'autocorrelazione gonfia la statistica del test di qualsiasi test di dipendenza eseguito tra due di tali serie: due processi autocorrelati indipendenti appariranno significativamente correlati su campioni finiti. Il lavoro di correlazione considera questo come una correzione della dimensione del campione (la discussione Effective_N nell'articolo sulla correlazione del segnale). Per la scoperta causale non si tratta di una correzione, è il problema centrale della progettazione – ed è esattamente ciò per cui il set di condizionamento della Fase 2 è costruito.

L'algoritmo PCMCI

Scoperta causale in due fasi che distilla una rete diretta

PCMCI opera in due fasi. La prima fase identifica un insieme candidato di genitori causali per ciascuna variabile. La seconda fase verifica ciascun collegamento candidato con un test di indipendenza condizionale attentamente costruito.

Fase 1: selezione della condizione PC stabile (PC1)

L'obiettivo della Fase 1 è trovare, per ciascuna variabile XtjX_t^j, un superinsieme B^(Xtj)\widehat{\mathcal{B}}(X_t^j) dei suoi veri genitori causali. Questo set verrà successivamente utilizzato come set di condizionamento nella Fase 2.

L'algoritmo inizia con il set completo di tutte le variabili ritardate come potenziali genitori:

B^0(Xtj)={Xtτi:i=1,,N,τ=1,,τmax}\widehat{\mathcal{B}}^0(X_t^j) = \{ X_{t-\tau}^i : i = 1, \ldots, N, \quad \tau = 1, \ldots, \tau_{\max} \}

Quindi rimuove in modo iterativo le variabili che sono condizionatamente indipendenti da XtjX_t^j. All'iterazione pp, l'algoritmo mette alla prova ciascun genitore candidato XtτiX_{t-\tau}^i per l'indipendenza con XtjX_t^j, condizionamento sul pp genitori rimasti più forti (esclusi XtτiX_{t-\tau}^i si):

Xtτi ⁣ ⁣ ⁣XtjSremove Xtτi from B^(Xtj)X_{t-\tau}^i \perp\!\!\!\perp X_t^j \mid \mathbf{S} \quad \Rightarrow \quad \text{remove } X_{t-\tau}^i \text{ from } \widehat{\mathcal{B}}(X_t^j)

Dove S\mathbf{S} è l'insieme di pp variabili dentro B^(Xtj){Xtτi}\widehat{\mathcal{B}}(X_t^j) \setminus \{X_{t-\tau}^i\} con la più forte associazione a XtjX_t^j.

L'aspetto "stabile" significa che le decisioni di rimozione vengono prese all'interno di un'unica iterazione pp sono basati sugli insiemi genitori dell'iterazione precedente, impedendo la dipendenza dall'ordine nei risultati. Questo è fondamentale per la riproducibilità.

Il livello di significatività αPC\alpha_{\text{PC}} in questa fase viene deliberatamente impostato liberamente (spesso 0.2 o superiore, o determinato automaticamente tramite il file pc_alpha=None opzione in tigramite). L’obiettivo qui non è quello di controllare i falsi positivi, ma di trattenere tutti i veri genitori eliminando quante più variabili irrilevanti possibile. Alcuni falsi positivi B^\widehat{\mathcal{B}} sono accettabili; i falsi negativi non lo sono.

Fase 2: test di indipendenza condizionale momentanea (MCI).

Una volta che avremo i set genitori stimati B^(Xtj)\widehat{\mathcal{B}}(X_t^j) per tutte le variabili, la Fase 2 verifica ogni potenziale collegamento causale XtτiXtjX_{t-\tau}^i \to X_t^j utilizzando la statistica MCI:

Xtτi ⁣ ⁣ ⁣XtjB^(Xtj){Xtτi},B^(Xtτi)X_{t-\tau}^i \perp\!\!\!\perp X_t^j \mid \widehat{\mathcal{B}}(X_t^j) \setminus \{X_{t-\tau}^i\}, \quad \widehat{\mathcal{B}}(X_{t-\tau}^i)

L'innovazione chiave è il set di condizionamento. Condizioniamo su:

  1. Genitori della vittima B^(Xtj){Xtτi}\widehat{\mathcal{B}}(X_t^j) \setminus \{X_{t-\tau}^i\}: Ciò rimuove l'effetto dei driver comuni e di altri percorsi indiretti XtjX_t^j.
  2. Genitori della fonte B^(Xtτi)\widehat{\mathcal{B}}(X_{t-\tau}^i): rimuove l'autocorrelazione della variabile sorgente, impedendo statistiche di test gonfiate.

Condizionando entrambi i set simultaneamente, MCI isola efficacemente l'effetto causale diretto e momentaneo di XtτiX_{t-\tau}^i SU XtjX_t^j al ritardo specifico τ\tau, al netto di tutti i fattori confondenti, mediatori ed effetti di autocorrelazione.

La statistica del test può essere qualsiasi test di indipendenza condizionale valido. Per le relazioni lineari, la correlazione parziale è la scelta standard. Per le dipendenze non lineari, informazione reciproca condizionale (CMI) stimata tramite kkÈ possibile utilizzare i metodi del vicino più vicino o il test GPDC (Gaussian Process Distance Correlation).

Correlazione parziale come test predefinito

Per la maggior parte delle applicazioni finanziarie, il test di correlazione parziale (ParCorr nella tigramite) è il cavallo di battaglia. Date le variabili XX, YYe un set di condizionamento Z\mathbf{Z}, la correlazione parziale è:

ρXYZ=corr(rX,rY)\rho_{XY \cdot \mathbf{Z}} = \text{corr}(r_X, r_Y)

Dove rXr_X E rYr_Y sono i residui della regressione XX E YY SU Z\mathbf{Z}, rispettivamente:

rX=XX^(Z),rY=YY^(Z)r_X = X - \hat{X}(\mathbf{Z}), \quad r_Y = Y - \hat{Y}(\mathbf{Z})

In altre parole, la correlazione parziale misura l'associazione lineare tra XX E YY dopo aver rimosso l'influenza lineare delle variabili di condizionamento Z\mathbf{Z}. Sotto l'ipotesi nulla di indipendenza condizionale con dati gaussiani, la statistica del test segue una distribuzione nota, consentendo l'esattezza pp-calcolo del valore.

Si trovano valori di correlazione parziale [1,1][-1, 1] e fornire una classificazione naturale dei punti di forza del collegamento causale. Una correlazione parziale di 0,3 tra BTC al lag 1 ed ETH al lag 0, condizionata su entrambi i parent set, significa: "Dopo aver rimosso gli effetti di tutti i confondenti identificati e dell'autocorrelazione, uno shock con una deviazione standard sui rendimenti di BTC prevede un movimento di 0,3 deviazione standard sui rendimenti di ETH un periodo successivo."

Dai risultati dei test a un grafico causale (DAG)

L'output di PCMCI è una coppia di matrici:

  • val_matrix: forma (N,N,τmax+1)(N, N, \tau_{\max}+1), contenente la statistica del test MCI (ad esempio, correlazione parziale) per ogni collegamento diretto XtτiXtjX_{t-\tau}^i \to X_t^j.
  • p_matrix: Stessa forma, contenente il corrispondente pp-valori.

Per costruire un grafico causale, limitiamo il pp-matrice a livello di significatività corretto:

Link XtτiXtj exists if pijτ<αcorrected\text{Link } X_{t-\tau}^i \to X_t^j \text{ exists if } p_{ij\tau} < \alpha_{\text{corrected}}

Quale correzione non è un dettaglio che puoi ignorare. Test PCMCI N2×τmaxN^2 \times \tau_{\max} collegamenti che sono dipendenti dalla costruzione: ogni collegamento in XtjX_t^j condivide un set di condizionamento tra loro e le serie di origine sono reciprocamente correlate fin dall'inizio. Questo è precisamente il regime in cui il semplice Benjamini-Hochberg fallisce e la penalità armonica di Benjamini-Yekutieli c(M)=j=1M1/jc(M) = \sum_{j=1}^{M} 1/j è quello che sopravvive alla dipendenza arbitraria tra i test; Sharpe sgonfio e test multipli misura i tassi di false scoperte nulle che rendono concreto ciò. Riporta il numero di collegamenti testati e la soglia corretta insieme a qualsiasi grafico che pubblichi.

La struttura risultante è un grafico delle serie temporali (TSG), ovvero un grafico diretto in cui:

  • I nodi rappresentano variabili in intervalli di tempo specifici.
  • Gli archi diretti rappresentano collegamenti causali con ritardi associati.
  • I self-loop rappresentano effetti autoregressivi.

Questo TSG può essere compresso in un grafico riassuntivo che mostra solo l'esistenza e la direzione dei collegamenti causali tra le variabili (aggregate attraverso i ritardi), che spesso è più pratico per l'interpretazione.

Implementazione con Tigramite

Conduttura di serie temporali multivariata che produce un grafico causale sparso

Tigramite è l'implementazione di riferimento del PCMCI, sviluppata e mantenuta dal gruppo di Jakob Runge presso il Centro aerospaziale tedesco (DLR). Fornisce un'API pulita per la gestione dei dati, test multipli di indipendenza condizionale, diverse varianti PCMCI e visualizzazione integrata.

Installazione

pip install tigramite

Controllo di integrità del ripristino (nessun risultato)

Prima di affidarsi ai dati di mercato, vale la pena verificare che la pipeline trovi una struttura che hai piantato. Questo è un test unitario per l'implementazione e niente di più: la verità fondamentale di seguito è scritta a mano nel ciclo di generazione dei dati, quindi il ripristino dimostra che il codice funziona e non dice nulla sulla crittografia. Leggilo così.

import numpy as np
import tigramite
from tigramite import data_processing as pp
from tigramite.pcmci import PCMCI
from tigramite.independence_tests.parcorr import ParCorr
from tigramite import plotting as tp


np.random.seed(42)
T, N = 2000, 5
var_names = ["BTC", "ETH", "SOL", "BNB", "AVAX"]
data = np.zeros((T, N))
noise = np.random.randn(T, N) * 0.5

for t in range(2, T):
    data[t, 0] = 0.5 * data[t-1, 0] + noise[t, 0]
    data[t, 1] = 0.5 * data[t-1, 1] + 0.4 * data[t-1, 0] + noise[t, 1]
    data[t, 2] = 0.5 * data[t-1, 2] + 0.3 * data[t-1, 1] + noise[t, 2]
    data[t, 3] = 0.5 * data[t-1, 3] + 0.25 * data[t-1, 0] + noise[t, 3]
    data[t, 4] = 0.5 * data[t-1, 4] + 0.2 * data[t-2, 3] + noise[t, 4]

dataframe = pp.DataFrame(
    data,
    datatime=np.arange(T),
    var_names=var_names,
)

parcorr = ParCorr(significance="analytic")

pcmci = PCMCI(
    dataframe=dataframe,
    cond_ind_test=parcorr,
    verbosity=1,
)

results = pcmci.run_pcmci(
    tau_max=4,        # test lags up to 4 hours
    tau_min=1,        # only lagged (not contemporaneous) links
    pc_alpha=None,    # auto-select alpha for condition selection
    alpha_level=0.01, # significance threshold for final MCI test
)

print("\n--- Significant causal links ---")
pcmci.print_significant_links(
    p_matrix=results["p_matrix"],
    val_matrix=results["val_matrix"],
    alpha_level=0.01,
)

tp.plot_graph(
    val_matrix=results["val_matrix"],
    p_matrix=results["p_matrix"],
    var_names=var_names,
    link_colorbar_label="MCI (partial corr.)",
    node_colorbar_label="Auto-MCI",
    alpha_level=0.01,
    figsize=(10, 6),
)

tp.plot_time_series_graph(
    val_matrix=results["val_matrix"],
    p_matrix=results["p_matrix"],
    var_names=var_names,
    link_colorbar_label="MCI (partial corr.)",
    alpha_level=0.01,
    figsize=(14, 6),
)

Lettura dell'output

Sul VAR piantato, print_significant_links restituisce:

Variable BTC has 0 causal parent(s):

Variable ETH has 1 causal parent(s):
    BTC (lag -1): val = 0.38, p = 0.000

Variable SOL has 1 causal parent(s):
    ETH (lag -1): val = 0.28, p = 0.000

Variable BNB has 1 causal parent(s):
    BTC (lag -1): val = 0.24, p = 0.000

Variable AVAX has 1 causal parent(s):
    BNB (lag -2): val = 0.19, p = 0.000

Ritorna la struttura piantata, compreso il risultato negativo che conta: non esiste un bordo diretto BTC -> SOL, anche se BTC e SOL sono fortemente correlati in questo campione. La MCI attribuisce interamente l'associazione al mediatore del PF. Questo è il comportamento che il doppio set di condizionamento dovrebbe produrre, e confermarlo è il punto centrale di questo blocco. È un test unitario superato, non una scoperta sulle criptovalute.

Lavorare con dati di mercato reali

Il PCMCI ha bisogno di input debolmente stazionari, quindi alimentalo con rendimenti logaritmici standardizzati piuttosto che con prezzi: il meccanismo dell'ADF e le ragioni per cui i prezzi grezzi falliscono sono trattati in arbitraggio statistico e trading di coppie. Una volta ottenuta una matrice dei rendimenti standardizzata, la parte specifica della tigramite è composta da due righe:

data = log_returns.values          # (T, N) standardized log-returns
var_names = list(log_returns.columns)

dataframe = pp.DataFrame(data, var_names=var_names)

Due dettagli sulla tigramite non vengono riportati dalla consueta pipeline dei resi:

  1. Dati mancanti: Tigramite supporta array mascherati per la gestione delle osservazioni mancanti. Utilizzo dataframe.mask per segnalare le lacune: non riempirle in avanti, poiché un'osservazione fabbricata si propaga in ogni insieme di condizionamento che la contiene.
  2. Allineamento della frequenza: tutte le serie devono trovarsi sulla stessa griglia temporale. Per le criptovalute questo è solitamente semplice, poiché gli scambi forniscono dati OHLCV sincronizzati.

Lo studio di cui ha bisogno questo metodo

Tutto quello che c'è sopra è un macchinario. L'articolo non è pubblicabile su questo blog finché il macchinario non punta i dati reali e riporta ciò che ha trovato, compreso se la risposta è "niente di stabile". La corsa da fare:

  • Setup: PCMCI+ sui rendimenti orari per un paniere reale in un intervallo di date indicato, tau_max risolto dal ragionamento del dominio, alpha_level = 0.01 con la correzione Benjamini-Yekutieli in tutto N2×τmaxN^2 \times \tau_{\max} collegamenti. Riporta il conteggio dei collegamenti testati e la soglia corretta, secondo Sharpe deflazionato norma.
  • Risultato da riportare: quali bordi sopravvivono alla correzione, la loro grandezza di correlazione parziale e quanti sopravvivono fuori campione.
  • Almeno una misurazione della stabilità, senza la quale il pezzo è un README tigramite con ticker crittografici: quale frazione di bordi persiste da una finestra all'altra attraverso le finestre scorrevoli; o sensibilità del grafico recuperato a tau_max E pc_alpha; o disaccordo ParCorr vs CMIknn sugli stessi dati.

Un grafico instabile è un risultato pubblicabile, non un risultato fallito. "PCMCI su cinque major: il grafico causale non sopravvive alle finestre scorrevoli" si adatta alla linea in cui già si trova questo blog un risultato negativo onesto, ed è un articolo più utile che un tutorial che funziona.

Scegliere i parametri giusti

Controlli astratti calibrati che circondano una rete causale

Ritardo massimo τmax\tau_{\max}

Questo parametro delimita l'orizzonte temporale della scoperta causale. Impostandolo su un valore troppo basso si potrebbero perdere effetti a propagazione lenta; un valore troppo elevato aumenta i costi computazionali e il carico di test multipli.

Per i dati crittografici orari, τmax=6\tau_{\max} = 6 A 2424 è un intervallo ragionevole. Per i dati giornalieri, τmax=5\tau_{\max} = 5 A 1010 cattura la maggior parte delle relazioni lead-lag. La conoscenza del dominio è importante qui: se sai che gli effetti del tasso di finanziamento impiegano 8 ore per propagarsi, imposta τmax8\tau_{\max} \geq 8.

Significato della selezione delle condizioni αPC\alpha_{\text{PC}}

Collocamento pc_alpha=None consente a tigramite di selezionare automaticamente questo parametro utilizzando il criterio di informazione di Akaike, che è l'impostazione predefinita consigliata. Se vuoi impostarlo manualmente, i valori compresi tra 0,1 e 0,4 funzionano bene. Valori più bassi rendono la Fase 1 più aggressiva (meno genitori mantenuti), il che riduce i costi computazionali ma rischia di rimuovere i veri genitori.

Livello di significatività finale α\alpha

Questa è la soglia standard per la verifica delle ipotesi. Per l’analisi esplorativa, α=0.05\alpha = 0.05 va bene. Per qualsiasi cosa che alimenti una decisione commerciale, usa α=0.01\alpha = 0.01 o più stretto, e applicalo dopo la correzione sensibile alla dipendenza descritta in precedenza: il livello nominale non è il livello a cui stai effettivamente testando.

PCMCI+: Aggiunta di collegamenti contemporanei

Collegamenti causali ritardati e contemporanei tra strati temporali

Il PCMCI standard rileva solo i collegamenti causali ritardi (τ1\tau \geq 1). Ma nei mercati delle criptovalute, dove le informazioni si propagano tra le risorse in pochi secondi, la frequenza di campionamento oraria significa che molti effetti causali appaiono contemporanei (τ=0\tau = 0).

PCMCI+ (Runge, 2020) estende PCMCI per scoprire collegamenti causali sia ritardati che contemporanei. I collegamenti contemporanei non sono orientati per impostazione predefinita (poiché l'ordinamento temporale non può distinguere la causa dall'effetto all'interno dello stesso passaggio temporale), ma alcuni possono essere orientati utilizzando le regole di orientamento dell'algoritmo PC standard (rilevamento dei collisori, vincoli di aciclicità).

results_plus = pcmci.run_pcmciplus(
    tau_max=4,
    tau_min=0,         # include contemporaneous links
    pc_alpha=None,
)

Per le applicazioni crittografiche con frequenza oraria o inferiore, PCMCI+ è spesso più appropriato del PCMCI standard, poiché molti effetti tra asset si verificano più velocemente dell'intervallo di campionamento.

Estensioni non lineari

Relazioni causali non lineari che formano varietà di interazione curve

Le serie temporali finanziarie spesso mostrano dipendenze non lineari (ad esempio, clustering di volatilità, effetti lead-lag dipendenti dal regime). Tigramite fornisce diversi test di indipendenza condizionale non lineare:

Correlazione gaussiana della distanza del processo (GPDC)

from tigramite.independence_tests.gpdc import GPDC

gpdc = GPDC(significance="analytic", gp_params=None)
pcmci = PCMCI(dataframe=dataframe, cond_ind_test=gpdc)

GPDC utilizza la regressione del processo gaussiano per rimuovere l'influenza del set di condizionamento, quindi applica la correlazione della distanza sui residui. È più potente di ParCorr per rilevare effetti non lineari ma significativamente più lenti.

Informazioni reciproche condizionali (CMIknn)

from tigramite.independence_tests.cmiknn import CMIknn

cmiknn = CMIknn(significance="shuffle_test", knn=0.1, shuffle_neighbors=5)
pcmci = PCMCI(dataframe=dataframe, cond_ind_test=cmiknn)

CMIknn stima le informazioni reciproche condizionali utilizzando kk-metodi del vicino più vicino. È completamente non parametrico e può rilevare dipendenze funzionali arbitrarie. Il compromesso è il costo computazionale e la necessità di più dati per ottenere potere statistico.

Per la maggior parte delle applicazioni di trading di criptovalute, inizia con ParCorr. Passa ai test non lineari solo quando hai prove specifiche di meccanismi causali non lineari e dati sufficienti (tipicamente T>5000T > 5000).

Dove si inserisce un grafico causale

Grafico causale integrato in una pipeline di ricerca crittografica modulare

Una cosa che un grafico causale ti dà che una matrice di correlazione non può: fuori grado. Esegui PCMCI su 20-50 risorse e i nodi con molti margini in uscita sono leader dell'informazione: le loro mosse portano contenuti predittivi per il resto del libro, e questa è un'affermazione direzionale che una matrice di correlazione simmetrica è strutturalmente incapace di fare. Una scomposizione fattoriale indica che BTC domina la varianza; una classifica fuori grado ti dice se BTC domina perché è in testa o perché tutto, compreso BTC, si carica sullo stesso macro shock.

Supponendo che venga mai recuperato un grafico stabile, i luoghi in cui potrebbe funzionare già su questo blog sono abbastanza chiari. I cambiamenti nella finestra mobile nella topologia del grafico sono un segnale di rottura strutturale, che è oggetto di rilevamento del regime con HMM — la questione aperta è se un grafico causale rilevi la transizione prima di un modello statale. L'applicazione del PCMCI a un asset in più sedi consente di raggiungere la leadership dei prezzi tra più sedi, già misurata con una risoluzione di millisecondi in instradamento intelligente degli ordini; un grafico sulle barre orarie dovrebbe superarlo, non riproporlo. E il collegamento periodico perp-spot creato dal meccanismo di finanziamento in 8 ore, trattato in arbitraggio del tasso di finanziamento, è un caso di test a risposta nota: PCMCI dovrebbe recuperare una struttura causale che possiamo verificare in modo indipendente, il che lo rende un obiettivo di convalida piuttosto che una scoperta.

Nessuno di questi è un risultato. Sono ipotesi in attesa dello studio sopra descritto.

Limitazioni e avvertenze

Grafico causale preciso parzialmente oscurato dall'incertezza controllata

Il PCMCI è uno strumento potente, ma presenta importanti limitazioni che i professionisti devono comprendere:

  1. Ipotesi di sufficienza causale: PCMCI presuppone che tutte le variabili rilevanti siano rispettate. Se un fattore comune nascosto (ad esempio, l'attività commerciale di una balena, notizie non rilasciate) influisce su due asset osservati, PCMCI potrebbe riportare erroneamente un nesso causale diretto tra di loro. La variante LPCMCI risolve parzialmente questo problema consentendo confonditori latenti, al costo di restituire meno bordi orientati.

  2. Ipotesi di stazionarietà: la struttura causale è presupposta costante nell'arco della finestra di analisi. In pratica, le dinamiche del mercato delle criptovalute cambiano rapidamente. Utilizza l'analisi della finestra mobile per rilevare le rotture strutturali.

  3. Lineare vs. non lineare: Con ParCorr, vengono rilevati solo effetti causali lineari. Un meccanismo causale non lineare (ad esempio, "BTC provoca un calo di ETH solo quando BTC scende di oltre il 5%) sarebbe invisibile al test lineare.

  4. La frequenza di campionamento è importante: gli effetti causali che si verificano più velocemente della frequenza di campionamento appaiono come contemporanei (τ=0\tau = 0) collegamenti nello standard PCMCI e la loro direzione potrebbe essere ambigua. Utilizza PCMCI+ e considera i dati a frequenza più elevata.

  5. Test multipli: N2×τmaxN^2 \times \tau_{\max} test dipendenti, corretti come descritto sopra - vedere Sharpe sgonfio e test multipli per cui la struttura di dipendenza esclude la scelta ovvia.

  6. Requisiti relativi alla dimensione del campione: una scoperta causale affidabile richiede dati sufficienti. Come linea guida approssimativa, mirare a T>500T > 500 per ParCorr con N<10N < 10 variabili e T>2000T > 2000 per test non lineari o insiemi di variabili più grandi.

PCMCI rispetto ad altri metodi

Metodi distinti del grafico causale confrontati fianco a fianco

Metodo Gestisce l'autocorrelazione Gestisce i driver comuni Link contemporanei Non lineare Confondenti latenti
Causalità Granger In parte No (bivariata) No Con estensioni No
Entropia di trasferimento In parte No (bivariata) No No
PCMCI Sì (MCI) No Con CMIknn/GPDC No
PCMCI+ Con CMIknn/GPDC No
LPCMCI Con CMIknn/GPDC
VAR-LiNGAM No No No

Il vantaggio principale del PCMCI rispetto alla causalità di Granger e all'entropia di trasferimento è il test MCI, che tiene conto correttamente dell'autocorrelazione e dei fattori comuni in un ambiente multivariato. Questo è esattamente lo scenario riscontrato nei mercati delle criptovalute, dove dozzine di asset correlati e autocorrelati interagiscono simultaneamente.

Conclusione

Percorsi causali diretti filtrati che si risolvono in un insight misurato

La costruzione a due stadi è il contributo che vale la pena portare via: selezione di condizioni sparse per delimitare l'insieme genitore, quindi un test MCI il cui insieme di condizionamento include i genitori della sorgente così come dell'obiettivo. Questa seconda metà è ciò che separa PCMCI da Granger e dall’entropia di trasferimento, ed è ciò che rende il metodo praticabile su serie autocorrelate come i rendimenti delle criptovalute.

Ciò che il metodo non fornisce sono le prove. Un grafico recuperato è un'ipotesi sul flusso di informazioni, non un segnale, e su questo blog non conta nulla finché non è stato eseguito su dati reali con un paniere dichiarato, un intervallo di date dichiarato, una correzione consapevole della dipendenza e almeno una misurazione per verificare se il grafico rimane fermo quando la finestra si muove. Fino a quando non esisterà quella corsa, tratta tutto qui come strumento.

Se il grafico risulta non essere stabile, questo è l'articolo. Non sarebbe il primo risultato negativo che qui varrebbe più di un tutorial funzionante.


Riferimenti

  • Runge, J., Nowack, P., Kretschmer, M., Flaxman, S., e Sejdinovic, D. (2019). Rilevamento e quantificazione delle associazioni causali in grandi set di dati di serie temporali non lineari. Progressi scientifici, 5(11), eaau4996.
  • Runge, J. (2020). Scoperta di relazioni causali contemporanee e ritardate in set di dati di serie temporali non lineari autocorrelate. Atti della 36a Conferenza sull'incertezza nell'intelligenza artificiale (UAI), PMLR 124:1388-1397.
  • Documentazione tigramite: https://jakobrunge.github.io/tigramite/
  • Repository GitHub di Tigramite: https://github.com/jakobrunge/tigramite
Disclaimer: le informazioni fornite in questo articolo hanno solo scopo didattico e informativo e non costituiscono consulenza finanziaria, di investimento o di trading. Il trading di criptovalute comporta un rischio significativo di perdita.

Autori

Eugen Soloviov
Eugen Soloviov

Trading-systems engineer

Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.

Newsletter

Resta un Passo Avanti al Mercato

Iscriviti alla nostra newsletter per approfondimenti esclusivi sul trading con IA, analisi di mercato e aggiornamenti sulla piattaforma.

Rispettiamo la tua privacy. Annulla l'iscrizione in qualsiasi momento.