PCMCI: Causal Discovery in Multivariate Crypto Time Series
PCMCI, do Jakob Runge phát triển (2018, 2020), là thuật toán khám phá quan hệ nhân quả cho chuỗi thời gian đa biến. Nó kết hợp thuật toán PC dùng để học mô hình đồ thị với kiểm định Momentary Conditional Independence (MCI), trong đó tập điều kiện được xây dựng để đồng thời vô hiệu hóa ba yếu tố: driver chung, đường dẫn gián tiếp và tự tương quan của biến nguồn. Phần cuối đáng được đọc kỹ — đây là lý do PCMCI không thừa hưởng tỷ lệ dương tính giả khiến các kiểm định lead-lag ngây thơ trên chuỗi nặng momentum thất bại.
Bài viết này phân tích cấu trúc hai giai đoạn từ nguyên lý đầu tiên, triển khai bằng thư viện tigramite và trình bày nghiên cứu dữ liệu thật mà phương pháp cần có trước khi bất kỳ kết quả nào được dùng làm đầu vào trading.
Phương pháp này bổ sung gì cho những gì đã có

Blog đã xử lý phần tương quan. Đồng biến động crypto phần lớn là sản phẩm của nhân tố chung — tương quan tín hiệu giữa các cặp cho thấy riêng PC1 hấp thụ 65% phương sai trên một book gồm mười cặp. Tương quan từng cặp cao không phải là quan hệ có thể giao dịch, đó là lý do arbitrage thống kê và pairs trading tìm đến cointegration. Bản thân dependence cũng không ổn định: tương quan động DCC-GARCH liệt kê vì sao tương quan mẫu tĩnh giả định dependence dừng, volatility biên không đổi và đối xứng theo hướng, trong khi không điều kiện nào đúng.
Không phương pháp nào tạo ra đồ thị có hướng. Chúng cho biết BTC, ETH và SOL chuyển động cùng nhau và nhân tố chung giải thích phần lớn điều đó; chúng không cho biết BTC trực tiếp dẫn dắt SOL hay mối liên hệ hoàn toàn được trung gian qua ETH. Granger causality thường được dùng để tìm hướng, nhưng Granger chuẩn là song biến — không thể tách driver chung không quan sát được khỏi quan hệ nhân quả thật.
Có một dạng thất bại thứ ba quan trọng hơn vẻ ngoài. Mỗi chuỗi lợi nhuận crypto đều có tự tương quan dương, và tự tương quan làm phình thống kê kiểm định của mọi kiểm định dependence giữa hai chuỗi như vậy: hai quá trình tự tương quan độc lập sẽ trông có liên hệ đáng kể trên mẫu hữu hạn. Các phân tích tương quan xem đây là hiệu chỉnh kích thước mẫu (phần thảo luận effective_N trong bài tương quan tín hiệu). Với khám phá nhân quả, đây không phải một hiệu chỉnh mà là bài toán thiết kế trung tâm — và chính là điều tập điều kiện của Giai đoạn 2 được xây dựng để giải quyết.
Thuật toán PCMCI

PCMCI hoạt động qua hai giai đoạn. Giai đoạn đầu xác định tập ứng viên gồm các parent nhân quả của từng biến. Giai đoạn hai kiểm định từng liên kết ứng viên bằng kiểm định độc lập có điều kiện được xây dựng cẩn thận.
Giai đoạn 1: Chọn điều kiện PC-Stable (PC1)
Mục tiêu của Giai đoạn 1 là tìm, với mỗi biến , một tập cha bao chứa các parent nhân quả thật. Tập này sau đó được dùng làm tập điều kiện trong Giai đoạn 2.
Thuật toán bắt đầu với toàn bộ tập biến trễ làm parent tiềm năng:
Sau đó thuật toán lặp lại việc loại các biến độc lập có điều kiện với . Ở vòng lặp , thuật toán kiểm định từng parent ứng viên có độc lập với hay không, với điều kiện là parent còn lại mạnh nhất (không bao gồm chính ):
trong đó là tập biến trong có liên hệ mạnh nhất với .
Đặc tính "stable" nghĩa là quyết định loại trong cùng một vòng dựa trên các tập parent của vòng trước, nhờ đó ngăn kết quả phụ thuộc vào thứ tự. Điều này rất quan trọng cho khả năng tái lập.
Mức ý nghĩa ở giai đoạn này được đặt rộng có chủ ý (thường là 0.2 hoặc cao hơn, hoặc được xác định tự động qua tùy chọn pc_alpha=None trong tigramite). Mục tiêu không phải kiểm soát dương tính giả ở đây, mà giữ lại mọi parent thật trong khi cắt bỏ nhiều biến không liên quan nhất có thể. Một vài dương tính giả trong là chấp nhận được; âm tính giả thì không.
Giai đoạn 2: Kiểm định Momentary Conditional Independence (MCI)
Khi đã có các tập parent ước tính cho mọi biến, Giai đoạn 2 kiểm định từng liên kết nhân quả tiềm năng bằng thống kê MCI:
Đổi mới then chốt nằm ở tập điều kiện. Ta điều kiện theo:
- Parent của target : Loại bỏ ảnh hưởng của driver chung và các đường gián tiếp khác đi vào .
- Parent của source : Loại bỏ tự tương quan của biến nguồn, ngăn thống kê kiểm định bị thổi phồng.
Bằng cách điều kiện đồng thời theo cả hai tập, MCI thực tế cô lập tác động nhân quả trực tiếp, tức thời của lên tại độ trễ cụ thể , sau khi loại các confounder, mediator và tác động tự tương quan.
Thống kê kiểm định có thể là bất kỳ kiểm định độc lập có điều kiện hợp lệ nào. Với quan hệ tuyến tính, partial correlation là lựa chọn chuẩn. Với dependence phi tuyến, có thể dùng conditional mutual information (CMI) ước tính qua phương pháp -nearest-neighbor hoặc kiểm định GPDC (Gaussian Process Distance Correlation).
Partial Correlation làm Kiểm định Mặc định
Với phần lớn ứng dụng tài chính, kiểm định partial correlation (ParCorr trong tigramite) là công cụ chính. Với các biến , và tập điều kiện , partial correlation là:
trong đó và là residual khi hồi quy lần lượt và theo :
Nói cách khác, partial correlation đo liên hệ tuyến tính giữa và sau khi loại ảnh hưởng tuyến tính của các biến điều kiện . Dưới giả thuyết không của độc lập có điều kiện với dữ liệu Gaussian, thống kê kiểm định tuân theo phân phối đã biết, cho phép tính -value chính xác.
Giá trị partial correlation nằm trong và tạo ra cách xếp hạng tự nhiên cho độ mạnh của liên kết nhân quả. Partial correlation 0.3 giữa BTC ở lag 1 và ETH ở lag 0, có điều kiện theo cả hai tập parent, nghĩa là: "Sau khi loại ảnh hưởng của mọi confounder và tự tương quan đã xác định, một cú sốc return BTC bằng một độ lệch chuẩn dự báo biến động return ETH bằng 0.3 độ lệch chuẩn ở kỳ kế tiếp."
Từ Kết quả Kiểm định đến Đồ thị Nhân quả (DAG)
Đầu ra của PCMCI là một cặp ma trận:
- val_matrix: Shape , chứa thống kê kiểm định MCI (ví dụ partial correlation) cho mọi liên kết có hướng .
- p_matrix: Cùng shape, chứa các -value tương ứng.
Để dựng đồ thị nhân quả, ta threshold -matrix ở mức ý nghĩa đã hiệu chỉnh:
Không thể xem nhẹ việc chọn hiệu chỉnh. PCMCI kiểm định liên kết phụ thuộc ngay từ cấu trúc — mọi liên kết đi vào dùng chung tập điều kiện, còn các chuỗi nguồn vốn đã tương quan lẫn nhau. Đây chính là bối cảnh Benjamini-Hochberg thông thường thất bại, còn penalty điều hòa của Benjamini-Yekutieli chịu được dependence tùy ý giữa các kiểm định; deflated Sharpe và multiple testing đo các false-discovery rate dưới null để cụ thể hóa điều này. Hãy báo cáo số liên kết đã kiểm định và threshold đã hiệu chỉnh cùng với mọi đồ thị được công bố.
Kết cấu thu được là time series graph (TSG), một đồ thị có hướng trong đó:
- Node đại diện cho các biến tại độ trễ thời gian cụ thể.
- Cạnh có hướng đại diện cho liên kết nhân quả cùng độ trễ tương ứng.
- Self-loop đại diện cho tác động tự hồi quy.
TSG này có thể rút gọn thành summary graph, chỉ thể hiện sự tồn tại và hướng của liên kết nhân quả giữa các biến (gộp qua các độ trễ), thường thực tế hơn cho việc diễn giải.
Triển khai với Tigramite

Tigramite là triển khai tham chiếu của PCMCI, được nhóm của Jakob Runge tại Trung tâm Hàng không Vũ trụ Đức (DLR) phát triển và duy trì. Nó cung cấp API rõ ràng để xử lý dữ liệu, nhiều kiểm định độc lập có điều kiện, một số biến thể PCMCI và visualization tích hợp.
Cài đặt
pip install tigramite
Kiểm tra Sanity về Recovery (Không phải Kết quả)
Trước khi chạy trên dữ liệu thị trường, nên xác nhận pipeline tìm được cấu trúc bạn đã cài vào. Đây chỉ là unit test cho triển khai — ground truth bên dưới được viết thủ công trong vòng lặp sinh dữ liệu, nên khôi phục được nó chỉ chứng minh code hoạt động và hoàn toàn không nói gì về crypto. Hãy đọc nó đúng như vậy.
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),
)
Đọc Output
Trên VAR đã cài, print_significant_links trả về:
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
Cấu trúc đã cài được khôi phục, bao gồm kết quả phủ định quan trọng: không có cạnh BTC -> SOL trực tiếp, dù BTC và SOL tương quan mạnh trong mẫu này. MCI quy toàn bộ liên hệ cho mediator ETH. Đó là hành vi mà tập điều kiện kép được kỳ vọng tạo ra, và xác nhận nó là toàn bộ mục đích của block này. Đây là unit test đạt, không phải phát hiện về crypto.
Làm việc với Dữ liệu Thị trường Thật
PCMCI cần input dừng yếu, vì vậy hãy cung cấp log-return đã chuẩn hóa thay vì giá — cơ chế ADF và lý do giá thô thất bại được trình bày trong arbitrage thống kê và pairs trading. Khi đã có ma trận return chuẩn hóa, phần riêng của tigramite chỉ gồm hai dòng:
data = log_returns.values # (T, N) standardized log-returns
var_names = list(log_returns.columns)
dataframe = pp.DataFrame(data, var_names=var_names)
Hai chi tiết của tigramite không thể bê nguyên từ pipeline return thông thường:
- Missing data: Tigramite hỗ trợ masked array để xử lý quan sát thiếu. Dùng
dataframe.maskđể đánh dấu khoảng trống — không forward-fill, vì một quan sát giả sẽ lan vào mọi tập điều kiện chứa nó. - Frequency alignment: Mọi chuỗi phải nằm trên cùng time grid. Với crypto, việc này thường đơn giản vì sàn cung cấp dữ liệu OHLCV đồng bộ.
Nghiên cứu mà Phương pháp này Cần
Mọi thứ ở trên chỉ là machinery. Bài viết chưa thể xuất bản trên blog này cho đến khi machinery được chạy trên dữ liệu thật và báo cáo điều tìm được, kể cả khi câu trả lời là "không có gì ổn định." Cần chạy:
- Setup: PCMCI+ trên return theo giờ của một basket thật trong khoảng ngày được nêu rõ,
tau_maxcố định theo suy luận domain,alpha_level = 0.01cùng hiệu chỉnh Benjamini-Yekutieli trên toàn bộ liên kết. Báo cáo số liên kết đã kiểm định và threshold hiệu chỉnh theo chuẩn deflated Sharpe. - Kết quả cần báo cáo: cạnh nào sống sót sau hiệu chỉnh, độ lớn partial-correlation của chúng và bao nhiêu cạnh sống sót out-of-sample.
- Ít nhất một phép đo stability, nếu không bài viết chỉ là README tigramite với ticker crypto: tỷ lệ cạnh tồn tại từ window này sang window khác qua rolling window; hoặc độ nhạy của đồ thị khôi phục với
tau_maxvàpc_alpha; hoặc bất đồng ParCorr với CMIknn trên cùng dữ liệu.
Đồ thị không ổn định là một kết quả có thể xuất bản, không phải thất bại. "PCMCI trên năm coin lớn: đồ thị nhân quả không tồn tại qua rolling window" phù hợp với hướng mà blog đã theo đuổi trong một kết quả phủ định trung thực, và hữu ích hơn một tutorial hoạt động.
Chọn Tham số Đúng

Lag tối đa
Tham số này giới hạn horizon thời gian của khám phá nhân quả. Đặt quá thấp có thể bỏ lỡ tác động lan truyền chậm; đặt quá cao làm tăng chi phí tính toán và gánh nặng multiple testing.
Với dữ liệu crypto theo giờ, đến là khoảng hợp lý. Với dữ liệu ngày, đến bao quát phần lớn quan hệ lead-lag. Kiến thức domain quan trọng: nếu biết tác động funding rate cần 8 giờ để lan truyền, hãy đặt .
Mức ý nghĩa chọn điều kiện
Đặt pc_alpha=None cho phép tigramite tự chọn tham số bằng Akaike Information Criterion, đây là mặc định được khuyến nghị. Nếu muốn đặt thủ công, các giá trị từ 0.1 đến 0.4 thường hoạt động tốt. Giá trị thấp khiến Giai đoạn 1 tích cực hơn (giữ lại ít parent hơn), giảm chi phí tính toán nhưng có nguy cơ loại parent thật.
Mức ý nghĩa cuối
Đây là threshold kiểm định giả thuyết chuẩn. Với phân tích thăm dò, là được. Với bất kỳ thứ gì cung cấp đầu vào cho quyết định trading, dùng hoặc chặt hơn và áp dụng sau hiệu chỉnh có xét dependence đã mô tả — nominal level không phải mức bạn thực sự đang kiểm định.
PCMCI+: Thêm Liên kết Contemporaneous

PCMCI chuẩn chỉ khám phá liên kết nhân quả lagged (). Nhưng trên thị trường crypto, nơi thông tin lan truyền giữa các tài sản trong vài giây, tần suất lấy mẫu theo giờ khiến nhiều tác động nhân quả xuất hiện contemporaneous ().
PCMCI+ (Runge, 2020) mở rộng PCMCI để khám phá cả liên kết nhân quả lagged lẫn contemporaneous. Các liên kết contemporaneous mặc định là vô hướng (vì thứ tự thời gian không thể phân biệt cause và effect trong cùng timestep), nhưng một số có thể được định hướng bằng quy tắc orientation của thuật toán PC chuẩn (phát hiện collider, ràng buộc acyclicity).
results_plus = pcmci.run_pcmciplus(
tau_max=4,
tau_min=0, # include contemporaneous links
pc_alpha=None,
)
Với ứng dụng crypto ở tần suất theo giờ hoặc thấp hơn, PCMCI+ thường phù hợp hơn PCMCI chuẩn, vì nhiều tác động cross-asset xảy ra nhanh hơn interval lấy mẫu.
Mở rộng Phi tuyến

Chuỗi thời gian tài chính thường có dependence phi tuyến (ví dụ volatility clustering, tác động lead-lag phụ thuộc regime). Tigramite cung cấp nhiều kiểm định độc lập có điều kiện phi tuyến:
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 dùng hồi quy Gaussian process để loại ảnh hưởng của tập điều kiện, sau đó áp dụng distance correlation lên residual. Nó mạnh hơn ParCorr khi phát hiện tác động phi tuyến nhưng chậm hơn đáng kể.
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 ước tính conditional mutual information bằng phương pháp -nearest-neighbor. Đây là phương pháp hoàn toàn phi tham số và có thể phát hiện dependence hàm tùy ý. Đổi lại là chi phí tính toán và nhu cầu dữ liệu lớn hơn để đạt statistical power.
Với phần lớn ứng dụng trading crypto, hãy bắt đầu bằng ParCorr. Chỉ chuyển sang kiểm định phi tuyến khi có bằng chứng cụ thể về cơ chế nhân quả phi tuyến và đủ dữ liệu (thường là ).
Đồ thị Nhân quả sẽ Kết nối Ở đâu

Một thứ đồ thị nhân quả cho bạn mà ma trận tương quan không thể: out-degree. Chạy PCMCI trên 20-50 tài sản và các node có nhiều cạnh đi ra là những leader thông tin — chuyển động của chúng mang nội dung dự báo cho phần còn lại của book, một khẳng định có hướng mà ma trận tương quan đối xứng về cấu trúc không thể đưa ra. Factor decomposition cho biết BTC chi phối phương sai; xếp hạng out-degree cho biết BTC chi phối vì nó dẫn dắt hay vì mọi thứ, bao gồm BTC, cùng chịu một cú sốc vĩ mô.
Nếu có thể khôi phục một đồ thị ổn định, các điểm nó sẽ gắn vào công việc đã có trên blog khá rõ. Thay đổi topology đồ thị theo rolling-window là tín hiệu structural-break, chủ đề của phát hiện regime bằng HMM — câu hỏi mở là đồ thị nhân quả có phát hiện chuyển tiếp sớm hơn state model hay không. Áp dụng PCMCI cho một tài sản qua nhiều venue xử lý price leadership cross-venue, đã được đo ở độ phân giải mili giây trong smart order routing; đồ thị trên bar theo giờ phải vượt qua kết quả đó, không chỉ lặp lại nó. Liên kết perp-spot định kỳ do cơ chế funding 8 giờ tạo ra, được trình bày trong funding rate arbitrage, là test case có đáp án biết trước: PCMCI nên khôi phục cấu trúc nhân quả có thể xác minh độc lập, khiến nó là mục tiêu validation thay vì khám phá.
Không điều nào trong số này là phát hiện. Chúng là các giả thuyết đang chờ nghiên cứu được mô tả ở trên.
Hạn chế và Caveat

PCMCI là công cụ mạnh, nhưng có các hạn chế quan trọng mà người thực hành phải hiểu:
-
Giả định causal sufficiency: PCMCI giả định mọi biến liên quan đều được quan sát. Nếu một driver chung ẩn (ví dụ hoạt động trading của whale, tin chưa công bố) tác động lên hai tài sản quan sát được, PCMCI có thể báo sai một liên kết nhân quả trực tiếp giữa chúng. Biến thể LPCMCI giải quyết một phần bằng cách cho phép latent confounder, đổi lại trả về ít cạnh được định hướng hơn.
-
Giả định stationarity: Cấu trúc nhân quả được giả định không đổi trong analysis window. Thực tế, động lực thị trường crypto thay đổi nhanh. Dùng rolling-window analysis để phát hiện structural break.
-
Tuyến tính so với phi tuyến: Với
ParCorr, chỉ tác động nhân quả tuyến tính được phát hiện. Cơ chế phi tuyến (ví dụ "BTC chỉ khiến ETH giảm khi BTC giảm hơn 5%") sẽ vô hình với kiểm định tuyến tính. -
Tần suất lấy mẫu quan trọng: Tác động nhân quả xảy ra nhanh hơn tần suất lấy mẫu sẽ xuất hiện như liên kết contemporaneous () trong PCMCI chuẩn, và hướng của chúng có thể mơ hồ. Dùng PCMCI+ và cân nhắc dữ liệu tần suất cao hơn.
-
Multiple testing: kiểm định phụ thuộc, được hiệu chỉnh như mô tả ở trên — xem deflated Sharpe và multiple testing để hiểu vì sao cấu trúc dependence loại trừ lựa chọn hiển nhiên.
-
Yêu cầu kích thước mẫu: Khám phá nhân quả đáng tin cậy cần đủ dữ liệu. Quy tắc thô là nhắm tới cho
ParCorrvới biến, và cho kiểm định phi tuyến hoặc tập biến lớn hơn.
PCMCI so với Phương pháp Khác

| Phương pháp | Xử lý tự tương quan | Xử lý driver chung | Liên kết đồng thời | Phi tuyến | Confounder tiềm ẩn |
|---|---|---|---|---|---|
| Nhân quả Granger | Một phần | Không (hai biến) | Không | Có phần mở rộng | Không |
| Entropy truyền | Một phần | Không (hai biến) | Không | Có | Không |
| PCMCI | Có (MCI) | Có | Không | Với CMIknn/GPDC | Không |
| PCMCI+ | Có | Có | Có | Với CMIknn/GPDC | Không |
| LPCMCI | Có | Có | Có | Với CMIknn/GPDC | Có |
| VAR-LiNGAM | Không | Có | Có | Không | Không |
Ưu điểm chính của PCMCI so với Granger causality và transfer entropy là kiểm định MCI, vốn xử lý đúng tự tương quan và driver chung trong bối cảnh đa biến. Đây chính xác là tình huống gặp trên thị trường crypto, nơi hàng chục tài sản tương quan và tự tương quan tương tác đồng thời.
Kết luận

Cấu trúc hai giai đoạn là đóng góp đáng ghi nhớ: chọn điều kiện thưa để giới hạn tập parent, sau đó là kiểm định MCI có tập điều kiện bao gồm parent của cả source lẫn target. Nửa thứ hai phân biệt PCMCI với Granger và transfer entropy, đồng thời khiến phương pháp khả thi trên các chuỗi tự tương quan mạnh như return crypto.
Điều phương pháp này chưa có là bằng chứng. Đồ thị khôi phục được là giả thuyết về luồng thông tin, không phải signal, và trên blog này nó chưa có giá trị cho đến khi được chạy trên dữ liệu thật với basket và khoảng ngày được nêu rõ, hiệu chỉnh có xét dependence, cùng ít nhất một phép đo xem đồ thị có ổn định khi window dịch chuyển hay không. Cho đến khi có lần chạy đó, hãy xem mọi thứ ở đây là tooling.
Nếu đồ thị hóa ra không ổn định, đó chính là bài viết. Đây sẽ không phải kết quả phủ định đầu tiên ở đây có giá trị hơn một tutorial hoạt động.
Tài liệu tham khảo
- 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.
- Tài liệu Tigramite: https://jakobrunge.github.io/tigramite/
- Kho lưu trữ Tigramite trên GitHub: https://github.com/jakobrunge/tigramite
Tác Giả
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.