← Terug naar artikelen
August 18, 2026
5 min leestijd

PCMCI: Causale ontdekking in multivariate crypto-tijdreeksen

PCMCI: Causale ontdekking in multivariate crypto-tijdreeksen
#causal-inference
#PCMCI
#causal-discovery
#time-series
#crypto

PCMCI, ontwikkeld door Jakob Runge (2018, 2020), is een causaal ontdekkingsalgoritme voor multivariate tijdreeksen. Het combineert het pc-algoritme voor het leren van grafische modellen met een Momentary Conditional Independence (MCI)-test waarvan de conditioneringsset is gebouwd om drie dingen tegelijk te neutraliseren: gemeenschappelijke factoren, indirecte paden en de autocorrelatie van de source-variabele. Dat laatste stuk is het deel dat de moeite waard is om aandachtig te lezen – het is de reden dat PCMCI niet het vals-positieve percentage erft dat naïeve lead-lag-tests op momentum-zware series doet zinken.

Dit artikel ontleedt de tweefasige constructie vanuit de eerste principes, implementeert deze met de tigramietbibliotheek en legt de studie van de echte gegevens uit die de methode nodig heeft voordat deze een handelsinvoer wordt.

Wat dit toevoegt aan wat er al is

Correlatie-co-integratie en causaliteit als afzonderlijke relatiestructuren

De blog heeft het correlatiewerk al gedaan. Crypto-co-beweging is grotendeels een gemeenschappelijk factor-artefact - [signaalcorrelatie tussen paren] (/en/blog/post/signal-correlation-pairs) laat zien dat PC1 alleen al 65% van de variantie in een boek van tien paren absorbeert. Een hoge paarsgewijze correlatie is geen verhandelbare relatie, en daarom streeft statistical arbitrage and pairs trading in plaats daarvan naar co-integratie. En de afhankelijkheid zelf is niet eens stabiel: DCC-GARCH dynamic correlatie somt op waarom een ​​statische steekproefcorrelatie uitgaat van stationariteit van afhankelijkheid, constante marginale volatiliteit en symmetrie in alle richtingen, die allemaal niet opgaan.

Geen van deze produceert een gerichte grafiek. Ze vertellen je dat BTC, ETH en SOL samen bewegen en dat een gemeenschappelijke factor het meeste verklaart; ze vertellen u niet of BTC SOL rechtstreeks bestuurt of dat de vereniging volledig via ETH wordt bemiddeld. Granger-causaliteit is de gebruikelijke manier om richting te geven, maar de standaard Granger is bivariaat: het kan een onopgemerkte gemeenschappelijke drijfveer niet scheiden van echte causaliteit.

Er is een derde faalwijze die hier belangrijker is dan het lijkt. Elke crypto-retourreeks heeft een positieve autocorrelatie, en autocorrelatie verhoogt de teststatistiek van elke afhankelijkheidstest tussen twee van dergelijke reeksen: twee onafhankelijke autocorrelatieprocessen zullen er significant gerelateerd uitzien over eindige steekproeven. Correlatiewerk behandelt dit als een correctie op steekproefomvang (de effectieve_N-bespreking in het artikel over signaalcorrelatie). Voor causale ontdekking is het geen correctie, het is het centrale ontwerpprobleem – en het is precies waarvoor de conditioneringsset van fase 2 is gebouwd om op te lossen.

Het PCMCI-algoritme

Causale ontdekking in twee fasen die een gericht netwerk destilleert

PCMCI werkt in twee fasen. In de eerste fase wordt voor elke variabele een kandidaat-set van causale ouders geïdentificeerd. In de tweede fase wordt elke kandidaat-link getest met een zorgvuldig opgebouwde voorwaardelijke onafhankelijkheidstest.

Fase 1: selectie van pc-stabiele omstandigheden (PC1)

Het doel van fase 1 is om voor elke variabele te vinden XtjX_t^j, een superset B^(Xtj)\widehat{\mathcal{B}}(X_t^j) van zijn ware causale ouders. Deze set zal later gebruikt worden als conditioneringsset in fase 2.

Het algoritme begint met de volledige set van alle vertraagde variabelen als potentiële ouders:

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} \}

Vervolgens worden op iteratieve wijze variabelen verwijderd die voorwaardelijk onafhankelijk zijn van XtjX_t^j. Bij iteratie pp, test het algoritme elke kandidaat-ouder XtτiX_{t-\tau}^i voor onafhankelijkheid met XtjX_t^j, conditionering op de pp sterkste overgebleven ouders (excl XtτiX_{t-\tau}^i zelf):

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)

waar S\mathbf{S} is de set van pp variabelen binnen B^(Xtj){Xtτi}\widehat{\mathcal{B}}(X_t^j) \setminus \{X_{t-\tau}^i\} met de sterkste associatie XtjX_t^j.

Het "stabiele" aspect betekent dat de verwijderingsbeslissingen binnen één iteratie plaatsvinden pp zijn gebaseerd op de bovenliggende sets uit de vorige iteratie, waardoor volgorde-afhankelijkheid in de resultaten wordt voorkomen. Dit is van cruciaal belang voor de reproduceerbaarheid.

Het significantieniveau αPC\alpha_{\text{PC}} wordt in dit stadium opzettelijk liberaal ingesteld (vaak 0,2 of hoger, of automatisch bepaald via de pc_alpha=None optie in tigramiet). Het doel is hier niet om valse positieven onder controle te houden, maar om alle echte ouders te behouden en tegelijkertijd zoveel mogelijk irrelevante variabelen te verwijderen. Een paar valse positieven binnen B^\widehat{\mathcal{B}} zijn acceptabel; Vals-negatieven zijn dat niet.

Fase 2: Tijdelijke voorwaardelijke onafhankelijkheidstest (MCI).

Zodra we de geschatte oudersets hebben B^(Xtj)\widehat{\mathcal{B}}(X_t^j) voor alle variabelen test fase 2 elk potentieel causaal verband XtτiXtjX_{t-\tau}^i \to X_t^j met behulp van de MCI-statistiek:

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)

De belangrijkste innovatie is de conditioneringsset. Wij stellen de voorwaarde:

  1. Ouders van het doelwit B^(Xtj){Xtτi}\widehat{\mathcal{B}}(X_t^j) \setminus \{X_{t-\tau}^i\}: Dit verwijdert het effect van algemene stuurprogramma's en andere indirecte paden naar XtjX_t^j.
  2. Ouders van de bron B^(Xtτi)\widehat{\mathcal{B}}(X_{t-\tau}^i): Hiermee wordt de autocorrelatie van de bronvariabele verwijderd, waardoor opgeblazen teststatistieken worden voorkomen.

Door beide sets tegelijkertijd te conditioneren, isoleert MCI effectief het directe, tijdelijke causale effect van XtτiX_{t-\tau}^i op XtjX_t^j bij de specifieke vertraging τ\tau, afgezien van alle confounders, mediatoren en autocorrelatie-effecten.

De teststatistiek kan elke geldige voorwaardelijke onafhankelijkheidstest zijn. Voor lineaire relaties is gedeeltelijke correlatie de standaardkeuze. Voor niet-lineaire afhankelijkheden wordt voorwaardelijke wederzijdse informatie (CMI) geschat via kkEr kunnen methoden voor de dichtstbijzijnde buur of de GPDC-test (Gaussian Process Distance Correlation) worden gebruikt.

Gedeeltelijke correlatie als standaardtest

Voor de meeste financiële toepassingen is de gedeeltelijke correlatietest (ParCorr in tigramiet) is het werkpaard. Gegeven variabelen XX, YYen een conditioneringsset Z\mathbf{Z}, de gedeeltelijke correlatie is:

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

waar rXr_X En rYr_Y zijn de residuen van regressie XX En YY op Z\mathbf{Z}respectievelijk:

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

Met andere woorden, gedeeltelijke correlatie meet de lineaire associatie tussen XX En YY na het verwijderen van de lineaire invloed van de conditioneringsvariabelen Z\mathbf{Z}. Onder de nulhypothese van voorwaardelijke onafhankelijkheid met Gaussiaanse gegevens volgt de teststatistiek een bekende verdeling, waardoor exacte pp-waardeberekening.

Gedeeltelijke correlatiewaarden liggen in [1,1][-1, 1] en zorgen voor een natuurlijke rangschikking van de sterke punten van causale verbanden. Een gedeeltelijke correlatie van 0,3 tussen BTC bij lag 1 en ETH bij lag 0, afhankelijk van beide oudersets, betekent: “Na het verwijderen van de effecten van alle geïdentificeerde confounders en autocorrelatie, voorspelt een schok van één standaardafwijking in de BTC-rendementen een beweging van 0,3 standaarddeviatie in de ETH-rendementen een periode later.”

Van testresultaten naar een causale grafiek (DAG)

De uitvoer van PCMCI is een paar matrices:

  • val_matrix: vorm (N,N,τmax+1)(N, N, \tau_{\max}+1), met de MCI-teststatistiek (bijvoorbeeld gedeeltelijke correlatie) voor elke gerichte link XtτiXtjX_{t-\tau}^i \to X_t^j.
  • p_matrix: dezelfde vorm, met de bijbehorende pp-waarden.

Om een ​​causale grafiek te construeren, bepalen we de drempelwaarde pp-matrix op een gecorrigeerd significantieniveau:

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}}

Welke correctie is geen detail waar je mee kunt zwaaien. PCMCI-testen N2×τmaxN^2 \times \tau_{\max} links die afhankelijk zijn door hun constructie — elke link naar XtjX_t^j deelt een conditioneringsset met elkaar, en de bronreeksen zijn om te beginnen onderling gecorreleerd. Dat is precies het regime waar Benjamini-Hochberg faalt en de harmonische straf van Benjamini-Yekutieli c(M)=j=1M1/jc(M) = \sum_{j=1}^{M} 1/j is degene die de willekeurige afhankelijkheid tussen tests overleeft; deflated Sharpe and multiple testen meet de nul-false-discovery-percentages die dit concreet maken. Rapporteer het aantal geteste links en de gecorrigeerde drempel naast elke grafiek die u publiceert.

De resulterende structuur is een time series graph (TSG), een gerichte grafiek waarbij:

  • Knooppunten vertegenwoordigen variabelen op specifieke tijdsvertragingen.
  • Gerichte randen vertegenwoordigen causale verbanden met bijbehorende vertragingen.
  • Self-loops vertegenwoordigen autoregressieve effecten.

Deze TSG kan worden samengevat in een samenvattende grafiek die alleen het bestaan ​​en de richting van causale verbanden tussen variabelen laat zien (samengevoegd over vertragingen), wat vaak praktischer is voor interpretatie.

Implementatie met Tigramite

Multivariate tijdreekspijplijn die een schaarse causale grafiek produceert

Tigramiet is de referentie-implementatie van PCMCI, ontwikkeld en onderhouden door de groep van Jakob Runge bij het German Aerospace Center (DLR). Het biedt een schone API voor gegevensverwerking, meerdere voorwaardelijke onafhankelijkheidstests, verschillende PCMCI-varianten en ingebouwde visualisatie.

Installatie

pip install tigramite

Recovery Sanity Check (geen resultaat)

Voordat u zich baseert op marktgegevens, is het de moeite waard om te bevestigen dat de pijplijn een structuur vindt die u hebt geplant. Dit is een unit-test voor de implementatie en niets meer – de grondwaarheid hieronder is met de hand geschreven in de data-genererende lus, dus het herstellen ervan bewijst dat de code werkt en zegt helemaal niets over crypto. Lees het zo.

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),
)

De uitvoer lezen

Op de geplante VAR, print_significant_links retourneert:

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

De geplante structuur komt terug, inclusief het negatieve resultaat dat er toe doet: er is geen directe voorsprong van BTC -> SOL, ook al zijn BTC en SOL in dit voorbeeld sterk gecorreleerd. MCI schrijft de vereniging volledig toe aan de ETH-bemiddelaar. Dat is het gedrag dat de dubbele conditioneringsset zou moeten produceren, en het bevestigen ervan is het hele punt van dit blok. Het is een geslaagde eenheidstest, geen bevinding over crypto.

Werken met echte marktgegevens

PCMCI heeft zwak stationaire inputs nodig, dus geef het gestandaardiseerde log-rendementen in plaats van prijzen – het ADF-mechanisme en de redenen waarom ruwe prijzen falen, worden behandeld in statistische arbitrage en parenhandel. Zodra u een gestandaardiseerde retourmatrix heeft, bestaat het tigramietspecifieke deel uit twee regels:

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

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

Twee tigramietdetails worden niet overgenomen uit de gebruikelijke retourpijplijn:

  1. Ontbrekende gegevens: Tigramite ondersteunt gemaskeerde arrays voor het verwerken van ontbrekende waarnemingen. Gebruik dataframe.mask om hiaten te signaleren – vul ze niet voorwaarts, aangezien een verzonnen observatie zich voortplant in elke conditioneringsset die deze bevat.
  2. Frequentie-uitlijning: alle series moeten zich in hetzelfde tijdraster bevinden. Voor crypto is dit meestal eenvoudig, omdat uitwisselingen gesynchroniseerde OHLCV-gegevens leveren.

Het onderzoek dat deze methode nodig heeft

Alles daarboven zijn machines. Het artikel kan pas op deze blog worden gepubliceerd als het apparaat op echte gegevens is gericht en rapporteert wat het heeft gevonden, ook als het antwoord 'niets stabiel' is. De run om te doen:

  • Setup: PCMCI+ bij retouren per uur voor een echt mandje over een aangegeven datumbereik, tau_max opgelost door domeinredenering, alpha_level = 0.01 met Benjamini-Yekutieli-correctie over het geheel genomen N2×τmaxN^2 \times \tau_{\max} koppelingen. Rapporteer het aantal geteste links en de gecorrigeerde drempel, volgens de deflated Sharpe standaard.
  • Te rapporteren resultaat: welke randen overleven de correctie, hun gedeeltelijke correlatiegrootten, en hoeveel overleven buiten de steekproef.
  • Tenminste één stabiliteitsmeting, zonder welke het stuk een tigramiet is. README met crypto-tickers: welk deel van de randen blijft van venster tot venster over rollende vensters bestaan; of gevoeligheid van de herstelde grafiek voor tau_max En pc_alpha; of ParCorr versus CMIknn onenigheid over dezelfde gegevens.

Een onstabiele grafiek is een publiceerbaar resultaat, geen mislukt resultaat. "PCMCI op vijf majors: de causale grafiek overleeft geen rolling windows" past in de lijn die deze blog al geeft [een eerlijk negatief resultaat] (/en/blog/post/honest-negative-no-robust-edge), en het is een nuttiger artikel dan een tutorial die werkt.

De juiste parameters kiezen

Gekalibreerde abstracte controles rond een causaal netwerk

Maximale vertraging τmax\tau_{\max}

Deze parameter begrenst de tijdshorizon van causale ontdekking. Als u deze te laag instelt, worden de langzaam voortplantende effecten mogelijk gemist; te hoog verhoogt de rekenkosten en de last van meerdere tests.

Voor cryptogegevens per uur, τmax=6\tau_{\max} = 6 naar 2424 is een redelijk bereik. Voor dagelijkse gegevens, τmax=5\tau_{\max} = 5 naar 1010 legt de meeste lead-lag-relaties vast. Domeinkennis is hier van belang: als u weet dat de effecten van de financieringstarieven acht uur nodig hebben om zich te verspreiden, stel dan in τmax8\tau_{\max} \geq 8.

Betekenis van voorwaardeselectie αPC\alpha_{\text{PC}}

Instelling pc_alpha=None laat tigramite deze parameter automatisch selecteren met behulp van het Akaike-informatiecriterium, wat de aanbevolen standaard is. Als je het handmatig wilt instellen, werken waarden tussen 0,1 en 0,4 goed. Lagere waarden maken fase 1 agressiever (minder ouders behouden), wat de rekenkosten verlaagt, maar het risico met zich meebrengt dat echte ouders worden verwijderd.

Uiteindelijk significantieniveau α\alpha

Dit is de standaarddrempel voor het testen van hypothesen. Voor verkennende analyses, α=0.05\alpha = 0.05 is prima. Gebruik voor alles wat een handelsbeslissing voedt α=0.01\alpha = 0.01 of strenger, en pas het na de eerder beschreven afhankelijkheidsbewuste correctie toe – het nominale niveau is niet het niveau waarop u feitelijk test.

PCMCI+: gelijktijdige links toevoegen

Lagged en gelijktijdige causale verbanden tussen temporele lagen

Standaard PCMCI ontdekt alleen vertraagde causale verbanden (τ1\tau \geq 1). Maar op cryptomarkten, waar informatie zich binnen enkele seconden over activa verspreidt, betekent de bemonsteringsfrequentie per uur dat veel causale effecten gelijktijdig lijken (τ=0\tau = 0).

PCMCI+ (Runge, 2020) breidt PCMCI uit om zowel vertraagde als gelijktijdige causale verbanden te ontdekken. De gelijktijdige koppelingen zijn standaard niet-gericht (aangezien de tijdsordening binnen dezelfde tijdstap geen onderscheid kan maken tussen oorzaak en gevolg), maar sommige kunnen worden georiënteerd met behulp van de oriëntatieregels van het standaard pc-algoritme (botsingsdetectie, acycliciteitsbeperkingen).

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

Voor cryptotoepassingen met een frequentie per uur of met een lagere frequentie is PCMCI+ vaak geschikter dan standaard PCMCI, omdat veel cross-asset-effecten sneller optreden dan het bemonsteringsinterval.

Niet-lineaire extensies

Niet-lineaire causale relaties vormen gebogen interactiespruitstukken

Financiële tijdreeksen vertonen vaak niet-lineaire afhankelijkheden (bijvoorbeeld volatiliteitsclustering, regime-afhankelijke lead-lag-effecten). Tigramite biedt verschillende niet-lineaire voorwaardelijke onafhankelijkheidstests:

Gaussiaanse procesafstandcorrelatie (GPDC)

from tigramite.independence_tests.gpdc import GPDC

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

GPDC gebruikt Gaussiaanse procesregressie om de invloed van de conditioneringsset te verwijderen en past vervolgens afstandscorrelatie toe op de residuen. Het is krachtiger dan ParCorr voor het detecteren van niet-lineaire effecten, maar aanzienlijk langzamer.

Voorwaardelijke wederzijdse informatie (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 schat voorwaardelijke wederzijdse informatie met behulp van kk-dichtstbijzijnde buurmethoden. Het is volledig niet-parametrisch en kan willekeurige functionele afhankelijkheden detecteren. De wisselwerking is de rekenkosten en de behoefte aan meer gegevens om statistische kracht te bereiken.

Begin voor de meeste crypto-handelstoepassingen met ParCorr. Schakel alleen over op niet-lineaire tests als u specifiek bewijs hebt voor niet-lineaire causale mechanismen en voldoende gegevens (doorgaans T>5000T > 5000).

Waar een causale grafiek zou aansluiten

Causale grafiek geïntegreerd in een modulaire crypto-onderzoekspijplijn

Eén ding geeft een causale grafiek je wat een correlatiematrix niet kan: uit-graad. Voer PCMCI uit over 20 tot 50 assets en de knooppunten met veel uitgaande randen zijn informatieleiders; hun bewegingen bevatten voorspellende inhoud voor de rest van het boek, en dat is een richtinggevende claim die een symmetrische correlatiematrix structureel niet kan maken. Een ontleding van factoren vertelt u dat BTC de variantie domineert; een out-degree-ranglijst vertelt u of BTC domineert omdat het leider is of omdat alles, inclusief BTC, op dezelfde macroschok wordt geladen.

Ervan uitgaande dat er ooit een stabiele grafiek wordt teruggevonden, zijn de plaatsen waarop deze al op deze blog zou moeten werken duidelijk genoeg. Rolling-window-veranderingen in de topologie van grafieken zijn een structureel breuksignaal, dat het onderwerp is van regime detectie met HMMs – de open vraag is of een causale grafiek de transitie eerder detecteert dan een toestandsmodel. Door PCMCI toe te passen op één item op verschillende locaties wordt prijsleiderschap tussen verschillende locaties aangepakt, al gemeten met een resolutie van milliseconden in smart order routing; een grafiek met staafdiagrammen per uur zou dat moeten overtreffen, en niet opnieuw moeten formuleren. En de periodieke dader-spot-link gecreëerd door het 8-uurs financieringsmechanisme, behandeld in funding rate arbitrage, is een testcase met bekende antwoorden: PCMCI zou een causale structuur moeten herstellen die we onafhankelijk kunnen verifiëren, waardoor het een validatiedoel wordt in plaats van een ontdekking.

Geen van deze zijn bevindingen. Het zijn hypothesen die wachten op het hierboven beschreven onderzoek.

Beperkingen en kanttekeningen

Precieze causale grafiek gedeeltelijk verborgen door gecontroleerde onzekerheid

PCMCI is een krachtig hulpmiddel, maar heeft belangrijke beperkingen die beoefenaars moeten begrijpen:

  1. Aanname van causale toereikendheid: PCMCI gaat ervan uit dat alle relevante variabelen worden waargenomen. Als een verborgen gemeenschappelijke factor (bijvoorbeeld de handelsactiviteit van een walvis, niet-uitgebracht nieuws) twee waargenomen activa beïnvloedt, rapporteert PCMCI mogelijk ten onrechte een direct causaal verband daartussen. De LPCMCI-variant pakt dit gedeeltelijk aan door latente confounders toe te staan, ten koste van het retourneren van minder georiënteerde randen.

  2. Stationariteitsaanname: de causale structuur wordt gedurende het analysevenster constant verondersteld. In de praktijk verandert de dynamiek van de cryptomarkt snel. Gebruik rolling-window-analyse om structurele breuken te detecteren.

  3. Lineair versus niet-lineair: met ParCorrworden alleen lineaire causale effecten gedetecteerd. Een niet-lineair causaal mechanisme (bijvoorbeeld: “BTC zorgt ervoor dat ETH alleen daalt als BTC meer dan 5% daalt”) zou onzichtbaar zijn voor de lineaire test.

  4. Bemonsteringsfrequentie is belangrijk: Causale effecten die sneller optreden dan de bemonsteringsfrequentie verschijnen als gelijktijdig (τ=0\tau = 0) -koppelingen in standaard PCMCI, en hun richting kan dubbelzinnig zijn. Gebruik PCMCI+ en overweeg gegevens met een hogere frequentie.

  5. Meerdere tests: N2×τmaxN^2 \times \tau_{\max} afhankelijke tests, gecorrigeerd zoals hierboven beschreven - zie leeggelopen Sharpe en meervoudige testen voor waarom de afhankelijkheidsstructuur de voor de hand liggende keuze uitsluit.

  6. Vereisten voor de steekproefomvang: Betrouwbare causale ontdekking vereist voldoende gegevens. Als ruwe richtlijn: streef naar T>500T > 500 voor ParCorr met N<10N < 10 variabelen, en T>2000T > 2000 voor niet-lineaire tests of grotere variabelensets.

PCMCI versus andere methoden

Verschillende causale grafiekmethoden naast elkaar vergeleken

Werkwijze Verwerkt autocorrelatie Behandelt algemene stuurprogramma's Gelijktijdige links Niet-lineair Latente confounders
Granger-causaliteit Gedeeltelijk Nee (bivariaat) Nee Met extensies Nee
Overdrachtsentropie Gedeeltelijk Nee (bivariaat) Nee Ja Nee
PCMCI Ja (MCI) Ja Nee Met CMIknn/GPDC Nee
PCMCI+ Ja Ja Ja Met CMIknn/GPDC Nee
LPCMCI Ja Ja Ja Met CMIknn/GPDC Ja
VAR-LiNGAM Nee Ja Ja Nee Nee

Het belangrijkste voordeel van PCMCI ten opzichte van Granger-causaliteit en overdrachtsentropie is de MCI-test, die op correcte wijze rekening houdt met autocorrelatie en algemene factoren in een multivariate omgeving. Dit is precies het scenario dat we tegenkomen op cryptomarkten, waar tientallen gecorreleerde, autogecorreleerde activa tegelijkertijd met elkaar interacteren.

Conclusie

Gefilterde directe causale paden die worden omgezet in een gemeten inzicht

De constructie in twee fasen is de bijdrage die de moeite waard is om weg te nemen: schaarse conditieselectie om de bovenliggende set te beperken, vervolgens een MCI-test waarvan de conditioneringsset zowel de ouders van de bron als het doel omvat. Die tweede helft is wat PCMCI scheidt van Granger en entropie overdraagt, en het is wat de methode levensvatbaar maakt op series die zo autogecorreleerd zijn als crypto-rendementen.

Wat de methode niet met zich meebrengt, is bewijs. Een herstelde grafiek is een hypothese over de informatiestroom, geen signaal, en op deze blog telt deze nergens mee totdat deze is uitgevoerd op echte gegevens met een aangegeven mandje, een aangegeven datumbereik, een afhankelijkheidsbewuste correctie en ten minste één meting van de vraag of de grafiek stilstaat als het venster beweegt. Totdat die run bestaat, behandel alles hier als gereedschap.

Als de grafiek niet stabiel blijkt te zijn, is dat het artikel. Het zou niet het eerste negatieve resultaat zijn dat meer waard is dan een werkende tutorial.


Referenties

  • Runge, J., Nowack, P., Kretschmer, M., Flaxman, S., en Sejdinovic, D. (2019). Het detecteren en kwantificeren van causale associaties in grote niet-lineaire tijdreeksdatasets. Wetenschappelijke vooruitgang, 5(11), eaau4996.
  • Runge, J. (2020). Het ontdekken van gelijktijdige en vertraagde causale relaties in autogecorreleerde niet-lineaire tijdreeksdatasets. Proceedings of the 36th Conference on Uncertainty in Artificial Intelligence (UAI), PMLR 124:1388-1397.
  • Tigramietdocumentatie: https://jakobrunge.github.io/tigramite/
  • Tigramite GitHub-repository: https://github.com/jakobrunge/tigramite
Disclaimer: De informatie in dit artikel is uitsluitend bedoeld voor educatieve en informatieve doeleinden en vormt geen financieel, beleggings- of handelsadvies. Het handelen in cryptovaluta brengt een aanzienlijk risico op verlies met zich mee.

Auteurs

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

Blijf de markt voor

Abonneer je op onze nieuwsbrief voor exclusieve AI-handelsinzichten, marktanalyses en platformupdates.

We respecteren je privacy. Je kunt je op elk moment afmelden.