PCMCI: Causal Discovery in Multivariate Crypto Time Series
PCMCI, entwickelt von Jakob Runge (2018, 2020), ist ein Kausalerkennungsalgorithmus für multivariate Zeitreihen. Es kombiniert den PC-Algorithmus für das Lernen grafischer Modelle mit einem MCI-Test (Momentary Conditional Independence), dessen Konditionierungssatz darauf ausgelegt ist, drei Dinge gleichzeitig zu neutralisieren: gemeinsame Treiber, indirekte Pfade und die Autokorrelation der Quelle-Variablen. Der letzte Teil ist es wert, genau gelesen zu werden – er ist der Grund dafür, dass PCMCI nicht die Falsch-Positiv-Rate erbt, die naive Lead-Lag-Tests bei impulsintensiven Serien zunichte macht.
In diesem Artikel wird die zweistufige Konstruktion anhand der ersten Prinzipien analysiert, mit der Tigramite-Bibliothek implementiert und die realen Datenstudien dargelegt, die die Methode benötigt, bevor sie zu einer Handelseingabe wird.
Was dies zu dem hinzufügt, was bereits vorhanden ist

Der Blog hat die Korrelationsarbeit bereits erledigt. Die gemeinsame Bewegung von Kryptowährungen ist größtenteils ein Artefakt gemeinsamer Faktoren – Signalkorrelation zwischen Paaren zeigt, dass PC1 allein 65 % der Varianz in einem Buch mit zehn Paaren absorbiert. Eine hohe paarweise Korrelation ist keine handelbare Beziehung, weshalb statistische Arbitrage und Paarhandel strebt stattdessen eine Kointegration an. Und die Abhängigkeit selbst ist nicht einmal stabil: DCC-GARCH dynamische Korrelation zählt auf, warum eine statische Stichprobenkorrelation Stationarität der Abhängigkeit, konstante Grenzvolatilität und Symmetrie über die Richtung annimmt, von denen keines zutrifft.
Keines davon erzeugt einen gerichteten Graphen. Sie sagen Ihnen, dass sich BTC, ETH und SOL zusammen bewegen und dass ein gemeinsamer Faktor das meiste davon erklärt; Sie sagen Ihnen nicht, ob BTC SOL direkt vorantreibt oder ob die Verbindung vollständig über die ETH vermittelt wird. Die Granger-Kausalität ist der übliche Weg zur Richtungsbestimmung, aber die Standard-Granger-Methode ist bivariat – sie kann einen unbeobachteten gemeinsamen Treiber nicht von einer echten Kausalität trennen.
Es gibt einen dritten Fehlermodus, der hier wichtiger ist, als es aussieht. Jede Krypto-Return-Reihe weist eine positive Autokorrelation auf, und die Autokorrelation erhöht die Teststatistik jedes Abhängigkeitstestlaufs zwischen zwei solchen Reihen: Zwei unabhängige autokorrelierte Prozesse scheinen über endliche Stichproben signifikant miteinander verbunden zu sein. In der Korrelationsarbeit wird dies als Korrektur der Stichprobengröße behandelt (die effektive_N-Diskussion im Artikel zur Signalkorrelation). Für die kausale Entdeckung handelt es sich nicht um eine Korrektur, sondern um das zentrale Designproblem – und genau dafür ist das Konditionierungsset von Stufe 2 konzipiert.
Der PCMCI-Algorithmus

PCMCI arbeitet in zwei Stufen. In der ersten Stufe wird für jede Variable ein Kandidatensatz kausaler Eltern identifiziert. Die zweite Stufe testet jeden Kandidatenlink mit einem sorgfältig konstruierten bedingten Unabhängigkeitstest.
Stufe 1: PC-stabile Bedingungsauswahl (PC1)
Das Ziel von Stufe 1 besteht darin, für jede Variable etwas zu finden , eine Obermenge seiner wahren kausalen Eltern. Dieses Set wird später als Konditionierungsset in Stufe 2 verwendet.
Der Algorithmus beginnt mit dem vollständigen Satz aller verzögerten Variablen als potenzielle Eltern:
Anschließend werden Variablen, die bedingt unabhängig sind, iterativ entfernt . Bei der Iteration , testet der Algorithmus jeden Kandidaten-Elternteil für Unabhängigkeit mit , Konditionierung auf der stärkste verbleibende Eltern (ohne selbst):
Wo ist die Menge von Variablen in mit der stärksten Assoziation zu .
Der „stabile“ Aspekt bedeutet, dass die Entfernungsentscheidungen innerhalb einer einzigen Iteration getroffen werden basieren auf den übergeordneten Sätzen der vorherigen Iteration und verhindern so eine Abhängigkeit der Reihenfolge in den Ergebnissen. Dies ist entscheidend für die Reproduzierbarkeit.
Das Signifikanzniveau zu diesem Zeitpunkt wird absichtlich großzügig eingestellt (häufig 0,2 oder höher, oder automatisch über das bestimmt). pc_alpha=None Option in Tigramit). Das Ziel besteht hier nicht darin, Fehlalarme zu kontrollieren, sondern alle wahren Eltern beizubehalten und gleichzeitig so viele irrelevante Variablen wie möglich zu bereinigen. Ein paar Fehlalarme sind akzeptabel; Falsch-Negative gibt es nicht.
Stufe 2: Test der momentanen bedingten Unabhängigkeit (MCI).
Sobald wir die geschätzten Elternsätze haben Für alle Variablen testet Stufe 2 jeden potenziellen Kausalzusammenhang unter Verwendung der MCI-Statistik:
Die wichtigste Neuerung ist das Konditionierungsset. Wir setzen voraus:
- Eltern des Ziels : Dadurch werden die Auswirkungen allgemeiner Treiber und anderer indirekter Pfade entfernt .
- Eltern der Quelle : Dadurch wird die Autokorrelation der Quellvariablen entfernt, wodurch überhöhte Teststatistiken verhindert werden.
Durch die gleichzeitige Konditionierung beider Sätze isoliert MCI effektiv die direkte, momentane kausale Wirkung von An bei der spezifischen Verzögerung , abzüglich aller Störfaktoren, Mediatoren und Autokorrelationseffekte.
Die Teststatistik kann ein beliebiger gültiger bedingter Unabhängigkeitstest sein. Bei linearen Beziehungen ist die partielle Korrelation die Standardwahl. Für nichtlineare Abhängigkeiten wird die bedingte gegenseitige Information (CMI) geschätzt über -Nearest-Neighbor-Methoden oder der GPDC-Test (Gaussian Process Distance Correlation) können verwendet werden.
Partielle Korrelation als Standardtest
Für die meisten Finanzanwendungen ist der partielle Korrelationstest (ParCorr in Tigramit) ist das Arbeitstier. Gegebene Variablen , und ein Konditionierungsset , die partielle Korrelation ist:
Wo Und sind die Residuen der Regression Und An , jeweils:
Mit anderen Worten: Die partielle Korrelation misst den linearen Zusammenhang zwischen Und nach Entfernung des linearen Einflusses der Konditionierungsvariablen . Unter der Nullhypothese der bedingten Unabhängigkeit mit Gaußschen Daten folgt die Teststatistik einer bekannten Verteilung und ermöglicht so eine exakte Verteilung -Wertberechnung.
Partielle Korrelationswerte liegen in und liefern eine natürliche Rangfolge der Stärken kausaler Zusammenhänge. Eine teilweise Korrelation von 0,3 zwischen BTC bei Verzögerung 1 und ETH bei Verzögerung 0, abhängig von beiden übergeordneten Sätzen, bedeutet: „Nachdem die Auswirkungen aller identifizierten Störfaktoren und der Autokorrelation entfernt wurden, sagt ein Schock der BTC-Renditen um eine Standardabweichung eine Bewegung der ETH-Renditen um 0,3 Standardabweichung eine Periode später voraus.“
Von Testergebnissen zu einem Kausaldiagramm (DAG)
Die Ausgabe von PCMCI ist ein Matrizenpaar:
- val_matrix: Form , enthält die MCI-Teststatistik (z. B. Teilkorrelation) für jeden gerichteten Link .
- p_matrix: Gleiche Form, enthält das entsprechende -Werte.
Um einen Kausalgraphen zu erstellen, legen wir einen Schwellenwert fest -Matrix auf korrigiertem Signifikanzniveau:
Welche Korrektur das ist, ist kein Detail, bei dem man winken kann. PCMCI-Tests Links, die konstruktionsabhängig sind – jeder Link in teilt einen Konditionierungssatz miteinander, und die Quellreihen sind zunächst gegenseitig korreliert. Das ist genau das Regime, bei dem Benjamini-Hochberg scheitert und Benjamini-Yekutielis harmonische Strafe vorliegt ist derjenige, der willkürliche Abhängigkeiten zwischen Tests überlebt; deflationiertes Sharpe und mehrere Tests misst die Null-False-Discovery-Raten, die dies konkretisieren. Geben Sie neben allen von Ihnen veröffentlichten Grafiken die Anzahl der getesteten Links und den korrigierten Schwellenwert an.
Die resultierende Struktur ist ein Zeitreihendiagramm (TSG), bei dem es sich um ein gerichtetes Diagramm handelt, bei dem:
- Knoten repräsentieren Variablen zu bestimmten Zeitverzögerungen.
- Gerichtete Kanten stellen kausale Zusammenhänge mit zugehörigen Verzögerungen dar.
- Selbstschleifen stellen autoregressive Effekte dar.
Dieses TSG kann zu einem Zusammenfassungsdiagramm zusammengefasst werden, das nur das Vorhandensein und die Richtung von Kausalzusammenhängen zwischen Variablen (Aggregation über Verzögerungen hinweg) zeigt, was für die Interpretation oft praktischer ist.
Umsetzung mit Tigramite

Tigramit ist die Referenzimplementierung von PCMCI, entwickelt und gepflegt von Jakob Runges Gruppe am Deutschen Zentrum für Luft- und Raumfahrt (DLR). Es bietet eine saubere API für die Datenverarbeitung, mehrere bedingte Unabhängigkeitstests, mehrere PCMCI-Varianten und integrierte Visualisierung.
Installation
pip install tigramite
Wiederherstellungs-Gesundheitsprüfung (kein Ergebnis)
Bevor Sie Marktdaten verwenden, sollten Sie sicherstellen, dass die Pipeline eine von Ihnen gepflanzte Struktur findet. Dies ist ein Unit-Test für die Implementierung und nichts weiter – die grundlegende Wahrheit unten wird von Hand in die Datengenerierungsschleife geschrieben, sodass die Wiederherstellung beweist, dass der Code funktioniert und überhaupt nichts über Krypto aussagt. Lesen Sie es so.
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),
)
Lesen der Ausgabe
Auf dem gepflanzten VAR, print_significant_links gibt zurück:
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
Die gepflanzte Struktur kommt zurück, einschließlich des negativen Ergebnisses, das zählt: Es gibt keine direkte BTC -> SOL-Kante, obwohl BTC und SOL in dieser Stichprobe stark korrelieren. MCI führt die Assoziation vollständig dem ETH-Vermittler zu. Das ist das Verhalten, das der doppelte Konditionierungssatz hervorrufen soll, und es zu bestätigen, ist der Sinn dieses Blocks. Es handelt sich um einen bestandenen Unit-Test, nicht um eine Erkenntnis über Krypto.
Arbeiten mit realen Marktdaten
PCMCI benötigt schwach stationäre Inputs, also füttern Sie es mit standardisierten Log-Erträgen statt mit Preisen – die ADF-Maschinerie und die Gründe, warum Rohpreise daran scheitern, werden in statistische Arbitrage und Paarhandel. Sobald Sie eine standardisierte Renditematrix haben, besteht der Tigramit-spezifische Teil aus zwei Zeilen:
data = log_returns.values # (T, N) standardized log-returns
var_names = list(log_returns.columns)
dataframe = pp.DataFrame(data, var_names=var_names)
Zwei Tigramite-Details werden nicht aus der üblichen Rückgabepipeline übernommen:
- Fehlende Daten: Tigramite unterstützt maskierte Arrays für den Umgang mit fehlenden Beobachtungen. Verwenden
dataframe.maskum Lücken zu kennzeichnen – füllen Sie sie nicht vorwärts, da sich eine erfundene Beobachtung in jeden Konditionierungssatz fortpflanzt, der sie enthält. - Frequenzausrichtung: Alle Serien müssen im gleichen Zeitraster liegen. Bei Krypto ist dies normalerweise unkompliziert, da Börsen synchronisierte OHLCV-Daten bereitstellen.
Die Studie, die diese Methode benötigt
Alles darüber ist Maschinerie. Der Artikel kann in diesem Blog erst veröffentlicht werden, wenn die Maschine auf reale Daten verweist und berichtet, was sie gefunden hat, auch wenn die Antwort „nichts Stabiles“ lautet. Der zu erledigende Lauf:
- Setup: PCMCI+ auf stündliche Renditen für einen echten Warenkorb über einen angegebenen Zeitraum,
tau_maxdurch Domänenbegründung festgelegt,alpha_level = 0.01mit Benjamini-Yekutieli-Korrektur in allen Bereichen Links. Geben Sie die Anzahl der getesteten Links und den korrigierten Schwellenwert gemäß dem deflationierten Sharpe Standard. - Zu meldendes Ergebnis: Welche Kanten überleben die Korrektur, ihre Teilkorrelationsgrößen und wie viele überleben außerhalb der Stichprobe.
- Mindestens eine Stabilitätsmessung, ohne die das Stück ein Tigramite-README mit Krypto-Tickern ist: Welcher Anteil der Kanten bleibt von Fenster zu Fenster über rollierende Fenster hinweg bestehen? oder Empfindlichkeit des wiederhergestellten Diagramms gegenüber
tau_maxUndpc_alpha; oder ParCorr vs. CMIknn Uneinigkeit bezüglich derselben Daten.
Ein instabiler Graph ist ein veröffentlichungsfähiges Ergebnis, kein gescheitertes. „PCMCI auf fünf Hauptfächern: Der Kausalgraph überlebt rollierende Fenster nicht“ passt in die Zeile, in der dieser Blog bereits läuft ein ehrliches negatives Ergebnis, und es ist ein nützlicherer Artikel als ein funktionierendes Tutorial.
Die richtigen Parameter wählen

Maximale Verzögerung
Dieser Parameter begrenzt den zeitlichen Horizont der kausalen Entdeckung. Bei einer zu niedrigen Einstellung kann es passieren, dass sich langsam ausbreitende Effekte entgehen. Ein zu hoher Wert erhöht den Rechenaufwand und den Aufwand für mehrere Tests.
Für stündliche Kryptodaten: Zu ist ein vernünftiger Bereich. Für tägliche Daten: Zu erfasst die meisten Lead-Lag-Beziehungen. Hier kommt es auf Domänenkenntnisse an: Wenn Sie wissen, dass die Ausbreitung von Finanzierungsrateneffekten 8 Stunden dauert, legen Sie fest .
Bedeutung der Bedingungsauswahl
Einstellung pc_alpha=None Lässt Tigramite diesen Parameter automatisch anhand des Akaike-Informationskriteriums auswählen, das die empfohlene Standardeinstellung ist. Wenn Sie es manuell einstellen möchten, funktionieren Werte zwischen 0,1 und 0,4 gut. Niedrigere Werte machen Stufe 1 aggressiver (weniger Eltern bleiben erhalten), was den Rechenaufwand senkt, aber das Risiko birgt, dass echte Eltern entfernt werden.
Endgültiges Signifikanzniveau
Dies ist der Standardschwellenwert für Hypothesentests. Für explorative Analysen ist in Ordnung. Für alles, was eine Handelsentscheidung beeinflusst, verwenden Sie oder enger, und wenden Sie es nach der zuvor beschriebenen abhängigkeitsbewussten Korrektur an – das nominale Niveau ist nicht das Niveau, auf dem Sie tatsächlich testen.
PCMCI+: Gleichzeitige Links hinzufügen

Standard-PCMCI erkennt nur verzögerte Kausalzusammenhänge (). Aber auf Kryptomärkten, wo sich Informationen innerhalb von Sekunden über Vermögenswerte hinweg verbreiten, bedeutet die stündliche Abtastfrequenz, dass viele kausale Effekte zeitgleich zu sein scheinen ().
PCMCI+ (Runge, 2020) erweitert PCMCI, um sowohl verzögerte als auch gleichzeitige kausale Zusammenhänge zu entdecken. Die gleichzeitigen Links sind standardmäßig ungerichtet (da die Zeitreihenfolge nicht zwischen Ursache und Wirkung innerhalb desselben Zeitschritts unterscheiden kann), einige können jedoch mithilfe der Orientierungsregeln des Standard-PC-Algorithmus (Collider-Erkennung, Azyklizitätseinschränkungen) ausgerichtet werden.
results_plus = pcmci.run_pcmciplus(
tau_max=4,
tau_min=0, # include contemporaneous links
pc_alpha=None,
)
Für Kryptoanwendungen mit stündlicher oder geringerer Häufigkeit ist PCMCI+ häufig besser geeignet als Standard-PCMCI, da viele anlagenübergreifende Effekte schneller auftreten als das Abtastintervall.
Nichtlineare Erweiterungen

Finanzielle Zeitreihen weisen häufig nichtlineare Abhängigkeiten auf (z. B. Volatilitätsclustering, Regime-abhängige Lead-Lag-Effekte). Tigramite bietet mehrere nichtlineare bedingte Unabhängigkeitstests:
Gaußsche Prozessentfernungskorrelation (GPDC)
from tigramite.independence_tests.gpdc import GPDC
gpdc = GPDC(significance="analytic", gp_params=None)
pcmci = PCMCI(dataframe=dataframe, cond_ind_test=gpdc)
GPDC verwendet die Gaußsche Prozessregression, um den Einfluss des Konditionierungssatzes zu entfernen, und wendet dann eine Distanzkorrelation auf die Residuen an. Es ist mächtiger als ParCorr zur Erkennung nichtlinearer Effekte, jedoch deutlich langsamer.
Bedingte gegenseitige Information (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 schätzt bedingte gegenseitige Informationen mithilfe von -Nearest-Neighbor-Methoden. Es ist vollständig nichtparametrisch und kann beliebige funktionale Abhängigkeiten erkennen. Der Kompromiss besteht in den Rechenkosten und dem Bedarf an mehr Daten, um statistische Aussagekraft zu erreichen.
Beginnen Sie bei den meisten Krypto-Handelsanwendungen mit ParCorr. Wechseln Sie nur dann zu nichtlinearen Tests, wenn Sie konkrete Hinweise auf nichtlineare kausale Mechanismen und ausreichende Daten haben (normalerweise). ).
Wo ein Kausalgraph eingefügt werden würde

Ein Kausalgraph gibt Ihnen etwas, was eine Korrelationsmatrix nicht kann: außerhalb des Grades. Führen Sie PCMCI über 20–50 Assets aus, und die Knoten mit vielen ausgehenden Kanten sind Informationsführer – ihre Bewegungen tragen prädiktiven Inhalt für den Rest des Buches, und das ist eine Richtungsaussage, die eine symmetrische Korrelationsmatrix strukturell nicht aufstellen kann. Eine Faktorzerlegung zeigt Ihnen, dass BTC die Varianz dominiert; Ein Out-Grade-Ranking sagt Ihnen, ob BTC dominiert, weil es führt oder weil alles, einschließlich BTC, auf denselben Makroschock stößt.
Unter der Annahme, dass ein stabiler Graph jemals wiederhergestellt wird, sind die Stellen, an denen er funktionieren würde, bereits in diesem Blog klar genug. Rolling-Window-Änderungen in der Graphtopologie sind ein Strukturbruchsignal, das Gegenstand der [Regimeerkennung mit HMMs] ist./en/blog/post/regime-detection-hmm-adaptive-trading) – Die offene Frage ist, ob ein Kausalgraph den Übergang früher erkennt als ein Zustandsmodell. Die Anwendung von PCMCI auf einen Vermögenswert über mehrere Veranstaltungsorte hinweg führt zu einer standortübergreifenden Preisführerschaft, die bei [intelligenter Auftragsweiterleitung] bereits mit einer Auflösung von Millisekunden gemessen wird./en/blog/post/smart-order-routing-crypto); Eine Grafik auf Stundenbalken müsste das übertreffen, nicht noch einmal wiederholen. Und die periodische Täter-Spot-Verbindung, die durch den 8-Stunden-Finanzierungsmechanismus geschaffen wird und in [Finanzierungsraten-Arbitrage] abgedeckt ist (/en/blog/post/funding-rate-arbitrage-cross-exchange) ist ein Testfall mit bekannten Antworten: PCMCI sollte eine kausale Struktur wiederherstellen, die wir unabhängig überprüfen können, was es zu einem Validierungsziel und nicht zu einer Entdeckung macht.
Keines davon sind Erkenntnisse. Es handelt sich um Hypothesen, die auf die oben beschriebene Studie warten.
Einschränkungen und Vorbehalte

PCMCI ist ein leistungsstarkes Tool, weist jedoch wichtige Einschränkungen auf, die Praktiker verstehen müssen:
-
Annahme der kausalen Suffizienz: PCMCI geht davon aus, dass alle relevanten Variablen beobachtet werden. Wenn ein versteckter gemeinsamer Treiber (z. B. die Handelsaktivität eines Wals, unveröffentlichte Nachrichten) zwei beobachtete Vermögenswerte beeinflusst, meldet PCMCI möglicherweise fälschlicherweise einen direkten Kausalzusammenhang zwischen ihnen. Die LPCMCI-Variante behebt dieses Problem teilweise, indem sie latente Störfaktoren zulässt, auf Kosten der Rückgabe weniger orientierter Kanten.
-
Stationaritätsannahme: Die kausale Struktur wird über das Analysefenster hinweg als konstant angenommen. In der Praxis ändert sich die Dynamik des Kryptomarktes schnell. Verwenden Sie die Rolling-Window-Analyse, um strukturelle Brüche zu erkennen.
-
Linear vs. nichtlinear: Mit
ParCorrEs werden nur lineare kausale Effekte festgestellt. Ein nichtlinearer Kausalmechanismus (z. B. „BTC führt nur dann zu einem Rückgang der ETH, wenn BTC um mehr als 5 % fällt“) wäre für den linearen Test unsichtbar. -
Die Abtastfrequenz ist wichtig: Kausale Effekte, die schneller als die Abtastfrequenz auftreten, erscheinen als gleichzeitig ()-Links in Standard-PCMCI, und ihre Richtung kann nicht eindeutig sein. Verwenden Sie PCMCI+ und berücksichtigen Sie höherfrequente Daten.
-
Mehrfachtests: abhängige Tests, korrigiert wie oben beschrieben – siehe deflationierte Sharpe- und Mehrfachtests, warum die Abhängigkeitsstruktur die offensichtliche Wahl ausschließt.
-
Anforderungen an die Stichprobengröße: Für eine zuverlässige kausale Entdeckung sind ausreichende Daten erforderlich. Als grobe Richtlinie gilt: für
ParCorrmit Variablen und für nichtlineare Tests oder größere Variablenmengen.
PCMCI im Vergleich zu anderen Methoden

| Methode | Behandelt Autokorrelation | Behandelt gängige Treiber | Zeitgenössische Links | Nichtlinear | Latente Störfaktoren |
|---|---|---|---|---|---|
| Granger-Kausalität | Teilweise | Nein (bivariat) | Nein | Mit Erweiterungen | Nein |
| Entropie übertragen | Teilweise | Nein (bivariat) | Nein | Ja | Nein |
| PCMCI | Ja (MCI) | Ja | Nein | Mit CMIknn/GPDC | Nein |
| PCMCI+ | Ja | Ja | Ja | Mit CMIknn/GPDC | Nein |
| LPCMCI | Ja | Ja | Ja | Mit CMIknn/GPDC | Ja |
| VAR-LiNGAM | Nein | Ja | Ja | Nein | Nein |
Der Hauptvorteil von PCMCI gegenüber Granger-Kausalität und Transferentropie ist der MCI-Test, der Autokorrelation und gemeinsame Treiber in einer multivariaten Umgebung korrekt berücksichtigt. Dies ist genau das Szenario, das auf Kryptomärkten anzutreffen ist, wo Dutzende korrelierter, autokorrelierter Vermögenswerte gleichzeitig interagieren.
Fazit

Der zweistufige Aufbau ist der Beitrag, den es wert ist, weggenommen zu werden: spärliche Bedingungsauswahl, um den übergeordneten Satz zu begrenzen, dann ein MCI-Test, dessen Konditionierungssatz sowohl die übergeordneten Elemente der Quelle als auch des Ziels umfasst. Diese zweite Hälfte unterscheidet PCMCI von Granger und der Transferentropie und macht die Methode für Serien geeignet, die so autokorreliert sind wie Krypto-Renditen.
Was die Methode nicht mitbringt, sind Beweise. Ein wiederhergestelltes Diagramm ist eine Hypothese über den Informationsfluss, kein Signal, und in diesem Blog zählt es erst, wenn es mit realen Daten mit einem angegebenen Warenkorb, einem angegebenen Datumsbereich, einer abhängigkeitsbewussten Korrektur und mindestens einer Messung, ob das Diagramm stillsteht, wenn sich das Fenster bewegt, ausgeführt wird. Behandeln Sie alles hier als Werkzeug, bis dieser Lauf existiert.
Wenn sich herausstellt, dass die Grafik nicht stabil ist, ist das der Artikel. Es wäre nicht das erste negative Ergebnis, das mehr wert wäre als ein funktionierendes Tutorial.
Referenzen
– Runge, J., Nowack, P., Kretschmer, M., Flaxman, S. und Sejdinovic, D. (2019). Erkennen und Quantifizieren kausaler Zusammenhänge in großen nichtlinearen Zeitreihendatensätzen. Science Advances, 5(11), eaau4996.
- Runge, J. (2020). Entdecken gleichzeitiger und verzögerter Kausalzusammenhänge in autokorrelierten nichtlinearen Zeitreihendatensätzen. Proceedings of the 36th Conference on Uncertainty in Artificial Intelligence (UAI), PMLR 124:1388-1397.
- Tigramite-Dokumentation: https://jakobrunge.github.io/tigramite/
- Tigramite GitHub-Repository: https://github.com/jakobrunge/tigramite
Authors
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.