PCMCI: Causal Discovery in Multivariate Crypto Time Series
PCMCI, yang dikembangkan oleh Jakob Runge (2018, 2020), adalah algoritma penemuan kausal untuk deret waktu multivariat. Algoritma ini menggabungkan algoritma PC untuk pembelajaran model graf dengan uji Momentary Conditional Independence (MCI), yang himpunan kondisinya dirancang untuk menetralkan tiga hal sekaligus: penggerak bersama, jalur tidak langsung, dan autokorelasi variabel sumber. Bagian terakhir inilah yang perlu dibaca dengan saksama—alasan PCMCI tidak mewarisi tingkat positif palsu yang menenggelamkan pengujian lead-lag naif pada deret yang sarat momentum.
Artikel ini mengurai konstruksi dua tahap tersebut dari prinsip pertama, mengimplementasikannya dengan pustaka tigramite, dan memaparkan studi data nyata yang masih dibutuhkan metode ini sebelum menjadi input trading.
Apa yang Ditambahkan pada Hal yang Sudah Ada

Blog ini sudah membahas korelasi. Pergerakan bersama kripto sebagian besar merupakan artefak faktor umum—korelasi sinyal antar pasangan menunjukkan bahwa PC1 saja menyerap 65% varians pada book berisi sepuluh pasangan. Korelasi berpasangan yang tinggi bukanlah hubungan yang dapat diperdagangkan, sehingga arbitrase statistik dan pairs trading menggunakan kointegrasi. Dependensi itu sendiri juga tidak stabil: korelasi dinamis DCC-GARCH menjelaskan mengapa korelasi sampel statis mengasumsikan dependensi stasioner, volatilitas marginal konstan, dan simetri antar arah—tak satu pun berlaku.
Tak satu pun dari metode tersebut menghasilkan graf berarah. Metode-metode itu memberi tahu bahwa BTC, ETH, dan SOL bergerak bersama serta faktor umum menjelaskan sebagian besarnya; tetapi tidak memberi tahu apakah BTC secara langsung mendorong SOL atau hubungan itu sepenuhnya dimediasi oleh ETH. Kausalitas Granger biasanya digunakan untuk arah, tetapi Granger standar bersifat bivariat—tidak dapat memisahkan penggerak umum yang tak teramati dari kausalitas yang nyata.
Ada mode kegagalan ketiga yang lebih penting di sini daripada kelihatannya. Setiap deret return kripto membawa autokorelasi positif, dan autokorelasi memperbesar statistik uji dependensi antara dua deret semacam itu: dua proses autokorelasi yang independen akan tampak berhubungan signifikan pada sampel berhingga. Pekerjaan korelasi memperlakukannya sebagai koreksi ukuran sampel (pembahasan effective_N dalam artikel korelasi sinyal). Untuk penemuan kausal, ini bukan koreksi, melainkan masalah desain utama—dan persis itulah yang hendak diselesaikan oleh himpunan kondisi Tahap 2.
Algoritma PCMCI

PCMCI bekerja dalam dua tahap. Tahap pertama mengidentifikasi himpunan kandidat orang tua kausal untuk setiap variabel. Tahap kedua menguji setiap hubungan kandidat dengan uji independensi bersyarat yang dibangun secara cermat.
Tahap 1: Pemilihan Kondisi PC-Stable (PC1)
Tujuan Tahap 1 adalah menemukan, untuk setiap variabel , superset dari orang tua kausal sebenarnya. Himpunan ini kemudian digunakan sebagai himpunan kondisi pada Tahap 2.
Algoritma dimulai dengan himpunan lengkap semua variabel ber-lag sebagai calon orang tua:
Kemudian algoritma secara iteratif menghapus variabel yang independen bersyarat dari . Pada iterasi , algoritma menguji setiap calon orang tua untuk independensi terhadap , dengan mengondisikan pada orang tua tersisa terkuat (kecuali sendiri):
di mana adalah himpunan variabel dalam yang memiliki asosiasi terkuat dengan .
Aspek "stable" berarti keputusan penghapusan dalam satu iterasi didasarkan pada himpunan orang tua dari iterasi sebelumnya, sehingga mencegah ketergantungan urutan pada hasil. Ini penting untuk reproduktibilitas.
Tingkat signifikansi pada tahap ini sengaja ditetapkan secara liberal (sering 0.2 atau lebih, atau ditentukan otomatis melalui opsi pc_alpha=None di tigramite). Tujuannya bukan mengendalikan positif palsu, melainkan mempertahankan semua orang tua yang benar sambil memangkas sebanyak mungkin variabel yang tidak relevan. Beberapa positif palsu dalam dapat diterima; negatif palsu tidak.
Tahap 2: Uji Momentary Conditional Independence (MCI)
Setelah kita memiliki himpunan orang tua terestimasi untuk semua variabel, Tahap 2 menguji setiap hubungan kausal potensial menggunakan statistik MCI:
Inovasi utamanya adalah himpunan kondisi. Kita mengondisikan pada:
- Orang tua target : ini menghapus pengaruh penggerak bersama dan jalur tidak langsung lain menuju .
- Orang tua sumber : ini menghapus autokorelasi variabel sumber, sehingga mencegah statistik uji membesar.
Dengan mengondisikan pada kedua himpunan sekaligus, MCI secara efektif mengisolasi efek kausal langsung dan sesaat dari terhadap pada lag khusus , setelah memperhitungkan semua perancu, mediator, dan efek autokorelasi.
Statistik uji dapat berupa uji independensi bersyarat valid apa pun. Untuk hubungan linear, korelasi parsial adalah pilihan standar. Untuk dependensi nonlinier, dapat digunakan informasi mutual bersyarat (CMI) yang diestimasi melalui metode -nearest-neighbor, atau uji GPDC (Gaussian Process Distance Correlation).
Korelasi Parsial sebagai Uji Default
Untuk sebagian besar aplikasi finansial, uji korelasi parsial (ParCorr di tigramite) adalah alat kerja utama. Diberikan variabel , , dan himpunan kondisi , korelasi parsial adalah:
di mana dan adalah residual dari meregresikan dan pada :
Dengan kata lain, korelasi parsial mengukur asosiasi linear antara dan setelah menghapus pengaruh linear variabel kondisi . Di bawah hipotesis nol independensi bersyarat dengan data Gaussian, statistik uji mengikuti distribusi yang diketahui sehingga perhitungan nilai- eksak dapat dilakukan.
Nilai korelasi parsial berada dalam dan memberikan peringkat alami untuk kekuatan hubungan kausal. Korelasi parsial 0.3 antara BTC pada lag 1 dan ETH pada lag 0, dengan mengondisikan pada kedua himpunan orang tua, berarti: "Setelah menghapus pengaruh semua perancu teridentifikasi dan autokorelasi, guncangan satu standar deviasi pada return BTC memprediksi pergerakan sebesar 0.3 standar deviasi pada return ETH satu periode kemudian."
Dari Hasil Uji ke Graf Kausal (DAG)
Output PCMCI adalah sepasang matriks:
- val_matrix: Berbentuk , berisi statistik uji MCI (misalnya korelasi parsial) untuk setiap hubungan berarah .
- p_matrix: Berbentuk sama, berisi nilai- yang sesuai.
Untuk membangun graf kausal, kita memberi ambang pada matriks- dengan tingkat signifikansi yang telah dikoreksi:
Koreksi yang digunakan bukan detail yang boleh diabaikan. PCMCI menguji hubungan yang saling bergantung sejak konstruksinya—setiap hubungan menuju berbagi himpunan kondisi dengan semua hubungan lain, dan deret sumber sejak awal saling berkorelasi. Inilah kondisi ketika Benjamini-Hochberg biasa gagal dan penalti harmonik Benjamini-Yekutieli tetap valid di bawah dependensi arbitrer antar-uji; Sharpe yang didistorsi dan pengujian berganda mengukur tingkat penemuan palsu di bawah nol yang membuat hal ini konkret. Laporkan jumlah hubungan yang diuji dan ambang terkoreksi bersama graf apa pun yang Anda publikasikan.
Struktur yang dihasilkan adalah graf deret waktu (TSG), yaitu graf berarah dengan:
- Node yang mewakili variabel pada lag waktu tertentu.
- Sisi berarah yang mewakili hubungan kausal beserta lag-nya.
- Self-loop yang mewakili efek autoregresif.
TSG ini dapat diringkas menjadi summary graph yang hanya menunjukkan keberadaan dan arah hubungan kausal antarkomponen (diagregasi lintas lag), yang sering kali lebih praktis untuk interpretasi.
Implementasi dengan Tigramite

Tigramite adalah implementasi referensi PCMCI, yang dikembangkan dan dipelihara oleh kelompok Jakob Runge di German Aerospace Center (DLR). Tigramite menyediakan API yang bersih untuk penanganan data, berbagai uji independensi bersyarat, beberapa varian PCMCI, dan visualisasi bawaan.
Instalasi
pip install tigramite
Pemeriksaan Kewarasan Recovery (Bukan Hasil)
Sebelum menjalankannya pada data pasar, pastikan pipeline dapat menemukan struktur yang sengaja Anda tanamkan. Ini adalah unit test untuk implementasi dan tidak lebih—ground truth di bawah ditulis langsung dalam loop pembangkit data, jadi recovery hanya membuktikan kode bekerja dan sama sekali tidak mengatakan apa pun tentang kripto. Bacalah dengan pemahaman itu.
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),
)
Membaca Output
Pada VAR yang ditanamkan, print_significant_links mengembalikan:
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
Struktur yang ditanamkan berhasil ditemukan, termasuk hasil negatif yang penting: tidak ada sisi langsung BTC -> SOL, meskipun BTC dan SOL sangat berkorelasi dalam sampel ini. MCI mengatribusikan asosiasi tersebut sepenuhnya kepada mediator ETH. Itulah perilaku yang seharusnya dihasilkan oleh himpunan kondisi ganda, dan mengonfirmasinya adalah tujuan seluruh blok ini. Ini adalah unit test yang lulus, bukan temuan tentang kripto.
Bekerja dengan Data Pasar Nyata
PCMCI membutuhkan input yang stasioner lemah, jadi berikan log-return terstandarisasi alih-alih harga—mekanisme ADF dan alasan harga mentah gagal dibahas dalam arbitrase statistik dan pairs trading. Setelah memiliki matriks return terstandarisasi, bagian khusus tigramite hanya membutuhkan dua baris:
data = log_returns.values # (T, N) standardized log-returns
var_names = list(log_returns.columns)
dataframe = pp.DataFrame(data, var_names=var_names)
Dua detail tigramite tidak terbawa dari pipeline return biasa:
- Data hilang: Tigramite mendukung masked array untuk menangani observasi yang hilang. Gunakan
dataframe.maskuntuk menandai celah—jangan melakukan forward-fill, karena observasi buatan akan merambat ke setiap himpunan kondisi yang memuatnya. - Penyelarasan frekuensi: Semua deret harus berada pada grid waktu yang sama. Untuk kripto ini biasanya mudah, karena bursa menyediakan data OHLCV yang tersinkronisasi.
Studi yang Dibutuhkan Metode Ini
Semua hal di atas hanyalah mesin. Artikel ini belum layak dipublikasikan di blog sampai mesin tersebut diarahkan ke data nyata dan melaporkan temuannya, termasuk jika jawabannya adalah "tidak ada yang stabil". Berikut proses yang perlu dilakukan:
- Setup: PCMCI+ pada return per jam untuk basket nyata dalam rentang tanggal yang dinyatakan,
tau_maxditetapkan berdasarkan penalaran domain,alpha_level = 0.01dengan koreksi Benjamini-Yekutieli di seluruh hubungan. Laporkan jumlah hubungan yang diuji dan ambang terkoreksi, sesuai standar deflated Sharpe. - Hasil yang dilaporkan: edge mana yang bertahan setelah koreksi, besar korelasi parsialnya, dan berapa banyak yang bertahan out-of-sample.
- Setidaknya satu pengukuran stabilitas, karena tanpanya tulisan ini hanyalah README tigramite dengan ticker kripto: fraksi edge yang bertahan dari satu window ke window berikutnya pada rolling window; atau sensitivitas graf yang ditemukan terhadap
tau_maxdanpc_alpha; atau perbedaan ParCorr vs CMIknn pada data yang sama.
Graf yang tidak stabil adalah hasil yang layak dipublikasikan, bukan kegagalan. "PCMCI pada lima major: graf kausal tidak bertahan di rolling window" sesuai dengan garis yang sudah dijalankan blog ini dalam hasil negatif yang jujur, dan lebih berguna daripada tutorial yang berhasil.
Memilih Parameter yang Tepat

Lag maksimum
Parameter ini membatasi horizon temporal penemuan kausal. Menetapkannya terlalu rendah dapat melewatkan efek yang merambat lambat; terlalu tinggi meningkatkan biaya komputasi dan beban pengujian berganda.
Untuk data kripto per jam, hingga adalah rentang yang wajar. Untuk data harian, hingga menangkap sebagian besar hubungan lead-lag. Pengetahuan domain penting di sini: jika Anda tahu efek funding rate membutuhkan 8 jam untuk merambat, tetapkan .
Signifikansi pemilihan kondisi
Mengatur pc_alpha=None memungkinkan tigramite memilih parameter ini secara otomatis menggunakan Akaike Information Criterion, yang merupakan default yang direkomendasikan. Jika ingin menetapkannya secara manual, nilai antara 0.1 dan 0.4 bekerja dengan baik. Nilai yang lebih rendah membuat Tahap 1 lebih agresif (lebih sedikit orang tua dipertahankan), sehingga biaya komputasi berkurang tetapi risiko menghapus orang tua yang benar meningkat.
Tingkat signifikansi akhir
Ini adalah ambang pengujian hipotesis standar. Untuk analisis eksploratif, cukup. Untuk apa pun yang menjadi masukan keputusan trading, gunakan atau lebih ketat, dan terapkan setelah koreksi yang memperhitungkan dependensi seperti dijelaskan sebelumnya—tingkat nominal bukan tingkat yang sebenarnya sedang Anda uji.
PCMCI+ : Menambahkan Hubungan Kontemporer

PCMCI standar hanya menemukan hubungan kausal ber-lag (). Namun di pasar kripto, ketika informasi merambat antar-aset dalam hitungan detik, frekuensi sampling per jam membuat banyak efek kausal tampak kontemporer ().
PCMCI+ (Runge, 2020) memperluas PCMCI untuk menemukan hubungan kausal ber-lag dan kontemporer. Hubungan kontemporer secara default tidak berarah (karena urutan waktu tidak dapat membedakan sebab dari akibat dalam langkah waktu yang sama), tetapi sebagian dapat diorientasikan menggunakan aturan orientasi algoritma PC standar (deteksi collider, kendala asiklik).
results_plus = pcmci.run_pcmciplus(
tau_max=4,
tau_min=0, # include contemporaneous links
pc_alpha=None,
)
Untuk aplikasi kripto pada frekuensi per jam atau lebih rendah, PCMCI+ sering lebih tepat daripada PCMCI standar, karena banyak efek lintas aset terjadi lebih cepat daripada interval sampling.
Ekstensi Nonlinier

Deret waktu finansial sering menunjukkan dependensi nonlinier (misalnya pengelompokan volatilitas dan efek lead-lag yang bergantung pada rezim). Tigramite menyediakan beberapa uji independensi bersyarat nonlinier:
Gaussian Process Distance Correlation (GPDC)
from tigramite.independence_tests.gpdc import GPDC
gpdc = GPDC(significance="analytic", gp_params=None)
pcmci = PCMCI(dataframe=dataframe, cond_ind_test=gpdc)
GPDC menggunakan regresi proses Gaussian untuk menghapus pengaruh himpunan kondisi, lalu menerapkan korelasi jarak pada residual. Uji ini lebih kuat daripada ParCorr untuk mendeteksi efek nonlinier, tetapi jauh lebih lambat.
Conditional Mutual 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 mengestimasi informasi mutual bersyarat menggunakan metode -nearest-neighbor. Metode ini sepenuhnya nonparametrik dan dapat mendeteksi dependensi fungsional apa pun. Imbalannya adalah biaya komputasi dan kebutuhan data yang lebih besar untuk mencapai daya statistik.
Untuk sebagian besar aplikasi trading kripto, mulailah dengan ParCorr. Beralih ke uji nonlinier hanya jika ada bukti spesifik tentang mekanisme kausal nonlinier dan data yang cukup (biasanya ).
Di Mana Graf Kausal Akan Terpasang

Satu hal yang diberikan graf kausal tetapi tidak diberikan matriks korelasi adalah out-degree. Jalankan PCMCI pada 20--50 aset; node dengan banyak edge keluar adalah pemimpin informasi—pergerakannya mengandung konten prediktif bagi seluruh book, dan ini merupakan klaim arah yang secara struktural tidak mampu dibuat oleh matriks korelasi simetris. Dekomposisi faktor memberi tahu bahwa BTC mendominasi varians; peringkat out-degree memberi tahu apakah BTC dominan karena ia memimpin atau karena semua aset, termasuk BTC, memuat guncangan makro yang sama.
Dengan asumsi graf stabil berhasil ditemukan, tempat graf tersebut terhubung dengan pekerjaan yang sudah ada di blog ini cukup jelas. Perubahan topologi graf pada rolling window adalah sinyal structural break, yang menjadi topik deteksi rezim dengan HMM—pertanyaan terbukanya adalah apakah graf kausal mendeteksi transisi lebih awal daripada model keadaan. Menerapkan PCMCI pada satu aset lintas bursa menjawab kepemimpinan harga lintas bursa, yang sudah diukur pada resolusi milidetik dalam smart order routing; graf pada candle per jam harus mengunggulinya, bukan sekadar mengulanginya. Dan hubungan perp-spot berkala yang diciptakan mekanisme funding 8 jam, yang dibahas dalam arbitrase funding rate, adalah kasus uji dengan jawaban yang sudah diketahui: PCMCI seharusnya menemukan struktur kausal yang dapat kita verifikasi secara independen, sehingga ini menjadi target validasi, bukan penemuan.
Tak satu pun dari ini adalah temuan. Semuanya adalah hipotesis yang menunggu studi di atas.
Keterbatasan dan Catatan Penting

PCMCI adalah alat yang kuat, tetapi memiliki keterbatasan penting yang harus dipahami praktisi:
-
Asumsi kecukupan kausal: PCMCI mengasumsikan semua variabel yang relevan teramati. Jika penggerak umum tersembunyi (misalnya aktivitas trading whale atau berita yang belum dirilis) memengaruhi dua aset yang diamati, PCMCI dapat keliru melaporkan hubungan kausal langsung di antara keduanya. Varian LPCMCI sebagian mengatasi hal ini dengan mengizinkan perancu laten, dengan konsekuensi menghasilkan lebih sedikit edge yang terorientasi.
-
Asumsi stasioneritas: Struktur kausal diasumsikan konstan sepanjang jendela analisis. Dalam praktiknya, dinamika pasar kripto berubah cepat. Gunakan analisis rolling window untuk mendeteksi structural break.
-
Linear vs. nonlinier: Dengan
ParCorr, hanya efek kausal linear yang terdeteksi. Mekanisme kausal nonlinier (misalnya "BTC menyebabkan ETH turun hanya ketika BTC turun lebih dari 5%") tidak akan terlihat oleh uji linear. -
Frekuensi sampling penting: Efek kausal yang terjadi lebih cepat daripada frekuensi sampling akan muncul sebagai hubungan kontemporer () dalam PCMCI standar, dan arahnya bisa ambigu. Gunakan PCMCI+ dan pertimbangkan data berfrekuensi lebih tinggi.
-
Pengujian berganda: uji yang saling bergantung, dikoreksi seperti di atas—lihat Sharpe yang didistorsi dan pengujian berganda untuk alasan struktur dependensi menyingkirkan pilihan yang tampak jelas.
-
Kebutuhan ukuran sampel: Penemuan kausal yang andal membutuhkan data yang cukup. Sebagai pedoman kasar, targetkan untuk
ParCorrdengan variabel, dan untuk uji nonlinier atau himpunan variabel yang lebih besar.
PCMCI vs. Metode Lain

| Metode | Menangani autokorelasi | Menangani penggerak bersama | Hubungan kontemporer | Nonlinier | Perancu laten |
|---|---|---|---|---|---|
| Kausalitas Granger | Sebagian | Tidak (bivariat) | Tidak | Dengan ekstensi | Tidak |
| Entropi transfer | Sebagian | Tidak (bivariat) | Tidak | Ya | Tidak |
| PCMCI | Ya (MCI) | Ya | Tidak | Dengan CMIknn/GPDC | Tidak |
| PCMCI+ | Ya | Ya | Ya | Dengan CMIknn/GPDC | Tidak |
| LPCMCI | Ya | Ya | Ya | Dengan CMIknn/GPDC | Ya |
| VAR-LiNGAM | Tidak | Ya | Ya | Tidak | Tidak |
Keunggulan utama PCMCI dibandingkan kausalitas Granger dan entropi transfer adalah uji MCI, yang dengan tepat memperhitungkan autokorelasi dan penggerak bersama dalam konteks multivariat. Inilah skenario yang ditemui di pasar kripto, ketika puluhan aset yang berkorelasi dan terautokorelasi berinteraksi secara bersamaan.
Kesimpulan

Konstruksi dua tahap adalah kontribusi yang layak diingat: pemilihan kondisi yang jarang untuk membatasi himpunan orang tua, lalu uji MCI yang himpunan kondisinya mencakup orang tua sumber sekaligus target. Bagian kedua inilah yang membedakan PCMCI dari Granger dan entropi transfer, serta membuat metode ini layak digunakan pada deret yang terautokorelasi seperti return kripto.
Yang tidak disertakan metode ini adalah bukti. Graf yang berhasil ditemukan merupakan hipotesis tentang aliran informasi, bukan sinyal, dan di blog ini tidak berarti apa pun sampai dijalankan pada data nyata dengan basket yang dinyatakan, rentang tanggal yang dinyatakan, koreksi yang memperhitungkan dependensi, dan setidaknya satu pengukuran apakah graf tetap bertahan ketika window bergerak. Sampai proses itu ada, anggap semua di sini sebagai perangkat bantu.
Jika graf tersebut ternyata tidak stabil, itulah artikelnya. Ini bukan hasil negatif pertama di sini yang lebih berharga daripada tutorial yang berhasil.
Referensi
- Runge, J., Nowack, P., Kretschmer, M., Flaxman, S., and Sejdinovic, D. (2019). Detecting and quantifying causal associations in large nonlinear time series datasets. Science Advances, 5(11), eaau4996.
- Runge, J. (2020). Discovering contemporaneous and lagged causal relations in autocorrelated nonlinear time series datasets. Proceedings of the 36th Conference on Uncertainty in Artificial Intelligence (UAI), PMLR 124:1388-1397.
- Dokumentasi Tigramite: https://jakobrunge.github.io/tigramite/
- Repositori GitHub Tigramite: https://github.com/jakobrunge/tigramite
Penulis
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.