# PHASE 6 — Joint paths (Stage B) — 2026-11-03 ## What was run (`configs/ablations.yaml`, model `mrpt_small_copula`, M3U96b) Stage A: MRPT-S with the Student-t head, 4 000 steps (same budget and seed as the ablation reference `mrpt_small_b4k`), best validation NLL −6.4509. Stage B: low-rank (k = 4) + diagonal Gaussian copula head over the 60 future minutes, trained for 600 steps on the copula log-likelihood of the PITs with the marginals frozen (64 s); best validation copula NLL −2.5e-5 per observed dimension, i.e. **indistinguishable from independence** (the likelihood at R = I is exactly 0). Prediction on the 986 468 development-test origins with 200 correlated draws (`joint`) and with 200 independent draws of the same marginals (`indep`); path scores computed per origin and bootstrapped by trading day (`results/metrics/ablations/path_scores_mrpt_small_copula_test.json`). ## Results (H4) | Score (per origin, 60-minute paths) | Joint (copula) | Independent | Joint − independent (95 % CI) | |---|---|---|---| | Energy score | 3.4903e-3 | 3.4904e-3 | −9.2e-8 [−2.3e-7, +5.0e-8] (−0.003 %) | | Variogram score (p = 0.5) | 1.51132e-4 | 1.51136e-4 | −3.8e-9 [−1.0e-8, +2.2e-9] (−0.002 %) | | CRPS of maximum drawdown | 1.4632e-3 | 1.4633e-3 | −1.8e-7 [−6.2e-7, +2.8e-7] (−0.01 %) | | CRPS of realised variance | 1.1881e-5 | 1.1869e-5 | +1.2e-8 [−2.8e-9, +3.0e-8] (+0.10 %) | Cumulative-return CRPS at H = 60: joint 0.4194, independent 0.4191 (scaled), i.e. no gain either. **H4 is rejected**: once the Student-t marginals are conditioned on the 390-bar history, the probability-integral transforms of consecutive future minutes are essentially uncorrelated, the learned factor loadings stay near zero, and coherent sampling changes no path score by more than a hundredth of a percent. Diffusion decoders were therefore not attempted (the brief asked for them only if a dependence-aware decoder demonstrably helped). ## Validation of the machinery (so that the null is not an implementation artifact) - `tests/numerical/test_copula.py`: sampling reproduces the marginals; the sampled correlation matches the implied correlation under strong loadings; the copula NLL is minimised at independence for independent data; PIT round trip. - `tests/numerical/test_scores.py::test_energy_score_prefers_true_dependence`: the energy score does reward correct dependence when it exists. - The synthetic smoke run (independent t returns by construction) also learned ≈ 0 correlation, as it should. ## Go / no-go Stage B remains in the package as a documented null; the paper reports it in the ablation section.