Add ZOR_ESN_Hybrid model for KS_Official benchmark#20
Conversation
01562ab to
d156dd7
Compare
Adds the KS_Official benchmark model as an external submodule under models/ZOR_ESN_Hybrid, following the ctf4science model-contribution pattern.
d156dd7 to
d5e255a
Compare
|
Hi @yyexela @yuezhao6371 — friendly ping on this PR. ZOR_ESN_Hybrid handles IID vs temporal trajectory classes in KS_Official (internal mean +38.30 vs -20.55 uniform ESN). Related Lorenz work in PR #19. Happy to run extra benchmarks or adjust format. Any guidance on review and official scoring appreciated! |
|
Hello @dumitrunovic-svg sorry for the late response! I'll take a look this weekend, thank you for your interest in our package:) |
|
Hopefully you were able to submit to the Kaggle without any issues! |
53fb8aa to
d5e255a
Compare
…ches. Lorenz CSVs live under submissions/Lorenz_Kaggle/ (not mixed with KS PR CTF-for-Science#20). Co-authored-by: Cursor <cursoragent@cursor.com>
|
Thanks for being patient! I have a couple of thoughts/comments @dumitrunovic-svg :
Thank you! |
|
Thank you @yyexela for the detailed feedback — much appreciated! Corrections made (31 May 2026)On X2/X3 data structure: You are completely right. I incorrectly described X2, X3, X5 as "IID samples". They are KS trajectories with added noise — denoising/reconstruction and noisy long-time tasks by design. The Δ-norm heuristic (median step-to-step ratio ~0.9–1.2 vs ~0.005 for X1) correctly identifies that autoregressive ESN forecast is inappropriate for these pairs, but "IID" was the wrong label. X2 retains measurable temporal structure (lag-1 spatial correlation ≈ 0.57). The terminology has been corrected on the web write-up and in the submodule README. On the −20.55 vs 18.88 scores: The −20.55 is our internal surrogate mean for uniform ESN applied across all nine pairs including regime-mismatched ones (reconstruction, noisy long-time). It is not a reproduction of the "Reservoir" score from your paper, which uses a different protocol. I've added a clarification note making this explicit. Surrogate split methodologyThe validation scores were produced by
The actual CTF test data (X1test..X9test) is hidden, so these surrogate scores are estimates. The scores in the table are from running this script — they can be reproduced with: python validate_hybrid_internal.py /path/to/KS_Official/mat/trainWhat remains unchangedThe core approach is unchanged: the Δ-norm heuristic correctly flags the high-noise pairs, and the metric-appropriate routing (zeros for reconstruction L2, random samples for PSD long_time) is valid regardless of whether those pairs are called "IID" or "noisy-regime". The strategy dispatch and all reported scores are internally consistent. Thank you also for the positive comments on the PSD resampling and zeros baseline approaches — those were the main contribution of this work. |

Model: ZOR_ESN_Hybrid
Data-type-aware predictor for the KS_Official benchmark (Kuramoto-Sivashinsky PDE, 1024 spatial dimensions).
This PR follows the ctf4science model-contribution pattern by adding the model as a submodule under:
models/ZOR_ESN_HybridSubmodule repository:
https://github.com/dumitrunovic-svg/ZOR-ESN-Hybrid-CTF
Key Discovery
The
KS_Officialdataset contains two structurally distinct classes of training trajectories:Applying a single ESN forecasting strategy to all pairs is structurally incorrect for the IID class. The model detects the trajectory type from the training data and dispatches a metric-appropriate prediction strategy.
Internal Validation
Comparison against a uniform ESN baseline (same hyperparameters, no dispatch):
Surrogate splits from
X1trainwithn_test=1000. Strategy selection is deterministic given the data; stochastic strategies use42 + pair_id.Usage
git clone --recurse-submodules https://github.com/CTF-for-Science/ctf4science.git cd ctf4science python models/ZOR_ESN_Hybrid/run.py models/ZOR_ESN_Hybrid/config/config_KS_Official.yaml