Upload folder using huggingface_hub
Browse files- README.md +93 -0
- config.json +121 -0
- evals/eval-1d.json +571 -0
- evals/eval-1h.json +1284 -0
- evals/eval-4h.json +1224 -0
- evals/eval-5m.json +1259 -0
- forecast_wrapper.py +358 -0
- model.py +1305 -0
- weights.safetensors +3 -0
README.md
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Yumoto-alpha-v0.1-22m
|
| 2 |
+
|
| 3 |
+
*Yuma Rao visited us in a dream and told us to build a time-series
|
| 4 |
+
foundation model for subnet alpha tokens. So we did.*
|
| 5 |
+
|
| 6 |
+
One 22M-parameter probabilistic forecaster for Bittensor subnet-alpha
|
| 7 |
+
OHLCV markets, covering four timeframes (5m / 1h / 4h / 1d) with a single
|
| 8 |
+
model. Its edge is **uncertainty calibration**: full quantile bands
|
| 9 |
+
(q10β¦q90) per candle per horizon step, sharp enough to beat classical
|
| 10 |
+
statistical specialists on their home turf at short and daily horizons β
|
| 11 |
+
at 1/113th the size of frontier time-series foundation models.
|
| 12 |
+
|
| 13 |
+
## What it is
|
| 14 |
+
|
| 15 |
+
- **Architecture**: patch transformer (patch 32, context 4096), windowed
|
| 16 |
+
causal time attention, variate attention with role masking, trained by
|
| 17 |
+
contiguous-patch masked infilling; 9-quantile pinball heads. Decodes
|
| 18 |
+
the full horizon in one forward pass.
|
| 19 |
+
- **Inputs**: OHLCV β Close/Open/High/Low as joint targets, volume as a
|
| 20 |
+
past covariate.
|
| 21 |
+
- **Outputs**: quantiles q10β¦q90 for each of C/O/H/L at every horizon
|
| 22 |
+
step β a full probabilistic candle per step, with calibrated range
|
| 23 |
+
(H/L) forecasts for free.
|
| 24 |
+
|
| 25 |
+
## How it's trained
|
| 26 |
+
|
| 27 |
+
1. **Pretrained** on a large synthetic corpus of mechanistically diverse
|
| 28 |
+
generators (trend, seasonality, regime switches, bursts, chaos, β¦),
|
| 29 |
+
then **fine-tuned on real subnet-alpha candles only** β no synthetic
|
| 30 |
+
data in the fine-tune.
|
| 31 |
+
2. **Future-Guided Learning** in the fine-tune loss (after Nature
|
| 32 |
+
s41467-025-63786-4, adapted to masked-patch training): a no-grad pass
|
| 33 |
+
of the same network is shown slightly more of the future, and the
|
| 34 |
+
model's quantiles on the still-hidden region are pulled toward that
|
| 35 |
+
privileged pass. Self-distillation from a time-privileged teacher β
|
| 36 |
+
one clean model at inference.
|
| 37 |
+
3. **Three seeds β weight soup β 15% blend back toward the pretrained
|
| 38 |
+
base** (WiSE-FT, Ξ± = 0.85). Weight-space operations only: the shipped
|
| 39 |
+
artifact is exactly one 22M model.
|
| 40 |
+
4. **A hurdle-mixture decode rule** for illiquid markets, built into the
|
| 41 |
+
bundle's inference code: the wrapper estimates per-step P(no price
|
| 42 |
+
movement) from the context's own tick frequency, and the predictive
|
| 43 |
+
law becomes `Ο_tΒ·Ξ΄(last price) + (1βΟ_t)Β·model band`, with Ο
|
| 44 |
+
compounding away over the horizon. On instruments that barely trade it
|
| 45 |
+
collapses the band exactly as fast as the evidence allows; on liquid
|
| 46 |
+
markets it is an exact no-op. Deterministic and causal β no second
|
| 47 |
+
model, no post-hoc ensembling.
|
| 48 |
+
|
| 49 |
+
## Held-out evaluation
|
| 50 |
+
|
| 51 |
+
Holdout = the final segment of every asset's history (never seen in
|
| 52 |
+
training); 110β125 assets per timeframe, 10 forecast origins per asset.
|
| 53 |
+
Metric = mean pinball loss over 9 quantiles Γ· a naive baseline (flat
|
| 54 |
+
last-close with empirical step-change quantiles), geometric mean over
|
| 55 |
+
assets. **Lower is better; < 1.0 beats naive.**
|
| 56 |
+
|
| 57 |
+
| cell | **Yumoto-alpha-v0.1-22m** | best classical specialist |
|
| 58 |
+
|---|---|---|
|
| 59 |
+
| 5m H12 | **0.857** | 0.928 (bootstrap) |
|
| 60 |
+
| 5m H144 | 0.870 | **0.739** (AutoTheta) |
|
| 61 |
+
| 1h H24 | **0.686**ΒΉ | 0.841 (bootstrap) |
|
| 62 |
+
| 1h H168 | 0.591 | **0.550** (GBM-EWMA) |
|
| 63 |
+
| 4h H42 | **0.760** | 0.803 (GBM-EWMA) |
|
| 64 |
+
| 4h H180 | 0.665 | **0.653** (GBM-t) |
|
| 65 |
+
| 1d H30 | 0.667 | **0.646** (GBM-EWMA) |
|
| 66 |
+
|
| 67 |
+
ΒΉ One asset produced an exactly-zero-error forecast (the hurdle rule on a
|
| 68 |
+
fully frozen market); it is excluded because a geometric mean cannot
|
| 69 |
+
absorb a literal zero. Including it with a floor makes this cell better,
|
| 70 |
+
not worse.
|
| 71 |
+
|
| 72 |
+
The classical column is the *per-cell best* of eight tuned statistical
|
| 73 |
+
models (GBM variants, bootstrap, AutoARIMA/ETS/Theta, seasonal-naive) β
|
| 74 |
+
a different specialist per cell; the model competes against all of them
|
| 75 |
+
at once and wins 3 of 7 cells outright, within 3.5% on two more.
|
| 76 |
+
|
| 77 |
+
## General-benchmark robustness
|
| 78 |
+
|
| 79 |
+
Scored zero-shot-style on the full public **GIFT-Eval** suite (97
|
| 80 |
+
configs, official protocol) despite being crypto-specialized:
|
| 81 |
+
**0.523 CRPS-ratio / 0.759 MASE-ratio vs naive** β competitive with
|
| 82 |
+
general-purpose foundation models on a benchmark it was never tuned for.
|
| 83 |
+
|
| 84 |
+
## Using it
|
| 85 |
+
|
| 86 |
+
```
|
| 87 |
+
from forecast_wrapper import Wrapper
|
| 88 |
+
w = Wrapper("path/to/bundle", device="cuda")
|
| 89 |
+
q = w.forecast_quantiles_mv(ohlcv_history, horizon, n_targets=4) # (B,4,H,9)
|
| 90 |
+
```
|
| 91 |
+
|
| 92 |
+
The bundle is self-contained: `weights.safetensors`, `config.json`,
|
| 93 |
+
`model.py`, `forecast_wrapper.py` (hurdle rule included). No adapters.
|
config.json
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"arch": "cascade-model",
|
| 3 |
+
"config": {
|
| 4 |
+
"d_model": 512,
|
| 5 |
+
"num_layers": 6,
|
| 6 |
+
"num_heads": 8,
|
| 7 |
+
"head_dim": 64,
|
| 8 |
+
"patch_size": 32,
|
| 9 |
+
"mlp_expansion": 2,
|
| 10 |
+
"d_ff": 1368,
|
| 11 |
+
"num_quantiles": 9,
|
| 12 |
+
"head_mlp_hidden": 0,
|
| 13 |
+
"ffn_swiglu": false,
|
| 14 |
+
"embed_skip_mlp": 0,
|
| 15 |
+
"embed_mask_token": false,
|
| 16 |
+
"no_out_mlp": false,
|
| 17 |
+
"context_length": 4096,
|
| 18 |
+
"horizon": 64,
|
| 19 |
+
"max_patches": 134,
|
| 20 |
+
"layer_group_size": 6,
|
| 21 |
+
"cpm_c_max": 16,
|
| 22 |
+
"cpm_p_max": 0.4,
|
| 23 |
+
"residual_mult": 0.75,
|
| 24 |
+
"use_variate_roles": true,
|
| 25 |
+
"binary_passthrough": true,
|
| 26 |
+
"time_window": 64,
|
| 27 |
+
"attn_sinks": 0,
|
| 28 |
+
"attn_impl": "sdpa",
|
| 29 |
+
"use_rope": true,
|
| 30 |
+
"rope_base": 10000.0,
|
| 31 |
+
"rope_scale": 1.0,
|
| 32 |
+
"xpos_scale_base": 512.0,
|
| 33 |
+
"yarn": false,
|
| 34 |
+
"yarn_alpha": 0.5,
|
| 35 |
+
"yarn_beta": 8.0,
|
| 36 |
+
"attn_temp": 1.0,
|
| 37 |
+
"rope_partial_k": 0,
|
| 38 |
+
"rope_learnable": false,
|
| 39 |
+
"rope_scale_jitter": 0.0,
|
| 40 |
+
"time_mixer": "attention"
|
| 41 |
+
},
|
| 42 |
+
"quantile_levels": [
|
| 43 |
+
0.1,
|
| 44 |
+
0.2,
|
| 45 |
+
0.3,
|
| 46 |
+
0.4,
|
| 47 |
+
0.5,
|
| 48 |
+
0.6,
|
| 49 |
+
0.7,
|
| 50 |
+
0.8,
|
| 51 |
+
0.9
|
| 52 |
+
],
|
| 53 |
+
"arm": "fgl0-s0",
|
| 54 |
+
"env": {
|
| 55 |
+
"torch": "2.11.0+cu128",
|
| 56 |
+
"cuda": "12.8",
|
| 57 |
+
"gpu": "NVIDIA RTX PRO 6000 Blackwell Server Edition",
|
| 58 |
+
"arch": [
|
| 59 |
+
"sm_75",
|
| 60 |
+
"sm_80",
|
| 61 |
+
"sm_86",
|
| 62 |
+
"sm_90",
|
| 63 |
+
"sm_100",
|
| 64 |
+
"sm_120"
|
| 65 |
+
],
|
| 66 |
+
"batch_size": 64,
|
| 67 |
+
"context_length": 4096,
|
| 68 |
+
"token_budget": 1429855920,
|
| 69 |
+
"channels": 5,
|
| 70 |
+
"channel_mode": "mixed",
|
| 71 |
+
"obs_loss_weight": 9.0,
|
| 72 |
+
"n_targets": 4,
|
| 73 |
+
"n_future_cov": 0,
|
| 74 |
+
"mix_p": 0.5,
|
| 75 |
+
"mixup_p": 0.5,
|
| 76 |
+
"mixup_alpha": 1.5,
|
| 77 |
+
"mixup_k_max": 3,
|
| 78 |
+
"tirex_aug": true,
|
| 79 |
+
"aug_freq": false,
|
| 80 |
+
"aug_warp": false,
|
| 81 |
+
"aug_jitter": false,
|
| 82 |
+
"cpm_p_max": 0.4,
|
| 83 |
+
"cpm_c_max": 16,
|
| 84 |
+
"time_window": 64,
|
| 85 |
+
"optimizer": "normuon",
|
| 86 |
+
"base_lr": 0.0002,
|
| 87 |
+
"normuon_lr": 0.001,
|
| 88 |
+
"normuon_momentum": 0.96,
|
| 89 |
+
"normuon_beta2": 0.999,
|
| 90 |
+
"adam_betas": [
|
| 91 |
+
0.91,
|
| 92 |
+
0.972
|
| 93 |
+
],
|
| 94 |
+
"lr_schedule": "toto2",
|
| 95 |
+
"warmup_fraction": 0.01,
|
| 96 |
+
"decay_tail_fraction": 0.0175,
|
| 97 |
+
"grad_clip": 7.0,
|
| 98 |
+
"mup_base_width": 512,
|
| 99 |
+
"toto2_recipe": true,
|
| 100 |
+
"gen_children": [
|
| 101 |
+
"/home/ubuntu/work/cascade-model/generators/fitproc2m"
|
| 102 |
+
],
|
| 103 |
+
"gen_weights": null,
|
| 104 |
+
"real_root": "data/subnet_ft2",
|
| 105 |
+
"real_frac": 1.0,
|
| 106 |
+
"tempopfn_repo": null,
|
| 107 |
+
"tempopfn_length": 4096,
|
| 108 |
+
"tempopfn_split_long": false,
|
| 109 |
+
"tempopfn_shards": null,
|
| 110 |
+
"shard_unique_points": null,
|
| 111 |
+
"init_weights": "results/e19-22m400k/t22m400k-s0/weights.safetensors",
|
| 112 |
+
"shards_real_root": null,
|
| 113 |
+
"dynsys": null,
|
| 114 |
+
"dyn_loss": null,
|
| 115 |
+
"tempopfn_frac": 0.0,
|
| 116 |
+
"tempopfn_augment": null,
|
| 117 |
+
"tempopfn_priors": null,
|
| 118 |
+
"tempopfn_drop_priors": null,
|
| 119 |
+
"corpus_stats_scope": "synthetic-only"
|
| 120 |
+
}
|
| 121 |
+
}
|
evals/eval-1d.json
ADDED
|
@@ -0,0 +1,571 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"bundle": "results/fitproc2/wsoup85-fgl0-hurdle",
|
| 3 |
+
"data": "data/subnet_ft2/holdout_1d.npz",
|
| 4 |
+
"mode": "ohlc",
|
| 5 |
+
"levels": [
|
| 6 |
+
0.1,
|
| 7 |
+
0.2,
|
| 8 |
+
0.3,
|
| 9 |
+
0.4,
|
| 10 |
+
0.5,
|
| 11 |
+
0.6,
|
| 12 |
+
0.7,
|
| 13 |
+
0.8,
|
| 14 |
+
0.9
|
| 15 |
+
],
|
| 16 |
+
"horizons": {
|
| 17 |
+
"30": {
|
| 18 |
+
"n_assets": 109,
|
| 19 |
+
"geomean_ratio": 0.6674229777531065,
|
| 20 |
+
"median_ratio": 0.7404197425259056,
|
| 21 |
+
"beat_naive_frac": 0.8623853211009175,
|
| 22 |
+
"per_asset": {
|
| 23 |
+
"TAOUSD": {
|
| 24 |
+
"ratio": 0.588874093828663,
|
| 25 |
+
"mase": 1.1149915946431446,
|
| 26 |
+
"n_origins": 10
|
| 27 |
+
},
|
| 28 |
+
"sn1": {
|
| 29 |
+
"ratio": 0.724640015235163,
|
| 30 |
+
"mase": 2.6445008038342515,
|
| 31 |
+
"n_origins": 10
|
| 32 |
+
},
|
| 33 |
+
"sn10": {
|
| 34 |
+
"ratio": 0.9103289708885336,
|
| 35 |
+
"mase": 4.328152508106414,
|
| 36 |
+
"n_origins": 10
|
| 37 |
+
},
|
| 38 |
+
"sn100": {
|
| 39 |
+
"ratio": 1.2407608712083513,
|
| 40 |
+
"mase": 0.10145343677674779,
|
| 41 |
+
"n_origins": 10
|
| 42 |
+
},
|
| 43 |
+
"sn101": {
|
| 44 |
+
"ratio": 1.2725390559579055,
|
| 45 |
+
"mase": 0.07800309387028985,
|
| 46 |
+
"n_origins": 10
|
| 47 |
+
},
|
| 48 |
+
"sn104": {
|
| 49 |
+
"ratio": 0.8666244291235855,
|
| 50 |
+
"mase": 10.200680811406054,
|
| 51 |
+
"n_origins": 10
|
| 52 |
+
},
|
| 53 |
+
"sn105": {
|
| 54 |
+
"ratio": 0.7038467514902994,
|
| 55 |
+
"mase": 2.299460279527001,
|
| 56 |
+
"n_origins": 10
|
| 57 |
+
},
|
| 58 |
+
"sn106": {
|
| 59 |
+
"ratio": 0.8848334587824198,
|
| 60 |
+
"mase": 3.4302479865444195,
|
| 61 |
+
"n_origins": 10
|
| 62 |
+
},
|
| 63 |
+
"sn107": {
|
| 64 |
+
"ratio": 1.3417166324087495,
|
| 65 |
+
"mase": 6.954622269068004,
|
| 66 |
+
"n_origins": 10
|
| 67 |
+
},
|
| 68 |
+
"sn108": {
|
| 69 |
+
"ratio": 0.951565624033092,
|
| 70 |
+
"mase": 2.1135174703521997,
|
| 71 |
+
"n_origins": 10
|
| 72 |
+
},
|
| 73 |
+
"sn109": {
|
| 74 |
+
"ratio": 0.7389881285329933,
|
| 75 |
+
"mase": 1.9531538742049739,
|
| 76 |
+
"n_origins": 10
|
| 77 |
+
},
|
| 78 |
+
"sn11": {
|
| 79 |
+
"ratio": 0.7572414810161076,
|
| 80 |
+
"mase": 2.692753652254189,
|
| 81 |
+
"n_origins": 10
|
| 82 |
+
},
|
| 83 |
+
"sn110": {
|
| 84 |
+
"ratio": 0.9822044131655802,
|
| 85 |
+
"mase": 0.6258444067549884,
|
| 86 |
+
"n_origins": 10
|
| 87 |
+
},
|
| 88 |
+
"sn111": {
|
| 89 |
+
"ratio": 0.8651171238528031,
|
| 90 |
+
"mase": 13.483809572283436,
|
| 91 |
+
"n_origins": 10
|
| 92 |
+
},
|
| 93 |
+
"sn112": {
|
| 94 |
+
"ratio": 1.0374728376519984,
|
| 95 |
+
"mase": 6.233267037676972,
|
| 96 |
+
"n_origins": 10
|
| 97 |
+
},
|
| 98 |
+
"sn113": {
|
| 99 |
+
"ratio": 1.1945385206907815,
|
| 100 |
+
"mase": 2.578974937085221,
|
| 101 |
+
"n_origins": 10
|
| 102 |
+
},
|
| 103 |
+
"sn114": {
|
| 104 |
+
"ratio": 0.8132793620825602,
|
| 105 |
+
"mase": 2.3091828516519515,
|
| 106 |
+
"n_origins": 10
|
| 107 |
+
},
|
| 108 |
+
"sn115": {
|
| 109 |
+
"ratio": 4.42316826357496,
|
| 110 |
+
"mase": 0.05957224600629043,
|
| 111 |
+
"n_origins": 10
|
| 112 |
+
},
|
| 113 |
+
"sn117": {
|
| 114 |
+
"ratio": 1.6440985938707806,
|
| 115 |
+
"mase": 0.10512244465589861,
|
| 116 |
+
"n_origins": 10
|
| 117 |
+
},
|
| 118 |
+
"sn118": {
|
| 119 |
+
"ratio": 0.14873827287944785,
|
| 120 |
+
"mase": 0.36301145767873094,
|
| 121 |
+
"n_origins": 10
|
| 122 |
+
},
|
| 123 |
+
"sn119": {
|
| 124 |
+
"ratio": 0.04561823811768441,
|
| 125 |
+
"mase": 0.07641299327731525,
|
| 126 |
+
"n_origins": 10
|
| 127 |
+
},
|
| 128 |
+
"sn12": {
|
| 129 |
+
"ratio": 0.8582599345196608,
|
| 130 |
+
"mase": 3.360867702726838,
|
| 131 |
+
"n_origins": 10
|
| 132 |
+
},
|
| 133 |
+
"sn120": {
|
| 134 |
+
"ratio": 0.5749622193586239,
|
| 135 |
+
"mase": 1.7889012780726414,
|
| 136 |
+
"n_origins": 10
|
| 137 |
+
},
|
| 138 |
+
"sn121": {
|
| 139 |
+
"ratio": 0.494316186951276,
|
| 140 |
+
"mase": 1.2288262750319519,
|
| 141 |
+
"n_origins": 10
|
| 142 |
+
},
|
| 143 |
+
"sn123": {
|
| 144 |
+
"ratio": 1.0467572640834855,
|
| 145 |
+
"mase": 1.6356808486123031,
|
| 146 |
+
"n_origins": 10
|
| 147 |
+
},
|
| 148 |
+
"sn124": {
|
| 149 |
+
"ratio": 1.333323556077913,
|
| 150 |
+
"mase": 5.214344859916125,
|
| 151 |
+
"n_origins": 10
|
| 152 |
+
},
|
| 153 |
+
"sn125": {
|
| 154 |
+
"ratio": 1.0093673061990092,
|
| 155 |
+
"mase": 3.143244380341099,
|
| 156 |
+
"n_origins": 10
|
| 157 |
+
},
|
| 158 |
+
"sn126": {
|
| 159 |
+
"ratio": 0.8170719621797041,
|
| 160 |
+
"mase": 3.5455890383632007,
|
| 161 |
+
"n_origins": 10
|
| 162 |
+
},
|
| 163 |
+
"sn127": {
|
| 164 |
+
"ratio": 0.5037424642704973,
|
| 165 |
+
"mase": 0.9573276415238663,
|
| 166 |
+
"n_origins": 10
|
| 167 |
+
},
|
| 168 |
+
"sn128": {
|
| 169 |
+
"ratio": 0.7995732110101806,
|
| 170 |
+
"mase": 5.202807155064694,
|
| 171 |
+
"n_origins": 10
|
| 172 |
+
},
|
| 173 |
+
"sn13": {
|
| 174 |
+
"ratio": 0.6246503435642847,
|
| 175 |
+
"mase": 1.7774881143954198,
|
| 176 |
+
"n_origins": 10
|
| 177 |
+
},
|
| 178 |
+
"sn14": {
|
| 179 |
+
"ratio": 0.9120930461186886,
|
| 180 |
+
"mase": 8.652030201366648,
|
| 181 |
+
"n_origins": 10
|
| 182 |
+
},
|
| 183 |
+
"sn15": {
|
| 184 |
+
"ratio": 0.6706481216499842,
|
| 185 |
+
"mase": 2.9747133869629008,
|
| 186 |
+
"n_origins": 10
|
| 187 |
+
},
|
| 188 |
+
"sn17": {
|
| 189 |
+
"ratio": 0.6812454135629261,
|
| 190 |
+
"mase": 3.892370257350882,
|
| 191 |
+
"n_origins": 10
|
| 192 |
+
},
|
| 193 |
+
"sn18": {
|
| 194 |
+
"ratio": 0.9513416584710903,
|
| 195 |
+
"mase": 3.49500588196522,
|
| 196 |
+
"n_origins": 10
|
| 197 |
+
},
|
| 198 |
+
"sn19": {
|
| 199 |
+
"ratio": 0.594513099259639,
|
| 200 |
+
"mase": 2.4362604900230793,
|
| 201 |
+
"n_origins": 10
|
| 202 |
+
},
|
| 203 |
+
"sn2": {
|
| 204 |
+
"ratio": 0.5076649593171041,
|
| 205 |
+
"mase": 1.228484034950763,
|
| 206 |
+
"n_origins": 10
|
| 207 |
+
},
|
| 208 |
+
"sn20": {
|
| 209 |
+
"ratio": 0.6097106807772743,
|
| 210 |
+
"mase": 2.790087595423158,
|
| 211 |
+
"n_origins": 10
|
| 212 |
+
},
|
| 213 |
+
"sn21": {
|
| 214 |
+
"ratio": 0.8840596319906984,
|
| 215 |
+
"mase": 4.619867894527331,
|
| 216 |
+
"n_origins": 10
|
| 217 |
+
},
|
| 218 |
+
"sn22": {
|
| 219 |
+
"ratio": 0.6678592851079739,
|
| 220 |
+
"mase": 2.068173032827946,
|
| 221 |
+
"n_origins": 10
|
| 222 |
+
},
|
| 223 |
+
"sn23": {
|
| 224 |
+
"ratio": 0.974274147075604,
|
| 225 |
+
"mase": 6.723742890415802,
|
| 226 |
+
"n_origins": 10
|
| 227 |
+
},
|
| 228 |
+
"sn24": {
|
| 229 |
+
"ratio": 0.7866657125466893,
|
| 230 |
+
"mase": 3.252736576203285,
|
| 231 |
+
"n_origins": 10
|
| 232 |
+
},
|
| 233 |
+
"sn25": {
|
| 234 |
+
"ratio": 0.9372853189905967,
|
| 235 |
+
"mase": 17.80443053713267,
|
| 236 |
+
"n_origins": 10
|
| 237 |
+
},
|
| 238 |
+
"sn27": {
|
| 239 |
+
"ratio": 0.9381358138892044,
|
| 240 |
+
"mase": 4.91399009254794,
|
| 241 |
+
"n_origins": 10
|
| 242 |
+
},
|
| 243 |
+
"sn28": {
|
| 244 |
+
"ratio": 0.8757053069303564,
|
| 245 |
+
"mase": 7.071031131904736,
|
| 246 |
+
"n_origins": 10
|
| 247 |
+
},
|
| 248 |
+
"sn29": {
|
| 249 |
+
"ratio": 0.32273294453046997,
|
| 250 |
+
"mase": 2.0879121125198776,
|
| 251 |
+
"n_origins": 10
|
| 252 |
+
},
|
| 253 |
+
"sn3": {
|
| 254 |
+
"ratio": 0.34793943641255537,
|
| 255 |
+
"mase": 1.3217710573705732,
|
| 256 |
+
"n_origins": 10
|
| 257 |
+
},
|
| 258 |
+
"sn30": {
|
| 259 |
+
"ratio": 0.801372056821779,
|
| 260 |
+
"mase": 3.388315070516473,
|
| 261 |
+
"n_origins": 10
|
| 262 |
+
},
|
| 263 |
+
"sn31": {
|
| 264 |
+
"ratio": 0.896170651341823,
|
| 265 |
+
"mase": 2.6003496967904596,
|
| 266 |
+
"n_origins": 10
|
| 267 |
+
},
|
| 268 |
+
"sn32": {
|
| 269 |
+
"ratio": 0.618906541015713,
|
| 270 |
+
"mase": 1.5738646057627468,
|
| 271 |
+
"n_origins": 10
|
| 272 |
+
},
|
| 273 |
+
"sn33": {
|
| 274 |
+
"ratio": 0.6189896044598815,
|
| 275 |
+
"mase": 1.8096772860516797,
|
| 276 |
+
"n_origins": 10
|
| 277 |
+
},
|
| 278 |
+
"sn34": {
|
| 279 |
+
"ratio": 0.49025045160954356,
|
| 280 |
+
"mase": 3.104391721465908,
|
| 281 |
+
"n_origins": 10
|
| 282 |
+
},
|
| 283 |
+
"sn35": {
|
| 284 |
+
"ratio": 0.6130718836301257,
|
| 285 |
+
"mase": 1.1988945428620132,
|
| 286 |
+
"n_origins": 10
|
| 287 |
+
},
|
| 288 |
+
"sn37": {
|
| 289 |
+
"ratio": 0.9544375205217083,
|
| 290 |
+
"mase": 3.4486433408021155,
|
| 291 |
+
"n_origins": 10
|
| 292 |
+
},
|
| 293 |
+
"sn38": {
|
| 294 |
+
"ratio": 0.5024948720180459,
|
| 295 |
+
"mase": 4.273818795582662,
|
| 296 |
+
"n_origins": 10
|
| 297 |
+
},
|
| 298 |
+
"sn39": {
|
| 299 |
+
"ratio": 0.20311664147704178,
|
| 300 |
+
"mase": 0.8248382209490146,
|
| 301 |
+
"n_origins": 10
|
| 302 |
+
},
|
| 303 |
+
"sn4": {
|
| 304 |
+
"ratio": 1.0640524748992426,
|
| 305 |
+
"mase": 4.8831784568932575,
|
| 306 |
+
"n_origins": 10
|
| 307 |
+
},
|
| 308 |
+
"sn41": {
|
| 309 |
+
"ratio": 0.5643289827743234,
|
| 310 |
+
"mase": 1.522308444559678,
|
| 311 |
+
"n_origins": 10
|
| 312 |
+
},
|
| 313 |
+
"sn42": {
|
| 314 |
+
"ratio": 0.7286935702587092,
|
| 315 |
+
"mase": 2.832083519599004,
|
| 316 |
+
"n_origins": 10
|
| 317 |
+
},
|
| 318 |
+
"sn43": {
|
| 319 |
+
"ratio": 0.3137639177369193,
|
| 320 |
+
"mase": 1.7411051558251267,
|
| 321 |
+
"n_origins": 10
|
| 322 |
+
},
|
| 323 |
+
"sn44": {
|
| 324 |
+
"ratio": 0.6094239287184442,
|
| 325 |
+
"mase": 3.02886822928476,
|
| 326 |
+
"n_origins": 10
|
| 327 |
+
},
|
| 328 |
+
"sn45": {
|
| 329 |
+
"ratio": 0.6617984965581486,
|
| 330 |
+
"mase": 1.1819659231670532,
|
| 331 |
+
"n_origins": 10
|
| 332 |
+
},
|
| 333 |
+
"sn46": {
|
| 334 |
+
"ratio": 0.812536873053265,
|
| 335 |
+
"mase": 5.086116329852832,
|
| 336 |
+
"n_origins": 10
|
| 337 |
+
},
|
| 338 |
+
"sn47": {
|
| 339 |
+
"ratio": 0.6802826514049788,
|
| 340 |
+
"mase": 1.9020973377645376,
|
| 341 |
+
"n_origins": 10
|
| 342 |
+
},
|
| 343 |
+
"sn48": {
|
| 344 |
+
"ratio": 0.45013340209981306,
|
| 345 |
+
"mase": 1.8990066471712568,
|
| 346 |
+
"n_origins": 10
|
| 347 |
+
},
|
| 348 |
+
"sn49": {
|
| 349 |
+
"ratio": 1.009202737453913,
|
| 350 |
+
"mase": 3.3715450302555747,
|
| 351 |
+
"n_origins": 10
|
| 352 |
+
},
|
| 353 |
+
"sn5": {
|
| 354 |
+
"ratio": 0.7882128802839301,
|
| 355 |
+
"mase": 3.7747132579290024,
|
| 356 |
+
"n_origins": 10
|
| 357 |
+
},
|
| 358 |
+
"sn50": {
|
| 359 |
+
"ratio": 0.6800297712890168,
|
| 360 |
+
"mase": 1.2898417233994401,
|
| 361 |
+
"n_origins": 10
|
| 362 |
+
},
|
| 363 |
+
"sn51": {
|
| 364 |
+
"ratio": 0.9116114557133238,
|
| 365 |
+
"mase": 11.961750088941445,
|
| 366 |
+
"n_origins": 10
|
| 367 |
+
},
|
| 368 |
+
"sn52": {
|
| 369 |
+
"ratio": 0.6095594611755983,
|
| 370 |
+
"mase": 2.7955179304577733,
|
| 371 |
+
"n_origins": 10
|
| 372 |
+
},
|
| 373 |
+
"sn53": {
|
| 374 |
+
"ratio": 0.8677454080012669,
|
| 375 |
+
"mase": 113.36993825510177,
|
| 376 |
+
"n_origins": 10
|
| 377 |
+
},
|
| 378 |
+
"sn54": {
|
| 379 |
+
"ratio": 0.6705245583580045,
|
| 380 |
+
"mase": 2.251731658617063,
|
| 381 |
+
"n_origins": 10
|
| 382 |
+
},
|
| 383 |
+
"sn55": {
|
| 384 |
+
"ratio": 0.6702704435454031,
|
| 385 |
+
"mase": 5.632040642455741,
|
| 386 |
+
"n_origins": 10
|
| 387 |
+
},
|
| 388 |
+
"sn56": {
|
| 389 |
+
"ratio": 0.4498678564161519,
|
| 390 |
+
"mase": 2.0261457640832847,
|
| 391 |
+
"n_origins": 10
|
| 392 |
+
},
|
| 393 |
+
"sn6": {
|
| 394 |
+
"ratio": 0.3229055933084646,
|
| 395 |
+
"mase": 1.0577461281951444,
|
| 396 |
+
"n_origins": 10
|
| 397 |
+
},
|
| 398 |
+
"sn60": {
|
| 399 |
+
"ratio": 0.9447000789079169,
|
| 400 |
+
"mase": 4.502386038909113,
|
| 401 |
+
"n_origins": 10
|
| 402 |
+
},
|
| 403 |
+
"sn61": {
|
| 404 |
+
"ratio": 1.0889197399549855,
|
| 405 |
+
"mase": 8.24778561362107,
|
| 406 |
+
"n_origins": 10
|
| 407 |
+
},
|
| 408 |
+
"sn62": {
|
| 409 |
+
"ratio": 0.23770499860466812,
|
| 410 |
+
"mase": 0.9890703427897984,
|
| 411 |
+
"n_origins": 10
|
| 412 |
+
},
|
| 413 |
+
"sn63": {
|
| 414 |
+
"ratio": 0.6666296713531977,
|
| 415 |
+
"mase": 1.5557721070929018,
|
| 416 |
+
"n_origins": 10
|
| 417 |
+
},
|
| 418 |
+
"sn64": {
|
| 419 |
+
"ratio": 0.9341267178093001,
|
| 420 |
+
"mase": 6.656612527744552,
|
| 421 |
+
"n_origins": 10
|
| 422 |
+
},
|
| 423 |
+
"sn65": {
|
| 424 |
+
"ratio": 0.7326040974664147,
|
| 425 |
+
"mase": 3.1585547530174596,
|
| 426 |
+
"n_origins": 10
|
| 427 |
+
},
|
| 428 |
+
"sn66": {
|
| 429 |
+
"ratio": 0.7461497880101647,
|
| 430 |
+
"mase": 3.926761014464423,
|
| 431 |
+
"n_origins": 10
|
| 432 |
+
},
|
| 433 |
+
"sn67": {
|
| 434 |
+
"ratio": 0.02920579042392672,
|
| 435 |
+
"mase": 0.19129403374774406,
|
| 436 |
+
"n_origins": 10
|
| 437 |
+
},
|
| 438 |
+
"sn68": {
|
| 439 |
+
"ratio": 0.773142914773532,
|
| 440 |
+
"mase": 3.1416007546772096,
|
| 441 |
+
"n_origins": 10
|
| 442 |
+
},
|
| 443 |
+
"sn7": {
|
| 444 |
+
"ratio": 0.7201926062840324,
|
| 445 |
+
"mase": 2.313856303723195,
|
| 446 |
+
"n_origins": 10
|
| 447 |
+
},
|
| 448 |
+
"sn71": {
|
| 449 |
+
"ratio": 0.8885666779592687,
|
| 450 |
+
"mase": 2.099174232746467,
|
| 451 |
+
"n_origins": 10
|
| 452 |
+
},
|
| 453 |
+
"sn72": {
|
| 454 |
+
"ratio": 0.5965499264806197,
|
| 455 |
+
"mase": 2.4978456027648837,
|
| 456 |
+
"n_origins": 10
|
| 457 |
+
},
|
| 458 |
+
"sn73": {
|
| 459 |
+
"ratio": 0.5741154665538385,
|
| 460 |
+
"mase": 1.5365039424675775,
|
| 461 |
+
"n_origins": 10
|
| 462 |
+
},
|
| 463 |
+
"sn74": {
|
| 464 |
+
"ratio": 0.842243536668463,
|
| 465 |
+
"mase": 3.7986388962841,
|
| 466 |
+
"n_origins": 10
|
| 467 |
+
},
|
| 468 |
+
"sn75": {
|
| 469 |
+
"ratio": 0.48554180265566216,
|
| 470 |
+
"mase": 1.9288041205217683,
|
| 471 |
+
"n_origins": 10
|
| 472 |
+
},
|
| 473 |
+
"sn76": {
|
| 474 |
+
"ratio": 0.7172935203494248,
|
| 475 |
+
"mase": 2.03560065566011,
|
| 476 |
+
"n_origins": 10
|
| 477 |
+
},
|
| 478 |
+
"sn77": {
|
| 479 |
+
"ratio": 1.1152374588319285,
|
| 480 |
+
"mase": 17.167606744504003,
|
| 481 |
+
"n_origins": 10
|
| 482 |
+
},
|
| 483 |
+
"sn79": {
|
| 484 |
+
"ratio": 0.6225648593914812,
|
| 485 |
+
"mase": 7.023734683365881,
|
| 486 |
+
"n_origins": 10
|
| 487 |
+
},
|
| 488 |
+
"sn8": {
|
| 489 |
+
"ratio": 0.4785061000913379,
|
| 490 |
+
"mase": 2.378900097095272,
|
| 491 |
+
"n_origins": 10
|
| 492 |
+
},
|
| 493 |
+
"sn80": {
|
| 494 |
+
"ratio": 0.9709346909612429,
|
| 495 |
+
"mase": 13.239986773670413,
|
| 496 |
+
"n_origins": 10
|
| 497 |
+
},
|
| 498 |
+
"sn81": {
|
| 499 |
+
"ratio": 0.3533961110953852,
|
| 500 |
+
"mase": 1.5744252668100667,
|
| 501 |
+
"n_origins": 10
|
| 502 |
+
},
|
| 503 |
+
"sn83": {
|
| 504 |
+
"ratio": 0.7780878168352359,
|
| 505 |
+
"mase": 10.141521138534056,
|
| 506 |
+
"n_origins": 10
|
| 507 |
+
},
|
| 508 |
+
"sn85": {
|
| 509 |
+
"ratio": 0.6311327242678457,
|
| 510 |
+
"mase": 1.3761945592298306,
|
| 511 |
+
"n_origins": 10
|
| 512 |
+
},
|
| 513 |
+
"sn87": {
|
| 514 |
+
"ratio": 0.9428084076646472,
|
| 515 |
+
"mase": 4.4759902691112705,
|
| 516 |
+
"n_origins": 10
|
| 517 |
+
},
|
| 518 |
+
"sn88": {
|
| 519 |
+
"ratio": 0.6661973263429307,
|
| 520 |
+
"mase": 1.8495454044554023,
|
| 521 |
+
"n_origins": 10
|
| 522 |
+
},
|
| 523 |
+
"sn89": {
|
| 524 |
+
"ratio": 0.9540844726031443,
|
| 525 |
+
"mase": 11.699950890794236,
|
| 526 |
+
"n_origins": 10
|
| 527 |
+
},
|
| 528 |
+
"sn9": {
|
| 529 |
+
"ratio": 0.9414377875000441,
|
| 530 |
+
"mase": 5.657857021550661,
|
| 531 |
+
"n_origins": 10
|
| 532 |
+
},
|
| 533 |
+
"sn91": {
|
| 534 |
+
"ratio": 0.7404197425259056,
|
| 535 |
+
"mase": 3.4298481632450772,
|
| 536 |
+
"n_origins": 10
|
| 537 |
+
},
|
| 538 |
+
"sn93": {
|
| 539 |
+
"ratio": 0.7098536274723702,
|
| 540 |
+
"mase": 2.0065574457856608,
|
| 541 |
+
"n_origins": 10
|
| 542 |
+
},
|
| 543 |
+
"sn94": {
|
| 544 |
+
"ratio": 1.5899586314266714,
|
| 545 |
+
"mase": 0.24914962016318218,
|
| 546 |
+
"n_origins": 10
|
| 547 |
+
},
|
| 548 |
+
"sn95": {
|
| 549 |
+
"ratio": 0.9790926762254463,
|
| 550 |
+
"mase": 6.249048580281955,
|
| 551 |
+
"n_origins": 10
|
| 552 |
+
},
|
| 553 |
+
"sn96": {
|
| 554 |
+
"ratio": 0.015412353046207637,
|
| 555 |
+
"mase": 0.26563032322333413,
|
| 556 |
+
"n_origins": 10
|
| 557 |
+
},
|
| 558 |
+
"sn97": {
|
| 559 |
+
"ratio": 0.4709980844190403,
|
| 560 |
+
"mase": 1.1094915757879904,
|
| 561 |
+
"n_origins": 10
|
| 562 |
+
},
|
| 563 |
+
"sn98": {
|
| 564 |
+
"ratio": 0.8386280452457158,
|
| 565 |
+
"mase": 2.093986221186904,
|
| 566 |
+
"n_origins": 10
|
| 567 |
+
}
|
| 568 |
+
}
|
| 569 |
+
}
|
| 570 |
+
}
|
| 571 |
+
}
|
evals/eval-1h.json
ADDED
|
@@ -0,0 +1,1284 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"bundle": "results/fitproc2/wsoup85-fgl0-hurdle",
|
| 3 |
+
"data": "data/subnet_ft2/holdout_1h.npz",
|
| 4 |
+
"mode": "ohlc",
|
| 5 |
+
"levels": [
|
| 6 |
+
0.1,
|
| 7 |
+
0.2,
|
| 8 |
+
0.3,
|
| 9 |
+
0.4,
|
| 10 |
+
0.5,
|
| 11 |
+
0.6,
|
| 12 |
+
0.7,
|
| 13 |
+
0.8,
|
| 14 |
+
0.9
|
| 15 |
+
],
|
| 16 |
+
"horizons": {
|
| 17 |
+
"24": {
|
| 18 |
+
"n_assets": 125,
|
| 19 |
+
"geomean_ratio": 0.0,
|
| 20 |
+
"median_ratio": 0.7928260569129003,
|
| 21 |
+
"beat_naive_frac": 0.936,
|
| 22 |
+
"per_asset": {
|
| 23 |
+
"TAOUSD": {
|
| 24 |
+
"ratio": 0.9099731991367889,
|
| 25 |
+
"mase": 3.559941896137207,
|
| 26 |
+
"n_origins": 10
|
| 27 |
+
},
|
| 28 |
+
"sn1": {
|
| 29 |
+
"ratio": 0.8211414994659473,
|
| 30 |
+
"mase": 2.9151897377484906,
|
| 31 |
+
"n_origins": 10
|
| 32 |
+
},
|
| 33 |
+
"sn10": {
|
| 34 |
+
"ratio": 0.9644576581896008,
|
| 35 |
+
"mase": 5.729199542726961,
|
| 36 |
+
"n_origins": 10
|
| 37 |
+
},
|
| 38 |
+
"sn100": {
|
| 39 |
+
"ratio": 0.9238632540288041,
|
| 40 |
+
"mase": 2.186728409810368,
|
| 41 |
+
"n_origins": 10
|
| 42 |
+
},
|
| 43 |
+
"sn101": {
|
| 44 |
+
"ratio": 0.4816296871293914,
|
| 45 |
+
"mase": 0.9801764092790574,
|
| 46 |
+
"n_origins": 10
|
| 47 |
+
},
|
| 48 |
+
"sn102": {
|
| 49 |
+
"ratio": 0.5839264841497609,
|
| 50 |
+
"mase": 1.014899287097653,
|
| 51 |
+
"n_origins": 10
|
| 52 |
+
},
|
| 53 |
+
"sn104": {
|
| 54 |
+
"ratio": 0.3925602856536365,
|
| 55 |
+
"mase": 0.6199854455627185,
|
| 56 |
+
"n_origins": 10
|
| 57 |
+
},
|
| 58 |
+
"sn105": {
|
| 59 |
+
"ratio": 0.6030293598763803,
|
| 60 |
+
"mase": 0.985989914055655,
|
| 61 |
+
"n_origins": 10
|
| 62 |
+
},
|
| 63 |
+
"sn106": {
|
| 64 |
+
"ratio": 0.9066052024950811,
|
| 65 |
+
"mase": 5.034073399252336,
|
| 66 |
+
"n_origins": 10
|
| 67 |
+
},
|
| 68 |
+
"sn107": {
|
| 69 |
+
"ratio": 0.9629433100475153,
|
| 70 |
+
"mase": 4.808661674980754,
|
| 71 |
+
"n_origins": 10
|
| 72 |
+
},
|
| 73 |
+
"sn108": {
|
| 74 |
+
"ratio": 0.89350758061748,
|
| 75 |
+
"mase": 5.245974743562461,
|
| 76 |
+
"n_origins": 10
|
| 77 |
+
},
|
| 78 |
+
"sn109": {
|
| 79 |
+
"ratio": 0.798357877119845,
|
| 80 |
+
"mase": 2.3046639298748244,
|
| 81 |
+
"n_origins": 10
|
| 82 |
+
},
|
| 83 |
+
"sn11": {
|
| 84 |
+
"ratio": 1.0027932738941634,
|
| 85 |
+
"mase": 4.266834697832175,
|
| 86 |
+
"n_origins": 10
|
| 87 |
+
},
|
| 88 |
+
"sn110": {
|
| 89 |
+
"ratio": 0.9866244179827407,
|
| 90 |
+
"mase": 9.369694060803925,
|
| 91 |
+
"n_origins": 10
|
| 92 |
+
},
|
| 93 |
+
"sn111": {
|
| 94 |
+
"ratio": 1.0271116490506822,
|
| 95 |
+
"mase": 9.71338367072177,
|
| 96 |
+
"n_origins": 10
|
| 97 |
+
},
|
| 98 |
+
"sn112": {
|
| 99 |
+
"ratio": 0.9462268293804295,
|
| 100 |
+
"mase": 8.353925743494758,
|
| 101 |
+
"n_origins": 10
|
| 102 |
+
},
|
| 103 |
+
"sn113": {
|
| 104 |
+
"ratio": 0.4372065991805312,
|
| 105 |
+
"mase": 0.9620420311376368,
|
| 106 |
+
"n_origins": 10
|
| 107 |
+
},
|
| 108 |
+
"sn114": {
|
| 109 |
+
"ratio": 0.6710543064911593,
|
| 110 |
+
"mase": 1.5652455339942632,
|
| 111 |
+
"n_origins": 10
|
| 112 |
+
},
|
| 113 |
+
"sn115": {
|
| 114 |
+
"ratio": 0.8261158584501561,
|
| 115 |
+
"mase": 1.1851955094579563,
|
| 116 |
+
"n_origins": 10
|
| 117 |
+
},
|
| 118 |
+
"sn116": {
|
| 119 |
+
"ratio": 0.45617882488821543,
|
| 120 |
+
"mase": 0.864752595652253,
|
| 121 |
+
"n_origins": 10
|
| 122 |
+
},
|
| 123 |
+
"sn117": {
|
| 124 |
+
"ratio": 0.4383431408943167,
|
| 125 |
+
"mase": 0.7814004363397944,
|
| 126 |
+
"n_origins": 10
|
| 127 |
+
},
|
| 128 |
+
"sn118": {
|
| 129 |
+
"ratio": 0.9712733741595985,
|
| 130 |
+
"mase": 2.576472034889849,
|
| 131 |
+
"n_origins": 10
|
| 132 |
+
},
|
| 133 |
+
"sn119": {
|
| 134 |
+
"ratio": 0.3770008366573281,
|
| 135 |
+
"mase": 1.1835628761840955,
|
| 136 |
+
"n_origins": 10
|
| 137 |
+
},
|
| 138 |
+
"sn12": {
|
| 139 |
+
"ratio": 0.3330984224610944,
|
| 140 |
+
"mase": 0.837438418374748,
|
| 141 |
+
"n_origins": 10
|
| 142 |
+
},
|
| 143 |
+
"sn120": {
|
| 144 |
+
"ratio": 0.895713530522417,
|
| 145 |
+
"mase": 4.313096503419332,
|
| 146 |
+
"n_origins": 10
|
| 147 |
+
},
|
| 148 |
+
"sn121": {
|
| 149 |
+
"ratio": 0.3891448787676748,
|
| 150 |
+
"mase": 0.8895188976423095,
|
| 151 |
+
"n_origins": 10
|
| 152 |
+
},
|
| 153 |
+
"sn122": {
|
| 154 |
+
"ratio": 0.4258020996214738,
|
| 155 |
+
"mase": 1.3859207578933685,
|
| 156 |
+
"n_origins": 10
|
| 157 |
+
},
|
| 158 |
+
"sn123": {
|
| 159 |
+
"ratio": 0.7928260569129003,
|
| 160 |
+
"mase": 2.1667753831021037,
|
| 161 |
+
"n_origins": 10
|
| 162 |
+
},
|
| 163 |
+
"sn124": {
|
| 164 |
+
"ratio": 0.9204230906631579,
|
| 165 |
+
"mase": 5.051662843703364,
|
| 166 |
+
"n_origins": 10
|
| 167 |
+
},
|
| 168 |
+
"sn125": {
|
| 169 |
+
"ratio": 0.4855539654569293,
|
| 170 |
+
"mase": 1.0433107321332449,
|
| 171 |
+
"n_origins": 10
|
| 172 |
+
},
|
| 173 |
+
"sn126": {
|
| 174 |
+
"ratio": 0.37425147762916616,
|
| 175 |
+
"mase": 0.542784852901055,
|
| 176 |
+
"n_origins": 10
|
| 177 |
+
},
|
| 178 |
+
"sn127": {
|
| 179 |
+
"ratio": 0.826988012119036,
|
| 180 |
+
"mase": 2.287637910627174,
|
| 181 |
+
"n_origins": 10
|
| 182 |
+
},
|
| 183 |
+
"sn128": {
|
| 184 |
+
"ratio": 0.5955376577004804,
|
| 185 |
+
"mase": 1.4326868920650706,
|
| 186 |
+
"n_origins": 10
|
| 187 |
+
},
|
| 188 |
+
"sn13": {
|
| 189 |
+
"ratio": 0.3780828629313393,
|
| 190 |
+
"mase": 0.8503236652152714,
|
| 191 |
+
"n_origins": 10
|
| 192 |
+
},
|
| 193 |
+
"sn14": {
|
| 194 |
+
"ratio": 0.686924989437737,
|
| 195 |
+
"mase": 1.688720348729086,
|
| 196 |
+
"n_origins": 10
|
| 197 |
+
},
|
| 198 |
+
"sn15": {
|
| 199 |
+
"ratio": 0.932624592781024,
|
| 200 |
+
"mase": 3.394315740975059,
|
| 201 |
+
"n_origins": 10
|
| 202 |
+
},
|
| 203 |
+
"sn16": {
|
| 204 |
+
"ratio": 0.5178188919358234,
|
| 205 |
+
"mase": 1.6068999503820156,
|
| 206 |
+
"n_origins": 10
|
| 207 |
+
},
|
| 208 |
+
"sn17": {
|
| 209 |
+
"ratio": 0.9010422232900572,
|
| 210 |
+
"mase": 3.056591309331566,
|
| 211 |
+
"n_origins": 10
|
| 212 |
+
},
|
| 213 |
+
"sn18": {
|
| 214 |
+
"ratio": 0.9316635806893558,
|
| 215 |
+
"mase": 4.567479037831696,
|
| 216 |
+
"n_origins": 10
|
| 217 |
+
},
|
| 218 |
+
"sn19": {
|
| 219 |
+
"ratio": 0.6335034331656396,
|
| 220 |
+
"mase": 1.9896328969783965,
|
| 221 |
+
"n_origins": 10
|
| 222 |
+
},
|
| 223 |
+
"sn2": {
|
| 224 |
+
"ratio": 0.36653692247208786,
|
| 225 |
+
"mase": 0.7884823011373355,
|
| 226 |
+
"n_origins": 10
|
| 227 |
+
},
|
| 228 |
+
"sn20": {
|
| 229 |
+
"ratio": 0.44872775242845514,
|
| 230 |
+
"mase": 0.8906679549504241,
|
| 231 |
+
"n_origins": 10
|
| 232 |
+
},
|
| 233 |
+
"sn21": {
|
| 234 |
+
"ratio": 0.7142886733932562,
|
| 235 |
+
"mase": 2.1856937427708494,
|
| 236 |
+
"n_origins": 10
|
| 237 |
+
},
|
| 238 |
+
"sn22": {
|
| 239 |
+
"ratio": 0.5370880365600099,
|
| 240 |
+
"mase": 1.2437018856226363,
|
| 241 |
+
"n_origins": 10
|
| 242 |
+
},
|
| 243 |
+
"sn23": {
|
| 244 |
+
"ratio": 0.8359186739023419,
|
| 245 |
+
"mase": 2.4843170867829474,
|
| 246 |
+
"n_origins": 10
|
| 247 |
+
},
|
| 248 |
+
"sn24": {
|
| 249 |
+
"ratio": 0.34511902751319185,
|
| 250 |
+
"mase": 0.527414949697901,
|
| 251 |
+
"n_origins": 10
|
| 252 |
+
},
|
| 253 |
+
"sn25": {
|
| 254 |
+
"ratio": 0.854991675286837,
|
| 255 |
+
"mase": 17.067566739720462,
|
| 256 |
+
"n_origins": 10
|
| 257 |
+
},
|
| 258 |
+
"sn26": {
|
| 259 |
+
"ratio": 0.50981131617458,
|
| 260 |
+
"mase": 1.8237654383687054,
|
| 261 |
+
"n_origins": 10
|
| 262 |
+
},
|
| 263 |
+
"sn27": {
|
| 264 |
+
"ratio": 0.4201054919622308,
|
| 265 |
+
"mase": 0.7831607988192698,
|
| 266 |
+
"n_origins": 10
|
| 267 |
+
},
|
| 268 |
+
"sn28": {
|
| 269 |
+
"ratio": 0.9716672884448693,
|
| 270 |
+
"mase": 6.620075292887577,
|
| 271 |
+
"n_origins": 10
|
| 272 |
+
},
|
| 273 |
+
"sn29": {
|
| 274 |
+
"ratio": 0.7193864723126723,
|
| 275 |
+
"mase": 2.031296070934475,
|
| 276 |
+
"n_origins": 10
|
| 277 |
+
},
|
| 278 |
+
"sn3": {
|
| 279 |
+
"ratio": 1.015935808021696,
|
| 280 |
+
"mase": 6.97628331768139,
|
| 281 |
+
"n_origins": 10
|
| 282 |
+
},
|
| 283 |
+
"sn30": {
|
| 284 |
+
"ratio": 0.9206872867172066,
|
| 285 |
+
"mase": 4.130105870736298,
|
| 286 |
+
"n_origins": 10
|
| 287 |
+
},
|
| 288 |
+
"sn31": {
|
| 289 |
+
"ratio": 1.0124219337617626,
|
| 290 |
+
"mase": 6.146861229131343,
|
| 291 |
+
"n_origins": 10
|
| 292 |
+
},
|
| 293 |
+
"sn32": {
|
| 294 |
+
"ratio": 0.4131909372314771,
|
| 295 |
+
"mase": 0.9652776276655974,
|
| 296 |
+
"n_origins": 10
|
| 297 |
+
},
|
| 298 |
+
"sn33": {
|
| 299 |
+
"ratio": 0.636834071809915,
|
| 300 |
+
"mase": 1.8804656872677343,
|
| 301 |
+
"n_origins": 10
|
| 302 |
+
},
|
| 303 |
+
"sn34": {
|
| 304 |
+
"ratio": 0.51592802794793,
|
| 305 |
+
"mase": 1.7819551183035753,
|
| 306 |
+
"n_origins": 10
|
| 307 |
+
},
|
| 308 |
+
"sn35": {
|
| 309 |
+
"ratio": 0.8640559913484894,
|
| 310 |
+
"mase": 3.2234748280931185,
|
| 311 |
+
"n_origins": 10
|
| 312 |
+
},
|
| 313 |
+
"sn37": {
|
| 314 |
+
"ratio": 0.9435239116146619,
|
| 315 |
+
"mase": 5.753384661251346,
|
| 316 |
+
"n_origins": 10
|
| 317 |
+
},
|
| 318 |
+
"sn38": {
|
| 319 |
+
"ratio": 0.8993932984474249,
|
| 320 |
+
"mase": 2.7122152325836635,
|
| 321 |
+
"n_origins": 10
|
| 322 |
+
},
|
| 323 |
+
"sn39": {
|
| 324 |
+
"ratio": 1.108226158778601,
|
| 325 |
+
"mase": 3.985226747325476,
|
| 326 |
+
"n_origins": 10
|
| 327 |
+
},
|
| 328 |
+
"sn4": {
|
| 329 |
+
"ratio": 0.968263614386594,
|
| 330 |
+
"mase": 5.497224404008315,
|
| 331 |
+
"n_origins": 10
|
| 332 |
+
},
|
| 333 |
+
"sn40": {
|
| 334 |
+
"ratio": 0.22863519323937648,
|
| 335 |
+
"mase": 0.4852801976521417,
|
| 336 |
+
"n_origins": 10
|
| 337 |
+
},
|
| 338 |
+
"sn41": {
|
| 339 |
+
"ratio": 0.332833114348808,
|
| 340 |
+
"mase": 0.8456874993582137,
|
| 341 |
+
"n_origins": 10
|
| 342 |
+
},
|
| 343 |
+
"sn42": {
|
| 344 |
+
"ratio": 0.4003270693058984,
|
| 345 |
+
"mase": 0.9927462466823825,
|
| 346 |
+
"n_origins": 10
|
| 347 |
+
},
|
| 348 |
+
"sn43": {
|
| 349 |
+
"ratio": 0.7023411100923905,
|
| 350 |
+
"mase": 3.6888628854343257,
|
| 351 |
+
"n_origins": 10
|
| 352 |
+
},
|
| 353 |
+
"sn44": {
|
| 354 |
+
"ratio": 1.0161184253027882,
|
| 355 |
+
"mase": 6.562614976468029,
|
| 356 |
+
"n_origins": 10
|
| 357 |
+
},
|
| 358 |
+
"sn45": {
|
| 359 |
+
"ratio": 0.9434229032340888,
|
| 360 |
+
"mase": 6.309146470706924,
|
| 361 |
+
"n_origins": 10
|
| 362 |
+
},
|
| 363 |
+
"sn46": {
|
| 364 |
+
"ratio": 0.7732972440862613,
|
| 365 |
+
"mase": 2.178964739537759,
|
| 366 |
+
"n_origins": 10
|
| 367 |
+
},
|
| 368 |
+
"sn47": {
|
| 369 |
+
"ratio": 0.704209450253542,
|
| 370 |
+
"mase": 1.72420404640847,
|
| 371 |
+
"n_origins": 10
|
| 372 |
+
},
|
| 373 |
+
"sn48": {
|
| 374 |
+
"ratio": 0.3586923726362881,
|
| 375 |
+
"mase": 0.9404994748290243,
|
| 376 |
+
"n_origins": 10
|
| 377 |
+
},
|
| 378 |
+
"sn49": {
|
| 379 |
+
"ratio": 0.9568909515473307,
|
| 380 |
+
"mase": 7.042653673805469,
|
| 381 |
+
"n_origins": 10
|
| 382 |
+
},
|
| 383 |
+
"sn5": {
|
| 384 |
+
"ratio": 0.6582275252722609,
|
| 385 |
+
"mase": 1.8621380022857654,
|
| 386 |
+
"n_origins": 10
|
| 387 |
+
},
|
| 388 |
+
"sn50": {
|
| 389 |
+
"ratio": 0.9963494825883185,
|
| 390 |
+
"mase": 5.596672951331695,
|
| 391 |
+
"n_origins": 10
|
| 392 |
+
},
|
| 393 |
+
"sn51": {
|
| 394 |
+
"ratio": 0.9380584595971575,
|
| 395 |
+
"mase": 9.182648838632726,
|
| 396 |
+
"n_origins": 10
|
| 397 |
+
},
|
| 398 |
+
"sn52": {
|
| 399 |
+
"ratio": 0.4758189331033769,
|
| 400 |
+
"mase": 1.1857265665738408,
|
| 401 |
+
"n_origins": 10
|
| 402 |
+
},
|
| 403 |
+
"sn53": {
|
| 404 |
+
"ratio": 0.8464325439007951,
|
| 405 |
+
"mase": 9.91413209769456,
|
| 406 |
+
"n_origins": 10
|
| 407 |
+
},
|
| 408 |
+
"sn54": {
|
| 409 |
+
"ratio": 0.8663963251444613,
|
| 410 |
+
"mase": 2.7167597246884925,
|
| 411 |
+
"n_origins": 10
|
| 412 |
+
},
|
| 413 |
+
"sn55": {
|
| 414 |
+
"ratio": 0.7341910044238699,
|
| 415 |
+
"mase": 1.8624925037141535,
|
| 416 |
+
"n_origins": 10
|
| 417 |
+
},
|
| 418 |
+
"sn56": {
|
| 419 |
+
"ratio": 0.8474648666257784,
|
| 420 |
+
"mase": 2.537542555652703,
|
| 421 |
+
"n_origins": 10
|
| 422 |
+
},
|
| 423 |
+
"sn57": {
|
| 424 |
+
"ratio": 0.48490333924163087,
|
| 425 |
+
"mase": 1.3736916045851946,
|
| 426 |
+
"n_origins": 10
|
| 427 |
+
},
|
| 428 |
+
"sn58": {
|
| 429 |
+
"ratio": 0.6208044406967781,
|
| 430 |
+
"mase": 2.405319786562752,
|
| 431 |
+
"n_origins": 10
|
| 432 |
+
},
|
| 433 |
+
"sn6": {
|
| 434 |
+
"ratio": 0.7648460033387705,
|
| 435 |
+
"mase": 1.925985310859074,
|
| 436 |
+
"n_origins": 10
|
| 437 |
+
},
|
| 438 |
+
"sn60": {
|
| 439 |
+
"ratio": 0.968433576947959,
|
| 440 |
+
"mase": 4.257514696975507,
|
| 441 |
+
"n_origins": 10
|
| 442 |
+
},
|
| 443 |
+
"sn61": {
|
| 444 |
+
"ratio": 0.9369827240512834,
|
| 445 |
+
"mase": 10.881261198557466,
|
| 446 |
+
"n_origins": 10
|
| 447 |
+
},
|
| 448 |
+
"sn62": {
|
| 449 |
+
"ratio": 0.3303069985305508,
|
| 450 |
+
"mase": 0.640979988017595,
|
| 451 |
+
"n_origins": 10
|
| 452 |
+
},
|
| 453 |
+
"sn63": {
|
| 454 |
+
"ratio": 0.5996357938669469,
|
| 455 |
+
"mase": 1.4699875558169695,
|
| 456 |
+
"n_origins": 10
|
| 457 |
+
},
|
| 458 |
+
"sn64": {
|
| 459 |
+
"ratio": 0.9100672413405264,
|
| 460 |
+
"mase": 4.9701523575591855,
|
| 461 |
+
"n_origins": 10
|
| 462 |
+
},
|
| 463 |
+
"sn65": {
|
| 464 |
+
"ratio": 0.9286100471048963,
|
| 465 |
+
"mase": 5.166353581392764,
|
| 466 |
+
"n_origins": 10
|
| 467 |
+
},
|
| 468 |
+
"sn66": {
|
| 469 |
+
"ratio": 0.3150918446013128,
|
| 470 |
+
"mase": 0.5177092081303796,
|
| 471 |
+
"n_origins": 10
|
| 472 |
+
},
|
| 473 |
+
"sn67": {
|
| 474 |
+
"ratio": 2.8895848130336566,
|
| 475 |
+
"mase": 0.2992958254683967,
|
| 476 |
+
"n_origins": 10
|
| 477 |
+
},
|
| 478 |
+
"sn68": {
|
| 479 |
+
"ratio": 0.6249266924137108,
|
| 480 |
+
"mase": 2.090854187855355,
|
| 481 |
+
"n_origins": 10
|
| 482 |
+
},
|
| 483 |
+
"sn69": {
|
| 484 |
+
"ratio": 0.3666347410440579,
|
| 485 |
+
"mase": 0.8096786009100585,
|
| 486 |
+
"n_origins": 10
|
| 487 |
+
},
|
| 488 |
+
"sn7": {
|
| 489 |
+
"ratio": 0.6590841938523517,
|
| 490 |
+
"mase": 1.5260503071362224,
|
| 491 |
+
"n_origins": 10
|
| 492 |
+
},
|
| 493 |
+
"sn71": {
|
| 494 |
+
"ratio": 0.9653904802836206,
|
| 495 |
+
"mase": 3.4703462195406725,
|
| 496 |
+
"n_origins": 10
|
| 497 |
+
},
|
| 498 |
+
"sn72": {
|
| 499 |
+
"ratio": 0.9818079401413271,
|
| 500 |
+
"mase": 5.514878907309477,
|
| 501 |
+
"n_origins": 10
|
| 502 |
+
},
|
| 503 |
+
"sn73": {
|
| 504 |
+
"ratio": 0.42601704627972725,
|
| 505 |
+
"mase": 0.949614179620279,
|
| 506 |
+
"n_origins": 10
|
| 507 |
+
},
|
| 508 |
+
"sn74": {
|
| 509 |
+
"ratio": 0.5510060606138546,
|
| 510 |
+
"mase": 1.6070539625549218,
|
| 511 |
+
"n_origins": 10
|
| 512 |
+
},
|
| 513 |
+
"sn75": {
|
| 514 |
+
"ratio": 0.9237623287284785,
|
| 515 |
+
"mase": 4.715957680787559,
|
| 516 |
+
"n_origins": 10
|
| 517 |
+
},
|
| 518 |
+
"sn76": {
|
| 519 |
+
"ratio": 0.604492708557892,
|
| 520 |
+
"mase": 1.1072047342270435,
|
| 521 |
+
"n_origins": 10
|
| 522 |
+
},
|
| 523 |
+
"sn77": {
|
| 524 |
+
"ratio": 0.9401192765227799,
|
| 525 |
+
"mase": 4.088392556370423,
|
| 526 |
+
"n_origins": 10
|
| 527 |
+
},
|
| 528 |
+
"sn78": {
|
| 529 |
+
"ratio": 0.8465868448090175,
|
| 530 |
+
"mase": 1.8324192856588475,
|
| 531 |
+
"n_origins": 10
|
| 532 |
+
},
|
| 533 |
+
"sn79": {
|
| 534 |
+
"ratio": 0.8420365802431585,
|
| 535 |
+
"mase": 3.281764539357969,
|
| 536 |
+
"n_origins": 10
|
| 537 |
+
},
|
| 538 |
+
"sn8": {
|
| 539 |
+
"ratio": 0.9412244476908845,
|
| 540 |
+
"mase": 7.402551087728235,
|
| 541 |
+
"n_origins": 10
|
| 542 |
+
},
|
| 543 |
+
"sn80": {
|
| 544 |
+
"ratio": 0.9098570827848194,
|
| 545 |
+
"mase": 11.752648884068511,
|
| 546 |
+
"n_origins": 10
|
| 547 |
+
},
|
| 548 |
+
"sn81": {
|
| 549 |
+
"ratio": 0.8404389011286985,
|
| 550 |
+
"mase": 2.1051055198870205,
|
| 551 |
+
"n_origins": 10
|
| 552 |
+
},
|
| 553 |
+
"sn82": {
|
| 554 |
+
"ratio": 0.7822239248503312,
|
| 555 |
+
"mase": 1.0753738905238195,
|
| 556 |
+
"n_origins": 10
|
| 557 |
+
},
|
| 558 |
+
"sn83": {
|
| 559 |
+
"ratio": 0.2796373639634712,
|
| 560 |
+
"mase": 0.6700711416969615,
|
| 561 |
+
"n_origins": 10
|
| 562 |
+
},
|
| 563 |
+
"sn84": {
|
| 564 |
+
"ratio": 0.6507719703074952,
|
| 565 |
+
"mase": 0.8741711396449494,
|
| 566 |
+
"n_origins": 10
|
| 567 |
+
},
|
| 568 |
+
"sn85": {
|
| 569 |
+
"ratio": 0.627479349396202,
|
| 570 |
+
"mase": 1.5793876999484109,
|
| 571 |
+
"n_origins": 10
|
| 572 |
+
},
|
| 573 |
+
"sn86": {
|
| 574 |
+
"ratio": 0.0,
|
| 575 |
+
"mase": 0.0,
|
| 576 |
+
"n_origins": 10
|
| 577 |
+
},
|
| 578 |
+
"sn87": {
|
| 579 |
+
"ratio": 0.9500345420487044,
|
| 580 |
+
"mase": 3.8785578694078744,
|
| 581 |
+
"n_origins": 10
|
| 582 |
+
},
|
| 583 |
+
"sn88": {
|
| 584 |
+
"ratio": 0.9373387635022492,
|
| 585 |
+
"mase": 6.514046740419002,
|
| 586 |
+
"n_origins": 10
|
| 587 |
+
},
|
| 588 |
+
"sn89": {
|
| 589 |
+
"ratio": 0.30961006564472077,
|
| 590 |
+
"mase": 0.7170409983227407,
|
| 591 |
+
"n_origins": 10
|
| 592 |
+
},
|
| 593 |
+
"sn9": {
|
| 594 |
+
"ratio": 0.9753219697333869,
|
| 595 |
+
"mase": 6.565642167519287,
|
| 596 |
+
"n_origins": 10
|
| 597 |
+
},
|
| 598 |
+
"sn90": {
|
| 599 |
+
"ratio": 0.8339860018627111,
|
| 600 |
+
"mase": 3.0559797229629093,
|
| 601 |
+
"n_origins": 10
|
| 602 |
+
},
|
| 603 |
+
"sn91": {
|
| 604 |
+
"ratio": 0.5808224517958317,
|
| 605 |
+
"mase": 1.1080240378681905,
|
| 606 |
+
"n_origins": 10
|
| 607 |
+
},
|
| 608 |
+
"sn92": {
|
| 609 |
+
"ratio": 0.8942767192576349,
|
| 610 |
+
"mase": 2.9354946736112764,
|
| 611 |
+
"n_origins": 10
|
| 612 |
+
},
|
| 613 |
+
"sn93": {
|
| 614 |
+
"ratio": 0.9584808120205827,
|
| 615 |
+
"mase": 10.87533462485032,
|
| 616 |
+
"n_origins": 10
|
| 617 |
+
},
|
| 618 |
+
"sn94": {
|
| 619 |
+
"ratio": 0.8772433751876558,
|
| 620 |
+
"mase": 2.662735973306941,
|
| 621 |
+
"n_origins": 10
|
| 622 |
+
},
|
| 623 |
+
"sn95": {
|
| 624 |
+
"ratio": 0.8540133192760636,
|
| 625 |
+
"mase": 5.9240823070066515,
|
| 626 |
+
"n_origins": 10
|
| 627 |
+
},
|
| 628 |
+
"sn96": {
|
| 629 |
+
"ratio": 1.2250740122371533,
|
| 630 |
+
"mase": 0.27015832739655554,
|
| 631 |
+
"n_origins": 10
|
| 632 |
+
},
|
| 633 |
+
"sn97": {
|
| 634 |
+
"ratio": 0.6472833001285045,
|
| 635 |
+
"mase": 0.9771080687406128,
|
| 636 |
+
"n_origins": 10
|
| 637 |
+
},
|
| 638 |
+
"sn98": {
|
| 639 |
+
"ratio": 0.3548340527797729,
|
| 640 |
+
"mase": 0.8464215390353514,
|
| 641 |
+
"n_origins": 10
|
| 642 |
+
},
|
| 643 |
+
"sn99": {
|
| 644 |
+
"ratio": 0.7138554618448916,
|
| 645 |
+
"mase": 1.945182405398431,
|
| 646 |
+
"n_origins": 10
|
| 647 |
+
}
|
| 648 |
+
}
|
| 649 |
+
},
|
| 650 |
+
"168": {
|
| 651 |
+
"n_assets": 125,
|
| 652 |
+
"geomean_ratio": 0.5912573329477064,
|
| 653 |
+
"median_ratio": 0.7023140005309937,
|
| 654 |
+
"beat_naive_frac": 0.896,
|
| 655 |
+
"per_asset": {
|
| 656 |
+
"TAOUSD": {
|
| 657 |
+
"ratio": 0.9100752102649408,
|
| 658 |
+
"mase": 7.679984254965317,
|
| 659 |
+
"n_origins": 10
|
| 660 |
+
},
|
| 661 |
+
"sn1": {
|
| 662 |
+
"ratio": 0.4438750839998818,
|
| 663 |
+
"mase": 4.619418991484161,
|
| 664 |
+
"n_origins": 10
|
| 665 |
+
},
|
| 666 |
+
"sn10": {
|
| 667 |
+
"ratio": 0.8827478451574644,
|
| 668 |
+
"mase": 17.29298694944316,
|
| 669 |
+
"n_origins": 10
|
| 670 |
+
},
|
| 671 |
+
"sn100": {
|
| 672 |
+
"ratio": 0.7306435768968533,
|
| 673 |
+
"mase": 3.313861892278839,
|
| 674 |
+
"n_origins": 10
|
| 675 |
+
},
|
| 676 |
+
"sn101": {
|
| 677 |
+
"ratio": 0.45040632664107205,
|
| 678 |
+
"mase": 2.3341703836065784,
|
| 679 |
+
"n_origins": 10
|
| 680 |
+
},
|
| 681 |
+
"sn102": {
|
| 682 |
+
"ratio": 0.5067737185921924,
|
| 683 |
+
"mase": 3.503420247365548,
|
| 684 |
+
"n_origins": 10
|
| 685 |
+
},
|
| 686 |
+
"sn104": {
|
| 687 |
+
"ratio": 0.20788542097397764,
|
| 688 |
+
"mase": 1.6770846067781704,
|
| 689 |
+
"n_origins": 10
|
| 690 |
+
},
|
| 691 |
+
"sn105": {
|
| 692 |
+
"ratio": 0.4918874338088409,
|
| 693 |
+
"mase": 1.6166938577149192,
|
| 694 |
+
"n_origins": 10
|
| 695 |
+
},
|
| 696 |
+
"sn106": {
|
| 697 |
+
"ratio": 0.9115560342130526,
|
| 698 |
+
"mase": 11.074499122396341,
|
| 699 |
+
"n_origins": 10
|
| 700 |
+
},
|
| 701 |
+
"sn107": {
|
| 702 |
+
"ratio": 1.06562497185661,
|
| 703 |
+
"mase": 15.895674465912892,
|
| 704 |
+
"n_origins": 10
|
| 705 |
+
},
|
| 706 |
+
"sn108": {
|
| 707 |
+
"ratio": 0.8920214916321676,
|
| 708 |
+
"mase": 12.608933021545328,
|
| 709 |
+
"n_origins": 10
|
| 710 |
+
},
|
| 711 |
+
"sn109": {
|
| 712 |
+
"ratio": 0.9050193716083643,
|
| 713 |
+
"mase": 6.3619973908863034,
|
| 714 |
+
"n_origins": 10
|
| 715 |
+
},
|
| 716 |
+
"sn11": {
|
| 717 |
+
"ratio": 0.6173831349527319,
|
| 718 |
+
"mase": 6.1996851582371155,
|
| 719 |
+
"n_origins": 10
|
| 720 |
+
},
|
| 721 |
+
"sn110": {
|
| 722 |
+
"ratio": 1.0369594859070947,
|
| 723 |
+
"mase": 24.98880953458835,
|
| 724 |
+
"n_origins": 10
|
| 725 |
+
},
|
| 726 |
+
"sn111": {
|
| 727 |
+
"ratio": 1.129513483998636,
|
| 728 |
+
"mase": 20.946627123673025,
|
| 729 |
+
"n_origins": 10
|
| 730 |
+
},
|
| 731 |
+
"sn112": {
|
| 732 |
+
"ratio": 0.840092854633076,
|
| 733 |
+
"mase": 21.558534721777868,
|
| 734 |
+
"n_origins": 10
|
| 735 |
+
},
|
| 736 |
+
"sn113": {
|
| 737 |
+
"ratio": 0.24434462000489912,
|
| 738 |
+
"mase": 1.4299642501485779,
|
| 739 |
+
"n_origins": 10
|
| 740 |
+
},
|
| 741 |
+
"sn114": {
|
| 742 |
+
"ratio": 0.6368066823483389,
|
| 743 |
+
"mase": 4.063485789769237,
|
| 744 |
+
"n_origins": 10
|
| 745 |
+
},
|
| 746 |
+
"sn115": {
|
| 747 |
+
"ratio": 0.734094025220814,
|
| 748 |
+
"mase": 3.9965255774615547,
|
| 749 |
+
"n_origins": 10
|
| 750 |
+
},
|
| 751 |
+
"sn116": {
|
| 752 |
+
"ratio": 0.17495444909429522,
|
| 753 |
+
"mase": 2.7649901489012874,
|
| 754 |
+
"n_origins": 10
|
| 755 |
+
},
|
| 756 |
+
"sn117": {
|
| 757 |
+
"ratio": 0.26369154204403294,
|
| 758 |
+
"mase": 1.2361515157036946,
|
| 759 |
+
"n_origins": 10
|
| 760 |
+
},
|
| 761 |
+
"sn118": {
|
| 762 |
+
"ratio": 0.9021119947158496,
|
| 763 |
+
"mase": 6.181163739928855,
|
| 764 |
+
"n_origins": 10
|
| 765 |
+
},
|
| 766 |
+
"sn119": {
|
| 767 |
+
"ratio": 0.41239115348726185,
|
| 768 |
+
"mase": 6.236132271279508,
|
| 769 |
+
"n_origins": 10
|
| 770 |
+
},
|
| 771 |
+
"sn12": {
|
| 772 |
+
"ratio": 0.43442699335661866,
|
| 773 |
+
"mase": 7.321839573525009,
|
| 774 |
+
"n_origins": 10
|
| 775 |
+
},
|
| 776 |
+
"sn120": {
|
| 777 |
+
"ratio": 0.9871911332725375,
|
| 778 |
+
"mase": 10.159962724795218,
|
| 779 |
+
"n_origins": 10
|
| 780 |
+
},
|
| 781 |
+
"sn121": {
|
| 782 |
+
"ratio": 0.316471885314022,
|
| 783 |
+
"mase": 3.2851996197605904,
|
| 784 |
+
"n_origins": 10
|
| 785 |
+
},
|
| 786 |
+
"sn122": {
|
| 787 |
+
"ratio": 0.15027962147130014,
|
| 788 |
+
"mase": 2.362615466156081,
|
| 789 |
+
"n_origins": 10
|
| 790 |
+
},
|
| 791 |
+
"sn123": {
|
| 792 |
+
"ratio": 0.6848133199174291,
|
| 793 |
+
"mase": 4.8520500327051685,
|
| 794 |
+
"n_origins": 10
|
| 795 |
+
},
|
| 796 |
+
"sn124": {
|
| 797 |
+
"ratio": 1.1260303024240084,
|
| 798 |
+
"mase": 22.30860791421475,
|
| 799 |
+
"n_origins": 10
|
| 800 |
+
},
|
| 801 |
+
"sn125": {
|
| 802 |
+
"ratio": 0.21915090411862428,
|
| 803 |
+
"mase": 2.5329645338443596,
|
| 804 |
+
"n_origins": 10
|
| 805 |
+
},
|
| 806 |
+
"sn126": {
|
| 807 |
+
"ratio": 0.31821256477284865,
|
| 808 |
+
"mase": 1.8662823293087163,
|
| 809 |
+
"n_origins": 10
|
| 810 |
+
},
|
| 811 |
+
"sn127": {
|
| 812 |
+
"ratio": 0.7046241166125854,
|
| 813 |
+
"mase": 5.353207457211217,
|
| 814 |
+
"n_origins": 10
|
| 815 |
+
},
|
| 816 |
+
"sn128": {
|
| 817 |
+
"ratio": 0.5332536855559383,
|
| 818 |
+
"mase": 6.900957341922866,
|
| 819 |
+
"n_origins": 10
|
| 820 |
+
},
|
| 821 |
+
"sn13": {
|
| 822 |
+
"ratio": 0.5613371370354806,
|
| 823 |
+
"mase": 4.552263712849844,
|
| 824 |
+
"n_origins": 10
|
| 825 |
+
},
|
| 826 |
+
"sn14": {
|
| 827 |
+
"ratio": 0.7023140005309937,
|
| 828 |
+
"mase": 7.659361309742066,
|
| 829 |
+
"n_origins": 10
|
| 830 |
+
},
|
| 831 |
+
"sn15": {
|
| 832 |
+
"ratio": 1.023450627575242,
|
| 833 |
+
"mase": 14.687836385442003,
|
| 834 |
+
"n_origins": 10
|
| 835 |
+
},
|
| 836 |
+
"sn16": {
|
| 837 |
+
"ratio": 0.24396147038637292,
|
| 838 |
+
"mase": 3.4808056107833396,
|
| 839 |
+
"n_origins": 10
|
| 840 |
+
},
|
| 841 |
+
"sn17": {
|
| 842 |
+
"ratio": 0.6701195173611982,
|
| 843 |
+
"mase": 10.827556762515933,
|
| 844 |
+
"n_origins": 10
|
| 845 |
+
},
|
| 846 |
+
"sn18": {
|
| 847 |
+
"ratio": 0.7934861579235609,
|
| 848 |
+
"mase": 8.595499004618864,
|
| 849 |
+
"n_origins": 10
|
| 850 |
+
},
|
| 851 |
+
"sn19": {
|
| 852 |
+
"ratio": 0.792444665766595,
|
| 853 |
+
"mase": 14.54652455754288,
|
| 854 |
+
"n_origins": 10
|
| 855 |
+
},
|
| 856 |
+
"sn2": {
|
| 857 |
+
"ratio": 0.9613129709455558,
|
| 858 |
+
"mase": 10.387824727215362,
|
| 859 |
+
"n_origins": 10
|
| 860 |
+
},
|
| 861 |
+
"sn20": {
|
| 862 |
+
"ratio": 0.5492204106949773,
|
| 863 |
+
"mase": 3.389618815514995,
|
| 864 |
+
"n_origins": 10
|
| 865 |
+
},
|
| 866 |
+
"sn21": {
|
| 867 |
+
"ratio": 0.7639724165790677,
|
| 868 |
+
"mase": 7.908770910465448,
|
| 869 |
+
"n_origins": 10
|
| 870 |
+
},
|
| 871 |
+
"sn22": {
|
| 872 |
+
"ratio": 0.39411192759747843,
|
| 873 |
+
"mase": 2.549521622316424,
|
| 874 |
+
"n_origins": 10
|
| 875 |
+
},
|
| 876 |
+
"sn23": {
|
| 877 |
+
"ratio": 0.8168344848075498,
|
| 878 |
+
"mase": 6.517589601240204,
|
| 879 |
+
"n_origins": 10
|
| 880 |
+
},
|
| 881 |
+
"sn24": {
|
| 882 |
+
"ratio": 0.3252817232770648,
|
| 883 |
+
"mase": 1.2395460663127518,
|
| 884 |
+
"n_origins": 10
|
| 885 |
+
},
|
| 886 |
+
"sn25": {
|
| 887 |
+
"ratio": 0.893069007859292,
|
| 888 |
+
"mase": 54.405590331014416,
|
| 889 |
+
"n_origins": 10
|
| 890 |
+
},
|
| 891 |
+
"sn26": {
|
| 892 |
+
"ratio": 0.19195734112972276,
|
| 893 |
+
"mase": 2.8574828607381413,
|
| 894 |
+
"n_origins": 10
|
| 895 |
+
},
|
| 896 |
+
"sn27": {
|
| 897 |
+
"ratio": 0.589178500703813,
|
| 898 |
+
"mase": 3.1580550481798277,
|
| 899 |
+
"n_origins": 10
|
| 900 |
+
},
|
| 901 |
+
"sn28": {
|
| 902 |
+
"ratio": 0.9641285137229935,
|
| 903 |
+
"mase": 13.73957590343457,
|
| 904 |
+
"n_origins": 10
|
| 905 |
+
},
|
| 906 |
+
"sn29": {
|
| 907 |
+
"ratio": 0.808338082509486,
|
| 908 |
+
"mase": 13.43166239245011,
|
| 909 |
+
"n_origins": 10
|
| 910 |
+
},
|
| 911 |
+
"sn3": {
|
| 912 |
+
"ratio": 0.9902122667863987,
|
| 913 |
+
"mase": 15.687289798759382,
|
| 914 |
+
"n_origins": 10
|
| 915 |
+
},
|
| 916 |
+
"sn30": {
|
| 917 |
+
"ratio": 0.802329223546456,
|
| 918 |
+
"mase": 7.951715356291156,
|
| 919 |
+
"n_origins": 10
|
| 920 |
+
},
|
| 921 |
+
"sn31": {
|
| 922 |
+
"ratio": 0.9128299819300025,
|
| 923 |
+
"mase": 7.786309497325637,
|
| 924 |
+
"n_origins": 10
|
| 925 |
+
},
|
| 926 |
+
"sn32": {
|
| 927 |
+
"ratio": 0.6201151481593595,
|
| 928 |
+
"mase": 4.8767233894430095,
|
| 929 |
+
"n_origins": 10
|
| 930 |
+
},
|
| 931 |
+
"sn33": {
|
| 932 |
+
"ratio": 0.7664513290334893,
|
| 933 |
+
"mase": 8.12940031415799,
|
| 934 |
+
"n_origins": 10
|
| 935 |
+
},
|
| 936 |
+
"sn34": {
|
| 937 |
+
"ratio": 0.6781981966265448,
|
| 938 |
+
"mase": 9.485026832691725,
|
| 939 |
+
"n_origins": 10
|
| 940 |
+
},
|
| 941 |
+
"sn35": {
|
| 942 |
+
"ratio": 0.8371713248376367,
|
| 943 |
+
"mase": 8.444572926007117,
|
| 944 |
+
"n_origins": 10
|
| 945 |
+
},
|
| 946 |
+
"sn37": {
|
| 947 |
+
"ratio": 0.8604372480031328,
|
| 948 |
+
"mase": 21.818056606717704,
|
| 949 |
+
"n_origins": 10
|
| 950 |
+
},
|
| 951 |
+
"sn38": {
|
| 952 |
+
"ratio": 0.6890261382184673,
|
| 953 |
+
"mase": 5.673408288852618,
|
| 954 |
+
"n_origins": 10
|
| 955 |
+
},
|
| 956 |
+
"sn39": {
|
| 957 |
+
"ratio": 1.0852344282936282,
|
| 958 |
+
"mase": 18.854264797546385,
|
| 959 |
+
"n_origins": 10
|
| 960 |
+
},
|
| 961 |
+
"sn4": {
|
| 962 |
+
"ratio": 0.8043390655003738,
|
| 963 |
+
"mase": 12.309229642502702,
|
| 964 |
+
"n_origins": 10
|
| 965 |
+
},
|
| 966 |
+
"sn40": {
|
| 967 |
+
"ratio": 0.058884831132228005,
|
| 968 |
+
"mase": 1.0945463750121973,
|
| 969 |
+
"n_origins": 10
|
| 970 |
+
},
|
| 971 |
+
"sn41": {
|
| 972 |
+
"ratio": 0.1524851291093199,
|
| 973 |
+
"mase": 1.4156308026116413,
|
| 974 |
+
"n_origins": 10
|
| 975 |
+
},
|
| 976 |
+
"sn42": {
|
| 977 |
+
"ratio": 0.9269195364702056,
|
| 978 |
+
"mase": 11.8040283947565,
|
| 979 |
+
"n_origins": 10
|
| 980 |
+
},
|
| 981 |
+
"sn43": {
|
| 982 |
+
"ratio": 1.1899729758044402,
|
| 983 |
+
"mase": 51.88570679977294,
|
| 984 |
+
"n_origins": 10
|
| 985 |
+
},
|
| 986 |
+
"sn44": {
|
| 987 |
+
"ratio": 0.8050048242812977,
|
| 988 |
+
"mase": 7.8145599890865185,
|
| 989 |
+
"n_origins": 10
|
| 990 |
+
},
|
| 991 |
+
"sn45": {
|
| 992 |
+
"ratio": 0.7354542370326859,
|
| 993 |
+
"mase": 14.17314326499596,
|
| 994 |
+
"n_origins": 10
|
| 995 |
+
},
|
| 996 |
+
"sn46": {
|
| 997 |
+
"ratio": 0.8640120867906319,
|
| 998 |
+
"mase": 8.860408404367137,
|
| 999 |
+
"n_origins": 10
|
| 1000 |
+
},
|
| 1001 |
+
"sn47": {
|
| 1002 |
+
"ratio": 0.5815052627856627,
|
| 1003 |
+
"mase": 3.7873907912589284,
|
| 1004 |
+
"n_origins": 10
|
| 1005 |
+
},
|
| 1006 |
+
"sn48": {
|
| 1007 |
+
"ratio": 0.3938034373080971,
|
| 1008 |
+
"mase": 3.7191502680454467,
|
| 1009 |
+
"n_origins": 10
|
| 1010 |
+
},
|
| 1011 |
+
"sn49": {
|
| 1012 |
+
"ratio": 0.9746467778194559,
|
| 1013 |
+
"mase": 30.37524045903674,
|
| 1014 |
+
"n_origins": 10
|
| 1015 |
+
},
|
| 1016 |
+
"sn5": {
|
| 1017 |
+
"ratio": 0.5124963495380332,
|
| 1018 |
+
"mase": 9.05919331794893,
|
| 1019 |
+
"n_origins": 10
|
| 1020 |
+
},
|
| 1021 |
+
"sn50": {
|
| 1022 |
+
"ratio": 0.6748968649825268,
|
| 1023 |
+
"mase": 7.812514908267832,
|
| 1024 |
+
"n_origins": 10
|
| 1025 |
+
},
|
| 1026 |
+
"sn51": {
|
| 1027 |
+
"ratio": 0.8960899201707188,
|
| 1028 |
+
"mase": 27.701417848939723,
|
| 1029 |
+
"n_origins": 10
|
| 1030 |
+
},
|
| 1031 |
+
"sn52": {
|
| 1032 |
+
"ratio": 0.762058352543706,
|
| 1033 |
+
"mase": 11.907619533064139,
|
| 1034 |
+
"n_origins": 10
|
| 1035 |
+
},
|
| 1036 |
+
"sn53": {
|
| 1037 |
+
"ratio": 0.938498762031826,
|
| 1038 |
+
"mase": 29.474731561413012,
|
| 1039 |
+
"n_origins": 10
|
| 1040 |
+
},
|
| 1041 |
+
"sn54": {
|
| 1042 |
+
"ratio": 0.7364866042739933,
|
| 1043 |
+
"mase": 5.0612012952468985,
|
| 1044 |
+
"n_origins": 10
|
| 1045 |
+
},
|
| 1046 |
+
"sn55": {
|
| 1047 |
+
"ratio": 0.45688778135976693,
|
| 1048 |
+
"mase": 3.054664315892751,
|
| 1049 |
+
"n_origins": 10
|
| 1050 |
+
},
|
| 1051 |
+
"sn56": {
|
| 1052 |
+
"ratio": 0.6147015531871757,
|
| 1053 |
+
"mase": 6.460889496857033,
|
| 1054 |
+
"n_origins": 10
|
| 1055 |
+
},
|
| 1056 |
+
"sn57": {
|
| 1057 |
+
"ratio": 0.13193987091868054,
|
| 1058 |
+
"mase": 2.223215873491268,
|
| 1059 |
+
"n_origins": 10
|
| 1060 |
+
},
|
| 1061 |
+
"sn58": {
|
| 1062 |
+
"ratio": 0.3716650084319622,
|
| 1063 |
+
"mase": 8.86397154822343,
|
| 1064 |
+
"n_origins": 10
|
| 1065 |
+
},
|
| 1066 |
+
"sn6": {
|
| 1067 |
+
"ratio": 0.369871730432288,
|
| 1068 |
+
"mase": 1.9442287638304208,
|
| 1069 |
+
"n_origins": 10
|
| 1070 |
+
},
|
| 1071 |
+
"sn60": {
|
| 1072 |
+
"ratio": 0.8195637235658098,
|
| 1073 |
+
"mase": 9.50288355487155,
|
| 1074 |
+
"n_origins": 10
|
| 1075 |
+
},
|
| 1076 |
+
"sn61": {
|
| 1077 |
+
"ratio": 0.9183091000323272,
|
| 1078 |
+
"mase": 15.072353355302221,
|
| 1079 |
+
"n_origins": 10
|
| 1080 |
+
},
|
| 1081 |
+
"sn62": {
|
| 1082 |
+
"ratio": 0.3622111816619363,
|
| 1083 |
+
"mase": 2.4285060842746553,
|
| 1084 |
+
"n_origins": 10
|
| 1085 |
+
},
|
| 1086 |
+
"sn63": {
|
| 1087 |
+
"ratio": 0.6818897402043701,
|
| 1088 |
+
"mase": 5.02948809059371,
|
| 1089 |
+
"n_origins": 10
|
| 1090 |
+
},
|
| 1091 |
+
"sn64": {
|
| 1092 |
+
"ratio": 1.2082937911805636,
|
| 1093 |
+
"mase": 26.318711374094196,
|
| 1094 |
+
"n_origins": 10
|
| 1095 |
+
},
|
| 1096 |
+
"sn65": {
|
| 1097 |
+
"ratio": 1.023422985109473,
|
| 1098 |
+
"mase": 27.256243259958328,
|
| 1099 |
+
"n_origins": 10
|
| 1100 |
+
},
|
| 1101 |
+
"sn66": {
|
| 1102 |
+
"ratio": 0.4178216614437362,
|
| 1103 |
+
"mase": 2.696127156985599,
|
| 1104 |
+
"n_origins": 10
|
| 1105 |
+
},
|
| 1106 |
+
"sn67": {
|
| 1107 |
+
"ratio": 0.7256006442157982,
|
| 1108 |
+
"mase": 1.2404957706721353,
|
| 1109 |
+
"n_origins": 10
|
| 1110 |
+
},
|
| 1111 |
+
"sn68": {
|
| 1112 |
+
"ratio": 0.6105094945176525,
|
| 1113 |
+
"mase": 8.902969974480158,
|
| 1114 |
+
"n_origins": 10
|
| 1115 |
+
},
|
| 1116 |
+
"sn69": {
|
| 1117 |
+
"ratio": 0.2963017186869316,
|
| 1118 |
+
"mase": 3.929552248726135,
|
| 1119 |
+
"n_origins": 10
|
| 1120 |
+
},
|
| 1121 |
+
"sn7": {
|
| 1122 |
+
"ratio": 0.5092109593531934,
|
| 1123 |
+
"mase": 4.584884429037224,
|
| 1124 |
+
"n_origins": 10
|
| 1125 |
+
},
|
| 1126 |
+
"sn71": {
|
| 1127 |
+
"ratio": 0.9589608651941428,
|
| 1128 |
+
"mase": 13.904260400129598,
|
| 1129 |
+
"n_origins": 10
|
| 1130 |
+
},
|
| 1131 |
+
"sn72": {
|
| 1132 |
+
"ratio": 1.069597526072891,
|
| 1133 |
+
"mase": 19.699345144633266,
|
| 1134 |
+
"n_origins": 10
|
| 1135 |
+
},
|
| 1136 |
+
"sn73": {
|
| 1137 |
+
"ratio": 0.49156334729917994,
|
| 1138 |
+
"mase": 5.331010615316575,
|
| 1139 |
+
"n_origins": 10
|
| 1140 |
+
},
|
| 1141 |
+
"sn74": {
|
| 1142 |
+
"ratio": 0.3498748751195492,
|
| 1143 |
+
"mase": 3.5344200008891193,
|
| 1144 |
+
"n_origins": 10
|
| 1145 |
+
},
|
| 1146 |
+
"sn75": {
|
| 1147 |
+
"ratio": 0.8610338713274657,
|
| 1148 |
+
"mase": 10.3311394178343,
|
| 1149 |
+
"n_origins": 10
|
| 1150 |
+
},
|
| 1151 |
+
"sn76": {
|
| 1152 |
+
"ratio": 0.5713863944256178,
|
| 1153 |
+
"mase": 2.8828316807214414,
|
| 1154 |
+
"n_origins": 10
|
| 1155 |
+
},
|
| 1156 |
+
"sn77": {
|
| 1157 |
+
"ratio": 0.9083553635822804,
|
| 1158 |
+
"mase": 16.847773628126813,
|
| 1159 |
+
"n_origins": 10
|
| 1160 |
+
},
|
| 1161 |
+
"sn78": {
|
| 1162 |
+
"ratio": 0.8236671957519094,
|
| 1163 |
+
"mase": 11.791774957047624,
|
| 1164 |
+
"n_origins": 10
|
| 1165 |
+
},
|
| 1166 |
+
"sn79": {
|
| 1167 |
+
"ratio": 0.9336356426784087,
|
| 1168 |
+
"mase": 14.833680324429588,
|
| 1169 |
+
"n_origins": 10
|
| 1170 |
+
},
|
| 1171 |
+
"sn8": {
|
| 1172 |
+
"ratio": 1.2305257885256762,
|
| 1173 |
+
"mase": 27.571565874570336,
|
| 1174 |
+
"n_origins": 10
|
| 1175 |
+
},
|
| 1176 |
+
"sn80": {
|
| 1177 |
+
"ratio": 0.9255675372305814,
|
| 1178 |
+
"mase": 27.484800603309353,
|
| 1179 |
+
"n_origins": 10
|
| 1180 |
+
},
|
| 1181 |
+
"sn81": {
|
| 1182 |
+
"ratio": 0.7870056781034819,
|
| 1183 |
+
"mase": 7.9507811898814955,
|
| 1184 |
+
"n_origins": 10
|
| 1185 |
+
},
|
| 1186 |
+
"sn82": {
|
| 1187 |
+
"ratio": 0.3074067813153488,
|
| 1188 |
+
"mase": 1.7766035332154038,
|
| 1189 |
+
"n_origins": 10
|
| 1190 |
+
},
|
| 1191 |
+
"sn83": {
|
| 1192 |
+
"ratio": 0.38917933127065985,
|
| 1193 |
+
"mase": 4.755467355460388,
|
| 1194 |
+
"n_origins": 10
|
| 1195 |
+
},
|
| 1196 |
+
"sn84": {
|
| 1197 |
+
"ratio": 0.44122856249403364,
|
| 1198 |
+
"mase": 2.4826598084817535,
|
| 1199 |
+
"n_origins": 10
|
| 1200 |
+
},
|
| 1201 |
+
"sn85": {
|
| 1202 |
+
"ratio": 0.46647173836747785,
|
| 1203 |
+
"mase": 2.9402907304879857,
|
| 1204 |
+
"n_origins": 10
|
| 1205 |
+
},
|
| 1206 |
+
"sn86": {
|
| 1207 |
+
"ratio": 0.3046358340581454,
|
| 1208 |
+
"mase": 80.45356450706991,
|
| 1209 |
+
"n_origins": 10
|
| 1210 |
+
},
|
| 1211 |
+
"sn87": {
|
| 1212 |
+
"ratio": 0.98149180335189,
|
| 1213 |
+
"mase": 11.071090340140314,
|
| 1214 |
+
"n_origins": 10
|
| 1215 |
+
},
|
| 1216 |
+
"sn88": {
|
| 1217 |
+
"ratio": 1.0033684803757987,
|
| 1218 |
+
"mase": 12.65384013059474,
|
| 1219 |
+
"n_origins": 10
|
| 1220 |
+
},
|
| 1221 |
+
"sn89": {
|
| 1222 |
+
"ratio": 0.3670642765206676,
|
| 1223 |
+
"mase": 4.333878735482116,
|
| 1224 |
+
"n_origins": 10
|
| 1225 |
+
},
|
| 1226 |
+
"sn9": {
|
| 1227 |
+
"ratio": 0.8021808528940881,
|
| 1228 |
+
"mase": 13.717250378665106,
|
| 1229 |
+
"n_origins": 10
|
| 1230 |
+
},
|
| 1231 |
+
"sn90": {
|
| 1232 |
+
"ratio": 0.944664933292554,
|
| 1233 |
+
"mase": 15.133822535298634,
|
| 1234 |
+
"n_origins": 10
|
| 1235 |
+
},
|
| 1236 |
+
"sn91": {
|
| 1237 |
+
"ratio": 0.5700116014669724,
|
| 1238 |
+
"mase": 3.820971829658756,
|
| 1239 |
+
"n_origins": 10
|
| 1240 |
+
},
|
| 1241 |
+
"sn92": {
|
| 1242 |
+
"ratio": 0.4667407428417494,
|
| 1243 |
+
"mase": 8.952819460503436,
|
| 1244 |
+
"n_origins": 10
|
| 1245 |
+
},
|
| 1246 |
+
"sn93": {
|
| 1247 |
+
"ratio": 1.0776715540210007,
|
| 1248 |
+
"mase": 44.747392736935744,
|
| 1249 |
+
"n_origins": 10
|
| 1250 |
+
},
|
| 1251 |
+
"sn94": {
|
| 1252 |
+
"ratio": 0.6816537170566556,
|
| 1253 |
+
"mase": 4.661249256992374,
|
| 1254 |
+
"n_origins": 10
|
| 1255 |
+
},
|
| 1256 |
+
"sn95": {
|
| 1257 |
+
"ratio": 0.7543603469812513,
|
| 1258 |
+
"mase": 20.890270711614626,
|
| 1259 |
+
"n_origins": 10
|
| 1260 |
+
},
|
| 1261 |
+
"sn96": {
|
| 1262 |
+
"ratio": 0.314890999686123,
|
| 1263 |
+
"mase": 0.8023941524821053,
|
| 1264 |
+
"n_origins": 10
|
| 1265 |
+
},
|
| 1266 |
+
"sn97": {
|
| 1267 |
+
"ratio": 0.34897380324327637,
|
| 1268 |
+
"mase": 1.5975141852829988,
|
| 1269 |
+
"n_origins": 10
|
| 1270 |
+
},
|
| 1271 |
+
"sn98": {
|
| 1272 |
+
"ratio": 0.2479518856037744,
|
| 1273 |
+
"mase": 2.191532528954685,
|
| 1274 |
+
"n_origins": 10
|
| 1275 |
+
},
|
| 1276 |
+
"sn99": {
|
| 1277 |
+
"ratio": 0.33502414615582404,
|
| 1278 |
+
"mase": 4.929613706571547,
|
| 1279 |
+
"n_origins": 10
|
| 1280 |
+
}
|
| 1281 |
+
}
|
| 1282 |
+
}
|
| 1283 |
+
}
|
| 1284 |
+
}
|
evals/eval-4h.json
ADDED
|
@@ -0,0 +1,1224 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"bundle": "results/fitproc2/wsoup85-fgl0-hurdle",
|
| 3 |
+
"data": "data/subnet_ft2/holdout_4h.npz",
|
| 4 |
+
"mode": "ohlc",
|
| 5 |
+
"levels": [
|
| 6 |
+
0.1,
|
| 7 |
+
0.2,
|
| 8 |
+
0.3,
|
| 9 |
+
0.4,
|
| 10 |
+
0.5,
|
| 11 |
+
0.6,
|
| 12 |
+
0.7,
|
| 13 |
+
0.8,
|
| 14 |
+
0.9
|
| 15 |
+
],
|
| 16 |
+
"horizons": {
|
| 17 |
+
"42": {
|
| 18 |
+
"n_assets": 119,
|
| 19 |
+
"geomean_ratio": 0.7601712952828521,
|
| 20 |
+
"median_ratio": 0.80283196182496,
|
| 21 |
+
"beat_naive_frac": 0.9243697478991597,
|
| 22 |
+
"per_asset": {
|
| 23 |
+
"TAOUSD": {
|
| 24 |
+
"ratio": 0.6374269629347838,
|
| 25 |
+
"mase": 2.1412454834492327,
|
| 26 |
+
"n_origins": 10
|
| 27 |
+
},
|
| 28 |
+
"sn1": {
|
| 29 |
+
"ratio": 0.7071442791470918,
|
| 30 |
+
"mase": 3.236120456117732,
|
| 31 |
+
"n_origins": 10
|
| 32 |
+
},
|
| 33 |
+
"sn10": {
|
| 34 |
+
"ratio": 0.9235717838401625,
|
| 35 |
+
"mase": 5.5238464017471935,
|
| 36 |
+
"n_origins": 10
|
| 37 |
+
},
|
| 38 |
+
"sn100": {
|
| 39 |
+
"ratio": 0.7421261130427927,
|
| 40 |
+
"mase": 1.7075040834120192,
|
| 41 |
+
"n_origins": 10
|
| 42 |
+
},
|
| 43 |
+
"sn101": {
|
| 44 |
+
"ratio": 0.7667647408453792,
|
| 45 |
+
"mase": 2.870135365479246,
|
| 46 |
+
"n_origins": 10
|
| 47 |
+
},
|
| 48 |
+
"sn102": {
|
| 49 |
+
"ratio": 0.6555855807664686,
|
| 50 |
+
"mase": 2.2891113404792915,
|
| 51 |
+
"n_origins": 10
|
| 52 |
+
},
|
| 53 |
+
"sn104": {
|
| 54 |
+
"ratio": 0.7927062285095884,
|
| 55 |
+
"mase": 8.632927125300247,
|
| 56 |
+
"n_origins": 10
|
| 57 |
+
},
|
| 58 |
+
"sn105": {
|
| 59 |
+
"ratio": 0.7402119028607586,
|
| 60 |
+
"mase": 1.9723910182530073,
|
| 61 |
+
"n_origins": 10
|
| 62 |
+
},
|
| 63 |
+
"sn106": {
|
| 64 |
+
"ratio": 1.0002149558808302,
|
| 65 |
+
"mase": 4.81340981856827,
|
| 66 |
+
"n_origins": 10
|
| 67 |
+
},
|
| 68 |
+
"sn107": {
|
| 69 |
+
"ratio": 1.0952015156317085,
|
| 70 |
+
"mase": 6.928486455506595,
|
| 71 |
+
"n_origins": 10
|
| 72 |
+
},
|
| 73 |
+
"sn108": {
|
| 74 |
+
"ratio": 0.9587118130348637,
|
| 75 |
+
"mase": 5.9778290217634575,
|
| 76 |
+
"n_origins": 10
|
| 77 |
+
},
|
| 78 |
+
"sn109": {
|
| 79 |
+
"ratio": 0.664510077034069,
|
| 80 |
+
"mase": 1.746853776402394,
|
| 81 |
+
"n_origins": 10
|
| 82 |
+
},
|
| 83 |
+
"sn11": {
|
| 84 |
+
"ratio": 0.8444834537428717,
|
| 85 |
+
"mase": 4.550801655310258,
|
| 86 |
+
"n_origins": 10
|
| 87 |
+
},
|
| 88 |
+
"sn110": {
|
| 89 |
+
"ratio": 1.0015605766491853,
|
| 90 |
+
"mase": 8.816947615711387,
|
| 91 |
+
"n_origins": 10
|
| 92 |
+
},
|
| 93 |
+
"sn111": {
|
| 94 |
+
"ratio": 0.8799261605159608,
|
| 95 |
+
"mase": 6.1923915499061,
|
| 96 |
+
"n_origins": 10
|
| 97 |
+
},
|
| 98 |
+
"sn112": {
|
| 99 |
+
"ratio": 0.9876387141583952,
|
| 100 |
+
"mase": 6.513805034748749,
|
| 101 |
+
"n_origins": 10
|
| 102 |
+
},
|
| 103 |
+
"sn113": {
|
| 104 |
+
"ratio": 0.867840939564275,
|
| 105 |
+
"mase": 2.7278253131287498,
|
| 106 |
+
"n_origins": 10
|
| 107 |
+
},
|
| 108 |
+
"sn114": {
|
| 109 |
+
"ratio": 0.747700766397717,
|
| 110 |
+
"mase": 2.275733187907876,
|
| 111 |
+
"n_origins": 10
|
| 112 |
+
},
|
| 113 |
+
"sn115": {
|
| 114 |
+
"ratio": 0.8567755760134165,
|
| 115 |
+
"mase": 1.0319649288562387,
|
| 116 |
+
"n_origins": 10
|
| 117 |
+
},
|
| 118 |
+
"sn116": {
|
| 119 |
+
"ratio": 0.6070390445127525,
|
| 120 |
+
"mase": 7.948035418653019,
|
| 121 |
+
"n_origins": 10
|
| 122 |
+
},
|
| 123 |
+
"sn117": {
|
| 124 |
+
"ratio": 0.9396260806677816,
|
| 125 |
+
"mase": 5.404646289003614,
|
| 126 |
+
"n_origins": 10
|
| 127 |
+
},
|
| 128 |
+
"sn118": {
|
| 129 |
+
"ratio": 0.8802408776017544,
|
| 130 |
+
"mase": 4.622196719592173,
|
| 131 |
+
"n_origins": 10
|
| 132 |
+
},
|
| 133 |
+
"sn119": {
|
| 134 |
+
"ratio": 0.7859194635761246,
|
| 135 |
+
"mase": 3.9739871641618336,
|
| 136 |
+
"n_origins": 10
|
| 137 |
+
},
|
| 138 |
+
"sn12": {
|
| 139 |
+
"ratio": 1.1178346865617548,
|
| 140 |
+
"mase": 6.3772803201011845,
|
| 141 |
+
"n_origins": 10
|
| 142 |
+
},
|
| 143 |
+
"sn120": {
|
| 144 |
+
"ratio": 0.7627967079933433,
|
| 145 |
+
"mase": 4.394599176119626,
|
| 146 |
+
"n_origins": 10
|
| 147 |
+
},
|
| 148 |
+
"sn121": {
|
| 149 |
+
"ratio": 0.8087200990676922,
|
| 150 |
+
"mase": 4.227298678340115,
|
| 151 |
+
"n_origins": 10
|
| 152 |
+
},
|
| 153 |
+
"sn122": {
|
| 154 |
+
"ratio": 0.6705107839370132,
|
| 155 |
+
"mase": 3.509774002610324,
|
| 156 |
+
"n_origins": 10
|
| 157 |
+
},
|
| 158 |
+
"sn123": {
|
| 159 |
+
"ratio": 0.800099979798776,
|
| 160 |
+
"mase": 2.2335847881513513,
|
| 161 |
+
"n_origins": 10
|
| 162 |
+
},
|
| 163 |
+
"sn124": {
|
| 164 |
+
"ratio": 1.0601988984468589,
|
| 165 |
+
"mase": 7.804416101090395,
|
| 166 |
+
"n_origins": 10
|
| 167 |
+
},
|
| 168 |
+
"sn125": {
|
| 169 |
+
"ratio": 0.6981453694457836,
|
| 170 |
+
"mase": 3.5168595537014244,
|
| 171 |
+
"n_origins": 10
|
| 172 |
+
},
|
| 173 |
+
"sn126": {
|
| 174 |
+
"ratio": 0.6468460006250786,
|
| 175 |
+
"mase": 2.2692930664358344,
|
| 176 |
+
"n_origins": 10
|
| 177 |
+
},
|
| 178 |
+
"sn127": {
|
| 179 |
+
"ratio": 0.8809865430179745,
|
| 180 |
+
"mase": 3.3651752591002073,
|
| 181 |
+
"n_origins": 10
|
| 182 |
+
},
|
| 183 |
+
"sn128": {
|
| 184 |
+
"ratio": 0.865582592044921,
|
| 185 |
+
"mase": 5.843544690328019,
|
| 186 |
+
"n_origins": 10
|
| 187 |
+
},
|
| 188 |
+
"sn13": {
|
| 189 |
+
"ratio": 0.803341884201458,
|
| 190 |
+
"mase": 2.591629074553585,
|
| 191 |
+
"n_origins": 10
|
| 192 |
+
},
|
| 193 |
+
"sn14": {
|
| 194 |
+
"ratio": 0.7923346203136108,
|
| 195 |
+
"mase": 2.820124454280129,
|
| 196 |
+
"n_origins": 10
|
| 197 |
+
},
|
| 198 |
+
"sn15": {
|
| 199 |
+
"ratio": 0.9341121792131656,
|
| 200 |
+
"mase": 5.554048923204436,
|
| 201 |
+
"n_origins": 10
|
| 202 |
+
},
|
| 203 |
+
"sn17": {
|
| 204 |
+
"ratio": 0.8418337806309949,
|
| 205 |
+
"mase": 5.766741537758487,
|
| 206 |
+
"n_origins": 10
|
| 207 |
+
},
|
| 208 |
+
"sn18": {
|
| 209 |
+
"ratio": 0.8797320974564435,
|
| 210 |
+
"mase": 4.013699224096511,
|
| 211 |
+
"n_origins": 10
|
| 212 |
+
},
|
| 213 |
+
"sn19": {
|
| 214 |
+
"ratio": 0.6032547545759042,
|
| 215 |
+
"mase": 2.9568181656940906,
|
| 216 |
+
"n_origins": 10
|
| 217 |
+
},
|
| 218 |
+
"sn2": {
|
| 219 |
+
"ratio": 0.7941147875814694,
|
| 220 |
+
"mase": 2.7430698737150476,
|
| 221 |
+
"n_origins": 10
|
| 222 |
+
},
|
| 223 |
+
"sn20": {
|
| 224 |
+
"ratio": 0.8268839181249031,
|
| 225 |
+
"mase": 3.2322962053074797,
|
| 226 |
+
"n_origins": 10
|
| 227 |
+
},
|
| 228 |
+
"sn21": {
|
| 229 |
+
"ratio": 0.7776060313608363,
|
| 230 |
+
"mase": 2.5900389171732106,
|
| 231 |
+
"n_origins": 10
|
| 232 |
+
},
|
| 233 |
+
"sn22": {
|
| 234 |
+
"ratio": 0.599855007950146,
|
| 235 |
+
"mase": 1.4727342490841182,
|
| 236 |
+
"n_origins": 10
|
| 237 |
+
},
|
| 238 |
+
"sn23": {
|
| 239 |
+
"ratio": 0.9627344018376658,
|
| 240 |
+
"mase": 5.0063605465032905,
|
| 241 |
+
"n_origins": 10
|
| 242 |
+
},
|
| 243 |
+
"sn24": {
|
| 244 |
+
"ratio": 0.9176187466565344,
|
| 245 |
+
"mase": 4.070067466476585,
|
| 246 |
+
"n_origins": 10
|
| 247 |
+
},
|
| 248 |
+
"sn25": {
|
| 249 |
+
"ratio": 0.8793919384674335,
|
| 250 |
+
"mase": 23.622918648201985,
|
| 251 |
+
"n_origins": 10
|
| 252 |
+
},
|
| 253 |
+
"sn26": {
|
| 254 |
+
"ratio": 0.7334303457806416,
|
| 255 |
+
"mase": 4.187871236326281,
|
| 256 |
+
"n_origins": 10
|
| 257 |
+
},
|
| 258 |
+
"sn27": {
|
| 259 |
+
"ratio": 0.9473700851903468,
|
| 260 |
+
"mase": 6.065530295605566,
|
| 261 |
+
"n_origins": 10
|
| 262 |
+
},
|
| 263 |
+
"sn28": {
|
| 264 |
+
"ratio": 0.9370399866814607,
|
| 265 |
+
"mase": 5.0284824238952455,
|
| 266 |
+
"n_origins": 10
|
| 267 |
+
},
|
| 268 |
+
"sn29": {
|
| 269 |
+
"ratio": 0.5762630681825547,
|
| 270 |
+
"mase": 2.6442135121313433,
|
| 271 |
+
"n_origins": 10
|
| 272 |
+
},
|
| 273 |
+
"sn3": {
|
| 274 |
+
"ratio": 0.7408011815462175,
|
| 275 |
+
"mase": 2.5672025558515807,
|
| 276 |
+
"n_origins": 10
|
| 277 |
+
},
|
| 278 |
+
"sn30": {
|
| 279 |
+
"ratio": 0.8162081387505737,
|
| 280 |
+
"mase": 3.414835586452559,
|
| 281 |
+
"n_origins": 10
|
| 282 |
+
},
|
| 283 |
+
"sn31": {
|
| 284 |
+
"ratio": 0.8608452312918584,
|
| 285 |
+
"mase": 3.2753521885401984,
|
| 286 |
+
"n_origins": 10
|
| 287 |
+
},
|
| 288 |
+
"sn32": {
|
| 289 |
+
"ratio": 0.6717679202169944,
|
| 290 |
+
"mase": 2.1534546207890557,
|
| 291 |
+
"n_origins": 10
|
| 292 |
+
},
|
| 293 |
+
"sn33": {
|
| 294 |
+
"ratio": 0.5045451262392753,
|
| 295 |
+
"mase": 1.824153028773081,
|
| 296 |
+
"n_origins": 10
|
| 297 |
+
},
|
| 298 |
+
"sn34": {
|
| 299 |
+
"ratio": 0.7651535237778423,
|
| 300 |
+
"mase": 4.194402885158806,
|
| 301 |
+
"n_origins": 10
|
| 302 |
+
},
|
| 303 |
+
"sn35": {
|
| 304 |
+
"ratio": 0.5953034517118768,
|
| 305 |
+
"mase": 1.9006677643549783,
|
| 306 |
+
"n_origins": 10
|
| 307 |
+
},
|
| 308 |
+
"sn37": {
|
| 309 |
+
"ratio": 0.879130982797314,
|
| 310 |
+
"mase": 6.465346983425736,
|
| 311 |
+
"n_origins": 10
|
| 312 |
+
},
|
| 313 |
+
"sn38": {
|
| 314 |
+
"ratio": 0.7805361539423233,
|
| 315 |
+
"mase": 3.5136285418607662,
|
| 316 |
+
"n_origins": 10
|
| 317 |
+
},
|
| 318 |
+
"sn39": {
|
| 319 |
+
"ratio": 0.7750306664738563,
|
| 320 |
+
"mase": 1.8273366862264013,
|
| 321 |
+
"n_origins": 10
|
| 322 |
+
},
|
| 323 |
+
"sn4": {
|
| 324 |
+
"ratio": 0.8705079794788888,
|
| 325 |
+
"mase": 5.294973912625434,
|
| 326 |
+
"n_origins": 10
|
| 327 |
+
},
|
| 328 |
+
"sn41": {
|
| 329 |
+
"ratio": 0.6842181953748515,
|
| 330 |
+
"mase": 2.4058731757404384,
|
| 331 |
+
"n_origins": 10
|
| 332 |
+
},
|
| 333 |
+
"sn42": {
|
| 334 |
+
"ratio": 0.9842525474806115,
|
| 335 |
+
"mase": 4.625881791013822,
|
| 336 |
+
"n_origins": 10
|
| 337 |
+
},
|
| 338 |
+
"sn43": {
|
| 339 |
+
"ratio": 0.7862112036273466,
|
| 340 |
+
"mase": 5.557810971671016,
|
| 341 |
+
"n_origins": 10
|
| 342 |
+
},
|
| 343 |
+
"sn44": {
|
| 344 |
+
"ratio": 0.8563587826360379,
|
| 345 |
+
"mase": 4.528940482387421,
|
| 346 |
+
"n_origins": 10
|
| 347 |
+
},
|
| 348 |
+
"sn45": {
|
| 349 |
+
"ratio": 0.8635624653481881,
|
| 350 |
+
"mase": 3.635022065868841,
|
| 351 |
+
"n_origins": 10
|
| 352 |
+
},
|
| 353 |
+
"sn46": {
|
| 354 |
+
"ratio": 0.820750926297373,
|
| 355 |
+
"mase": 3.69478430159735,
|
| 356 |
+
"n_origins": 10
|
| 357 |
+
},
|
| 358 |
+
"sn47": {
|
| 359 |
+
"ratio": 0.6414703802819941,
|
| 360 |
+
"mase": 1.8545958963595097,
|
| 361 |
+
"n_origins": 10
|
| 362 |
+
},
|
| 363 |
+
"sn48": {
|
| 364 |
+
"ratio": 0.8407190335112471,
|
| 365 |
+
"mase": 5.3369191689806605,
|
| 366 |
+
"n_origins": 10
|
| 367 |
+
},
|
| 368 |
+
"sn49": {
|
| 369 |
+
"ratio": 1.009223553277079,
|
| 370 |
+
"mase": 6.39763143165436,
|
| 371 |
+
"n_origins": 10
|
| 372 |
+
},
|
| 373 |
+
"sn5": {
|
| 374 |
+
"ratio": 0.5538935631584493,
|
| 375 |
+
"mase": 3.500551049854523,
|
| 376 |
+
"n_origins": 10
|
| 377 |
+
},
|
| 378 |
+
"sn50": {
|
| 379 |
+
"ratio": 0.7995697563842056,
|
| 380 |
+
"mase": 2.852216980181863,
|
| 381 |
+
"n_origins": 10
|
| 382 |
+
},
|
| 383 |
+
"sn51": {
|
| 384 |
+
"ratio": 1.0059167133629985,
|
| 385 |
+
"mase": 11.902346460501631,
|
| 386 |
+
"n_origins": 10
|
| 387 |
+
},
|
| 388 |
+
"sn52": {
|
| 389 |
+
"ratio": 0.7857289293024864,
|
| 390 |
+
"mase": 5.415362623726307,
|
| 391 |
+
"n_origins": 10
|
| 392 |
+
},
|
| 393 |
+
"sn53": {
|
| 394 |
+
"ratio": 0.8536415020657838,
|
| 395 |
+
"mase": 30.750708723548406,
|
| 396 |
+
"n_origins": 10
|
| 397 |
+
},
|
| 398 |
+
"sn54": {
|
| 399 |
+
"ratio": 0.8953451360977959,
|
| 400 |
+
"mase": 3.6595069642700184,
|
| 401 |
+
"n_origins": 10
|
| 402 |
+
},
|
| 403 |
+
"sn55": {
|
| 404 |
+
"ratio": 0.794236647804419,
|
| 405 |
+
"mase": 3.1371882268074236,
|
| 406 |
+
"n_origins": 10
|
| 407 |
+
},
|
| 408 |
+
"sn56": {
|
| 409 |
+
"ratio": 0.35202138764334745,
|
| 410 |
+
"mase": 1.3872054808743202,
|
| 411 |
+
"n_origins": 10
|
| 412 |
+
},
|
| 413 |
+
"sn57": {
|
| 414 |
+
"ratio": 0.3592055079125456,
|
| 415 |
+
"mase": 1.7675032305529337,
|
| 416 |
+
"n_origins": 10
|
| 417 |
+
},
|
| 418 |
+
"sn6": {
|
| 419 |
+
"ratio": 0.4350542291877049,
|
| 420 |
+
"mase": 1.050886778990209,
|
| 421 |
+
"n_origins": 10
|
| 422 |
+
},
|
| 423 |
+
"sn60": {
|
| 424 |
+
"ratio": 0.9358066131348576,
|
| 425 |
+
"mase": 4.630392705968347,
|
| 426 |
+
"n_origins": 10
|
| 427 |
+
},
|
| 428 |
+
"sn61": {
|
| 429 |
+
"ratio": 0.9769634806769028,
|
| 430 |
+
"mase": 9.783434879517293,
|
| 431 |
+
"n_origins": 10
|
| 432 |
+
},
|
| 433 |
+
"sn62": {
|
| 434 |
+
"ratio": 0.5507556781078301,
|
| 435 |
+
"mase": 1.9674086744125947,
|
| 436 |
+
"n_origins": 10
|
| 437 |
+
},
|
| 438 |
+
"sn63": {
|
| 439 |
+
"ratio": 0.80283196182496,
|
| 440 |
+
"mase": 2.6501885941440393,
|
| 441 |
+
"n_origins": 10
|
| 442 |
+
},
|
| 443 |
+
"sn64": {
|
| 444 |
+
"ratio": 0.9037060096746216,
|
| 445 |
+
"mase": 6.478926973579205,
|
| 446 |
+
"n_origins": 10
|
| 447 |
+
},
|
| 448 |
+
"sn65": {
|
| 449 |
+
"ratio": 1.0259222560880876,
|
| 450 |
+
"mase": 6.86804041113346,
|
| 451 |
+
"n_origins": 10
|
| 452 |
+
},
|
| 453 |
+
"sn66": {
|
| 454 |
+
"ratio": 0.6731840375485715,
|
| 455 |
+
"mase": 2.287444588766688,
|
| 456 |
+
"n_origins": 10
|
| 457 |
+
},
|
| 458 |
+
"sn67": {
|
| 459 |
+
"ratio": 0.3690580805417027,
|
| 460 |
+
"mase": 0.4033513561782756,
|
| 461 |
+
"n_origins": 10
|
| 462 |
+
},
|
| 463 |
+
"sn68": {
|
| 464 |
+
"ratio": 0.8685349259120358,
|
| 465 |
+
"mase": 4.8760983568360405,
|
| 466 |
+
"n_origins": 10
|
| 467 |
+
},
|
| 468 |
+
"sn69": {
|
| 469 |
+
"ratio": 0.5796411296792447,
|
| 470 |
+
"mase": 4.353849319147135,
|
| 471 |
+
"n_origins": 10
|
| 472 |
+
},
|
| 473 |
+
"sn7": {
|
| 474 |
+
"ratio": 0.8755991255854364,
|
| 475 |
+
"mase": 3.5784649652559195,
|
| 476 |
+
"n_origins": 10
|
| 477 |
+
},
|
| 478 |
+
"sn71": {
|
| 479 |
+
"ratio": 0.957491006367195,
|
| 480 |
+
"mase": 4.999191681131073,
|
| 481 |
+
"n_origins": 10
|
| 482 |
+
},
|
| 483 |
+
"sn72": {
|
| 484 |
+
"ratio": 0.9961067094981138,
|
| 485 |
+
"mase": 6.309798331482321,
|
| 486 |
+
"n_origins": 10
|
| 487 |
+
},
|
| 488 |
+
"sn73": {
|
| 489 |
+
"ratio": 0.48963112421736105,
|
| 490 |
+
"mase": 1.6581983712721573,
|
| 491 |
+
"n_origins": 10
|
| 492 |
+
},
|
| 493 |
+
"sn74": {
|
| 494 |
+
"ratio": 0.7535325462327388,
|
| 495 |
+
"mase": 3.717902535995752,
|
| 496 |
+
"n_origins": 10
|
| 497 |
+
},
|
| 498 |
+
"sn75": {
|
| 499 |
+
"ratio": 0.6638557059957947,
|
| 500 |
+
"mase": 2.788077307614449,
|
| 501 |
+
"n_origins": 10
|
| 502 |
+
},
|
| 503 |
+
"sn76": {
|
| 504 |
+
"ratio": 0.7541127687666422,
|
| 505 |
+
"mase": 2.0080141698237286,
|
| 506 |
+
"n_origins": 10
|
| 507 |
+
},
|
| 508 |
+
"sn77": {
|
| 509 |
+
"ratio": 0.6702376318546666,
|
| 510 |
+
"mase": 3.0981722013063804,
|
| 511 |
+
"n_origins": 10
|
| 512 |
+
},
|
| 513 |
+
"sn78": {
|
| 514 |
+
"ratio": 0.8768876396180595,
|
| 515 |
+
"mase": 6.454151139114798,
|
| 516 |
+
"n_origins": 10
|
| 517 |
+
},
|
| 518 |
+
"sn79": {
|
| 519 |
+
"ratio": 0.7730553066015577,
|
| 520 |
+
"mase": 3.1940507108310685,
|
| 521 |
+
"n_origins": 10
|
| 522 |
+
},
|
| 523 |
+
"sn8": {
|
| 524 |
+
"ratio": 0.7999729005172113,
|
| 525 |
+
"mase": 6.443244131860463,
|
| 526 |
+
"n_origins": 10
|
| 527 |
+
},
|
| 528 |
+
"sn80": {
|
| 529 |
+
"ratio": 1.0031576140237783,
|
| 530 |
+
"mase": 16.34372814537322,
|
| 531 |
+
"n_origins": 10
|
| 532 |
+
},
|
| 533 |
+
"sn81": {
|
| 534 |
+
"ratio": 0.6956173875851428,
|
| 535 |
+
"mase": 2.361083799935629,
|
| 536 |
+
"n_origins": 10
|
| 537 |
+
},
|
| 538 |
+
"sn82": {
|
| 539 |
+
"ratio": 0.5841790550412778,
|
| 540 |
+
"mase": 2.4479521966551903,
|
| 541 |
+
"n_origins": 10
|
| 542 |
+
},
|
| 543 |
+
"sn83": {
|
| 544 |
+
"ratio": 0.5089115728019465,
|
| 545 |
+
"mase": 2.0774264588466833,
|
| 546 |
+
"n_origins": 10
|
| 547 |
+
},
|
| 548 |
+
"sn84": {
|
| 549 |
+
"ratio": 0.1384790748483693,
|
| 550 |
+
"mase": 0.4765101652836849,
|
| 551 |
+
"n_origins": 10
|
| 552 |
+
},
|
| 553 |
+
"sn85": {
|
| 554 |
+
"ratio": 0.7539469830534062,
|
| 555 |
+
"mase": 2.282384617378815,
|
| 556 |
+
"n_origins": 10
|
| 557 |
+
},
|
| 558 |
+
"sn87": {
|
| 559 |
+
"ratio": 0.8910263084275057,
|
| 560 |
+
"mase": 4.705515042024457,
|
| 561 |
+
"n_origins": 10
|
| 562 |
+
},
|
| 563 |
+
"sn88": {
|
| 564 |
+
"ratio": 0.9940163470711401,
|
| 565 |
+
"mase": 4.55153271234836,
|
| 566 |
+
"n_origins": 10
|
| 567 |
+
},
|
| 568 |
+
"sn89": {
|
| 569 |
+
"ratio": 0.9069558150718225,
|
| 570 |
+
"mase": 9.213556276743283,
|
| 571 |
+
"n_origins": 10
|
| 572 |
+
},
|
| 573 |
+
"sn9": {
|
| 574 |
+
"ratio": 0.8620188004024174,
|
| 575 |
+
"mase": 5.207492186614988,
|
| 576 |
+
"n_origins": 10
|
| 577 |
+
},
|
| 578 |
+
"sn91": {
|
| 579 |
+
"ratio": 0.8051287676971559,
|
| 580 |
+
"mase": 3.2986597502715647,
|
| 581 |
+
"n_origins": 10
|
| 582 |
+
},
|
| 583 |
+
"sn92": {
|
| 584 |
+
"ratio": 0.6729157356119645,
|
| 585 |
+
"mase": 3.7648276218513406,
|
| 586 |
+
"n_origins": 10
|
| 587 |
+
},
|
| 588 |
+
"sn93": {
|
| 589 |
+
"ratio": 0.841951876030432,
|
| 590 |
+
"mase": 4.967110234092439,
|
| 591 |
+
"n_origins": 10
|
| 592 |
+
},
|
| 593 |
+
"sn94": {
|
| 594 |
+
"ratio": 0.9365188511934545,
|
| 595 |
+
"mase": 14.746501970243584,
|
| 596 |
+
"n_origins": 10
|
| 597 |
+
},
|
| 598 |
+
"sn95": {
|
| 599 |
+
"ratio": 0.9197255239679806,
|
| 600 |
+
"mase": 7.533171857949272,
|
| 601 |
+
"n_origins": 10
|
| 602 |
+
},
|
| 603 |
+
"sn96": {
|
| 604 |
+
"ratio": 0.4379800075965892,
|
| 605 |
+
"mase": 0.3468525434566399,
|
| 606 |
+
"n_origins": 10
|
| 607 |
+
},
|
| 608 |
+
"sn97": {
|
| 609 |
+
"ratio": 0.49321998151859137,
|
| 610 |
+
"mase": 1.257271756258718,
|
| 611 |
+
"n_origins": 10
|
| 612 |
+
},
|
| 613 |
+
"sn98": {
|
| 614 |
+
"ratio": 0.8059665117017629,
|
| 615 |
+
"mase": 3.746914285174997,
|
| 616 |
+
"n_origins": 10
|
| 617 |
+
}
|
| 618 |
+
}
|
| 619 |
+
},
|
| 620 |
+
"180": {
|
| 621 |
+
"n_assets": 119,
|
| 622 |
+
"geomean_ratio": 0.6648861794694962,
|
| 623 |
+
"median_ratio": 0.7801427739329858,
|
| 624 |
+
"beat_naive_frac": 0.773109243697479,
|
| 625 |
+
"per_asset": {
|
| 626 |
+
"TAOUSD": {
|
| 627 |
+
"ratio": 0.4940239746610212,
|
| 628 |
+
"mase": 2.757963453991154,
|
| 629 |
+
"n_origins": 10
|
| 630 |
+
},
|
| 631 |
+
"sn1": {
|
| 632 |
+
"ratio": 0.5626370924422698,
|
| 633 |
+
"mase": 6.333518026598001,
|
| 634 |
+
"n_origins": 10
|
| 635 |
+
},
|
| 636 |
+
"sn10": {
|
| 637 |
+
"ratio": 1.059826943946805,
|
| 638 |
+
"mase": 7.7261818785654315,
|
| 639 |
+
"n_origins": 10
|
| 640 |
+
},
|
| 641 |
+
"sn100": {
|
| 642 |
+
"ratio": 0.779913099481865,
|
| 643 |
+
"mase": 3.123361111099452,
|
| 644 |
+
"n_origins": 10
|
| 645 |
+
},
|
| 646 |
+
"sn101": {
|
| 647 |
+
"ratio": 0.6445989445566135,
|
| 648 |
+
"mase": 8.268098202144657,
|
| 649 |
+
"n_origins": 10
|
| 650 |
+
},
|
| 651 |
+
"sn102": {
|
| 652 |
+
"ratio": 0.9974791817447289,
|
| 653 |
+
"mase": 5.882968938210494,
|
| 654 |
+
"n_origins": 10
|
| 655 |
+
},
|
| 656 |
+
"sn104": {
|
| 657 |
+
"ratio": 0.7975023671915658,
|
| 658 |
+
"mase": 27.345707618950858,
|
| 659 |
+
"n_origins": 10
|
| 660 |
+
},
|
| 661 |
+
"sn105": {
|
| 662 |
+
"ratio": 0.4954448326367603,
|
| 663 |
+
"mase": 4.710097865119769,
|
| 664 |
+
"n_origins": 10
|
| 665 |
+
},
|
| 666 |
+
"sn106": {
|
| 667 |
+
"ratio": 1.1747150236518622,
|
| 668 |
+
"mase": 15.749453698649674,
|
| 669 |
+
"n_origins": 10
|
| 670 |
+
},
|
| 671 |
+
"sn107": {
|
| 672 |
+
"ratio": 1.2977087516148293,
|
| 673 |
+
"mase": 13.162793167806308,
|
| 674 |
+
"n_origins": 10
|
| 675 |
+
},
|
| 676 |
+
"sn108": {
|
| 677 |
+
"ratio": 0.8533895970582301,
|
| 678 |
+
"mase": 7.115462254695481,
|
| 679 |
+
"n_origins": 10
|
| 680 |
+
},
|
| 681 |
+
"sn109": {
|
| 682 |
+
"ratio": 0.6344506755704805,
|
| 683 |
+
"mase": 3.717775811439555,
|
| 684 |
+
"n_origins": 10
|
| 685 |
+
},
|
| 686 |
+
"sn11": {
|
| 687 |
+
"ratio": 0.8240956010011685,
|
| 688 |
+
"mase": 8.601585800728943,
|
| 689 |
+
"n_origins": 10
|
| 690 |
+
},
|
| 691 |
+
"sn110": {
|
| 692 |
+
"ratio": 0.8331984641894167,
|
| 693 |
+
"mase": 12.427990743151717,
|
| 694 |
+
"n_origins": 10
|
| 695 |
+
},
|
| 696 |
+
"sn111": {
|
| 697 |
+
"ratio": 0.6794769233913877,
|
| 698 |
+
"mase": 12.96306393786161,
|
| 699 |
+
"n_origins": 10
|
| 700 |
+
},
|
| 701 |
+
"sn112": {
|
| 702 |
+
"ratio": 1.1578686843505792,
|
| 703 |
+
"mase": 28.833970655004734,
|
| 704 |
+
"n_origins": 10
|
| 705 |
+
},
|
| 706 |
+
"sn113": {
|
| 707 |
+
"ratio": 1.1359927887902432,
|
| 708 |
+
"mase": 10.203521100401874,
|
| 709 |
+
"n_origins": 10
|
| 710 |
+
},
|
| 711 |
+
"sn114": {
|
| 712 |
+
"ratio": 0.6993419427297124,
|
| 713 |
+
"mase": 5.5493976076977045,
|
| 714 |
+
"n_origins": 10
|
| 715 |
+
},
|
| 716 |
+
"sn115": {
|
| 717 |
+
"ratio": 0.682202966322553,
|
| 718 |
+
"mase": 1.9126082016868478,
|
| 719 |
+
"n_origins": 10
|
| 720 |
+
},
|
| 721 |
+
"sn116": {
|
| 722 |
+
"ratio": 0.4011167089003711,
|
| 723 |
+
"mase": 17.766273979706686,
|
| 724 |
+
"n_origins": 10
|
| 725 |
+
},
|
| 726 |
+
"sn117": {
|
| 727 |
+
"ratio": 0.9402373459907077,
|
| 728 |
+
"mase": 20.43510056862763,
|
| 729 |
+
"n_origins": 10
|
| 730 |
+
},
|
| 731 |
+
"sn118": {
|
| 732 |
+
"ratio": 0.6061731191080284,
|
| 733 |
+
"mase": 14.45748057349033,
|
| 734 |
+
"n_origins": 10
|
| 735 |
+
},
|
| 736 |
+
"sn119": {
|
| 737 |
+
"ratio": 0.6976552034810688,
|
| 738 |
+
"mase": 9.843045566901152,
|
| 739 |
+
"n_origins": 10
|
| 740 |
+
},
|
| 741 |
+
"sn12": {
|
| 742 |
+
"ratio": 1.3928842905085668,
|
| 743 |
+
"mase": 18.30555147492309,
|
| 744 |
+
"n_origins": 10
|
| 745 |
+
},
|
| 746 |
+
"sn120": {
|
| 747 |
+
"ratio": 0.39109041935608696,
|
| 748 |
+
"mase": 5.739340345585171,
|
| 749 |
+
"n_origins": 10
|
| 750 |
+
},
|
| 751 |
+
"sn121": {
|
| 752 |
+
"ratio": 0.9708904832750709,
|
| 753 |
+
"mase": 10.900261036941103,
|
| 754 |
+
"n_origins": 10
|
| 755 |
+
},
|
| 756 |
+
"sn122": {
|
| 757 |
+
"ratio": 1.3277198304547064,
|
| 758 |
+
"mase": 14.736915124306096,
|
| 759 |
+
"n_origins": 10
|
| 760 |
+
},
|
| 761 |
+
"sn123": {
|
| 762 |
+
"ratio": 1.2826684520898104,
|
| 763 |
+
"mase": 7.147385504555592,
|
| 764 |
+
"n_origins": 10
|
| 765 |
+
},
|
| 766 |
+
"sn124": {
|
| 767 |
+
"ratio": 1.2814980574612442,
|
| 768 |
+
"mase": 20.536464187066372,
|
| 769 |
+
"n_origins": 10
|
| 770 |
+
},
|
| 771 |
+
"sn125": {
|
| 772 |
+
"ratio": 0.6929286464807345,
|
| 773 |
+
"mase": 6.657787425096045,
|
| 774 |
+
"n_origins": 10
|
| 775 |
+
},
|
| 776 |
+
"sn126": {
|
| 777 |
+
"ratio": 0.794069983088623,
|
| 778 |
+
"mase": 10.985105602421864,
|
| 779 |
+
"n_origins": 10
|
| 780 |
+
},
|
| 781 |
+
"sn127": {
|
| 782 |
+
"ratio": 0.9772330161936184,
|
| 783 |
+
"mase": 6.870091578391461,
|
| 784 |
+
"n_origins": 10
|
| 785 |
+
},
|
| 786 |
+
"sn128": {
|
| 787 |
+
"ratio": 1.018853747199785,
|
| 788 |
+
"mase": 23.2991240112348,
|
| 789 |
+
"n_origins": 10
|
| 790 |
+
},
|
| 791 |
+
"sn13": {
|
| 792 |
+
"ratio": 1.014572947047947,
|
| 793 |
+
"mase": 9.47586504483213,
|
| 794 |
+
"n_origins": 10
|
| 795 |
+
},
|
| 796 |
+
"sn14": {
|
| 797 |
+
"ratio": 0.5484527753997128,
|
| 798 |
+
"mase": 4.751896494651266,
|
| 799 |
+
"n_origins": 10
|
| 800 |
+
},
|
| 801 |
+
"sn15": {
|
| 802 |
+
"ratio": 0.7099787092112302,
|
| 803 |
+
"mase": 8.331732732721344,
|
| 804 |
+
"n_origins": 10
|
| 805 |
+
},
|
| 806 |
+
"sn17": {
|
| 807 |
+
"ratio": 0.67260044051494,
|
| 808 |
+
"mase": 13.934115118769993,
|
| 809 |
+
"n_origins": 10
|
| 810 |
+
},
|
| 811 |
+
"sn18": {
|
| 812 |
+
"ratio": 1.0320689924061683,
|
| 813 |
+
"mase": 18.40304973107085,
|
| 814 |
+
"n_origins": 10
|
| 815 |
+
},
|
| 816 |
+
"sn19": {
|
| 817 |
+
"ratio": 0.42222167181009856,
|
| 818 |
+
"mase": 6.2489473510370805,
|
| 819 |
+
"n_origins": 10
|
| 820 |
+
},
|
| 821 |
+
"sn2": {
|
| 822 |
+
"ratio": 0.9064053520639183,
|
| 823 |
+
"mase": 5.9992787252734265,
|
| 824 |
+
"n_origins": 10
|
| 825 |
+
},
|
| 826 |
+
"sn20": {
|
| 827 |
+
"ratio": 1.2494633882050359,
|
| 828 |
+
"mase": 9.154070164696938,
|
| 829 |
+
"n_origins": 10
|
| 830 |
+
},
|
| 831 |
+
"sn21": {
|
| 832 |
+
"ratio": 0.8725547436181732,
|
| 833 |
+
"mase": 9.249746858101348,
|
| 834 |
+
"n_origins": 10
|
| 835 |
+
},
|
| 836 |
+
"sn22": {
|
| 837 |
+
"ratio": 1.0135700418306552,
|
| 838 |
+
"mase": 4.785346597154318,
|
| 839 |
+
"n_origins": 10
|
| 840 |
+
},
|
| 841 |
+
"sn23": {
|
| 842 |
+
"ratio": 0.79281227744171,
|
| 843 |
+
"mase": 15.267309002769553,
|
| 844 |
+
"n_origins": 10
|
| 845 |
+
},
|
| 846 |
+
"sn24": {
|
| 847 |
+
"ratio": 0.9719870133734286,
|
| 848 |
+
"mase": 13.800441647596537,
|
| 849 |
+
"n_origins": 10
|
| 850 |
+
},
|
| 851 |
+
"sn25": {
|
| 852 |
+
"ratio": 0.8995368023756446,
|
| 853 |
+
"mase": 113.95814327633609,
|
| 854 |
+
"n_origins": 10
|
| 855 |
+
},
|
| 856 |
+
"sn26": {
|
| 857 |
+
"ratio": 1.362610857686514,
|
| 858 |
+
"mase": 18.760540569355012,
|
| 859 |
+
"n_origins": 10
|
| 860 |
+
},
|
| 861 |
+
"sn27": {
|
| 862 |
+
"ratio": 0.9991306578042368,
|
| 863 |
+
"mase": 18.672180552729323,
|
| 864 |
+
"n_origins": 10
|
| 865 |
+
},
|
| 866 |
+
"sn28": {
|
| 867 |
+
"ratio": 1.186217457922142,
|
| 868 |
+
"mase": 11.757642157782598,
|
| 869 |
+
"n_origins": 10
|
| 870 |
+
},
|
| 871 |
+
"sn29": {
|
| 872 |
+
"ratio": 0.15281727266611728,
|
| 873 |
+
"mase": 7.590069064856231,
|
| 874 |
+
"n_origins": 10
|
| 875 |
+
},
|
| 876 |
+
"sn3": {
|
| 877 |
+
"ratio": 0.4256936491784678,
|
| 878 |
+
"mase": 6.194665315043804,
|
| 879 |
+
"n_origins": 10
|
| 880 |
+
},
|
| 881 |
+
"sn30": {
|
| 882 |
+
"ratio": 0.6044700341082879,
|
| 883 |
+
"mase": 6.374110727580789,
|
| 884 |
+
"n_origins": 10
|
| 885 |
+
},
|
| 886 |
+
"sn31": {
|
| 887 |
+
"ratio": 0.9922691841224541,
|
| 888 |
+
"mase": 9.454196998894421,
|
| 889 |
+
"n_origins": 10
|
| 890 |
+
},
|
| 891 |
+
"sn32": {
|
| 892 |
+
"ratio": 0.7304252548438163,
|
| 893 |
+
"mase": 4.13745632892132,
|
| 894 |
+
"n_origins": 10
|
| 895 |
+
},
|
| 896 |
+
"sn33": {
|
| 897 |
+
"ratio": 0.34773607192611355,
|
| 898 |
+
"mase": 3.3663470208939628,
|
| 899 |
+
"n_origins": 10
|
| 900 |
+
},
|
| 901 |
+
"sn34": {
|
| 902 |
+
"ratio": 0.4614726661046808,
|
| 903 |
+
"mase": 9.89684708945384,
|
| 904 |
+
"n_origins": 10
|
| 905 |
+
},
|
| 906 |
+
"sn35": {
|
| 907 |
+
"ratio": 0.4972319795424258,
|
| 908 |
+
"mase": 5.244491768969606,
|
| 909 |
+
"n_origins": 10
|
| 910 |
+
},
|
| 911 |
+
"sn37": {
|
| 912 |
+
"ratio": 0.8020423731286973,
|
| 913 |
+
"mase": 9.545543151527779,
|
| 914 |
+
"n_origins": 10
|
| 915 |
+
},
|
| 916 |
+
"sn38": {
|
| 917 |
+
"ratio": 0.45712713634835234,
|
| 918 |
+
"mase": 7.141657311551365,
|
| 919 |
+
"n_origins": 10
|
| 920 |
+
},
|
| 921 |
+
"sn39": {
|
| 922 |
+
"ratio": 0.20963304954074696,
|
| 923 |
+
"mase": 2.794827694721739,
|
| 924 |
+
"n_origins": 10
|
| 925 |
+
},
|
| 926 |
+
"sn4": {
|
| 927 |
+
"ratio": 0.8005307005510586,
|
| 928 |
+
"mase": 10.436226550519534,
|
| 929 |
+
"n_origins": 10
|
| 930 |
+
},
|
| 931 |
+
"sn41": {
|
| 932 |
+
"ratio": 0.8605010231982768,
|
| 933 |
+
"mase": 11.971605346587666,
|
| 934 |
+
"n_origins": 10
|
| 935 |
+
},
|
| 936 |
+
"sn42": {
|
| 937 |
+
"ratio": 1.3689479978359351,
|
| 938 |
+
"mase": 14.655799331144213,
|
| 939 |
+
"n_origins": 10
|
| 940 |
+
},
|
| 941 |
+
"sn43": {
|
| 942 |
+
"ratio": 0.4901882593502441,
|
| 943 |
+
"mase": 7.341072069913391,
|
| 944 |
+
"n_origins": 10
|
| 945 |
+
},
|
| 946 |
+
"sn44": {
|
| 947 |
+
"ratio": 0.9329982649527557,
|
| 948 |
+
"mase": 12.301802811814117,
|
| 949 |
+
"n_origins": 10
|
| 950 |
+
},
|
| 951 |
+
"sn45": {
|
| 952 |
+
"ratio": 1.3037136376380494,
|
| 953 |
+
"mase": 17.931659373259237,
|
| 954 |
+
"n_origins": 10
|
| 955 |
+
},
|
| 956 |
+
"sn46": {
|
| 957 |
+
"ratio": 0.5755304672927835,
|
| 958 |
+
"mase": 9.39125689246538,
|
| 959 |
+
"n_origins": 10
|
| 960 |
+
},
|
| 961 |
+
"sn47": {
|
| 962 |
+
"ratio": 0.6748065609305832,
|
| 963 |
+
"mase": 3.586670631812459,
|
| 964 |
+
"n_origins": 10
|
| 965 |
+
},
|
| 966 |
+
"sn48": {
|
| 967 |
+
"ratio": 1.085874270820543,
|
| 968 |
+
"mase": 13.993366676068938,
|
| 969 |
+
"n_origins": 10
|
| 970 |
+
},
|
| 971 |
+
"sn49": {
|
| 972 |
+
"ratio": 0.9245479276458992,
|
| 973 |
+
"mase": 6.461255383271468,
|
| 974 |
+
"n_origins": 10
|
| 975 |
+
},
|
| 976 |
+
"sn5": {
|
| 977 |
+
"ratio": 0.5012696691755827,
|
| 978 |
+
"mase": 7.517873526492543,
|
| 979 |
+
"n_origins": 10
|
| 980 |
+
},
|
| 981 |
+
"sn50": {
|
| 982 |
+
"ratio": 0.8089920051539174,
|
| 983 |
+
"mase": 5.828199166452922,
|
| 984 |
+
"n_origins": 10
|
| 985 |
+
},
|
| 986 |
+
"sn51": {
|
| 987 |
+
"ratio": 1.2032016198402007,
|
| 988 |
+
"mase": 60.399877383132164,
|
| 989 |
+
"n_origins": 10
|
| 990 |
+
},
|
| 991 |
+
"sn52": {
|
| 992 |
+
"ratio": 0.6702815389326855,
|
| 993 |
+
"mase": 11.652785024735037,
|
| 994 |
+
"n_origins": 10
|
| 995 |
+
},
|
| 996 |
+
"sn53": {
|
| 997 |
+
"ratio": 0.8980190019845828,
|
| 998 |
+
"mase": 199.62117545231155,
|
| 999 |
+
"n_origins": 10
|
| 1000 |
+
},
|
| 1001 |
+
"sn54": {
|
| 1002 |
+
"ratio": 0.8274822789424391,
|
| 1003 |
+
"mase": 6.2583123637510605,
|
| 1004 |
+
"n_origins": 10
|
| 1005 |
+
},
|
| 1006 |
+
"sn55": {
|
| 1007 |
+
"ratio": 0.838619986576889,
|
| 1008 |
+
"mase": 8.374655606764568,
|
| 1009 |
+
"n_origins": 10
|
| 1010 |
+
},
|
| 1011 |
+
"sn56": {
|
| 1012 |
+
"ratio": 0.24861908200731844,
|
| 1013 |
+
"mase": 3.7824237772884732,
|
| 1014 |
+
"n_origins": 10
|
| 1015 |
+
},
|
| 1016 |
+
"sn57": {
|
| 1017 |
+
"ratio": 0.448543359633677,
|
| 1018 |
+
"mase": 6.319049308611438,
|
| 1019 |
+
"n_origins": 10
|
| 1020 |
+
},
|
| 1021 |
+
"sn6": {
|
| 1022 |
+
"ratio": 0.33655575426304624,
|
| 1023 |
+
"mase": 3.0958884094307635,
|
| 1024 |
+
"n_origins": 10
|
| 1025 |
+
},
|
| 1026 |
+
"sn60": {
|
| 1027 |
+
"ratio": 1.2180570023514212,
|
| 1028 |
+
"mase": 9.800856274456445,
|
| 1029 |
+
"n_origins": 10
|
| 1030 |
+
},
|
| 1031 |
+
"sn61": {
|
| 1032 |
+
"ratio": 0.9988664648188126,
|
| 1033 |
+
"mase": 17.869850222928335,
|
| 1034 |
+
"n_origins": 10
|
| 1035 |
+
},
|
| 1036 |
+
"sn62": {
|
| 1037 |
+
"ratio": 0.16577541087061615,
|
| 1038 |
+
"mase": 2.6793971814244095,
|
| 1039 |
+
"n_origins": 10
|
| 1040 |
+
},
|
| 1041 |
+
"sn63": {
|
| 1042 |
+
"ratio": 0.7300361458865862,
|
| 1043 |
+
"mase": 4.217420172672373,
|
| 1044 |
+
"n_origins": 10
|
| 1045 |
+
},
|
| 1046 |
+
"sn64": {
|
| 1047 |
+
"ratio": 0.6825232194169509,
|
| 1048 |
+
"mase": 21.28024424980693,
|
| 1049 |
+
"n_origins": 10
|
| 1050 |
+
},
|
| 1051 |
+
"sn65": {
|
| 1052 |
+
"ratio": 1.151180396966063,
|
| 1053 |
+
"mase": 12.163495734685819,
|
| 1054 |
+
"n_origins": 10
|
| 1055 |
+
},
|
| 1056 |
+
"sn66": {
|
| 1057 |
+
"ratio": 0.7783528528872017,
|
| 1058 |
+
"mase": 10.9150226360862,
|
| 1059 |
+
"n_origins": 10
|
| 1060 |
+
},
|
| 1061 |
+
"sn67": {
|
| 1062 |
+
"ratio": 0.021643253480577843,
|
| 1063 |
+
"mase": 1.1038662750341937,
|
| 1064 |
+
"n_origins": 10
|
| 1065 |
+
},
|
| 1066 |
+
"sn68": {
|
| 1067 |
+
"ratio": 0.7801427739329858,
|
| 1068 |
+
"mase": 11.661689453322904,
|
| 1069 |
+
"n_origins": 10
|
| 1070 |
+
},
|
| 1071 |
+
"sn69": {
|
| 1072 |
+
"ratio": 0.3094505391541589,
|
| 1073 |
+
"mase": 17.69735516381146,
|
| 1074 |
+
"n_origins": 10
|
| 1075 |
+
},
|
| 1076 |
+
"sn7": {
|
| 1077 |
+
"ratio": 1.0949988706079605,
|
| 1078 |
+
"mase": 11.334592686164179,
|
| 1079 |
+
"n_origins": 10
|
| 1080 |
+
},
|
| 1081 |
+
"sn71": {
|
| 1082 |
+
"ratio": 0.988583311352759,
|
| 1083 |
+
"mase": 7.712346762720289,
|
| 1084 |
+
"n_origins": 10
|
| 1085 |
+
},
|
| 1086 |
+
"sn72": {
|
| 1087 |
+
"ratio": 1.210450673843138,
|
| 1088 |
+
"mase": 15.782227948007668,
|
| 1089 |
+
"n_origins": 10
|
| 1090 |
+
},
|
| 1091 |
+
"sn73": {
|
| 1092 |
+
"ratio": 0.6517406927077237,
|
| 1093 |
+
"mase": 6.387853328523764,
|
| 1094 |
+
"n_origins": 10
|
| 1095 |
+
},
|
| 1096 |
+
"sn74": {
|
| 1097 |
+
"ratio": 1.109294993042469,
|
| 1098 |
+
"mase": 10.867231416664707,
|
| 1099 |
+
"n_origins": 10
|
| 1100 |
+
},
|
| 1101 |
+
"sn75": {
|
| 1102 |
+
"ratio": 0.562977548088772,
|
| 1103 |
+
"mase": 9.698752212178052,
|
| 1104 |
+
"n_origins": 10
|
| 1105 |
+
},
|
| 1106 |
+
"sn76": {
|
| 1107 |
+
"ratio": 0.4348554918888121,
|
| 1108 |
+
"mase": 3.2640487014868294,
|
| 1109 |
+
"n_origins": 10
|
| 1110 |
+
},
|
| 1111 |
+
"sn77": {
|
| 1112 |
+
"ratio": 0.3928741425611278,
|
| 1113 |
+
"mase": 7.661367057764007,
|
| 1114 |
+
"n_origins": 10
|
| 1115 |
+
},
|
| 1116 |
+
"sn78": {
|
| 1117 |
+
"ratio": 0.8094432115039205,
|
| 1118 |
+
"mase": 11.365159118113743,
|
| 1119 |
+
"n_origins": 10
|
| 1120 |
+
},
|
| 1121 |
+
"sn79": {
|
| 1122 |
+
"ratio": 0.4954359184768149,
|
| 1123 |
+
"mase": 5.6078331594394895,
|
| 1124 |
+
"n_origins": 10
|
| 1125 |
+
},
|
| 1126 |
+
"sn8": {
|
| 1127 |
+
"ratio": 0.5144765263113888,
|
| 1128 |
+
"mase": 14.169757959249385,
|
| 1129 |
+
"n_origins": 10
|
| 1130 |
+
},
|
| 1131 |
+
"sn80": {
|
| 1132 |
+
"ratio": 1.0120408933607823,
|
| 1133 |
+
"mase": 63.428446149284845,
|
| 1134 |
+
"n_origins": 10
|
| 1135 |
+
},
|
| 1136 |
+
"sn81": {
|
| 1137 |
+
"ratio": 0.2584921763222318,
|
| 1138 |
+
"mase": 4.310925931300132,
|
| 1139 |
+
"n_origins": 10
|
| 1140 |
+
},
|
| 1141 |
+
"sn82": {
|
| 1142 |
+
"ratio": 0.6792726230012001,
|
| 1143 |
+
"mase": 6.619027201872795,
|
| 1144 |
+
"n_origins": 10
|
| 1145 |
+
},
|
| 1146 |
+
"sn83": {
|
| 1147 |
+
"ratio": 0.2898022890549245,
|
| 1148 |
+
"mase": 8.691071077896622,
|
| 1149 |
+
"n_origins": 10
|
| 1150 |
+
},
|
| 1151 |
+
"sn84": {
|
| 1152 |
+
"ratio": 0.02697289241775519,
|
| 1153 |
+
"mase": 1.3869202342260354,
|
| 1154 |
+
"n_origins": 10
|
| 1155 |
+
},
|
| 1156 |
+
"sn85": {
|
| 1157 |
+
"ratio": 0.6573533745132937,
|
| 1158 |
+
"mase": 4.300989338131328,
|
| 1159 |
+
"n_origins": 10
|
| 1160 |
+
},
|
| 1161 |
+
"sn87": {
|
| 1162 |
+
"ratio": 0.7401321415520679,
|
| 1163 |
+
"mase": 8.416043840483315,
|
| 1164 |
+
"n_origins": 10
|
| 1165 |
+
},
|
| 1166 |
+
"sn88": {
|
| 1167 |
+
"ratio": 0.9163211488127513,
|
| 1168 |
+
"mase": 9.253032065706524,
|
| 1169 |
+
"n_origins": 10
|
| 1170 |
+
},
|
| 1171 |
+
"sn89": {
|
| 1172 |
+
"ratio": 0.9948598847326969,
|
| 1173 |
+
"mase": 21.574941998652214,
|
| 1174 |
+
"n_origins": 10
|
| 1175 |
+
},
|
| 1176 |
+
"sn9": {
|
| 1177 |
+
"ratio": 0.6062103899744757,
|
| 1178 |
+
"mase": 7.48151962790908,
|
| 1179 |
+
"n_origins": 10
|
| 1180 |
+
},
|
| 1181 |
+
"sn91": {
|
| 1182 |
+
"ratio": 0.7312495640395211,
|
| 1183 |
+
"mase": 10.239937176504382,
|
| 1184 |
+
"n_origins": 10
|
| 1185 |
+
},
|
| 1186 |
+
"sn92": {
|
| 1187 |
+
"ratio": 0.6343095750571582,
|
| 1188 |
+
"mase": 6.887866024551988,
|
| 1189 |
+
"n_origins": 10
|
| 1190 |
+
},
|
| 1191 |
+
"sn93": {
|
| 1192 |
+
"ratio": 0.5783305482356069,
|
| 1193 |
+
"mase": 6.391467248850258,
|
| 1194 |
+
"n_origins": 10
|
| 1195 |
+
},
|
| 1196 |
+
"sn94": {
|
| 1197 |
+
"ratio": 0.9737908750562859,
|
| 1198 |
+
"mase": 37.868891280123776,
|
| 1199 |
+
"n_origins": 10
|
| 1200 |
+
},
|
| 1201 |
+
"sn95": {
|
| 1202 |
+
"ratio": 0.9454692800280923,
|
| 1203 |
+
"mase": 12.516253950961142,
|
| 1204 |
+
"n_origins": 10
|
| 1205 |
+
},
|
| 1206 |
+
"sn96": {
|
| 1207 |
+
"ratio": 0.022548944095851682,
|
| 1208 |
+
"mase": 1.2326726504857173,
|
| 1209 |
+
"n_origins": 10
|
| 1210 |
+
},
|
| 1211 |
+
"sn97": {
|
| 1212 |
+
"ratio": 0.5985718350968059,
|
| 1213 |
+
"mase": 2.8984334283863493,
|
| 1214 |
+
"n_origins": 10
|
| 1215 |
+
},
|
| 1216 |
+
"sn98": {
|
| 1217 |
+
"ratio": 1.3539909051878454,
|
| 1218 |
+
"mase": 9.588963373369188,
|
| 1219 |
+
"n_origins": 10
|
| 1220 |
+
}
|
| 1221 |
+
}
|
| 1222 |
+
}
|
| 1223 |
+
}
|
| 1224 |
+
}
|
evals/eval-5m.json
ADDED
|
@@ -0,0 +1,1259 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"bundle": "results/fitproc2/wsoup85-fgl0-hurdle",
|
| 3 |
+
"data": "data/subnet_ft2/holdout_5m.npz",
|
| 4 |
+
"mode": "ohlc",
|
| 5 |
+
"levels": [
|
| 6 |
+
0.1,
|
| 7 |
+
0.2,
|
| 8 |
+
0.3,
|
| 9 |
+
0.4,
|
| 10 |
+
0.5,
|
| 11 |
+
0.6,
|
| 12 |
+
0.7,
|
| 13 |
+
0.8,
|
| 14 |
+
0.9
|
| 15 |
+
],
|
| 16 |
+
"horizons": {
|
| 17 |
+
"12": {
|
| 18 |
+
"n_assets": 120,
|
| 19 |
+
"geomean_ratio": 0.8569025696603942,
|
| 20 |
+
"median_ratio": 0.9375360865477722,
|
| 21 |
+
"beat_naive_frac": 0.8166666666666667,
|
| 22 |
+
"per_asset": {
|
| 23 |
+
"TAOUSD": {
|
| 24 |
+
"ratio": 0.9243151437245186,
|
| 25 |
+
"mase": 2.914639503690425,
|
| 26 |
+
"n_origins": 10
|
| 27 |
+
},
|
| 28 |
+
"sn1": {
|
| 29 |
+
"ratio": 0.931779403705062,
|
| 30 |
+
"mase": 1.4153528160830429,
|
| 31 |
+
"n_origins": 10
|
| 32 |
+
},
|
| 33 |
+
"sn10": {
|
| 34 |
+
"ratio": 0.9468710821894832,
|
| 35 |
+
"mase": 4.109818445320265,
|
| 36 |
+
"n_origins": 10
|
| 37 |
+
},
|
| 38 |
+
"sn100": {
|
| 39 |
+
"ratio": 0.9146538409277817,
|
| 40 |
+
"mase": 3.7878699856138844,
|
| 41 |
+
"n_origins": 10
|
| 42 |
+
},
|
| 43 |
+
"sn101": {
|
| 44 |
+
"ratio": 0.9988302219974093,
|
| 45 |
+
"mase": 3.516210449625286,
|
| 46 |
+
"n_origins": 10
|
| 47 |
+
},
|
| 48 |
+
"sn102": {
|
| 49 |
+
"ratio": 0.6213847116186267,
|
| 50 |
+
"mase": 1.294283407211906,
|
| 51 |
+
"n_origins": 10
|
| 52 |
+
},
|
| 53 |
+
"sn103": {
|
| 54 |
+
"ratio": 0.9923547457350458,
|
| 55 |
+
"mase": 10.90087217399522,
|
| 56 |
+
"n_origins": 10
|
| 57 |
+
},
|
| 58 |
+
"sn104": {
|
| 59 |
+
"ratio": 0.996742996979195,
|
| 60 |
+
"mase": 6.1283081285447105,
|
| 61 |
+
"n_origins": 10
|
| 62 |
+
},
|
| 63 |
+
"sn105": {
|
| 64 |
+
"ratio": 0.9083982180468424,
|
| 65 |
+
"mase": 3.2600153200811817,
|
| 66 |
+
"n_origins": 10
|
| 67 |
+
},
|
| 68 |
+
"sn106": {
|
| 69 |
+
"ratio": 0.9333487535060949,
|
| 70 |
+
"mase": 8.489513835278924,
|
| 71 |
+
"n_origins": 10
|
| 72 |
+
},
|
| 73 |
+
"sn107": {
|
| 74 |
+
"ratio": 0.8904939597368255,
|
| 75 |
+
"mase": 4.459383505968991,
|
| 76 |
+
"n_origins": 10
|
| 77 |
+
},
|
| 78 |
+
"sn108": {
|
| 79 |
+
"ratio": 0.9797276043302334,
|
| 80 |
+
"mase": 4.103612693079853,
|
| 81 |
+
"n_origins": 10
|
| 82 |
+
},
|
| 83 |
+
"sn109": {
|
| 84 |
+
"ratio": 0.9804100317466065,
|
| 85 |
+
"mase": 8.774243764282925,
|
| 86 |
+
"n_origins": 10
|
| 87 |
+
},
|
| 88 |
+
"sn11": {
|
| 89 |
+
"ratio": 0.9818399250517127,
|
| 90 |
+
"mase": 11.65714471698871,
|
| 91 |
+
"n_origins": 10
|
| 92 |
+
},
|
| 93 |
+
"sn110": {
|
| 94 |
+
"ratio": 0.9693443524070015,
|
| 95 |
+
"mase": 5.126508499642743,
|
| 96 |
+
"n_origins": 10
|
| 97 |
+
},
|
| 98 |
+
"sn111": {
|
| 99 |
+
"ratio": 0.9306584514477618,
|
| 100 |
+
"mase": 4.80211656032144,
|
| 101 |
+
"n_origins": 10
|
| 102 |
+
},
|
| 103 |
+
"sn112": {
|
| 104 |
+
"ratio": 0.9615492547580763,
|
| 105 |
+
"mase": 14.717329765585303,
|
| 106 |
+
"n_origins": 10
|
| 107 |
+
},
|
| 108 |
+
"sn113": {
|
| 109 |
+
"ratio": 0.9877165474853576,
|
| 110 |
+
"mase": 3.1474583698509506,
|
| 111 |
+
"n_origins": 10
|
| 112 |
+
},
|
| 113 |
+
"sn114": {
|
| 114 |
+
"ratio": 1.0101968321757633,
|
| 115 |
+
"mase": 6.9388214464249796,
|
| 116 |
+
"n_origins": 10
|
| 117 |
+
},
|
| 118 |
+
"sn115": {
|
| 119 |
+
"ratio": 0.9595181577926852,
|
| 120 |
+
"mase": 0.503212555298056,
|
| 121 |
+
"n_origins": 10
|
| 122 |
+
},
|
| 123 |
+
"sn116": {
|
| 124 |
+
"ratio": 0.9266033996063751,
|
| 125 |
+
"mase": 1.9668599504507096,
|
| 126 |
+
"n_origins": 10
|
| 127 |
+
},
|
| 128 |
+
"sn117": {
|
| 129 |
+
"ratio": 0.9952434823335911,
|
| 130 |
+
"mase": 5.771795989537984,
|
| 131 |
+
"n_origins": 10
|
| 132 |
+
},
|
| 133 |
+
"sn118": {
|
| 134 |
+
"ratio": 0.9003159091701053,
|
| 135 |
+
"mase": 3.8691791560859894,
|
| 136 |
+
"n_origins": 10
|
| 137 |
+
},
|
| 138 |
+
"sn119": {
|
| 139 |
+
"ratio": 0.8571252683258519,
|
| 140 |
+
"mase": 0.5523469688050122,
|
| 141 |
+
"n_origins": 10
|
| 142 |
+
},
|
| 143 |
+
"sn12": {
|
| 144 |
+
"ratio": 0.9998283511803386,
|
| 145 |
+
"mase": 9.235773768216108,
|
| 146 |
+
"n_origins": 10
|
| 147 |
+
},
|
| 148 |
+
"sn120": {
|
| 149 |
+
"ratio": 0.5355582029922076,
|
| 150 |
+
"mase": 0.9183088370291184,
|
| 151 |
+
"n_origins": 10
|
| 152 |
+
},
|
| 153 |
+
"sn121": {
|
| 154 |
+
"ratio": 0.9196740025552045,
|
| 155 |
+
"mase": 1.313571678525647,
|
| 156 |
+
"n_origins": 10
|
| 157 |
+
},
|
| 158 |
+
"sn122": {
|
| 159 |
+
"ratio": 0.9901001165703628,
|
| 160 |
+
"mase": 17.607511937392545,
|
| 161 |
+
"n_origins": 10
|
| 162 |
+
},
|
| 163 |
+
"sn123": {
|
| 164 |
+
"ratio": 1.0037642329826062,
|
| 165 |
+
"mase": 4.530282962028994,
|
| 166 |
+
"n_origins": 10
|
| 167 |
+
},
|
| 168 |
+
"sn124": {
|
| 169 |
+
"ratio": 0.8282033320945345,
|
| 170 |
+
"mase": 1.8660509962107565,
|
| 171 |
+
"n_origins": 10
|
| 172 |
+
},
|
| 173 |
+
"sn125": {
|
| 174 |
+
"ratio": 0.11974216085802813,
|
| 175 |
+
"mase": 0.0,
|
| 176 |
+
"n_origins": 10
|
| 177 |
+
},
|
| 178 |
+
"sn126": {
|
| 179 |
+
"ratio": 0.9758178122600205,
|
| 180 |
+
"mase": 11.871527777777874,
|
| 181 |
+
"n_origins": 10
|
| 182 |
+
},
|
| 183 |
+
"sn127": {
|
| 184 |
+
"ratio": 0.6324258652028895,
|
| 185 |
+
"mase": 0.5454457092252504,
|
| 186 |
+
"n_origins": 10
|
| 187 |
+
},
|
| 188 |
+
"sn13": {
|
| 189 |
+
"ratio": 1.0111148933630894,
|
| 190 |
+
"mase": 3.750710631040385,
|
| 191 |
+
"n_origins": 10
|
| 192 |
+
},
|
| 193 |
+
"sn14": {
|
| 194 |
+
"ratio": 0.9569244573696121,
|
| 195 |
+
"mase": 0.5668604651163198,
|
| 196 |
+
"n_origins": 10
|
| 197 |
+
},
|
| 198 |
+
"sn15": {
|
| 199 |
+
"ratio": 0.9295777783028076,
|
| 200 |
+
"mase": 8.043681570348523,
|
| 201 |
+
"n_origins": 10
|
| 202 |
+
},
|
| 203 |
+
"sn16": {
|
| 204 |
+
"ratio": 0.8194376997488386,
|
| 205 |
+
"mase": 1.163228200142748,
|
| 206 |
+
"n_origins": 10
|
| 207 |
+
},
|
| 208 |
+
"sn17": {
|
| 209 |
+
"ratio": 1.003626471958072,
|
| 210 |
+
"mase": 8.318707254713011,
|
| 211 |
+
"n_origins": 10
|
| 212 |
+
},
|
| 213 |
+
"sn18": {
|
| 214 |
+
"ratio": 0.9711266213941432,
|
| 215 |
+
"mase": 5.874050550815076,
|
| 216 |
+
"n_origins": 10
|
| 217 |
+
},
|
| 218 |
+
"sn19": {
|
| 219 |
+
"ratio": 0.9602349299662697,
|
| 220 |
+
"mase": 5.348928827920653,
|
| 221 |
+
"n_origins": 10
|
| 222 |
+
},
|
| 223 |
+
"sn2": {
|
| 224 |
+
"ratio": 1.0224053534502389,
|
| 225 |
+
"mase": 5.552162276750288,
|
| 226 |
+
"n_origins": 10
|
| 227 |
+
},
|
| 228 |
+
"sn20": {
|
| 229 |
+
"ratio": 1.0003748376769723,
|
| 230 |
+
"mase": 4.8712719857250315,
|
| 231 |
+
"n_origins": 10
|
| 232 |
+
},
|
| 233 |
+
"sn21": {
|
| 234 |
+
"ratio": 1.0264223930839242,
|
| 235 |
+
"mase": 10.076039794421353,
|
| 236 |
+
"n_origins": 10
|
| 237 |
+
},
|
| 238 |
+
"sn22": {
|
| 239 |
+
"ratio": 0.9861059273193261,
|
| 240 |
+
"mase": 8.220784213224022,
|
| 241 |
+
"n_origins": 10
|
| 242 |
+
},
|
| 243 |
+
"sn23": {
|
| 244 |
+
"ratio": 0.749544176045925,
|
| 245 |
+
"mase": 1.7032175707719197,
|
| 246 |
+
"n_origins": 10
|
| 247 |
+
},
|
| 248 |
+
"sn24": {
|
| 249 |
+
"ratio": 0.8297186870374278,
|
| 250 |
+
"mase": 2.183642834096534,
|
| 251 |
+
"n_origins": 10
|
| 252 |
+
},
|
| 253 |
+
"sn25": {
|
| 254 |
+
"ratio": 0.7796052895533019,
|
| 255 |
+
"mase": 1.6078023657213842,
|
| 256 |
+
"n_origins": 10
|
| 257 |
+
},
|
| 258 |
+
"sn26": {
|
| 259 |
+
"ratio": 0.9782284295893836,
|
| 260 |
+
"mase": 33.041339446158354,
|
| 261 |
+
"n_origins": 10
|
| 262 |
+
},
|
| 263 |
+
"sn27": {
|
| 264 |
+
"ratio": 0.8387644653904359,
|
| 265 |
+
"mase": 1.9754600612095685,
|
| 266 |
+
"n_origins": 10
|
| 267 |
+
},
|
| 268 |
+
"sn28": {
|
| 269 |
+
"ratio": 0.8488682136930159,
|
| 270 |
+
"mase": 3.037465674610093,
|
| 271 |
+
"n_origins": 10
|
| 272 |
+
},
|
| 273 |
+
"sn3": {
|
| 274 |
+
"ratio": 0.6273534048391771,
|
| 275 |
+
"mase": 0.9193180760633812,
|
| 276 |
+
"n_origins": 10
|
| 277 |
+
},
|
| 278 |
+
"sn30": {
|
| 279 |
+
"ratio": 0.9616684339857207,
|
| 280 |
+
"mase": 3.0114672986157847,
|
| 281 |
+
"n_origins": 10
|
| 282 |
+
},
|
| 283 |
+
"sn31": {
|
| 284 |
+
"ratio": 0.8916146608949437,
|
| 285 |
+
"mase": 4.243635782890181,
|
| 286 |
+
"n_origins": 10
|
| 287 |
+
},
|
| 288 |
+
"sn32": {
|
| 289 |
+
"ratio": 0.4652220002769915,
|
| 290 |
+
"mase": 0.1685185185185418,
|
| 291 |
+
"n_origins": 10
|
| 292 |
+
},
|
| 293 |
+
"sn33": {
|
| 294 |
+
"ratio": 1.055714503307049,
|
| 295 |
+
"mase": 2.669033652361985,
|
| 296 |
+
"n_origins": 10
|
| 297 |
+
},
|
| 298 |
+
"sn34": {
|
| 299 |
+
"ratio": 0.9945208114761621,
|
| 300 |
+
"mase": 5.460852403399792,
|
| 301 |
+
"n_origins": 10
|
| 302 |
+
},
|
| 303 |
+
"sn35": {
|
| 304 |
+
"ratio": 0.9656173682620742,
|
| 305 |
+
"mase": 2.4187038569487367,
|
| 306 |
+
"n_origins": 10
|
| 307 |
+
},
|
| 308 |
+
"sn37": {
|
| 309 |
+
"ratio": 0.8112469017239939,
|
| 310 |
+
"mase": 1.5519012214363306,
|
| 311 |
+
"n_origins": 10
|
| 312 |
+
},
|
| 313 |
+
"sn38": {
|
| 314 |
+
"ratio": 0.8972600814916628,
|
| 315 |
+
"mase": 11.863538474200496,
|
| 316 |
+
"n_origins": 10
|
| 317 |
+
},
|
| 318 |
+
"sn39": {
|
| 319 |
+
"ratio": 0.7692544998403149,
|
| 320 |
+
"mase": 1.072743496044741,
|
| 321 |
+
"n_origins": 10
|
| 322 |
+
},
|
| 323 |
+
"sn4": {
|
| 324 |
+
"ratio": 0.9041237336922492,
|
| 325 |
+
"mase": 2.467607872883877,
|
| 326 |
+
"n_origins": 10
|
| 327 |
+
},
|
| 328 |
+
"sn40": {
|
| 329 |
+
"ratio": 0.8176366156776466,
|
| 330 |
+
"mase": 0.520056604800567,
|
| 331 |
+
"n_origins": 10
|
| 332 |
+
},
|
| 333 |
+
"sn41": {
|
| 334 |
+
"ratio": 0.9923102357634975,
|
| 335 |
+
"mase": 21.66068718090222,
|
| 336 |
+
"n_origins": 10
|
| 337 |
+
},
|
| 338 |
+
"sn42": {
|
| 339 |
+
"ratio": 0.9998078778381794,
|
| 340 |
+
"mase": 13.209677419355204,
|
| 341 |
+
"n_origins": 10
|
| 342 |
+
},
|
| 343 |
+
"sn44": {
|
| 344 |
+
"ratio": 0.9965985006077301,
|
| 345 |
+
"mase": 4.898667809204135,
|
| 346 |
+
"n_origins": 10
|
| 347 |
+
},
|
| 348 |
+
"sn45": {
|
| 349 |
+
"ratio": 1.0651677447175065,
|
| 350 |
+
"mase": 4.535150378001013,
|
| 351 |
+
"n_origins": 10
|
| 352 |
+
},
|
| 353 |
+
"sn46": {
|
| 354 |
+
"ratio": 0.9382279358328639,
|
| 355 |
+
"mase": 4.43650521696489,
|
| 356 |
+
"n_origins": 10
|
| 357 |
+
},
|
| 358 |
+
"sn47": {
|
| 359 |
+
"ratio": 0.9864301833258071,
|
| 360 |
+
"mase": 32.936785771768854,
|
| 361 |
+
"n_origins": 10
|
| 362 |
+
},
|
| 363 |
+
"sn48": {
|
| 364 |
+
"ratio": 0.8419377354347897,
|
| 365 |
+
"mase": 0.3681229773463299,
|
| 366 |
+
"n_origins": 10
|
| 367 |
+
},
|
| 368 |
+
"sn49": {
|
| 369 |
+
"ratio": 0.9431691627832307,
|
| 370 |
+
"mase": 2.7076818607279742,
|
| 371 |
+
"n_origins": 10
|
| 372 |
+
},
|
| 373 |
+
"sn5": {
|
| 374 |
+
"ratio": 1.1363068641925838,
|
| 375 |
+
"mase": 0.9506950908236231,
|
| 376 |
+
"n_origins": 10
|
| 377 |
+
},
|
| 378 |
+
"sn50": {
|
| 379 |
+
"ratio": 1.0019776697219986,
|
| 380 |
+
"mase": 4.657816030911135,
|
| 381 |
+
"n_origins": 10
|
| 382 |
+
},
|
| 383 |
+
"sn51": {
|
| 384 |
+
"ratio": 0.8725227003648021,
|
| 385 |
+
"mase": 1.9870726678038773,
|
| 386 |
+
"n_origins": 10
|
| 387 |
+
},
|
| 388 |
+
"sn53": {
|
| 389 |
+
"ratio": 0.6048652597981019,
|
| 390 |
+
"mase": 1.0842658255508462,
|
| 391 |
+
"n_origins": 10
|
| 392 |
+
},
|
| 393 |
+
"sn54": {
|
| 394 |
+
"ratio": 1.0157397089204176,
|
| 395 |
+
"mase": 7.944264939003498,
|
| 396 |
+
"n_origins": 10
|
| 397 |
+
},
|
| 398 |
+
"sn55": {
|
| 399 |
+
"ratio": 0.9262476990472354,
|
| 400 |
+
"mase": 2.931541105241035,
|
| 401 |
+
"n_origins": 10
|
| 402 |
+
},
|
| 403 |
+
"sn56": {
|
| 404 |
+
"ratio": 0.5713578240387188,
|
| 405 |
+
"mase": 0.8130470813696437,
|
| 406 |
+
"n_origins": 10
|
| 407 |
+
},
|
| 408 |
+
"sn57": {
|
| 409 |
+
"ratio": 1.0090423739659646,
|
| 410 |
+
"mase": 3.446564885496225,
|
| 411 |
+
"n_origins": 10
|
| 412 |
+
},
|
| 413 |
+
"sn58": {
|
| 414 |
+
"ratio": 0.9592543202504102,
|
| 415 |
+
"mase": 9.010612039078703,
|
| 416 |
+
"n_origins": 10
|
| 417 |
+
},
|
| 418 |
+
"sn6": {
|
| 419 |
+
"ratio": 0.7838774761919867,
|
| 420 |
+
"mase": 1.57049641739512,
|
| 421 |
+
"n_origins": 10
|
| 422 |
+
},
|
| 423 |
+
"sn60": {
|
| 424 |
+
"ratio": 0.8640033288014318,
|
| 425 |
+
"mase": 3.3796989255800827,
|
| 426 |
+
"n_origins": 10
|
| 427 |
+
},
|
| 428 |
+
"sn61": {
|
| 429 |
+
"ratio": 0.9729690863096107,
|
| 430 |
+
"mase": 5.291278122042142,
|
| 431 |
+
"n_origins": 10
|
| 432 |
+
},
|
| 433 |
+
"sn62": {
|
| 434 |
+
"ratio": 0.6626186521106131,
|
| 435 |
+
"mase": 1.0715122115604374,
|
| 436 |
+
"n_origins": 10
|
| 437 |
+
},
|
| 438 |
+
"sn63": {
|
| 439 |
+
"ratio": 0.7046349516336592,
|
| 440 |
+
"mase": 0.6277865754548951,
|
| 441 |
+
"n_origins": 10
|
| 442 |
+
},
|
| 443 |
+
"sn64": {
|
| 444 |
+
"ratio": 0.8269579816865127,
|
| 445 |
+
"mase": 3.263393710505745,
|
| 446 |
+
"n_origins": 10
|
| 447 |
+
},
|
| 448 |
+
"sn65": {
|
| 449 |
+
"ratio": 0.6280645672877764,
|
| 450 |
+
"mase": 1.3368168094253678,
|
| 451 |
+
"n_origins": 10
|
| 452 |
+
},
|
| 453 |
+
"sn66": {
|
| 454 |
+
"ratio": 0.5468044012738311,
|
| 455 |
+
"mase": 0.566131641159626,
|
| 456 |
+
"n_origins": 10
|
| 457 |
+
},
|
| 458 |
+
"sn67": {
|
| 459 |
+
"ratio": 1.0468180340765625,
|
| 460 |
+
"mase": 5.198736569568437,
|
| 461 |
+
"n_origins": 10
|
| 462 |
+
},
|
| 463 |
+
"sn68": {
|
| 464 |
+
"ratio": 0.7573154399304336,
|
| 465 |
+
"mase": 2.34083003832336,
|
| 466 |
+
"n_origins": 10
|
| 467 |
+
},
|
| 468 |
+
"sn69": {
|
| 469 |
+
"ratio": 1.1779525195037865,
|
| 470 |
+
"mase": 1.1727564518222513,
|
| 471 |
+
"n_origins": 10
|
| 472 |
+
},
|
| 473 |
+
"sn7": {
|
| 474 |
+
"ratio": 0.0683681242735113,
|
| 475 |
+
"mase": 0.0,
|
| 476 |
+
"n_origins": 10
|
| 477 |
+
},
|
| 478 |
+
"sn71": {
|
| 479 |
+
"ratio": 0.7547148966589621,
|
| 480 |
+
"mase": 1.7282789201518698,
|
| 481 |
+
"n_origins": 10
|
| 482 |
+
},
|
| 483 |
+
"sn72": {
|
| 484 |
+
"ratio": 1.0301005245237957,
|
| 485 |
+
"mase": 11.402147971360336,
|
| 486 |
+
"n_origins": 10
|
| 487 |
+
},
|
| 488 |
+
"sn73": {
|
| 489 |
+
"ratio": 1.0049698322288878,
|
| 490 |
+
"mase": 1.9304830287206727,
|
| 491 |
+
"n_origins": 10
|
| 492 |
+
},
|
| 493 |
+
"sn74": {
|
| 494 |
+
"ratio": 1.0271064013600886,
|
| 495 |
+
"mase": 5.507561992304493,
|
| 496 |
+
"n_origins": 10
|
| 497 |
+
},
|
| 498 |
+
"sn75": {
|
| 499 |
+
"ratio": 0.725046694689897,
|
| 500 |
+
"mase": 1.8303012825926912,
|
| 501 |
+
"n_origins": 10
|
| 502 |
+
},
|
| 503 |
+
"sn76": {
|
| 504 |
+
"ratio": 1.0094896120509966,
|
| 505 |
+
"mase": 6.466424829900495,
|
| 506 |
+
"n_origins": 10
|
| 507 |
+
},
|
| 508 |
+
"sn77": {
|
| 509 |
+
"ratio": 0.6048937104203308,
|
| 510 |
+
"mase": 0.513992649716849,
|
| 511 |
+
"n_origins": 10
|
| 512 |
+
},
|
| 513 |
+
"sn78": {
|
| 514 |
+
"ratio": 0.9806327547323608,
|
| 515 |
+
"mase": 4.688020097672489,
|
| 516 |
+
"n_origins": 10
|
| 517 |
+
},
|
| 518 |
+
"sn79": {
|
| 519 |
+
"ratio": 0.9503748989753938,
|
| 520 |
+
"mase": 2.861587036489522,
|
| 521 |
+
"n_origins": 10
|
| 522 |
+
},
|
| 523 |
+
"sn8": {
|
| 524 |
+
"ratio": 1.1491382906303964,
|
| 525 |
+
"mase": 3.1740037702774444,
|
| 526 |
+
"n_origins": 10
|
| 527 |
+
},
|
| 528 |
+
"sn80": {
|
| 529 |
+
"ratio": 0.9407022949227098,
|
| 530 |
+
"mase": 2.7390422697421593,
|
| 531 |
+
"n_origins": 10
|
| 532 |
+
},
|
| 533 |
+
"sn81": {
|
| 534 |
+
"ratio": 0.5401982808952285,
|
| 535 |
+
"mase": 0.6074723252330168,
|
| 536 |
+
"n_origins": 10
|
| 537 |
+
},
|
| 538 |
+
"sn82": {
|
| 539 |
+
"ratio": 0.8682214633231652,
|
| 540 |
+
"mase": 3.5516160277228765,
|
| 541 |
+
"n_origins": 10
|
| 542 |
+
},
|
| 543 |
+
"sn83": {
|
| 544 |
+
"ratio": 0.8197445419501499,
|
| 545 |
+
"mase": 9.214977935361555,
|
| 546 |
+
"n_origins": 10
|
| 547 |
+
},
|
| 548 |
+
"sn84": {
|
| 549 |
+
"ratio": 0.9769863595152528,
|
| 550 |
+
"mase": 7.290055248618788,
|
| 551 |
+
"n_origins": 10
|
| 552 |
+
},
|
| 553 |
+
"sn85": {
|
| 554 |
+
"ratio": 0.8589891470967628,
|
| 555 |
+
"mase": 2.118002503231339,
|
| 556 |
+
"n_origins": 10
|
| 557 |
+
},
|
| 558 |
+
"sn87": {
|
| 559 |
+
"ratio": 0.9014818927646848,
|
| 560 |
+
"mase": 4.871765109900731,
|
| 561 |
+
"n_origins": 10
|
| 562 |
+
},
|
| 563 |
+
"sn88": {
|
| 564 |
+
"ratio": 0.9281456004558014,
|
| 565 |
+
"mase": 4.108614203331204,
|
| 566 |
+
"n_origins": 10
|
| 567 |
+
},
|
| 568 |
+
"sn89": {
|
| 569 |
+
"ratio": 0.8897470485072828,
|
| 570 |
+
"mase": 1.933166981386301,
|
| 571 |
+
"n_origins": 10
|
| 572 |
+
},
|
| 573 |
+
"sn9": {
|
| 574 |
+
"ratio": 1.1438584835701424,
|
| 575 |
+
"mase": 2.550676265611177,
|
| 576 |
+
"n_origins": 10
|
| 577 |
+
},
|
| 578 |
+
"sn90": {
|
| 579 |
+
"ratio": 0.9219668708619657,
|
| 580 |
+
"mase": 6.157078347920467,
|
| 581 |
+
"n_origins": 10
|
| 582 |
+
},
|
| 583 |
+
"sn91": {
|
| 584 |
+
"ratio": 0.9368442372626804,
|
| 585 |
+
"mase": 3.722305487747481,
|
| 586 |
+
"n_origins": 10
|
| 587 |
+
},
|
| 588 |
+
"sn92": {
|
| 589 |
+
"ratio": 1.0017233933744167,
|
| 590 |
+
"mase": 6.8568703380381315,
|
| 591 |
+
"n_origins": 10
|
| 592 |
+
},
|
| 593 |
+
"sn93": {
|
| 594 |
+
"ratio": 0.8916400233595648,
|
| 595 |
+
"mase": 3.9013617575868937,
|
| 596 |
+
"n_origins": 10
|
| 597 |
+
},
|
| 598 |
+
"sn94": {
|
| 599 |
+
"ratio": 0.9944019842475262,
|
| 600 |
+
"mase": 16.13451144778279,
|
| 601 |
+
"n_origins": 10
|
| 602 |
+
},
|
| 603 |
+
"sn95": {
|
| 604 |
+
"ratio": 0.9749476335961622,
|
| 605 |
+
"mase": 3.4096881965438537,
|
| 606 |
+
"n_origins": 10
|
| 607 |
+
},
|
| 608 |
+
"sn96": {
|
| 609 |
+
"ratio": 0.6927191792441173,
|
| 610 |
+
"mase": 1.2146284590499228,
|
| 611 |
+
"n_origins": 10
|
| 612 |
+
},
|
| 613 |
+
"sn97": {
|
| 614 |
+
"ratio": 0.934084525214288,
|
| 615 |
+
"mase": 3.2536196785057045,
|
| 616 |
+
"n_origins": 10
|
| 617 |
+
},
|
| 618 |
+
"sn99": {
|
| 619 |
+
"ratio": 0.95284116914995,
|
| 620 |
+
"mase": 4.723307629960292,
|
| 621 |
+
"n_origins": 10
|
| 622 |
+
}
|
| 623 |
+
}
|
| 624 |
+
},
|
| 625 |
+
"144": {
|
| 626 |
+
"n_assets": 125,
|
| 627 |
+
"geomean_ratio": 0.8695586567912015,
|
| 628 |
+
"median_ratio": 0.8967055730048042,
|
| 629 |
+
"beat_naive_frac": 0.912,
|
| 630 |
+
"per_asset": {
|
| 631 |
+
"TAOUSD": {
|
| 632 |
+
"ratio": 1.0217977684948898,
|
| 633 |
+
"mase": 8.710885235694734,
|
| 634 |
+
"n_origins": 10
|
| 635 |
+
},
|
| 636 |
+
"sn1": {
|
| 637 |
+
"ratio": 0.8859553105627054,
|
| 638 |
+
"mase": 17.181933029934555,
|
| 639 |
+
"n_origins": 10
|
| 640 |
+
},
|
| 641 |
+
"sn10": {
|
| 642 |
+
"ratio": 0.8503648590727556,
|
| 643 |
+
"mase": 14.116444790597395,
|
| 644 |
+
"n_origins": 10
|
| 645 |
+
},
|
| 646 |
+
"sn100": {
|
| 647 |
+
"ratio": 0.8920521820506798,
|
| 648 |
+
"mase": 14.699195042125769,
|
| 649 |
+
"n_origins": 10
|
| 650 |
+
},
|
| 651 |
+
"sn101": {
|
| 652 |
+
"ratio": 1.0101726313209942,
|
| 653 |
+
"mase": 43.6365948896486,
|
| 654 |
+
"n_origins": 10
|
| 655 |
+
},
|
| 656 |
+
"sn102": {
|
| 657 |
+
"ratio": 0.8345071211148652,
|
| 658 |
+
"mase": 9.848469783183507,
|
| 659 |
+
"n_origins": 10
|
| 660 |
+
},
|
| 661 |
+
"sn103": {
|
| 662 |
+
"ratio": 0.9778785693748754,
|
| 663 |
+
"mase": 47.865411684306615,
|
| 664 |
+
"n_origins": 10
|
| 665 |
+
},
|
| 666 |
+
"sn104": {
|
| 667 |
+
"ratio": 1.0010522274978708,
|
| 668 |
+
"mase": 67.22952270026953,
|
| 669 |
+
"n_origins": 10
|
| 670 |
+
},
|
| 671 |
+
"sn105": {
|
| 672 |
+
"ratio": 0.958468323429395,
|
| 673 |
+
"mase": 11.26242471682766,
|
| 674 |
+
"n_origins": 10
|
| 675 |
+
},
|
| 676 |
+
"sn106": {
|
| 677 |
+
"ratio": 0.9100146450884468,
|
| 678 |
+
"mase": 57.232065504891324,
|
| 679 |
+
"n_origins": 10
|
| 680 |
+
},
|
| 681 |
+
"sn107": {
|
| 682 |
+
"ratio": 0.7956096182878916,
|
| 683 |
+
"mase": 12.272666587809045,
|
| 684 |
+
"n_origins": 10
|
| 685 |
+
},
|
| 686 |
+
"sn108": {
|
| 687 |
+
"ratio": 0.8804324650703563,
|
| 688 |
+
"mase": 17.850640538525482,
|
| 689 |
+
"n_origins": 10
|
| 690 |
+
},
|
| 691 |
+
"sn109": {
|
| 692 |
+
"ratio": 0.9330424674117583,
|
| 693 |
+
"mase": 58.46413715646617,
|
| 694 |
+
"n_origins": 10
|
| 695 |
+
},
|
| 696 |
+
"sn11": {
|
| 697 |
+
"ratio": 0.9234546476928365,
|
| 698 |
+
"mase": 37.03378762863159,
|
| 699 |
+
"n_origins": 10
|
| 700 |
+
},
|
| 701 |
+
"sn110": {
|
| 702 |
+
"ratio": 0.9129786518097437,
|
| 703 |
+
"mase": 17.09583195120017,
|
| 704 |
+
"n_origins": 10
|
| 705 |
+
},
|
| 706 |
+
"sn111": {
|
| 707 |
+
"ratio": 0.9022227138784714,
|
| 708 |
+
"mase": 18.338403496478318,
|
| 709 |
+
"n_origins": 10
|
| 710 |
+
},
|
| 711 |
+
"sn112": {
|
| 712 |
+
"ratio": 0.9782250905353135,
|
| 713 |
+
"mase": 63.83773716990079,
|
| 714 |
+
"n_origins": 10
|
| 715 |
+
},
|
| 716 |
+
"sn113": {
|
| 717 |
+
"ratio": 0.9809006934530131,
|
| 718 |
+
"mase": 43.17235151588498,
|
| 719 |
+
"n_origins": 10
|
| 720 |
+
},
|
| 721 |
+
"sn114": {
|
| 722 |
+
"ratio": 0.9499575133681246,
|
| 723 |
+
"mase": 20.335883086169382,
|
| 724 |
+
"n_origins": 10
|
| 725 |
+
},
|
| 726 |
+
"sn115": {
|
| 727 |
+
"ratio": 0.8121994380128376,
|
| 728 |
+
"mase": 28.872994170076012,
|
| 729 |
+
"n_origins": 10
|
| 730 |
+
},
|
| 731 |
+
"sn116": {
|
| 732 |
+
"ratio": 0.8397013492806894,
|
| 733 |
+
"mase": 27.400753812263268,
|
| 734 |
+
"n_origins": 10
|
| 735 |
+
},
|
| 736 |
+
"sn117": {
|
| 737 |
+
"ratio": 0.991047740635639,
|
| 738 |
+
"mase": 144.29506615913388,
|
| 739 |
+
"n_origins": 10
|
| 740 |
+
},
|
| 741 |
+
"sn118": {
|
| 742 |
+
"ratio": 0.9617820066522527,
|
| 743 |
+
"mase": 20.321387381395418,
|
| 744 |
+
"n_origins": 10
|
| 745 |
+
},
|
| 746 |
+
"sn119": {
|
| 747 |
+
"ratio": 0.8747321872272174,
|
| 748 |
+
"mase": 27.75265296633018,
|
| 749 |
+
"n_origins": 10
|
| 750 |
+
},
|
| 751 |
+
"sn12": {
|
| 752 |
+
"ratio": 1.1539874469962834,
|
| 753 |
+
"mase": 34.567536190041864,
|
| 754 |
+
"n_origins": 10
|
| 755 |
+
},
|
| 756 |
+
"sn120": {
|
| 757 |
+
"ratio": 0.9278741576528905,
|
| 758 |
+
"mase": 24.136033016769687,
|
| 759 |
+
"n_origins": 10
|
| 760 |
+
},
|
| 761 |
+
"sn121": {
|
| 762 |
+
"ratio": 0.973782395309567,
|
| 763 |
+
"mase": 24.540108418042337,
|
| 764 |
+
"n_origins": 10
|
| 765 |
+
},
|
| 766 |
+
"sn122": {
|
| 767 |
+
"ratio": 0.9913317125895283,
|
| 768 |
+
"mase": 44.60645520927915,
|
| 769 |
+
"n_origins": 10
|
| 770 |
+
},
|
| 771 |
+
"sn123": {
|
| 772 |
+
"ratio": 0.8350749026531844,
|
| 773 |
+
"mase": 16.78469272658742,
|
| 774 |
+
"n_origins": 10
|
| 775 |
+
},
|
| 776 |
+
"sn124": {
|
| 777 |
+
"ratio": 0.91156559288487,
|
| 778 |
+
"mase": 22.884078681009928,
|
| 779 |
+
"n_origins": 10
|
| 780 |
+
},
|
| 781 |
+
"sn125": {
|
| 782 |
+
"ratio": 0.9953666531797456,
|
| 783 |
+
"mase": 21.453249930322112,
|
| 784 |
+
"n_origins": 10
|
| 785 |
+
},
|
| 786 |
+
"sn126": {
|
| 787 |
+
"ratio": 0.8208377039520478,
|
| 788 |
+
"mase": 47.218481681665686,
|
| 789 |
+
"n_origins": 10
|
| 790 |
+
},
|
| 791 |
+
"sn127": {
|
| 792 |
+
"ratio": 0.7507972687881863,
|
| 793 |
+
"mase": 13.9825930882627,
|
| 794 |
+
"n_origins": 10
|
| 795 |
+
},
|
| 796 |
+
"sn128": {
|
| 797 |
+
"ratio": 0.9362833462208643,
|
| 798 |
+
"mase": 15.803473735779663,
|
| 799 |
+
"n_origins": 10
|
| 800 |
+
},
|
| 801 |
+
"sn13": {
|
| 802 |
+
"ratio": 1.0369636312146493,
|
| 803 |
+
"mase": 44.28186452286375,
|
| 804 |
+
"n_origins": 10
|
| 805 |
+
},
|
| 806 |
+
"sn14": {
|
| 807 |
+
"ratio": 0.5804718455480326,
|
| 808 |
+
"mase": 18.73518813063186,
|
| 809 |
+
"n_origins": 10
|
| 810 |
+
},
|
| 811 |
+
"sn15": {
|
| 812 |
+
"ratio": 0.8858292049899102,
|
| 813 |
+
"mase": 20.832773913152046,
|
| 814 |
+
"n_origins": 10
|
| 815 |
+
},
|
| 816 |
+
"sn16": {
|
| 817 |
+
"ratio": 0.540469544557578,
|
| 818 |
+
"mase": 7.110025504054074,
|
| 819 |
+
"n_origins": 10
|
| 820 |
+
},
|
| 821 |
+
"sn17": {
|
| 822 |
+
"ratio": 0.961773040335513,
|
| 823 |
+
"mase": 36.215443998637966,
|
| 824 |
+
"n_origins": 10
|
| 825 |
+
},
|
| 826 |
+
"sn18": {
|
| 827 |
+
"ratio": 0.996849147979048,
|
| 828 |
+
"mase": 32.97249377544224,
|
| 829 |
+
"n_origins": 10
|
| 830 |
+
},
|
| 831 |
+
"sn19": {
|
| 832 |
+
"ratio": 0.7909827615623507,
|
| 833 |
+
"mase": 18.446126473573127,
|
| 834 |
+
"n_origins": 10
|
| 835 |
+
},
|
| 836 |
+
"sn2": {
|
| 837 |
+
"ratio": 0.8004252157092535,
|
| 838 |
+
"mase": 19.643773547920034,
|
| 839 |
+
"n_origins": 10
|
| 840 |
+
},
|
| 841 |
+
"sn20": {
|
| 842 |
+
"ratio": 0.7251870968300413,
|
| 843 |
+
"mase": 37.122265735355924,
|
| 844 |
+
"n_origins": 10
|
| 845 |
+
},
|
| 846 |
+
"sn21": {
|
| 847 |
+
"ratio": 0.8019775947842485,
|
| 848 |
+
"mase": 22.88621813367402,
|
| 849 |
+
"n_origins": 10
|
| 850 |
+
},
|
| 851 |
+
"sn22": {
|
| 852 |
+
"ratio": 1.0058814640021623,
|
| 853 |
+
"mase": 93.13110144790525,
|
| 854 |
+
"n_origins": 10
|
| 855 |
+
},
|
| 856 |
+
"sn23": {
|
| 857 |
+
"ratio": 0.9486986666859901,
|
| 858 |
+
"mase": 42.24119835498095,
|
| 859 |
+
"n_origins": 10
|
| 860 |
+
},
|
| 861 |
+
"sn24": {
|
| 862 |
+
"ratio": 0.8304553263038431,
|
| 863 |
+
"mase": 13.013395779603506,
|
| 864 |
+
"n_origins": 10
|
| 865 |
+
},
|
| 866 |
+
"sn25": {
|
| 867 |
+
"ratio": 0.860526092964779,
|
| 868 |
+
"mase": 10.370710600879464,
|
| 869 |
+
"n_origins": 10
|
| 870 |
+
},
|
| 871 |
+
"sn26": {
|
| 872 |
+
"ratio": 0.9499212518662344,
|
| 873 |
+
"mase": 58.388093552927366,
|
| 874 |
+
"n_origins": 10
|
| 875 |
+
},
|
| 876 |
+
"sn27": {
|
| 877 |
+
"ratio": 0.9469480575163061,
|
| 878 |
+
"mase": 35.0632637961872,
|
| 879 |
+
"n_origins": 10
|
| 880 |
+
},
|
| 881 |
+
"sn28": {
|
| 882 |
+
"ratio": 0.9588196677142842,
|
| 883 |
+
"mase": 27.141196967578914,
|
| 884 |
+
"n_origins": 10
|
| 885 |
+
},
|
| 886 |
+
"sn29": {
|
| 887 |
+
"ratio": 1.0242994058879413,
|
| 888 |
+
"mase": 231.31447186439993,
|
| 889 |
+
"n_origins": 10
|
| 890 |
+
},
|
| 891 |
+
"sn3": {
|
| 892 |
+
"ratio": 0.8898059309194231,
|
| 893 |
+
"mase": 20.221434257112556,
|
| 894 |
+
"n_origins": 10
|
| 895 |
+
},
|
| 896 |
+
"sn30": {
|
| 897 |
+
"ratio": 0.8651750017343384,
|
| 898 |
+
"mase": 18.544330649345515,
|
| 899 |
+
"n_origins": 10
|
| 900 |
+
},
|
| 901 |
+
"sn31": {
|
| 902 |
+
"ratio": 0.961082212765688,
|
| 903 |
+
"mase": 21.631373433995474,
|
| 904 |
+
"n_origins": 10
|
| 905 |
+
},
|
| 906 |
+
"sn32": {
|
| 907 |
+
"ratio": 0.7337069583412643,
|
| 908 |
+
"mase": 25.16088548637792,
|
| 909 |
+
"n_origins": 10
|
| 910 |
+
},
|
| 911 |
+
"sn33": {
|
| 912 |
+
"ratio": 0.8087812330412981,
|
| 913 |
+
"mase": 31.088868517634054,
|
| 914 |
+
"n_origins": 10
|
| 915 |
+
},
|
| 916 |
+
"sn34": {
|
| 917 |
+
"ratio": 0.8416880771387749,
|
| 918 |
+
"mase": 19.22490326597332,
|
| 919 |
+
"n_origins": 10
|
| 920 |
+
},
|
| 921 |
+
"sn35": {
|
| 922 |
+
"ratio": 0.9044489821420332,
|
| 923 |
+
"mase": 19.266258643973213,
|
| 924 |
+
"n_origins": 10
|
| 925 |
+
},
|
| 926 |
+
"sn37": {
|
| 927 |
+
"ratio": 0.834007614391259,
|
| 928 |
+
"mase": 21.935277405792174,
|
| 929 |
+
"n_origins": 10
|
| 930 |
+
},
|
| 931 |
+
"sn38": {
|
| 932 |
+
"ratio": 0.9962147140232119,
|
| 933 |
+
"mase": 52.880514114858634,
|
| 934 |
+
"n_origins": 10
|
| 935 |
+
},
|
| 936 |
+
"sn39": {
|
| 937 |
+
"ratio": 0.8428449042291665,
|
| 938 |
+
"mase": 10.783101328872716,
|
| 939 |
+
"n_origins": 10
|
| 940 |
+
},
|
| 941 |
+
"sn4": {
|
| 942 |
+
"ratio": 0.9508289491735119,
|
| 943 |
+
"mase": 37.70049056123005,
|
| 944 |
+
"n_origins": 10
|
| 945 |
+
},
|
| 946 |
+
"sn40": {
|
| 947 |
+
"ratio": 0.8387831425092696,
|
| 948 |
+
"mase": 28.57228755938949,
|
| 949 |
+
"n_origins": 10
|
| 950 |
+
},
|
| 951 |
+
"sn41": {
|
| 952 |
+
"ratio": 0.8967055730048042,
|
| 953 |
+
"mase": 82.3046919666805,
|
| 954 |
+
"n_origins": 10
|
| 955 |
+
},
|
| 956 |
+
"sn42": {
|
| 957 |
+
"ratio": 0.955513630446943,
|
| 958 |
+
"mase": 112.74228467430973,
|
| 959 |
+
"n_origins": 10
|
| 960 |
+
},
|
| 961 |
+
"sn43": {
|
| 962 |
+
"ratio": 0.38498312527771994,
|
| 963 |
+
"mase": 5.477698176403117,
|
| 964 |
+
"n_origins": 10
|
| 965 |
+
},
|
| 966 |
+
"sn44": {
|
| 967 |
+
"ratio": 0.8938567357700996,
|
| 968 |
+
"mase": 23.215719787484606,
|
| 969 |
+
"n_origins": 10
|
| 970 |
+
},
|
| 971 |
+
"sn45": {
|
| 972 |
+
"ratio": 0.8909079299447316,
|
| 973 |
+
"mase": 35.801651407499754,
|
| 974 |
+
"n_origins": 10
|
| 975 |
+
},
|
| 976 |
+
"sn46": {
|
| 977 |
+
"ratio": 0.8659715896191346,
|
| 978 |
+
"mase": 11.320417370190858,
|
| 979 |
+
"n_origins": 10
|
| 980 |
+
},
|
| 981 |
+
"sn47": {
|
| 982 |
+
"ratio": 0.9792587424402253,
|
| 983 |
+
"mase": 93.67984648270198,
|
| 984 |
+
"n_origins": 10
|
| 985 |
+
},
|
| 986 |
+
"sn48": {
|
| 987 |
+
"ratio": 0.6026160780899604,
|
| 988 |
+
"mase": 13.496524476901818,
|
| 989 |
+
"n_origins": 10
|
| 990 |
+
},
|
| 991 |
+
"sn49": {
|
| 992 |
+
"ratio": 0.9080837842516091,
|
| 993 |
+
"mase": 18.657574193183624,
|
| 994 |
+
"n_origins": 10
|
| 995 |
+
},
|
| 996 |
+
"sn5": {
|
| 997 |
+
"ratio": 0.4124215732056892,
|
| 998 |
+
"mase": 11.971399195782325,
|
| 999 |
+
"n_origins": 10
|
| 1000 |
+
},
|
| 1001 |
+
"sn50": {
|
| 1002 |
+
"ratio": 0.9629165378473064,
|
| 1003 |
+
"mase": 25.00070132419499,
|
| 1004 |
+
"n_origins": 10
|
| 1005 |
+
},
|
| 1006 |
+
"sn51": {
|
| 1007 |
+
"ratio": 0.8013146133681427,
|
| 1008 |
+
"mase": 17.95355481392795,
|
| 1009 |
+
"n_origins": 10
|
| 1010 |
+
},
|
| 1011 |
+
"sn52": {
|
| 1012 |
+
"ratio": 1.0770560160907712,
|
| 1013 |
+
"mase": 68.09023423650629,
|
| 1014 |
+
"n_origins": 10
|
| 1015 |
+
},
|
| 1016 |
+
"sn53": {
|
| 1017 |
+
"ratio": 0.8306812825196536,
|
| 1018 |
+
"mase": 8.23156410625504,
|
| 1019 |
+
"n_origins": 10
|
| 1020 |
+
},
|
| 1021 |
+
"sn54": {
|
| 1022 |
+
"ratio": 0.881941716661875,
|
| 1023 |
+
"mase": 17.366526465411145,
|
| 1024 |
+
"n_origins": 10
|
| 1025 |
+
},
|
| 1026 |
+
"sn55": {
|
| 1027 |
+
"ratio": 0.9537658771756208,
|
| 1028 |
+
"mase": 36.76119172014495,
|
| 1029 |
+
"n_origins": 10
|
| 1030 |
+
},
|
| 1031 |
+
"sn56": {
|
| 1032 |
+
"ratio": 0.9236857993139064,
|
| 1033 |
+
"mase": 73.77672474399132,
|
| 1034 |
+
"n_origins": 10
|
| 1035 |
+
},
|
| 1036 |
+
"sn57": {
|
| 1037 |
+
"ratio": 0.999387169907059,
|
| 1038 |
+
"mase": 111.52442591924616,
|
| 1039 |
+
"n_origins": 10
|
| 1040 |
+
},
|
| 1041 |
+
"sn58": {
|
| 1042 |
+
"ratio": 0.8059375441250611,
|
| 1043 |
+
"mase": 83.95159241141104,
|
| 1044 |
+
"n_origins": 10
|
| 1045 |
+
},
|
| 1046 |
+
"sn6": {
|
| 1047 |
+
"ratio": 0.8804944026116206,
|
| 1048 |
+
"mase": 24.570812202657038,
|
| 1049 |
+
"n_origins": 10
|
| 1050 |
+
},
|
| 1051 |
+
"sn60": {
|
| 1052 |
+
"ratio": 0.8525426821055875,
|
| 1053 |
+
"mase": 15.255730960500024,
|
| 1054 |
+
"n_origins": 10
|
| 1055 |
+
},
|
| 1056 |
+
"sn61": {
|
| 1057 |
+
"ratio": 0.9630263348281641,
|
| 1058 |
+
"mase": 17.987349455453316,
|
| 1059 |
+
"n_origins": 10
|
| 1060 |
+
},
|
| 1061 |
+
"sn62": {
|
| 1062 |
+
"ratio": 0.7264188339927717,
|
| 1063 |
+
"mase": 18.953797792951306,
|
| 1064 |
+
"n_origins": 10
|
| 1065 |
+
},
|
| 1066 |
+
"sn63": {
|
| 1067 |
+
"ratio": 0.9066686148279953,
|
| 1068 |
+
"mase": 27.18642475276923,
|
| 1069 |
+
"n_origins": 10
|
| 1070 |
+
},
|
| 1071 |
+
"sn64": {
|
| 1072 |
+
"ratio": 0.4452512185150887,
|
| 1073 |
+
"mase": 15.430802493487281,
|
| 1074 |
+
"n_origins": 10
|
| 1075 |
+
},
|
| 1076 |
+
"sn65": {
|
| 1077 |
+
"ratio": 0.8151551513110047,
|
| 1078 |
+
"mase": 12.663825559940076,
|
| 1079 |
+
"n_origins": 10
|
| 1080 |
+
},
|
| 1081 |
+
"sn66": {
|
| 1082 |
+
"ratio": 0.8291481641353483,
|
| 1083 |
+
"mase": 12.66435331822775,
|
| 1084 |
+
"n_origins": 10
|
| 1085 |
+
},
|
| 1086 |
+
"sn67": {
|
| 1087 |
+
"ratio": 1.0395831827356314,
|
| 1088 |
+
"mase": 44.692607061689536,
|
| 1089 |
+
"n_origins": 10
|
| 1090 |
+
},
|
| 1091 |
+
"sn68": {
|
| 1092 |
+
"ratio": 0.6951993400309205,
|
| 1093 |
+
"mase": 16.137106671351308,
|
| 1094 |
+
"n_origins": 10
|
| 1095 |
+
},
|
| 1096 |
+
"sn69": {
|
| 1097 |
+
"ratio": 0.9941975810362784,
|
| 1098 |
+
"mase": 210.3069153588661,
|
| 1099 |
+
"n_origins": 10
|
| 1100 |
+
},
|
| 1101 |
+
"sn7": {
|
| 1102 |
+
"ratio": 0.9031413356844574,
|
| 1103 |
+
"mase": 42.3713092254516,
|
| 1104 |
+
"n_origins": 10
|
| 1105 |
+
},
|
| 1106 |
+
"sn71": {
|
| 1107 |
+
"ratio": 0.8876409135934156,
|
| 1108 |
+
"mase": 10.437379266714423,
|
| 1109 |
+
"n_origins": 10
|
| 1110 |
+
},
|
| 1111 |
+
"sn72": {
|
| 1112 |
+
"ratio": 0.8915833823254472,
|
| 1113 |
+
"mase": 56.58546436953286,
|
| 1114 |
+
"n_origins": 10
|
| 1115 |
+
},
|
| 1116 |
+
"sn73": {
|
| 1117 |
+
"ratio": 0.9396649093512319,
|
| 1118 |
+
"mase": 60.5194991878116,
|
| 1119 |
+
"n_origins": 10
|
| 1120 |
+
},
|
| 1121 |
+
"sn74": {
|
| 1122 |
+
"ratio": 0.8961613882880278,
|
| 1123 |
+
"mase": 67.33062009168744,
|
| 1124 |
+
"n_origins": 10
|
| 1125 |
+
},
|
| 1126 |
+
"sn75": {
|
| 1127 |
+
"ratio": 0.8584708354509981,
|
| 1128 |
+
"mase": 15.752250008828417,
|
| 1129 |
+
"n_origins": 10
|
| 1130 |
+
},
|
| 1131 |
+
"sn76": {
|
| 1132 |
+
"ratio": 0.9594258891047532,
|
| 1133 |
+
"mase": 85.65089655754088,
|
| 1134 |
+
"n_origins": 10
|
| 1135 |
+
},
|
| 1136 |
+
"sn77": {
|
| 1137 |
+
"ratio": 0.7604282045451413,
|
| 1138 |
+
"mase": 15.783610421977826,
|
| 1139 |
+
"n_origins": 10
|
| 1140 |
+
},
|
| 1141 |
+
"sn78": {
|
| 1142 |
+
"ratio": 0.8905783900194192,
|
| 1143 |
+
"mase": 13.316300347569006,
|
| 1144 |
+
"n_origins": 10
|
| 1145 |
+
},
|
| 1146 |
+
"sn79": {
|
| 1147 |
+
"ratio": 0.6341128777833023,
|
| 1148 |
+
"mase": 14.019521241947322,
|
| 1149 |
+
"n_origins": 10
|
| 1150 |
+
},
|
| 1151 |
+
"sn8": {
|
| 1152 |
+
"ratio": 0.8700181668039847,
|
| 1153 |
+
"mase": 21.863211634847858,
|
| 1154 |
+
"n_origins": 10
|
| 1155 |
+
},
|
| 1156 |
+
"sn80": {
|
| 1157 |
+
"ratio": 0.9048746118990336,
|
| 1158 |
+
"mase": 7.47732482243397,
|
| 1159 |
+
"n_origins": 10
|
| 1160 |
+
},
|
| 1161 |
+
"sn81": {
|
| 1162 |
+
"ratio": 0.7422273816216619,
|
| 1163 |
+
"mase": 8.283866283605038,
|
| 1164 |
+
"n_origins": 10
|
| 1165 |
+
},
|
| 1166 |
+
"sn82": {
|
| 1167 |
+
"ratio": 0.956396836955509,
|
| 1168 |
+
"mase": 38.570950557314546,
|
| 1169 |
+
"n_origins": 10
|
| 1170 |
+
},
|
| 1171 |
+
"sn83": {
|
| 1172 |
+
"ratio": 0.7375291133901192,
|
| 1173 |
+
"mase": 51.734409756003416,
|
| 1174 |
+
"n_origins": 10
|
| 1175 |
+
},
|
| 1176 |
+
"sn84": {
|
| 1177 |
+
"ratio": 0.9311433512482037,
|
| 1178 |
+
"mase": 148.0320204268663,
|
| 1179 |
+
"n_origins": 10
|
| 1180 |
+
},
|
| 1181 |
+
"sn85": {
|
| 1182 |
+
"ratio": 0.828689772158864,
|
| 1183 |
+
"mase": 17.468229044361415,
|
| 1184 |
+
"n_origins": 10
|
| 1185 |
+
},
|
| 1186 |
+
"sn87": {
|
| 1187 |
+
"ratio": 0.9717483078464719,
|
| 1188 |
+
"mase": 19.32749432818073,
|
| 1189 |
+
"n_origins": 10
|
| 1190 |
+
},
|
| 1191 |
+
"sn88": {
|
| 1192 |
+
"ratio": 0.9013456839550715,
|
| 1193 |
+
"mase": 23.540028412065965,
|
| 1194 |
+
"n_origins": 10
|
| 1195 |
+
},
|
| 1196 |
+
"sn89": {
|
| 1197 |
+
"ratio": 0.9164944420017417,
|
| 1198 |
+
"mase": 42.55112779045927,
|
| 1199 |
+
"n_origins": 10
|
| 1200 |
+
},
|
| 1201 |
+
"sn9": {
|
| 1202 |
+
"ratio": 0.7691865336584661,
|
| 1203 |
+
"mase": 23.037199489517594,
|
| 1204 |
+
"n_origins": 10
|
| 1205 |
+
},
|
| 1206 |
+
"sn90": {
|
| 1207 |
+
"ratio": 0.9480288609891467,
|
| 1208 |
+
"mase": 24.02101553726804,
|
| 1209 |
+
"n_origins": 10
|
| 1210 |
+
},
|
| 1211 |
+
"sn91": {
|
| 1212 |
+
"ratio": 0.785169065969023,
|
| 1213 |
+
"mase": 11.471282085505289,
|
| 1214 |
+
"n_origins": 10
|
| 1215 |
+
},
|
| 1216 |
+
"sn92": {
|
| 1217 |
+
"ratio": 0.8701254363208387,
|
| 1218 |
+
"mase": 68.59709282879105,
|
| 1219 |
+
"n_origins": 10
|
| 1220 |
+
},
|
| 1221 |
+
"sn93": {
|
| 1222 |
+
"ratio": 0.959125691103473,
|
| 1223 |
+
"mase": 19.820239991137324,
|
| 1224 |
+
"n_origins": 10
|
| 1225 |
+
},
|
| 1226 |
+
"sn94": {
|
| 1227 |
+
"ratio": 1.041316090177819,
|
| 1228 |
+
"mase": 41.93283481289839,
|
| 1229 |
+
"n_origins": 10
|
| 1230 |
+
},
|
| 1231 |
+
"sn95": {
|
| 1232 |
+
"ratio": 0.8067421493270648,
|
| 1233 |
+
"mase": 19.504511719613863,
|
| 1234 |
+
"n_origins": 10
|
| 1235 |
+
},
|
| 1236 |
+
"sn96": {
|
| 1237 |
+
"ratio": 0.8172504350853603,
|
| 1238 |
+
"mase": 13.941767471818123,
|
| 1239 |
+
"n_origins": 10
|
| 1240 |
+
},
|
| 1241 |
+
"sn97": {
|
| 1242 |
+
"ratio": 0.9558483120869641,
|
| 1243 |
+
"mase": 27.029455098265615,
|
| 1244 |
+
"n_origins": 10
|
| 1245 |
+
},
|
| 1246 |
+
"sn98": {
|
| 1247 |
+
"ratio": 1.0471468484767448,
|
| 1248 |
+
"mase": 65.32840895022676,
|
| 1249 |
+
"n_origins": 10
|
| 1250 |
+
},
|
| 1251 |
+
"sn99": {
|
| 1252 |
+
"ratio": 0.9834519798647178,
|
| 1253 |
+
"mase": 44.08026045946475,
|
| 1254 |
+
"n_origins": 10
|
| 1255 |
+
}
|
| 1256 |
+
}
|
| 1257 |
+
}
|
| 1258 |
+
}
|
| 1259 |
+
}
|
forecast_wrapper.py
ADDED
|
@@ -0,0 +1,358 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Auto-generated by cascade_model. Loads an arm checkpoint and decodes the
|
| 2 |
+
full horizon in one forward pass via contiguous patch masking.
|
| 3 |
+
|
| 4 |
+
forecast_quantiles_batch(histories, horizon) -> (B, horizon, num_q)
|
| 5 |
+
forecast_quantiles(history, horizon) -> (1, horizon, num_q)
|
| 6 |
+
forecast(history, horizon, num_samples) -> (1, num_samples, horizon)
|
| 7 |
+
"""
|
| 8 |
+
|
| 9 |
+
from __future__ import annotations
|
| 10 |
+
|
| 11 |
+
import hashlib
|
| 12 |
+
import importlib.util
|
| 13 |
+
import json
|
| 14 |
+
import sys
|
| 15 |
+
from pathlib import Path
|
| 16 |
+
|
| 17 |
+
import numpy as np
|
| 18 |
+
import torch
|
| 19 |
+
|
| 20 |
+
STABLE_DECODE_STEPS = 768
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
|
| 24 |
+
def _hurdle_mix(res_row, ctx_row, levels=None):
|
| 25 |
+
"""Apply the zero-movement hurdle to one row's (..., H, Q) quantiles."""
|
| 26 |
+
lv = np.asarray(levels if levels is not None else
|
| 27 |
+
[.1, .2, .3, .4, .5, .6, .7, .8, .9], dtype=np.float64)
|
| 28 |
+
tail = ctx_row[-2016:]
|
| 29 |
+
if len(tail) < 128:
|
| 30 |
+
return res_row
|
| 31 |
+
d = np.abs(np.diff(tail))
|
| 32 |
+
p_move = float(np.mean(d > 1e-12))
|
| 33 |
+
if p_move > 0.60: # live asset: exact no-op
|
| 34 |
+
return res_row
|
| 35 |
+
p_move = max(p_move, 1e-4)
|
| 36 |
+
v = float(tail[-1])
|
| 37 |
+
Hn = res_row.shape[-2]
|
| 38 |
+
out = res_row.copy()
|
| 39 |
+
for t in range(Hn):
|
| 40 |
+
pi = (1.0 - p_move) ** (t + 1)
|
| 41 |
+
if pi < 1e-3:
|
| 42 |
+
break # later steps: even less mass
|
| 43 |
+
q = np.sort(res_row[..., t, :], axis=-1)
|
| 44 |
+
flat_q = q.reshape(-1, q.shape[-1])
|
| 45 |
+
flat_o = out[..., t, :].reshape(-1, q.shape[-1])
|
| 46 |
+
for r in range(flat_q.shape[0]):
|
| 47 |
+
qr = flat_q[r]
|
| 48 |
+
Fv = float(np.interp(v, qr, lv, left=0.0, right=1.0))
|
| 49 |
+
lo = (1.0 - pi) * Fv
|
| 50 |
+
hi = lo + pi
|
| 51 |
+
newq = np.empty_like(qr)
|
| 52 |
+
for j, l in enumerate(lv):
|
| 53 |
+
if l < lo:
|
| 54 |
+
newq[j] = float(np.interp(l / (1.0 - pi), lv, qr))
|
| 55 |
+
elif l <= hi:
|
| 56 |
+
newq[j] = v
|
| 57 |
+
else:
|
| 58 |
+
newq[j] = float(np.interp((l - pi) / (1.0 - pi), lv, qr))
|
| 59 |
+
flat_o[r] = newq
|
| 60 |
+
return out
|
| 61 |
+
|
| 62 |
+
def _load_model_module(d: Path):
|
| 63 |
+
spec = importlib.util.spec_from_file_location("cascade_model_ckpt", d / "model.py")
|
| 64 |
+
mod = importlib.util.module_from_spec(spec)
|
| 65 |
+
sys.modules[spec.name] = mod
|
| 66 |
+
spec.loader.exec_module(mod)
|
| 67 |
+
return mod
|
| 68 |
+
|
| 69 |
+
|
| 70 |
+
class Wrapper:
|
| 71 |
+
def __init__(self, checkpoint_dir, device: str = "cpu"):
|
| 72 |
+
d = Path(checkpoint_dir)
|
| 73 |
+
self.device = device
|
| 74 |
+
cfg_obj = json.loads((d / "config.json").read_text())
|
| 75 |
+
self.m = _load_model_module(d)
|
| 76 |
+
self.cfg = self.m.CascadeModelConfig(**cfg_obj["config"])
|
| 77 |
+
self.quantile_levels = [float(v) for v in cfg_obj["quantile_levels"]]
|
| 78 |
+
self.levels = torch.tensor(self.quantile_levels, dtype=torch.float32, device=device)
|
| 79 |
+
self.model = self.m.CascadeModel(self.cfg).to(device).eval()
|
| 80 |
+
from safetensors.torch import load_file
|
| 81 |
+
self.model.load_state_dict(load_file(str(d / "weights.safetensors")))
|
| 82 |
+
|
| 83 |
+
def _prep(self, histories):
|
| 84 |
+
"""Return (context, missing_mask), both (B, window_len).
|
| 85 |
+
|
| 86 |
+
Real series have gaps. GIFT-Eval's electricity is 25% NaN, bitbrains
|
| 87 |
+
14%, car_parts 12% β and an unhandled NaN propagates through the causal
|
| 88 |
+
scaler into every prediction, so the whole config fails with "Forecast
|
| 89 |
+
contains NaN values". That silently cost 23 of 97 configs, concentrated
|
| 90 |
+
on exactly the messy observability data this model is for.
|
| 91 |
+
|
| 92 |
+
The architecture already handles this: the model takes a binary mask
|
| 93 |
+
channel (1 = unobserved), and causal_standardize excludes masked entries
|
| 94 |
+
from its statistics so they carry the last observed stats forward. It is
|
| 95 |
+
the same mechanism training uses for CPM. Inference simply never
|
| 96 |
+
populated it from NaNs.
|
| 97 |
+
|
| 98 |
+
Masked positions are zero-filled in the value channel β the model sees
|
| 99 |
+
the mask bit, not the filler.
|
| 100 |
+
"""
|
| 101 |
+
ps = self.cfg.patch_size
|
| 102 |
+
n_ctx = max(2, self.cfg.context_length // ps)
|
| 103 |
+
window = n_ctx * ps
|
| 104 |
+
rows, masks = [], []
|
| 105 |
+
for h in histories:
|
| 106 |
+
h = np.asarray(h, dtype=np.float64).reshape(-1)
|
| 107 |
+
miss = ~np.isfinite(h)
|
| 108 |
+
if h.shape[0] < window:
|
| 109 |
+
# Left-pad with the first OBSERVED value, and mark the pad
|
| 110 |
+
# unobserved so it cannot bias the causal statistics.
|
| 111 |
+
obs = h[~miss]
|
| 112 |
+
fill = obs[0] if obs.size else 0.0
|
| 113 |
+
pad_n = window - h.shape[0]
|
| 114 |
+
h = np.concatenate([np.full(pad_n, fill), h])
|
| 115 |
+
miss = np.concatenate([np.ones(pad_n, dtype=bool), miss])
|
| 116 |
+
else:
|
| 117 |
+
h, miss = h[-window:], miss[-window:]
|
| 118 |
+
if miss.all():
|
| 119 |
+
# Nothing observed at all: fall back to zeros, all-observed, so
|
| 120 |
+
# the scaler's eps floor keeps the forward pass finite.
|
| 121 |
+
h = np.zeros_like(h); miss = np.zeros_like(miss)
|
| 122 |
+
else:
|
| 123 |
+
h = np.where(miss, 0.0, h)
|
| 124 |
+
rows.append(h)
|
| 125 |
+
masks.append(miss.astype(np.float64))
|
| 126 |
+
x = torch.as_tensor(np.stack(rows), dtype=torch.float64, device=self.device)
|
| 127 |
+
m = torch.as_tensor(np.stack(masks), dtype=torch.float64, device=self.device)
|
| 128 |
+
return x, m
|
| 129 |
+
|
| 130 |
+
@torch.no_grad()
|
| 131 |
+
def _decode_block_z(self, z, block: int, miss=None):
|
| 132 |
+
ps = self.cfg.patch_size
|
| 133 |
+
ctx_p = min(z.shape[1] // ps, self.cfg.max_patches - block)
|
| 134 |
+
ctx = z[:, -ctx_p * ps:].view(z.shape[0], ctx_p, ps)
|
| 135 |
+
filler = torch.zeros(z.shape[0], block, ps, dtype=ctx.dtype, device=self.device)
|
| 136 |
+
# Per-ENTRY mask: horizon patches are fully unobserved, and context
|
| 137 |
+
# patches carry whichever entries were missing in the history. A
|
| 138 |
+
# patch-level mask would be too coarse β one missing step would blank
|
| 139 |
+
# the whole 32-step patch.
|
| 140 |
+
m_ctx = (torch.zeros(z.shape[0], ctx_p * ps, dtype=ctx.dtype, device=self.device)
|
| 141 |
+
if miss is None else miss[:, -ctx_p * ps:].to(ctx.dtype))
|
| 142 |
+
m_ctx = m_ctx.view(z.shape[0], ctx_p, ps)
|
| 143 |
+
m_hz = torch.ones(z.shape[0], block, ps, dtype=ctx.dtype, device=self.device)
|
| 144 |
+
mask = torch.cat([m_ctx, m_hz], dim=1)
|
| 145 |
+
pred = self.model(torch.cat([ctx, filler], dim=1), mask=mask)
|
| 146 |
+
q = pred[:, ctx_p - 1: ctx_p + block - 1]
|
| 147 |
+
q, _ = torch.sort(q, dim=-1)
|
| 148 |
+
return q.reshape(z.shape[0], block * ps, -1)
|
| 149 |
+
|
| 150 |
+
@torch.no_grad()
|
| 151 |
+
def _decode_quantiles(self, x, horizon: int, miss=None):
|
| 152 |
+
ps = self.cfg.patch_size
|
| 153 |
+
stable = max(1, min(STABLE_DECODE_STEPS // ps, self.cfg.max_patches - 2))
|
| 154 |
+
remaining = -(-int(horizon) // ps)
|
| 155 |
+
lo = hi = None
|
| 156 |
+
out = []
|
| 157 |
+
if miss is None:
|
| 158 |
+
miss = torch.zeros_like(x)
|
| 159 |
+
while remaining > 0:
|
| 160 |
+
block = min(remaining, stable)
|
| 161 |
+
# Mask-aware scaling: missing entries are excluded from the causal
|
| 162 |
+
# statistics, so they carry the last observed loc/scale forward
|
| 163 |
+
# instead of poisoning them with NaN.
|
| 164 |
+
z, loc_t, scale_t = self.m.causal_standardize(
|
| 165 |
+
x, mask=miss, binary_passthrough=self.cfg.binary_passthrough
|
| 166 |
+
)
|
| 167 |
+
loc = loc_t[:, -1:].double().unsqueeze(-1)
|
| 168 |
+
scale = scale_t[:, -1:].double().unsqueeze(-1)
|
| 169 |
+
if lo is None:
|
| 170 |
+
# Clamp bounds from the OBSERVED range only β a masked entry is
|
| 171 |
+
# zero-filled, and letting that zero set the bound would drag
|
| 172 |
+
# the clamp toward the origin on a series that never visits it.
|
| 173 |
+
obs = torch.where(miss > 0, torch.nan, x)
|
| 174 |
+
lo = obs.nan_to_num(nan=float("inf")).min(dim=-1, keepdim=True).values.unsqueeze(-1) - 1e4 * scale
|
| 175 |
+
hi = obs.nan_to_num(nan=float("-inf")).max(dim=-1, keepdim=True).values.unsqueeze(-1) + 1e4 * scale
|
| 176 |
+
qz = self._decode_block_z(z.to(torch.float32), block, miss=miss)
|
| 177 |
+
q = torch.sinh(qz.double()) * scale + loc
|
| 178 |
+
q = torch.clamp(q, min=lo, max=hi)
|
| 179 |
+
out.append(q)
|
| 180 |
+
remaining -= block
|
| 181 |
+
if remaining > 0:
|
| 182 |
+
committed = q[..., q.shape[-1] // 2]
|
| 183 |
+
x = torch.cat([x, committed], dim=1)
|
| 184 |
+
# Committed medians are OBSERVED context for later blocks.
|
| 185 |
+
miss = torch.cat([miss, torch.zeros_like(committed)], dim=1)
|
| 186 |
+
return torch.cat(out, dim=1)[:, : int(horizon)]
|
| 187 |
+
|
| 188 |
+
@torch.no_grad()
|
| 189 |
+
def forecast_quantiles_batch(self, histories, horizon: int) -> np.ndarray:
|
| 190 |
+
x, miss = self._prep(list(histories))
|
| 191 |
+
q = self._decode_quantiles(x, horizon, miss=miss)
|
| 192 |
+
qq = q.detach().cpu().numpy().astype(np.float64)
|
| 193 |
+
|
| 194 |
+
# HURDLE (2026-09-02): zero-movement mixture, horizon-aware.
|
| 195 |
+
try:
|
| 196 |
+
_H = [np.asarray(h, dtype=np.float64) for h in histories]
|
| 197 |
+
for _b, _h in enumerate(_H):
|
| 198 |
+
_row = _h[0] if _h.ndim == 2 else _h
|
| 199 |
+
qq[_b] = _hurdle_mix(qq[_b], _row)
|
| 200 |
+
except Exception:
|
| 201 |
+
pass
|
| 202 |
+
return qq
|
| 203 |
+
|
| 204 |
+
def forecast_quantiles(self, history, horizon: int) -> np.ndarray:
|
| 205 |
+
return self.forecast_quantiles_batch([history], horizon)
|
| 206 |
+
|
| 207 |
+
# ββ Β§2: multivariate decode with future-known covariates βββββββββββββββββ
|
| 208 |
+
#
|
| 209 |
+
# The univariate path above cannot express this experiment at all: _prep
|
| 210 |
+
# flattens to 1-D and the model call passes no variate_types, so
|
| 211 |
+
# roles_on = cfg.use_variate_roles and variate_types is not None
|
| 212 |
+
# is False at EVERY inference, and a role-trained checkpoint decodes with
|
| 213 |
+
# its role embeddings inert. Everything below exists so a covariate can
|
| 214 |
+
# actually reach the model.
|
| 215 |
+
|
| 216 |
+
@torch.no_grad()
|
| 217 |
+
def forecast_quantiles_mv(self, histories, horizon: int, *, n_targets: int = 1,
|
| 218 |
+
n_future_cov: int = 0, future=None) -> np.ndarray:
|
| 219 |
+
"""Decode targets given past history and KNOWN future covariates.
|
| 220 |
+
|
| 221 |
+
histories (B, C, L) channels 0..n_targets-1 are targets; the LAST
|
| 222 |
+
n_future_cov are future-known; the rest are
|
| 223 |
+
past covariates. Matches assign_roles(), which
|
| 224 |
+
is positional by channel index β so the caller
|
| 225 |
+
must not permute variates.
|
| 226 |
+
future (B, n_future_cov, horizon) the covariate values over the
|
| 227 |
+
forecast window. Required when n_future_cov>0:
|
| 228 |
+
that knowledge IS the feature being tested.
|
| 229 |
+
returns (B, n_targets, horizon, num_q)
|
| 230 |
+
|
| 231 |
+
Standardisation runs over context AND horizon in one causal pass. That
|
| 232 |
+
is deliberate and matches training: causal_standardize excludes masked
|
| 233 |
+
entries from its statistics, so the target rows' zero-filled horizon
|
| 234 |
+
cannot corrupt their own loc/scale, while the covariate rows β genuinely
|
| 235 |
+
observed across the horizon β keep updating exactly as they did during
|
| 236 |
+
training. Freezing the covariate scaler at the last context step instead
|
| 237 |
+
would introduce a train/inference mismatch that no error would surface.
|
| 238 |
+
"""
|
| 239 |
+
ps = self.cfg.patch_size
|
| 240 |
+
H = int(horizon)
|
| 241 |
+
x = np.asarray(histories, dtype=np.float64)
|
| 242 |
+
if x.ndim != 3:
|
| 243 |
+
raise ValueError(f"histories must be (B, C, L); got {x.shape}")
|
| 244 |
+
B, C, L = x.shape
|
| 245 |
+
if not 1 <= n_targets <= C:
|
| 246 |
+
raise ValueError(f"n_targets={n_targets} outside 1..C={C}")
|
| 247 |
+
if n_future_cov < 0 or n_targets + n_future_cov > C:
|
| 248 |
+
raise ValueError(f"n_targets={n_targets} + n_future_cov={n_future_cov} > C={C}")
|
| 249 |
+
if n_future_cov and future is None:
|
| 250 |
+
raise ValueError("n_future_cov>0 requires `future` values")
|
| 251 |
+
|
| 252 |
+
# Positional roles, mirroring cascade_model.batching.assign_roles.
|
| 253 |
+
roles = np.full(C, 1, dtype=np.int64) # ROLE_PAST_COV
|
| 254 |
+
roles[:n_targets] = 0 # ROLE_TARGET
|
| 255 |
+
if n_future_cov:
|
| 256 |
+
roles[C - n_future_cov:] = 2 # ROLE_FUTURE_COV
|
| 257 |
+
|
| 258 |
+
hz_p = max(1, -(-H // ps))
|
| 259 |
+
n_ctx = max(2, self.cfg.context_length // ps)
|
| 260 |
+
if n_ctx + hz_p > self.cfg.max_patches:
|
| 261 |
+
n_ctx = self.cfg.max_patches - hz_p
|
| 262 |
+
if n_ctx < 2:
|
| 263 |
+
raise ValueError(
|
| 264 |
+
f"horizon {H} needs {hz_p} patches; max_patches="
|
| 265 |
+
f"{self.cfg.max_patches} leaves no room for context")
|
| 266 |
+
window, hz = n_ctx * ps, hz_p * ps
|
| 267 |
+
|
| 268 |
+
vals = np.zeros((B, C, window + hz), dtype=np.float64)
|
| 269 |
+
miss = np.zeros((B, C, window + hz), dtype=np.float64)
|
| 270 |
+
for b in range(B):
|
| 271 |
+
for c in range(C):
|
| 272 |
+
h = x[b, c]
|
| 273 |
+
m = ~np.isfinite(h)
|
| 274 |
+
if h.shape[0] < window:
|
| 275 |
+
obs = h[~m]
|
| 276 |
+
fill = obs[0] if obs.size else 0.0
|
| 277 |
+
pad = window - h.shape[0]
|
| 278 |
+
h = np.concatenate([np.full(pad, fill), h])
|
| 279 |
+
m = np.concatenate([np.ones(pad, dtype=bool), m])
|
| 280 |
+
else:
|
| 281 |
+
h, m = h[-window:], m[-window:]
|
| 282 |
+
if m.all():
|
| 283 |
+
h, m = np.zeros_like(h), np.zeros_like(m)
|
| 284 |
+
vals[b, c, :window] = np.where(m, 0.0, h)
|
| 285 |
+
miss[b, c, :window] = m.astype(np.float64)
|
| 286 |
+
miss[:, :, window:] = 1.0 # horizon unobserved β¦
|
| 287 |
+
|
| 288 |
+
if n_future_cov:
|
| 289 |
+
f = np.asarray(future, dtype=np.float64)
|
| 290 |
+
if f.ndim == 2:
|
| 291 |
+
f = f[:, None, :]
|
| 292 |
+
if f.shape[:2] != (B, n_future_cov):
|
| 293 |
+
raise ValueError(
|
| 294 |
+
f"future must be (B={B}, n_future_cov={n_future_cov}, >=H); got {f.shape}")
|
| 295 |
+
if f.shape[2] < H:
|
| 296 |
+
raise ValueError(f"future covers {f.shape[2]} steps; horizon is {H}")
|
| 297 |
+
# Pad to the patch boundary by repeating the last known value: those
|
| 298 |
+
# steps sit past the requested horizon and are sliced off below.
|
| 299 |
+
g = np.concatenate([f[:, :, :H], np.repeat(f[:, :, H - 1:H], hz - H, axis=2)],
|
| 300 |
+
axis=2) if hz > H else f[:, :, :hz]
|
| 301 |
+
fm = ~np.isfinite(g)
|
| 302 |
+
vals[:, C - n_future_cov:, window:] = np.where(fm, 0.0, g)
|
| 303 |
+
miss[:, C - n_future_cov:, window:] = fm.astype(np.float64) # β¦ except these
|
| 304 |
+
|
| 305 |
+
xt = torch.as_tensor(vals, dtype=torch.float64, device=self.device)
|
| 306 |
+
mt = torch.as_tensor(miss, dtype=torch.float64, device=self.device)
|
| 307 |
+
z, loc, scale = self.m.causal_standardize(
|
| 308 |
+
xt.reshape(B * C, -1), mask=mt.reshape(B * C, -1),
|
| 309 |
+
binary_passthrough=self.cfg.binary_passthrough)
|
| 310 |
+
P = n_ctx + hz_p
|
| 311 |
+
patches = z.reshape(B, C, P, ps).to(torch.float32)
|
| 312 |
+
pmask = mt.reshape(B, C, P, ps).to(torch.float32)
|
| 313 |
+
vt = torch.as_tensor(roles, device=self.device)
|
| 314 |
+
|
| 315 |
+
pred = self.model(patches, mask=pmask, variate_types=vt) # (B,C,P,ps,Q)
|
| 316 |
+
q = pred[:, :n_targets, n_ctx - 1: n_ctx + hz_p - 1]
|
| 317 |
+
q, _ = torch.sort(q, dim=-1)
|
| 318 |
+
q = q.reshape(B, n_targets, hz, -1)[:, :, :H]
|
| 319 |
+
|
| 320 |
+
# Invert with the TARGET rows' anchors at the last context step; they are
|
| 321 |
+
# frozen across the horizon anyway, since those entries are masked.
|
| 322 |
+
loc = loc.reshape(B, C, -1)[:, :n_targets, window - 1][..., None, None]
|
| 323 |
+
scale = scale.reshape(B, C, -1)[:, :n_targets, window - 1][..., None, None]
|
| 324 |
+
out = torch.sinh(q.double()) * scale.double() + loc.double()
|
| 325 |
+
res = out.detach().cpu().numpy().astype(np.float64)
|
| 326 |
+
|
| 327 |
+
# HURDLE (2026-09-02): zero-movement mixture, horizon-aware.
|
| 328 |
+
try:
|
| 329 |
+
_H = [np.asarray(h, dtype=np.float64) for h in histories]
|
| 330 |
+
for _b, _h in enumerate(_H):
|
| 331 |
+
_row = _h[0] if _h.ndim == 2 else _h
|
| 332 |
+
res[_b] = _hurdle_mix(res[_b], _row)
|
| 333 |
+
except Exception:
|
| 334 |
+
pass
|
| 335 |
+
return res
|
| 336 |
+
|
| 337 |
+
@torch.no_grad()
|
| 338 |
+
def forecast(self, history, horizon: int, num_samples: int) -> np.ndarray:
|
| 339 |
+
hist = np.asarray(history, dtype=np.float64).reshape(-1)
|
| 340 |
+
seed_src = (hist.tobytes() + int(horizon).to_bytes(8, "big")
|
| 341 |
+
+ int(num_samples).to_bytes(8, "big"))
|
| 342 |
+
seed = int.from_bytes(hashlib.sha256(seed_src).digest()[:8], "big") & ((1 << 63) - 1)
|
| 343 |
+
generator = torch.Generator(device=self.device)
|
| 344 |
+
generator.manual_seed(seed)
|
| 345 |
+
x, miss = self._prep([hist])
|
| 346 |
+
q = self._decode_quantiles(x, horizon, miss=miss)[0]
|
| 347 |
+
nq = q.shape[-1]
|
| 348 |
+
levels = self.levels
|
| 349 |
+
u = torch.rand(int(num_samples), int(horizon), device=self.device, generator=generator)
|
| 350 |
+
idx = torch.searchsorted(levels, u.clamp(levels[0].item(), levels[-1].item()))
|
| 351 |
+
idx = idx.clamp(1, nq - 1)
|
| 352 |
+
qe = q.unsqueeze(0).expand(u.shape[0], -1, -1)
|
| 353 |
+
vl = torch.gather(qe, -1, (idx - 1).unsqueeze(-1)).squeeze(-1)
|
| 354 |
+
vh = torch.gather(qe, -1, idx.unsqueeze(-1)).squeeze(-1)
|
| 355 |
+
ql = levels[idx - 1].double(); qh = levels[idx].double()
|
| 356 |
+
frac = ((u.double() - ql) / (qh - ql).clamp_min(1e-8)).clamp(0, 1)
|
| 357 |
+
out = vl + frac * (vh - vl)
|
| 358 |
+
return out.detach().cpu().numpy().reshape(1, int(num_samples), int(horizon))
|
model.py
ADDED
|
@@ -0,0 +1,1305 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Toto2 backbone + the four upgrades.
|
| 2 |
+
|
| 3 |
+
Forked from ``cascade/trainer/toto2_model.py`` @ cascade main 5e885b3. The fork
|
| 4 |
+
is deliberate rather than a subclass: the changes thread through ``_Block.forward``
|
| 5 |
+
(attention masks), ``Toto2Model.forward`` (variate roles), and the scaler, and
|
| 6 |
+
this file has to stay **self-contained torch** because it is copied into every
|
| 7 |
+
checkpoint as ``model.py`` so a wrapper can rebuild the architecture to load
|
| 8 |
+
weights. No cascade imports.
|
| 9 |
+
|
| 10 |
+
What differs from upstream, and why:
|
| 11 |
+
|
| 12 |
+
* **Β§0 grouping is honoured per size.** Upstream's ``Toto2Config`` has
|
| 13 |
+
``layer_group_size`` but ``from_contract`` never reads it, so every size
|
| 14 |
+
inherits 4. Every released rung sets it equal to ``num_layers`` (one variate
|
| 15 |
+
layer each), so a 24-layer model inheriting 4 gets six.
|
| 16 |
+
|
| 17 |
+
* **Β§2 future-known covariates.** Variate roles are positional β channels
|
| 18 |
+
``0..n_targets-1`` are targets, the rest covariates β because the corpus is
|
| 19 |
+
finite floats with no role axis and the generator contract cannot express
|
| 20 |
+
observability. Roles drive three things: a learned 3-way type embedding, a
|
| 21 |
+
per-type time mask (targets and past covariates stay strictly causal, future-
|
| 22 |
+
known covariates may attend bidirectionally), and an asymmetric variate mask
|
| 23 |
+
(a covariate query can never read a target key). That trio is what makes
|
| 24 |
+
target-causality hold by induction over block depth β none of it is specific
|
| 25 |
+
to a recurrent mixer, which is why this is a mask change and not a backbone
|
| 26 |
+
rewrite.
|
| 27 |
+
|
| 28 |
+
* **Β§2b binary detector.** Under the arcsinh scaler a sparse binary column is
|
| 29 |
+
degenerate: the gap between the two standardised levels blows up as the
|
| 30 |
+
positive rate goes to zero. Real future-known covariates are mostly binary and
|
| 31 |
+
sparse (deploy flags, maintenance windows, cron ticks), so binary rows bypass
|
| 32 |
+
the affine and keep their {0,1} encoding.
|
| 33 |
+
|
| 34 |
+
* **Β§3 windowed time attention.** A bounded window ``W`` over the patch axis,
|
| 35 |
+
for the inference-time probe. Set ``time_window = 0`` for unbounded (the
|
| 36 |
+
default, and what training uses).
|
| 37 |
+
|
| 38 |
+
Everything else β CPM, the robust causal scaler, PerDimScale, xPos, the u-ΞΌP
|
| 39 |
+
residual scheme, the pinball head β is upstream's, unchanged.
|
| 40 |
+
"""
|
| 41 |
+
|
| 42 |
+
from __future__ import annotations
|
| 43 |
+
|
| 44 |
+
import math
|
| 45 |
+
import os
|
| 46 |
+
from dataclasses import dataclass, field
|
| 47 |
+
|
| 48 |
+
import torch
|
| 49 |
+
import torch.nn as nn
|
| 50 |
+
import torch.nn.functional as F
|
| 51 |
+
|
| 52 |
+
QUANTILE_LEVELS = (0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9)
|
| 53 |
+
|
| 54 |
+
# Variate roles. Positional by convention: channels 0..n_targets-1 are targets.
|
| 55 |
+
ROLE_TARGET = 0
|
| 56 |
+
ROLE_PAST_COV = 1
|
| 57 |
+
ROLE_FUTURE_COV = 2
|
| 58 |
+
N_ROLES = 3
|
| 59 |
+
|
| 60 |
+
Z_CLAMP = 64.0
|
| 61 |
+
|
| 62 |
+
|
| 63 |
+
@dataclass
|
| 64 |
+
class CascadeModelConfig:
|
| 65 |
+
d_model: int = 256
|
| 66 |
+
num_layers: int = 4
|
| 67 |
+
num_heads: int = 4
|
| 68 |
+
head_dim: int = 64
|
| 69 |
+
patch_size: int = 32
|
| 70 |
+
mlp_expansion: int = 2
|
| 71 |
+
d_ff: int = 0
|
| 72 |
+
num_quantiles: int = 9
|
| 73 |
+
# Toto-2.0-style deep output head: 0 = the original single linear (every
|
| 74 |
+
# checkpoint before 2026-08-31), >0 = 2-layer MLP head with that hidden
|
| 75 |
+
# width plus a skip projection. The skip carries the linear-head function,
|
| 76 |
+
# and linear2 is ZERO-INIT, so at init the MLP head computes exactly what
|
| 77 |
+
# a fresh linear head would β and a warm-start can drop pretrained linear
|
| 78 |
+
# head weights into the skip (trainer remaps head.weight -> head.skip.*)
|
| 79 |
+
# making "add head depth to a trained model" an exact no-op at step 0.
|
| 80 |
+
head_mlp_hidden: int = 0
|
| 81 |
+
# Toto-2.0's exact FFN: bias-free SwiGLU (fc1 emits gate+value, 2*d_ff)
|
| 82 |
+
# instead of our plain GELU 2-layer. Tensor-verified on the 4m release
|
| 83 |
+
# (ffn.fc1 [1376, 256] = 2*688, ffn.fc2 [256, 688], no biases).
|
| 84 |
+
ffn_swiglu: bool = False
|
| 85 |
+
# Toto-2.0's exact input: skip-projection residual MLP patch->hidden->d
|
| 86 |
+
# (patch_proj.{linear1,linear2,skip_proj} in the release, hidden 4*d)
|
| 87 |
+
# replacing our Linear patch_embed + dim-preserving _ResidualMLP.
|
| 88 |
+
embed_skip_mlp: int = 0
|
| 89 |
+
# T4FIX (2026-09-01): MAE-style learned mask token. Fully-missing patches
|
| 90 |
+
# get this d_model vector INSTEAD of embedding (zeros||mask-flag) β the
|
| 91 |
+
# nonlinear embed then only ever sees real data. Registered because the
|
| 92 |
+
# t4 bisect showed the skip-MLP embed learns ~2x worse CPM fill with
|
| 93 |
+
# overdispersed quantiles when it must embed the missing-patch input
|
| 94 |
+
# itself. False = off (byte-identical).
|
| 95 |
+
embed_mask_token: bool = False
|
| 96 |
+
# Toto-2.0 has NO dim-preserving MLP between the final norm and the head
|
| 97 |
+
# (only the fused output head) β drop ours for exact replication.
|
| 98 |
+
no_out_mlp: bool = False
|
| 99 |
+
context_length: int = 4096
|
| 100 |
+
horizon: int = 64
|
| 101 |
+
max_patches: int = 256
|
| 102 |
+
layer_group_size: int = 4
|
| 103 |
+
cpm_c_max: int = 16
|
| 104 |
+
cpm_p_max: float = 0.4
|
| 105 |
+
residual_mult: float = 0.75
|
| 106 |
+
# ββ Β§2 ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 107 |
+
#: Enable the variate-type embedding and the role-aware masks. Off β this
|
| 108 |
+
#: model is numerically upstream's.
|
| 109 |
+
use_variate_roles: bool = False
|
| 110 |
+
#: Bypass the arcsinh affine for rows that are binary. Only meaningful with
|
| 111 |
+
#: roles on, but harmless (and still correct) without them.
|
| 112 |
+
binary_passthrough: bool = False
|
| 113 |
+
# ββ Β§3 ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 114 |
+
#: Bounded time-attention window in PATCHES. 0 = unbounded (training).
|
| 115 |
+
time_window: int = 0
|
| 116 |
+
# Attention sinks: first N patches always visible under a window.
|
| 117 |
+
# 0 = off, which is bit-identical to the pre-sinks behaviour.
|
| 118 |
+
attn_sinks: int = 0
|
| 119 |
+
#: Attention implementation for the WINDOWED time axis.
|
| 120 |
+
#: "sdpa" β additive mask into scaled_dot_product_attention. Correct,
|
| 121 |
+
#: but supplying any attn_mask drops SDPA off its fused kernel and
|
| 122 |
+
#: onto the materialised-matrix path: measured 0.73x one-shot.
|
| 123 |
+
#: "flex" β compile the mask INTO a fused kernel via flex_attention.
|
| 124 |
+
#: The prize is removing that ~27% overhead, NOT block sparsity: at
|
| 125 |
+
#: ctx 4096 the time axis is 128 patches, where a W=64 window skips only
|
| 126 |
+
#: 25% of positions and attention is a few percent of a layer anyway.
|
| 127 |
+
#: Requires torch >= 2.5 AND a compiler toolchain: torch.compile drives
|
| 128 |
+
#: Triton, which builds a small C extension and therefore needs the
|
| 129 |
+
#: Python dev headers. A slim image often lacks them, in which case
|
| 130 |
+
#: compilation raises and this degrades to sdpa (numerically identical,
|
| 131 |
+
#: verified to ~4e-7 relative) rather than killing the run. To supply
|
| 132 |
+
#: them without root:
|
| 133 |
+
#: uv python install 3.12
|
| 134 |
+
#: export CPATH=$HOME/.local/share/uv/python/cpython-3.12.*/include/python3.12
|
| 135 |
+
#: NOTE the helper links only against libcuda, not libpython, so headers
|
| 136 |
+
#: from any 3.12.x build are sufficient.
|
| 137 |
+
attn_impl: str = "sdpa"
|
| 138 |
+
#: EXP-F control: disable rotary position encoding entirely. The whole
|
| 139 |
+
#: rope family is downstream of an ARITHMETIC diagnosis (19/32 pairs never
|
| 140 |
+
#: complete half a turn); this measures whether position encoding is load-
|
| 141 |
+
#: bearing at all on a 128-position axis. If skill barely moves, the rest of
|
| 142 |
+
#: the family is a distraction.
|
| 143 |
+
use_rope: bool = True
|
| 144 |
+
#: EXP-B: the frequency-ladder base. 10000 was chosen for language contexts
|
| 145 |
+
#: of many thousands of tokens. rope_scale SHIFTS the ladder uniformly; base
|
| 146 |
+
#: COMPRESSES it, which is the knob that owns the diagnosed problem β the
|
| 147 |
+
#: spread from 1.0 to 1.3e-4 rad/position across only 128 positions.
|
| 148 |
+
#: base ~ 46 makes all 32 pairs complete at least half a turn at L=128,
|
| 149 |
+
#: versus 13 at stock, and costs nothing at the fast end.
|
| 150 |
+
rope_base: float = 10000.0
|
| 151 |
+
#: Position-interpolation scale on the ROTATION only (see _xpos). 1.0 = stock.
|
| 152 |
+
#: s < 1 spreads positions across more of the frequency ladder; s > 1
|
| 153 |
+
#: compresses them. Not a learned parameter, so it can also be swept at
|
| 154 |
+
#: inference on a fixed checkpoint.
|
| 155 |
+
rope_scale: float = 1.0
|
| 156 |
+
#: xPos DECAY width. 512 is inherited from a much longer-sequence setting;
|
| 157 |
+
#: against a 128-position axis the decay exponent only spans +-0.125. This is
|
| 158 |
+
#: the one part of xPos credited with extrapolation that the rope family
|
| 159 |
+
#: never swept. 512 reproduces every result recorded so far.
|
| 160 |
+
xpos_scale_base: float = 512.0
|
| 161 |
+
#: YaRN / NTK-by-parts: interpolate SLOW pairs, leave FAST pairs
|
| 162 |
+
#: extrapolating, instead of PI's uniform rescale. Off reproduces stock.
|
| 163 |
+
yarn: bool = False
|
| 164 |
+
#: Ramp bounds in ROTATIONS-per-context. Defaults are set for a 128-position
|
| 165 |
+
#: axis (r spans ~0.002 to ~20.4), NOT YaRN's published 1/32, which assume
|
| 166 |
+
#: thousands of tokens and would put every pair below the ramp here β
|
| 167 |
+
#: silently degrading to plain PI, the method EXP-C measured failing.
|
| 168 |
+
yarn_alpha: float = 0.5
|
| 169 |
+
yarn_beta: float = 8.0
|
| 170 |
+
#: YaRN attention temperature. 1.0 = off.
|
| 171 |
+
attn_temp: float = 1.0
|
| 172 |
+
#: PARTIAL ROPE: rotate only the fastest ``k`` frequency pairs and leave the
|
| 173 |
+
#: rest untouched. 0 = rotate all (stock).
|
| 174 |
+
#:
|
| 175 |
+
#: Motivated by EXP-B rather than by the LLM literature. Lowering the base
|
| 176 |
+
#: (46, 100) made things monotonically WORSE, worst on short horizon. The
|
| 177 |
+
#: reading: slow pairs act as near-content dims, and compressing the ladder
|
| 178 |
+
#: forces them to rotate, destroying that.
|
| 179 |
+
#:
|
| 180 |
+
#: CAREFUL with the thresholds β an earlier version of this comment conflated
|
| 181 |
+
#: them and a test caught it. At 128 positions:
|
| 182 |
+
#: * 13 pairs are USABLE (T*f >= pi, can disambiguate across the context),
|
| 183 |
+
#: * but only the 7 beyond pair 25 are NEGLIGIBLE (T*f < 0.1).
|
| 184 |
+
#: Truncating at 13 moves the layer output ~39%; at 25 it moves <2%. So the
|
| 185 |
+
#: split is a smooth gradient, not a clean 13/19 partition, and the pairs
|
| 186 |
+
#: between are doing real work.
|
| 187 |
+
#:
|
| 188 |
+
#: This makes the allocation explicit and tunable rather than an accident of
|
| 189 |
+
#: the base. The interesting sweep range is therefore k in ~[13, 32].
|
| 190 |
+
rope_partial_k: int = 0
|
| 191 |
+
#: LEARNABLE frequency ladder: promote inv_freq from a fixed buffer to a
|
| 192 |
+
#: parameter (32 scalars per time layer). EXP-B swept ONE degree of freedom
|
| 193 |
+
#: and found nothing; this gives 32 and lets the model choose its own
|
| 194 |
+
#: geometry. Also diagnostic β the learned ladder can be read off afterwards,
|
| 195 |
+
#: which says more than any sweep. Stored in log space so frequencies stay
|
| 196 |
+
#: positive and the optimiser moves them multiplicatively.
|
| 197 |
+
rope_learnable: bool = False
|
| 198 |
+
#: TRAINING-time scale randomisation (Β§ option 1). 0 = off. Otherwise each
|
| 199 |
+
#: forward draws rope_scale log-uniformly from [1/j, j], so the model learns
|
| 200 |
+
#: a scale-INVARIANT distance metric rather than memorising one spacing.
|
| 201 |
+
#: This is the training-side counterpart to PI, and the direct response to
|
| 202 |
+
#: EXP-C: you cannot bolt interpolation on at deploy, so train it in.
|
| 203 |
+
rope_scale_jitter: float = 0.0
|
| 204 |
+
#: ARCH 2x2 B-row: the TIME-axis sequence mixer. "attention" (default) is
|
| 205 |
+
#: the existing xPos MHA and is bit-identical to the pre-field model (no
|
| 206 |
+
#: extra parameters are created, so old checkpoints load unchanged).
|
| 207 |
+
#: "mlstm" swaps ONLY the mixing operator inside the same pre-norm /
|
| 208 |
+
#: depth-scaled-residual scaffold for a TiRex/xLSTM-style matrix-LSTM:
|
| 209 |
+
#: the stabilized parallel form from NX-AI mlstm_kernels native_stablef
|
| 210 |
+
#: (logsigmoid forget gates, tril log-decay matrix, row-max stabilizer m,
|
| 211 |
+
#: qk scale Dh^-0.5, n = max(|sum C~|, exp(-m)) + 1e-6), gate soft-cap 15,
|
| 212 |
+
#: per-head LayerNorm (eps 1e-6, weight only), sigmoid output gate β
|
| 213 |
+
#: verified against the published kernel source 2026-08-30. Variate-axis
|
| 214 |
+
#: blocks stay attention (variates are unordered). Position comes from the
|
| 215 |
+
#: recurrence, so rope/xPos and window masks do not apply to this mixer;
|
| 216 |
+
#: future-known-covariate rows get a reversed second pass, averaged, to
|
| 217 |
+
#: keep the Β§2 bidirectional contract.
|
| 218 |
+
time_mixer: str = "attention"
|
| 219 |
+
|
| 220 |
+
@property
|
| 221 |
+
def ffn_hidden(self) -> int:
|
| 222 |
+
return self.d_ff if self.d_ff > 0 else self.d_model * self.mlp_expansion
|
| 223 |
+
|
| 224 |
+
def to_dict(self) -> dict:
|
| 225 |
+
return {k: getattr(self, k) for k in self.__dataclass_fields__}
|
| 226 |
+
|
| 227 |
+
def time_mixer_plan(self) -> list:
|
| 228 |
+
"""Per-layer mixer assignment. None = derive from time_mixer scalar.
|
| 229 |
+
|
| 230 |
+
"pattern:<m0>,<m1>,..." assigns the k-th TIME block (variate blocks
|
| 231 |
+
always stay attention) the k-th entry, cycling if the pattern is
|
| 232 |
+
shorter than the time-block count. H1 (TiRex-2-skeleton hybrid,
|
| 233 |
+
2026-08-30): "pattern:mlstm,slstm,mlstm,attention,slstm" β alternating
|
| 234 |
+
recurrence with one windowed-attention time layer at ~2/3 depth.
|
| 235 |
+
"""
|
| 236 |
+
tm = str(getattr(self, "time_mixer", "attention"))
|
| 237 |
+
if not tm.startswith("pattern:"):
|
| 238 |
+
return [None] * self.num_layers
|
| 239 |
+
pat = [x.strip() for x in tm[len("pattern:"):].split(",") if x.strip()]
|
| 240 |
+
bad = [x for x in pat if x not in ("attention", "mlstm", "slstm", "mamba")]
|
| 241 |
+
if bad or not pat:
|
| 242 |
+
raise ValueError(f"bad time_mixer pattern entries: {bad or 'empty'}")
|
| 243 |
+
plan, k = [], 0
|
| 244 |
+
for i in range(self.num_layers):
|
| 245 |
+
if self.layer_axis(i) == "time":
|
| 246 |
+
plan.append(pat[k % len(pat)])
|
| 247 |
+
k += 1
|
| 248 |
+
else:
|
| 249 |
+
plan.append("attention")
|
| 250 |
+
return plan
|
| 251 |
+
|
| 252 |
+
def layer_axis(self, i: int) -> str:
|
| 253 |
+
g = max(1, self.layer_group_size)
|
| 254 |
+
return "variate" if i % g == g - 1 else "time"
|
| 255 |
+
|
| 256 |
+
@classmethod
|
| 257 |
+
def from_size(cls, size, **overrides) -> CascadeModelConfig:
|
| 258 |
+
"""Build from a :class:`cascade_model.sizes.Size`, honouring its grouping."""
|
| 259 |
+
ctx = int(overrides.pop("context_length", 4096))
|
| 260 |
+
hz = int(overrides.pop("horizon", 64))
|
| 261 |
+
return cls(
|
| 262 |
+
d_model=size.d_model, num_layers=size.num_layers,
|
| 263 |
+
num_heads=size.num_heads, head_dim=size.head_dim,
|
| 264 |
+
patch_size=size.patch_size, d_ff=size.d_ff,
|
| 265 |
+
layer_group_size=size.layer_group_size,
|
| 266 |
+
context_length=ctx, horizon=hz,
|
| 267 |
+
max_patches=max(8, (ctx + hz) // size.patch_size + 4),
|
| 268 |
+
**overrides,
|
| 269 |
+
)
|
| 270 |
+
|
| 271 |
+
|
| 272 |
+
# ββ robust causal scaler βββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 273 |
+
|
| 274 |
+
|
| 275 |
+
def is_binary_row(x: torch.Tensor, *, atol: float = 1e-9) -> torch.Tensor:
|
| 276 |
+
"""``(B,)`` bool: which rows of ``(B, L)`` carry only the values 0 and 1.
|
| 277 |
+
|
| 278 |
+
TiRex-2's binary detector. A sparse binary column under an arcsinh scaler is
|
| 279 |
+
degenerate β with positive rate ``p``, the standardised gap between the two
|
| 280 |
+
levels grows like ``1/sqrt(p(1-p))`` and diverges as ``p β 0``, so the exact
|
| 281 |
+
signal a deploy flag carries is the thing the scaler destroys.
|
| 282 |
+
"""
|
| 283 |
+
return ((x.abs() < atol) | ((x - 1.0).abs() < atol)).all(dim=-1)
|
| 284 |
+
|
| 285 |
+
|
| 286 |
+
def causal_standardize(
|
| 287 |
+
x: torch.Tensor,
|
| 288 |
+
mask: torch.Tensor | None = None,
|
| 289 |
+
*,
|
| 290 |
+
min_obs: int = 8,
|
| 291 |
+
eps: float = 1e-5,
|
| 292 |
+
binary_passthrough: bool = False,
|
| 293 |
+
) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor]:
|
| 294 |
+
"""Per-step causal location/scale under an arcsinh transform.
|
| 295 |
+
|
| 296 |
+
``x`` is ``(B, L)``; ``mask`` is optional binary ``(B, L)``, 1 = unobserved.
|
| 297 |
+
Returns ``(z, loc, scale)``, each ``(B, L)``, with
|
| 298 |
+
``z = arcsinh((x - loc) / scale)``.
|
| 299 |
+
|
| 300 |
+
With ``binary_passthrough`` a row detected as binary gets ``loc = 0``,
|
| 301 |
+
``scale = 1`` β the identity, so ``z = arcsinh(x)`` maps {0,1} to
|
| 302 |
+
{0, 0.8814} and the encoding survives at any positive rate.
|
| 303 |
+
"""
|
| 304 |
+
B, L = x.shape
|
| 305 |
+
keep = torch.ones_like(x) if mask is None else 1.0 - mask.to(x.dtype)
|
| 306 |
+
x64 = x.double()
|
| 307 |
+
k64 = keep.double()
|
| 308 |
+
ref = x64.gather(-1, (k64 > 0).to(torch.int64).argmax(dim=-1, keepdim=True))
|
| 309 |
+
xk = (x64 - ref) * k64
|
| 310 |
+
n = k64.cumsum(dim=-1)
|
| 311 |
+
cnt = n.clamp_min(1.0)
|
| 312 |
+
loc = xk.cumsum(dim=-1) / cnt
|
| 313 |
+
var = (xk * xk).cumsum(dim=-1) / cnt - loc * loc
|
| 314 |
+
loc = loc + ref
|
| 315 |
+
scale = var.clamp_min(0.0).sqrt().clamp_min(eps)
|
| 316 |
+
ok = n >= float(min_obs)
|
| 317 |
+
has = ok.any(dim=-1)
|
| 318 |
+
first = torch.where(
|
| 319 |
+
has, ok.to(torch.int64).argmax(dim=-1), torch.full((B,), L - 1, device=x.device)
|
| 320 |
+
)[:, None]
|
| 321 |
+
loc = torch.where(ok, loc, loc.gather(-1, first))
|
| 322 |
+
scale = torch.where(ok, scale, scale.gather(-1, first))
|
| 323 |
+
if binary_passthrough:
|
| 324 |
+
binr = is_binary_row(x)[:, None]
|
| 325 |
+
loc = torch.where(binr, torch.zeros_like(loc), loc)
|
| 326 |
+
scale = torch.where(binr, torch.ones_like(scale), scale)
|
| 327 |
+
z = torch.asinh((x64 - loc) / scale).clamp_(-Z_CLAMP, Z_CLAMP)
|
| 328 |
+
return z.to(x.dtype), loc.to(x.dtype), scale.to(x.dtype)
|
| 329 |
+
|
| 330 |
+
|
| 331 |
+
def patch_anchors(loc, scale, patch_size: int):
|
| 332 |
+
B, L = loc.shape
|
| 333 |
+
P = L // patch_size
|
| 334 |
+
return (
|
| 335 |
+
loc.view(B, P, patch_size)[:, :, -1],
|
| 336 |
+
scale.view(B, P, patch_size)[:, :, -1],
|
| 337 |
+
)
|
| 338 |
+
|
| 339 |
+
|
| 340 |
+
def invert_standardize(z, loc, scale):
|
| 341 |
+
return torch.sinh(z) * scale + loc
|
| 342 |
+
|
| 343 |
+
|
| 344 |
+
# ββ masks (Β§2, Β§3) βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 345 |
+
|
| 346 |
+
|
| 347 |
+
def variate_mask(
|
| 348 |
+
variate_types: torch.Tensor, group_ids: torch.Tensor | None = None
|
| 349 |
+
) -> torch.Tensor:
|
| 350 |
+
"""``(V, V)`` additive mask for the variate-attention axis.
|
| 351 |
+
|
| 352 |
+
Two rules, and the asymmetry is the whole point:
|
| 353 |
+
|
| 354 |
+
* variates only attend within their own group (block-diagonal, as upstream's
|
| 355 |
+
grouped variate attention already assumes),
|
| 356 |
+
* a covariate QUERY may never read a target KEY.
|
| 357 |
+
|
| 358 |
+
The second is what preserves target-causality once future-known covariates
|
| 359 |
+
are allowed to attend bidirectionally along time. Without it, a future-known
|
| 360 |
+
covariate at horizon position t could read a target key, attend forward in
|
| 361 |
+
time, and leak a future target value back into an earlier prediction β the
|
| 362 |
+
exact failure that shows up as a suspiciously good benchmark score.
|
| 363 |
+
"""
|
| 364 |
+
v = variate_types.reshape(-1)
|
| 365 |
+
if group_ids is None:
|
| 366 |
+
group_ids = torch.zeros_like(v)
|
| 367 |
+
g = group_ids.reshape(-1)
|
| 368 |
+
same_group = g.view(-1, 1) == g.view(1, -1)
|
| 369 |
+
q_is_cov = (v != ROLE_TARGET).view(-1, 1)
|
| 370 |
+
k_is_tgt = (v == ROLE_TARGET).view(1, -1)
|
| 371 |
+
allowed = same_group & ~(q_is_cov & k_is_tgt)
|
| 372 |
+
# A row that can see nothing would produce NaN from softmax over all -inf.
|
| 373 |
+
# Self-attention is always legal, so pin the diagonal.
|
| 374 |
+
allowed = allowed | torch.eye(v.numel(), dtype=torch.bool, device=v.device)
|
| 375 |
+
out = torch.zeros(allowed.shape, dtype=torch.float32, device=v.device)
|
| 376 |
+
return out.masked_fill(~allowed, float("-inf"))
|
| 377 |
+
|
| 378 |
+
|
| 379 |
+
def window_mask(T: int, W: int, *, causal: bool, sinks: int = 0,
|
| 380 |
+
device=None) -> torch.Tensor:
|
| 381 |
+
"""``(T, T)`` additive mask for a bounded attention window of ``W`` patches.
|
| 382 |
+
|
| 383 |
+
``causal`` keeps the band strictly at or below the diagonal. ``W <= 0``
|
| 384 |
+
means unbounded, in which case the caller should skip the mask entirely and
|
| 385 |
+
stay on the fast kernel path.
|
| 386 |
+
|
| 387 |
+
``sinks`` keeps the first ``S`` positions permanently visible to every query
|
| 388 |
+
IN ADDITION to the sliding band β "attention sinks" (arXiv 2309.17453).
|
| 389 |
+
Softmax attention concentrates heavily on the earliest positions regardless
|
| 390 |
+
of their content, so a sliding window that evicts them destabilises the
|
| 391 |
+
distribution; retaining a handful recovers most of the loss at a fraction of
|
| 392 |
+
the cache. That matters here because Β§3 measured a 512-step window failing
|
| 393 |
+
with a textbook horizon gradient (+3.40 / +6.04 / +9.48% MASE, worst on
|
| 394 |
+
long), which is the signature this mechanism predicts.
|
| 395 |
+
|
| 396 |
+
``sinks=0`` is the exact previous behaviour.
|
| 397 |
+
"""
|
| 398 |
+
i = torch.arange(T, device=device).view(-1, 1)
|
| 399 |
+
j = torch.arange(T, device=device).view(1, -1)
|
| 400 |
+
allowed = (j > i - W) & (j < i + W) if not causal else (j <= i) & (j > i - W)
|
| 401 |
+
if sinks > 0:
|
| 402 |
+
sink = j < int(sinks)
|
| 403 |
+
# A sink is still bound by causality when the axis is causal β a target
|
| 404 |
+
# row must never read forward, sink or not.
|
| 405 |
+
allowed = allowed | (sink & (j <= i)) if causal else allowed | sink
|
| 406 |
+
out = torch.zeros((T, T), dtype=torch.float32, device=device)
|
| 407 |
+
return out.masked_fill(~allowed, float("-inf"))
|
| 408 |
+
|
| 409 |
+
|
| 410 |
+
_FLEX_CACHE: dict = {}
|
| 411 |
+
_FLEX_FN = None
|
| 412 |
+
|
| 413 |
+
|
| 414 |
+
class _FlexUnavailable:
|
| 415 |
+
"""Sentinel: flex was tried and failed; never try again this process."""
|
| 416 |
+
|
| 417 |
+
def __call__(self, *a, **k):
|
| 418 |
+
raise RuntimeError("flex unavailable")
|
| 419 |
+
|
| 420 |
+
|
| 421 |
+
_FLEX_UNAVAILABLE = _FlexUnavailable()
|
| 422 |
+
|
| 423 |
+
|
| 424 |
+
def _additive_from_block(block_mask, q):
|
| 425 |
+
"""Recover a dense additive mask from a BlockMask, for the fallback path."""
|
| 426 |
+
dense = block_mask.to_dense() if hasattr(block_mask, "to_dense") else None
|
| 427 |
+
if dense is None:
|
| 428 |
+
return None
|
| 429 |
+
m = dense[0, 0].to(torch.bool)
|
| 430 |
+
out = torch.zeros(m.shape, dtype=q.dtype, device=q.device)
|
| 431 |
+
return out.masked_fill(~m, float("-inf"))
|
| 432 |
+
|
| 433 |
+
|
| 434 |
+
def _flex_fn():
|
| 435 |
+
"""``flex_attention``, COMPILED, because uncompiled it defeats the purpose.
|
| 436 |
+
|
| 437 |
+
Called eagerly, flex_attention warns and falls back to an unfused
|
| 438 |
+
implementation that materialises the full scores matrix β precisely the
|
| 439 |
+
pessimisation the sdpa+mask path already suffers. Compiling is what turns
|
| 440 |
+
the mask into a fused kernel and recovers the ~27%.
|
| 441 |
+
|
| 442 |
+
Compiled once and cached at module level: torch.compile has real warmup cost
|
| 443 |
+
and re-tracing per call would cost far more than the kernel saves.
|
| 444 |
+
"""
|
| 445 |
+
global _FLEX_FN
|
| 446 |
+
if _FLEX_FN is _FLEX_UNAVAILABLE:
|
| 447 |
+
raise RuntimeError("flex unavailable")
|
| 448 |
+
if _FLEX_FN is None:
|
| 449 |
+
from torch.nn.attention.flex_attention import flex_attention
|
| 450 |
+
|
| 451 |
+
_FLEX_FN = torch.compile(flex_attention, dynamic=True)
|
| 452 |
+
return _FLEX_FN
|
| 453 |
+
|
| 454 |
+
|
| 455 |
+
def flex_block_mask(T: int, W: int, *, causal: bool, sinks: int = 0, device=None):
|
| 456 |
+
"""A ``BlockMask`` matching :func:`window_mask`, for ``flex_attention``.
|
| 457 |
+
|
| 458 |
+
Built from the SAME predicate as the additive mask so the two paths cannot
|
| 459 |
+
drift apart β a fused kernel that quietly attends over a slightly different
|
| 460 |
+
set than the reference would be indistinguishable from a real result.
|
| 461 |
+
|
| 462 |
+
Cached: constructing a BlockMask is not free and the shape is fixed for a
|
| 463 |
+
given (T, W, sinks, causal, device).
|
| 464 |
+
"""
|
| 465 |
+
from torch.nn.attention.flex_attention import create_block_mask
|
| 466 |
+
|
| 467 |
+
key = (int(T), int(W), int(sinks), bool(causal), str(device))
|
| 468 |
+
hit = _FLEX_CACHE.get(key)
|
| 469 |
+
if hit is not None:
|
| 470 |
+
return hit
|
| 471 |
+
|
| 472 |
+
Wi, Si = int(W), int(sinks)
|
| 473 |
+
|
| 474 |
+
def mask_mod(b, h, q, kv):
|
| 475 |
+
band = ((kv > q - Wi) & (kv <= q)) if causal else ((kv > q - Wi) & (kv < q + Wi))
|
| 476 |
+
if Si > 0:
|
| 477 |
+
sink = kv < Si
|
| 478 |
+
band = band | (sink & (kv <= q)) if causal else band | sink
|
| 479 |
+
return band
|
| 480 |
+
|
| 481 |
+
bm = create_block_mask(mask_mod, B=None, H=None, Q_LEN=int(T), KV_LEN=int(T),
|
| 482 |
+
device=device)
|
| 483 |
+
_FLEX_CACHE[key] = bm
|
| 484 |
+
return bm
|
| 485 |
+
|
| 486 |
+
|
| 487 |
+
# ββ building blocks ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 488 |
+
|
| 489 |
+
|
| 490 |
+
class _SwiGLU(nn.Module):
|
| 491 |
+
"""Toto-2.0's block FFN: bias-free gated unit, fc1 -> (gate, value)."""
|
| 492 |
+
|
| 493 |
+
def __init__(self, dim: int, hidden: int):
|
| 494 |
+
super().__init__()
|
| 495 |
+
self.fc1 = nn.Linear(dim, 2 * hidden, bias=False)
|
| 496 |
+
self.fc2 = nn.Linear(hidden, dim, bias=False)
|
| 497 |
+
|
| 498 |
+
def forward(self, x):
|
| 499 |
+
g, v = self.fc1(x).chunk(2, dim=-1)
|
| 500 |
+
return self.fc2(F.silu(g) * v)
|
| 501 |
+
|
| 502 |
+
|
| 503 |
+
class _ResidualMLP(nn.Module):
|
| 504 |
+
def __init__(self, dim: int, hidden: int):
|
| 505 |
+
super().__init__()
|
| 506 |
+
self.net = nn.Sequential(
|
| 507 |
+
nn.Linear(dim, hidden, bias=False),
|
| 508 |
+
nn.SiLU(),
|
| 509 |
+
nn.Linear(hidden, dim, bias=False),
|
| 510 |
+
)
|
| 511 |
+
|
| 512 |
+
def forward(self, x):
|
| 513 |
+
return x + self.net(x)
|
| 514 |
+
|
| 515 |
+
|
| 516 |
+
class _MLPHead(nn.Module):
|
| 517 |
+
"""Toto-2.0-style deep output head: skip(x) + linear2(act(linear1(x))).
|
| 518 |
+
|
| 519 |
+
Datadog's checkpoint puts 1.79M params here (512 -> 2048 -> 288 + skip)
|
| 520 |
+
where our recipe has always used the 0.15M single linear β the largest
|
| 521 |
+
structural difference between the two models, targeted at distribution
|
| 522 |
+
shape, which is where ALL measured fine-tune value lives (MASE flat,
|
| 523 |
+
CRPS gains). linear2 is zero-init so the head starts as exactly the skip
|
| 524 |
+
(i.e. exactly a linear head): from scratch that is the standard init, and
|
| 525 |
+
a warm-start that maps pretrained head weights onto the skip is an exact
|
| 526 |
+
function-preserving upgrade.
|
| 527 |
+
"""
|
| 528 |
+
|
| 529 |
+
def __init__(self, dim: int, hidden: int, out: int):
|
| 530 |
+
super().__init__()
|
| 531 |
+
self.skip = nn.Linear(dim, out)
|
| 532 |
+
self.linear1 = nn.Linear(dim, hidden)
|
| 533 |
+
self.act = nn.SiLU()
|
| 534 |
+
self.linear2 = nn.Linear(hidden, out)
|
| 535 |
+
|
| 536 |
+
def forward(self, x):
|
| 537 |
+
return self.skip(x) + self.linear2(self.act(self.linear1(x)))
|
| 538 |
+
|
| 539 |
+
|
| 540 |
+
def _yarn_inv_freq(inv_freq, rope_scale: float, n_pos: int,
|
| 541 |
+
alpha: float, beta: float):
|
| 542 |
+
"""YaRN / NTK-by-parts: interpolate SLOW pairs, leave FAST pairs alone.
|
| 543 |
+
|
| 544 |
+
Plain PI divides every position by ``s``, so every relative distance in the
|
| 545 |
+
sequence is rescaled at once. Measured (EXP-C), that is much worse zero-shot
|
| 546 |
+
than not extending at all: -12.8 / -25.3 / -24.1% against naive at s=2.
|
| 547 |
+
|
| 548 |
+
YaRN's argument is that the two ends of the ladder want opposite treatment.
|
| 549 |
+
A pair that completes many rotations across the context is carrying local,
|
| 550 |
+
high-resolution distance information and should be left EXTRAPOLATING. A
|
| 551 |
+
pair that has barely turned is carrying absolute-ish position and is the one
|
| 552 |
+
that actually goes out of range, so it should be INTERPOLATED.
|
| 553 |
+
|
| 554 |
+
The ramp runs on ``r_i``, the number of full rotations pair ``i`` completes
|
| 555 |
+
across ``n_pos`` positions::
|
| 556 |
+
|
| 557 |
+
r_i = n_pos * inv_freq_i / (2 * pi)
|
| 558 |
+
|
| 559 |
+
r_i <= alpha -> fully interpolated (inv_freq / s)
|
| 560 |
+
r_i >= beta -> untouched (inv_freq)
|
| 561 |
+
between -> linear blend
|
| 562 |
+
|
| 563 |
+
**alpha/beta must be set for THIS axis, not copied from the LLM defaults.**
|
| 564 |
+
YaRN's published 1/32 assume thousands of tokens. Here the whole axis is 128
|
| 565 |
+
positions and r spans ~0.002 to ~20.4, so with beta=32:
|
| 566 |
+
|
| 567 |
+
* 21 of 32 pairs sit at or below alpha and are FULLY interpolated,
|
| 568 |
+
* the remaining 11 are only partially ramped,
|
| 569 |
+
* and NO pair ever reaches full extrapolation β the fastest tops out at
|
| 570 |
+
gamma ~ 0.63.
|
| 571 |
+
|
| 572 |
+
That is not identical to plain PI, but it leans heavily toward it, and plain
|
| 573 |
+
PI is the method EXP-C measured failing. The defaults below put the ramp
|
| 574 |
+
where this ladder actually lives.
|
| 575 |
+
"""
|
| 576 |
+
r = n_pos * inv_freq / (2.0 * math.pi)
|
| 577 |
+
if beta <= alpha:
|
| 578 |
+
raise ValueError(f"yarn beta({beta}) must exceed alpha({alpha})")
|
| 579 |
+
gamma = ((r - alpha) / (beta - alpha)).clamp(0.0, 1.0) # 1 = extrapolate
|
| 580 |
+
return gamma * inv_freq + (1.0 - gamma) * (inv_freq / rope_scale)
|
| 581 |
+
|
| 582 |
+
|
| 583 |
+
def _xpos(q, k, inv_freq, zeta, scale_base: float = 512.0, rope_scale: float = 1.0,
|
| 584 |
+
*, yarn: bool = False, yarn_alpha: float = 0.5, yarn_beta: float = 8.0,
|
| 585 |
+
attn_temp: float = 1.0, partial_k: int = 0):
|
| 586 |
+
"""xPos = RoPE rotation + a per-dimension decay.
|
| 587 |
+
|
| 588 |
+
``rope_scale`` divides the position before the rotation (position
|
| 589 |
+
interpolation). Deployed, PI uses s > 1 to compress an over-long axis back
|
| 590 |
+
into the trained range. TRAINED, the interesting direction is s < 1, which
|
| 591 |
+
SPREADS positions across more of the frequency ladder.
|
| 592 |
+
|
| 593 |
+
The motivation is that the ladder is badly matched to this axis. With
|
| 594 |
+
head_dim=64, base=10000 and a 4096-step context at patch_size=32, the time
|
| 595 |
+
axis is only 128 positions: the fastest pair sweeps 20 cycles while the
|
| 596 |
+
slowest sweeps 1.0 degree end-to-end, and **19 of 32 pairs never complete
|
| 597 |
+
half a rotation**, so they carry no within-context positional information.
|
| 598 |
+
Under the W=2048 production window (64 positions) it is 21 of 32.
|
| 599 |
+
|
| 600 |
+
s = 1/2 doubles every rate, activating 3 more pairs while keeping the
|
| 601 |
+
fastest at 2 rad/position β clear of the aliasing wall at s < 1/pi ~ 0.318.
|
| 602 |
+
|
| 603 |
+
The DECAY term is a SEPARATE mechanism from the rotation β attention falloff
|
| 604 |
+
with distance β and ``scale_base`` is its width. It is also the part of xPos
|
| 605 |
+
that the original paper credits for extrapolation, and this project never
|
| 606 |
+
tuned it: the whole rope family (EXP-B base, EXP-C scale) swept rotation and
|
| 607 |
+
left decay at its default.
|
| 608 |
+
|
| 609 |
+
``scale_base=512`` is inherited from a setting with sequences several times
|
| 610 |
+
longer than ours. Against 128 positions the exponent ``(t - T//2)/512`` only
|
| 611 |
+
spans +-0.125, so the decay operates in a heavily compressed corner of its
|
| 612 |
+
range. Lowering it widens that range. NOTE this is arithmetic plus reasoning,
|
| 613 |
+
NOT a published result β I could find no literature tuning scale_base as a
|
| 614 |
+
function of sequence length, so it is a hypothesis with a cheap test.
|
| 615 |
+
"""
|
| 616 |
+
T = q.shape[-2]
|
| 617 |
+
t = torch.arange(T, device=q.device, dtype=inv_freq.dtype)
|
| 618 |
+
if yarn:
|
| 619 |
+
eff = _yarn_inv_freq(inv_freq, rope_scale, T, yarn_alpha, yarn_beta)
|
| 620 |
+
freqs = torch.outer(t, eff)
|
| 621 |
+
else:
|
| 622 |
+
freqs = torch.outer(t / rope_scale, inv_freq)
|
| 623 |
+
if partial_k:
|
| 624 |
+
# Rotate only the fastest `partial_k` pairs; zero the rest so cos=1,
|
| 625 |
+
# sin=0 and those dims pass through unrotated. Cheaper and clearer than
|
| 626 |
+
# slicing the tensors, and it keeps every downstream shape identical.
|
| 627 |
+
if not 0 < partial_k <= freqs.shape[-1]:
|
| 628 |
+
raise ValueError(
|
| 629 |
+
f"rope_partial_k={partial_k} outside 1..{freqs.shape[-1]}")
|
| 630 |
+
freqs = freqs.clone()
|
| 631 |
+
freqs[:, partial_k:] = 0.0
|
| 632 |
+
cos = freqs.cos().repeat_interleave(2, dim=-1)
|
| 633 |
+
sin = freqs.sin().repeat_interleave(2, dim=-1)
|
| 634 |
+
power = ((t - T // 2) / scale_base)[:, None]
|
| 635 |
+
scale = (zeta[None, :] ** power).repeat_interleave(2, dim=-1)
|
| 636 |
+
|
| 637 |
+
def rotate(x):
|
| 638 |
+
x1 = x[..., 0::2]
|
| 639 |
+
x2 = x[..., 1::2]
|
| 640 |
+
return torch.stack((-x2, x1), dim=-1).flatten(-2)
|
| 641 |
+
|
| 642 |
+
qo = (q * cos + rotate(q) * sin) * scale
|
| 643 |
+
ko = (k * cos + rotate(k) * sin) / scale
|
| 644 |
+
if attn_temp != 1.0:
|
| 645 |
+
# YaRN's second half: a longer context spreads softmax mass thinner, so
|
| 646 |
+
# it sharpens the logits by a constant. Folded into q because the logits
|
| 647 |
+
# are qΒ·k β equivalent, and it keeps the fused attention kernel.
|
| 648 |
+
qo = qo * attn_temp
|
| 649 |
+
return qo, ko
|
| 650 |
+
|
| 651 |
+
|
| 652 |
+
def _soft_cap(x: torch.Tensor, cap: float = 15.0) -> torch.Tensor:
|
| 653 |
+
"""xLSTM gate soft-cap: cap * tanh(x / cap)."""
|
| 654 |
+
return cap * torch.tanh(x / cap)
|
| 655 |
+
|
| 656 |
+
|
| 657 |
+
class _MultiHeadNorm(nn.Module):
|
| 658 |
+
"""Per-head LayerNorm, weight only (TiRex MultiHeadLayerNorm, eps 1e-6)."""
|
| 659 |
+
|
| 660 |
+
def __init__(self, num_heads: int, head_dim: int, eps: float = 1e-6):
|
| 661 |
+
super().__init__()
|
| 662 |
+
self.eps = eps
|
| 663 |
+
self.weight = nn.Parameter(torch.ones(num_heads, head_dim))
|
| 664 |
+
|
| 665 |
+
def forward(self, x: torch.Tensor) -> torch.Tensor: # (N, H, T, Dh)
|
| 666 |
+
mu = x.mean(dim=-1, keepdim=True)
|
| 667 |
+
var = x.var(dim=-1, keepdim=True, unbiased=False)
|
| 668 |
+
return (x - mu) / torch.sqrt(var + self.eps) * self.weight[None, :, None, :]
|
| 669 |
+
|
| 670 |
+
|
| 671 |
+
def _mlstm_scan(q, k, v, i_pre, f_pre, eps: float = 1e-6):
|
| 672 |
+
"""Stabilized parallel mLSTM β the exact native_stablef math.
|
| 673 |
+
|
| 674 |
+
``q, k, v``: ``(N, H, T, Dh)``; ``i_pre, f_pre``: ``(N, H, T)`` soft-capped
|
| 675 |
+
gate preactivations. The decay matrix is built as the cumsum DIFFERENCE
|
| 676 |
+
``Fc[t] - Fc[s] + i[s]`` rather than the kernel's repeat/tril/cumsum β
|
| 677 |
+
identical values (diagonal reduces to ``i[t]``), and with the +-15 soft cap
|
| 678 |
+
the cancellation is bounded by ~15*T, well inside float32. At T = 128 the
|
| 679 |
+
quadratic form costs a few MB and needs no chunking.
|
| 680 |
+
"""
|
| 681 |
+
N, H, T, Dh = q.shape
|
| 682 |
+
logf = F.logsigmoid(f_pre) # (N, H, T)
|
| 683 |
+
fc = logf.cumsum(dim=-1)
|
| 684 |
+
D = fc[..., :, None] - fc[..., None, :] + i_pre[..., None, :]
|
| 685 |
+
tril = torch.ones(T, T, dtype=torch.bool, device=q.device).tril()
|
| 686 |
+
D = D.masked_fill(~tril, float("-inf"))
|
| 687 |
+
m = D.max(dim=-1, keepdim=True).values # (N, H, T, 1)
|
| 688 |
+
Dm = torch.exp(D - m) # diag finite => m finite
|
| 689 |
+
S = (q @ k.transpose(-2, -1)) * (Dh ** -0.5)
|
| 690 |
+
Ct = S * Dm
|
| 691 |
+
n = torch.maximum(Ct.sum(dim=-1, keepdim=True).abs(), torch.exp(-m))
|
| 692 |
+
return (Ct / (n + eps)) @ v
|
| 693 |
+
|
| 694 |
+
|
| 695 |
+
def _mamba_scan(q, k, v, dt, A_log, skip):
|
| 696 |
+
"""Mamba-2 SSD, dual (decay-masked attention) form β Dao & Gu 2024, eq. 5.
|
| 697 |
+
|
| 698 |
+
``q``: C (readout), ``k``: B (write key), ``v``: x (values), all
|
| 699 |
+
``(N, H, T, Dh)`` with d_state = head_dim; ``dt``: ``(N, H, T)`` softplus'd
|
| 700 |
+
step sizes; ``A_log``: ``(H,)`` log of the positive decay rate; ``skip``:
|
| 701 |
+
``(H,)`` the D residual. The recurrence h_t = exp(-dt_t*A) h_{t-1} +
|
| 702 |
+
dt_t B_t x_t^T, y_t = C_t h_t + D x_t collapses at our T (~130) to one
|
| 703 |
+
masked quadratic form, exactly the shape of _mlstm_scan's β with two
|
| 704 |
+
simplifications the math hands us: log-decay is <= 0 everywhere so
|
| 705 |
+
exp(D) <= 1 and no row-max stabilizer is needed, and there is no
|
| 706 |
+
normalizer n (SSD is not softmax-normalized; magnitude lives in B/C/dt).
|
| 707 |
+
The official Triton kernels only pay at multi-thousand-token sequences;
|
| 708 |
+
at 2 chunks of 64 this matmul form IS the efficient implementation.
|
| 709 |
+
"""
|
| 710 |
+
N, H, T, Dh = q.shape
|
| 711 |
+
loga = -A_log.exp()[None, :, None] * dt # (N,H,T) <= 0
|
| 712 |
+
fc = loga.cumsum(dim=-1)
|
| 713 |
+
D = fc[..., :, None] - fc[..., None, :] # decay j+1..i
|
| 714 |
+
tril = torch.ones(T, T, dtype=torch.bool, device=q.device).tril()
|
| 715 |
+
Dm = torch.exp(D.masked_fill(~tril, float("-inf")))
|
| 716 |
+
S = (q @ k.transpose(-2, -1)) * Dm
|
| 717 |
+
xbar = v * dt[..., None] # Ξ-discretized
|
| 718 |
+
return S @ xbar + skip[None, :, None, None] * v
|
| 719 |
+
|
| 720 |
+
|
| 721 |
+
def _slstm_scan_impl(x_gates, R, h0=None, eps: float = 1e-6):
|
| 722 |
+
"""Stabilized sLSTM (TiRex's mixer β the state-tracking xLSTM cell).
|
| 723 |
+
|
| 724 |
+
``x_gates``: ``(4, N, T, H, Dh)`` input-side gate preactivations in order
|
| 725 |
+
(i, f, z, o); ``R``: ``(4, H, Dh, Dh)`` per-head block-diagonal recurrent
|
| 726 |
+
weights applied to h_{t-1} β the NON-DIAGONAL recurrence that no parallel
|
| 727 |
+
form can express, which is the whole point of this cell. Sequential over T
|
| 728 |
+
by necessity; at T = 128 that is 128 small batched einsums.
|
| 729 |
+
|
| 730 |
+
Paper math (Beck et al. 2024), sigmoid-forget variant in log space:
|
| 731 |
+
m_t = max(logsigmoid(f~) + m_{t-1}, i~)
|
| 732 |
+
i' = exp(i~ - m_t); f' = exp(logsigmoid(f~) + m_{t-1} - m_t)
|
| 733 |
+
c_t = f' c_{t-1} + i' tanh(z~); n_t = f' n_{t-1} + i'
|
| 734 |
+
h_t = sigmoid(o~) * c_t / (n_t + eps)
|
| 735 |
+
"""
|
| 736 |
+
_, N, T, H, Dh = x_gates.shape
|
| 737 |
+
dev, dt = x_gates.device, x_gates.dtype
|
| 738 |
+
c = torch.zeros(N, H, Dh, device=dev, dtype=dt)
|
| 739 |
+
n = torch.zeros(N, H, Dh, device=dev, dtype=dt)
|
| 740 |
+
m = torch.full((N, H, Dh), -1e9, device=dev, dtype=dt)
|
| 741 |
+
h = torch.zeros(N, H, Dh, device=dev, dtype=dt) if h0 is None else h0
|
| 742 |
+
out = torch.empty(N, T, H, Dh, device=dev, dtype=dt)
|
| 743 |
+
for t in range(T):
|
| 744 |
+
rec = torch.einsum("nhd,ghde->gnhe", h, R) # (4, N, H, Dh)
|
| 745 |
+
i_pre = x_gates[0, :, t] + rec[0]
|
| 746 |
+
f_pre = x_gates[1, :, t] + rec[1]
|
| 747 |
+
z = torch.tanh(x_gates[2, :, t] + rec[2])
|
| 748 |
+
o = torch.sigmoid(x_gates[3, :, t] + rec[3])
|
| 749 |
+
logf = F.logsigmoid(f_pre)
|
| 750 |
+
m_new = torch.maximum(logf + m, i_pre)
|
| 751 |
+
i_s = torch.exp(i_pre - m_new)
|
| 752 |
+
f_s = torch.exp(logf + m - m_new)
|
| 753 |
+
c = f_s * c + i_s * z
|
| 754 |
+
n = f_s * n + i_s
|
| 755 |
+
m = m_new
|
| 756 |
+
h = o * c / (n + eps)
|
| 757 |
+
out[:, t] = h
|
| 758 |
+
return out.permute(0, 2, 1, 3) # (N, H, T, Dh)
|
| 759 |
+
|
| 760 |
+
|
| 761 |
+
# The naive loop is KERNEL-LAUNCH bound, not FLOP bound: 128 steps x ~12 tiny
|
| 762 |
+
# ops per time block measured 132K tok/s on an H-class card (13x under the
|
| 763 |
+
# mLSTM cell). torch.compile fuses the pointwise chain and shrinks the launch
|
| 764 |
+
# count several-fold; compiled lazily and per-process, with a hard fallback to
|
| 765 |
+
# the eager loop when the box lacks Triton/dev headers (same degradation
|
| 766 |
+
# policy as flex_attention above). dynamic=False: the mixed channel mode
|
| 767 |
+
# yields a small fixed set of batch shapes, each compiled once.
|
| 768 |
+
_SLSTM_SCAN_FN = None
|
| 769 |
+
|
| 770 |
+
|
| 771 |
+
def _slstm_scan(x_gates, R, h0=None, eps: float = 1e-6):
|
| 772 |
+
global _SLSTM_SCAN_FN
|
| 773 |
+
if _SLSTM_SCAN_FN is None:
|
| 774 |
+
try:
|
| 775 |
+
# dynamic=False compiles once per shape β right for training (a
|
| 776 |
+
# small fixed shape set) but a recompile STORM for the GIFT eval,
|
| 777 |
+
# which sweeps ~97 config shapes (measured: 2h+ eval instead of
|
| 778 |
+
# ~25 min, all of it gcc). Eval harnesses set
|
| 779 |
+
# CASCADE_SLSTM_DYNAMIC=1 to compile shape-polymorphic instead.
|
| 780 |
+
_dyn = os.environ.get("CASCADE_SLSTM_DYNAMIC", "") == "1"
|
| 781 |
+
_SLSTM_SCAN_FN = torch.compile(_slstm_scan_impl, dynamic=_dyn)
|
| 782 |
+
except Exception:
|
| 783 |
+
_SLSTM_SCAN_FN = _slstm_scan_impl
|
| 784 |
+
if _SLSTM_SCAN_FN is not _slstm_scan_impl:
|
| 785 |
+
try:
|
| 786 |
+
return _SLSTM_SCAN_FN(x_gates, R, h0, eps)
|
| 787 |
+
except Exception:
|
| 788 |
+
_SLSTM_SCAN_FN = _slstm_scan_impl
|
| 789 |
+
return _slstm_scan_impl(x_gates, R, h0, eps)
|
| 790 |
+
|
| 791 |
+
|
| 792 |
+
class _Block(nn.Module):
|
| 793 |
+
"""Pre-norm MHA + GELU MLP, over either the time or the variate axis.
|
| 794 |
+
|
| 795 |
+
``axis="time"``: causal over the patch axis with xPos positions β except for
|
| 796 |
+
rows flagged bidirectional (future-known covariates), and except for a
|
| 797 |
+
bounded window when ``time_window > 0``.
|
| 798 |
+
``axis="variate"``: full attention over the variate axis (no positions β
|
| 799 |
+
variates are unordered), optionally under an asymmetric role mask.
|
| 800 |
+
"""
|
| 801 |
+
|
| 802 |
+
def __init__(self, cfg: CascadeModelConfig, axis: str, block_idx: int = 0,
|
| 803 |
+
mixer: str | None = None):
|
| 804 |
+
super().__init__()
|
| 805 |
+
self.cfg = cfg
|
| 806 |
+
self.axis = axis
|
| 807 |
+
inner = cfg.num_heads * cfg.head_dim
|
| 808 |
+
if mixer is None:
|
| 809 |
+
req = str(getattr(cfg, "time_mixer", "attention"))
|
| 810 |
+
mixer = req if req in ("mlstm", "slstm", "mamba") else "attention"
|
| 811 |
+
self.mixer = mixer if axis == "time" else "attention"
|
| 812 |
+
self.norm1 = nn.LayerNorm(cfg.d_model, eps=1e-4, elementwise_affine=False)
|
| 813 |
+
if self.mixer != "slstm":
|
| 814 |
+
self.qkv = nn.Linear(cfg.d_model, 3 * inner, bias=True)
|
| 815 |
+
self.proj = nn.Linear(inner, cfg.d_model, bias=True)
|
| 816 |
+
self.norm2 = nn.LayerNorm(cfg.d_model, eps=1e-4, elementwise_affine=False)
|
| 817 |
+
hidden = cfg.ffn_hidden
|
| 818 |
+
if cfg.ffn_swiglu:
|
| 819 |
+
self.mlp = _SwiGLU(cfg.d_model, hidden)
|
| 820 |
+
else:
|
| 821 |
+
self.mlp = nn.Sequential(
|
| 822 |
+
nn.Linear(cfg.d_model, hidden, bias=False),
|
| 823 |
+
nn.GELU(),
|
| 824 |
+
nn.Linear(hidden, cfg.d_model, bias=False),
|
| 825 |
+
)
|
| 826 |
+
if self.mixer == "slstm":
|
| 827 |
+
# TiRex's mixer: 4 gates (i,f,z,o), per-dim, input side from the
|
| 828 |
+
# normed token + per-head block-diagonal recurrence on h_{t-1}.
|
| 829 |
+
# No qkv β the cell IS the mixing. Inits set in reset_gate_biases.
|
| 830 |
+
self.gates_x = nn.Linear(cfg.d_model, 4 * inner, bias=True)
|
| 831 |
+
self.rec = nn.Parameter(torch.zeros(4, cfg.num_heads, cfg.head_dim,
|
| 832 |
+
cfg.head_dim))
|
| 833 |
+
self.mh_norm = _MultiHeadNorm(cfg.num_heads, cfg.head_dim)
|
| 834 |
+
elif self.mixer == "mlstm":
|
| 835 |
+
# Gate heads follow xLSTM-large: i and f are per-head scalars from
|
| 836 |
+
# the normed input; o is elementwise over the inner dim. per_dim_scale
|
| 837 |
+
# and the rope buffers are attention-specific and deliberately NOT
|
| 838 |
+
# created here, so attention-mode state_dicts stay byte-identical.
|
| 839 |
+
self.gates_if = nn.Linear(cfg.d_model, 2 * cfg.num_heads, bias=True)
|
| 840 |
+
self.ogate = nn.Linear(cfg.d_model, inner, bias=True)
|
| 841 |
+
self.mh_norm = _MultiHeadNorm(cfg.num_heads, cfg.head_dim)
|
| 842 |
+
elif self.mixer == "mamba":
|
| 843 |
+
# Mamba-2 head: qkv doubles as (C, B, x); per-head step size dt,
|
| 844 |
+
# per-head decay rate A (stored in log), per-head D skip, SiLU
|
| 845 |
+
# z-gate on the inner dim (reuses the ogate module name so the
|
| 846 |
+
# trainer's no-decay match covers its bias too). Inits land in
|
| 847 |
+
# reset_gate_biases.
|
| 848 |
+
self.mamba_dt = nn.Linear(cfg.d_model, cfg.num_heads, bias=True)
|
| 849 |
+
self.mamba_A_log = nn.Parameter(torch.zeros(cfg.num_heads))
|
| 850 |
+
self.mamba_skip = nn.Parameter(torch.ones(cfg.num_heads))
|
| 851 |
+
self.ogate = nn.Linear(cfg.d_model, inner, bias=True)
|
| 852 |
+
self.mh_norm = _MultiHeadNorm(cfg.num_heads, cfg.head_dim)
|
| 853 |
+
else:
|
| 854 |
+
self.per_dim_scale = nn.Parameter(torch.zeros(cfg.head_dim))
|
| 855 |
+
if axis == "time" and self.mixer == "attention":
|
| 856 |
+
half = cfg.head_dim // 2
|
| 857 |
+
idx = torch.arange(half).float() / max(1, half)
|
| 858 |
+
base_freq = 1.0 / (cfg.rope_base**idx)
|
| 859 |
+
if cfg.rope_learnable:
|
| 860 |
+
# log space: keeps frequencies positive under any update and
|
| 861 |
+
# makes gradient steps multiplicative, which is the right metric
|
| 862 |
+
# for a ladder spanning four orders of magnitude. Initialised at
|
| 863 |
+
# the stock ladder, so step 0 is exactly stock.
|
| 864 |
+
self.log_inv_freq = nn.Parameter(base_freq.log())
|
| 865 |
+
self.register_buffer("inv_freq", base_freq, persistent=False)
|
| 866 |
+
else:
|
| 867 |
+
self.register_buffer("inv_freq", base_freq, persistent=False)
|
| 868 |
+
self.register_buffer("zeta", (idx + 0.4) / 1.4, persistent=False)
|
| 869 |
+
|
| 870 |
+
S = max(2.0, cfg.context_length / cfg.patch_size)
|
| 871 |
+
ratio2 = S / math.log(S)
|
| 872 |
+
af2 = 2.0 * cfg.residual_mult**2 / (ratio2 + 1.0)
|
| 873 |
+
aa2 = ratio2 * af2
|
| 874 |
+
L = 2.0 * cfg.num_layers
|
| 875 |
+
i = block_idx
|
| 876 |
+
tau2_attn = aa2 / (L / 2.0 + i * aa2 + i * af2)
|
| 877 |
+
tau2_mlp = af2 / (L / 2.0 + (i + 1) * aa2 + i * af2)
|
| 878 |
+
self.attn_a = math.sqrt(tau2_attn / (tau2_attn + 1.0))
|
| 879 |
+
self.attn_b = math.sqrt(1.0 / (tau2_attn + 1.0))
|
| 880 |
+
self.mlp_a = math.sqrt(tau2_mlp / (tau2_mlp + 1.0))
|
| 881 |
+
self.mlp_b = math.sqrt(1.0 / (tau2_mlp + 1.0))
|
| 882 |
+
|
| 883 |
+
def reset_gate_biases(self) -> None:
|
| 884 |
+
"""xLSTM-7B gate init, applied AFTER the model-wide bias zeroing.
|
| 885 |
+
|
| 886 |
+
Forget bias linspace(3, 6) per head starts the memory near-preserving
|
| 887 |
+
(logsigmoid(3..6) ~ -0.05..-0.002); input bias -10 starts writes
|
| 888 |
+
near-off. Both are inside the +-15 soft cap. Without this, exp input
|
| 889 |
+
gates at bias 0 make every position write at full strength from step 0.
|
| 890 |
+
"""
|
| 891 |
+
H, Dh = self.cfg.num_heads, self.cfg.head_dim
|
| 892 |
+
inner = H * Dh
|
| 893 |
+
if self.mixer == "mlstm":
|
| 894 |
+
with torch.no_grad():
|
| 895 |
+
self.gates_if.bias[:H].fill_(-10.0)
|
| 896 |
+
self.gates_if.bias[H:].copy_(torch.linspace(3.0, 6.0, H))
|
| 897 |
+
elif self.mixer == "slstm":
|
| 898 |
+
# xlstm "small_init" convention: forget bias linspace(3,6) per dim,
|
| 899 |
+
# input bias -10 (writes start near-off), z/o biases zero,
|
| 900 |
+
# recurrent kernel zeros (their default) β the cell starts as a
|
| 901 |
+
# feedforward gate and learns its recurrence.
|
| 902 |
+
with torch.no_grad():
|
| 903 |
+
self.gates_x.bias[:inner].fill_(-10.0)
|
| 904 |
+
self.gates_x.bias[inner:2 * inner].copy_(
|
| 905 |
+
torch.linspace(3.0, 6.0, Dh).repeat(H))
|
| 906 |
+
self.gates_x.bias[2 * inner:].zero_()
|
| 907 |
+
elif self.mixer == "mamba":
|
| 908 |
+
# Mamba-2 inits, deterministic variants of the paper's draws:
|
| 909 |
+
# A = linspace(1,16) per head (their U[1,16]); dt_bias = inverse
|
| 910 |
+
# softplus of a log-spaced dt in [1e-3, 1e-1] so heads start with
|
| 911 |
+
# a spread of timescales spanning ~10 to ~1000 steps of memory.
|
| 912 |
+
with torch.no_grad():
|
| 913 |
+
A0 = torch.linspace(1.0, 16.0, H)
|
| 914 |
+
self.mamba_A_log.copy_(A0.log())
|
| 915 |
+
dt0 = torch.logspace(math.log10(1e-3), math.log10(1e-1), H)
|
| 916 |
+
self.mamba_dt.bias.copy_(torch.log(torch.expm1(dt0)))
|
| 917 |
+
|
| 918 |
+
def _mix_slstm(self, x, h, *, bidirectional_rows=None):
|
| 919 |
+
"""TiRex-style sLSTM time mixing inside the host residual scaffold.
|
| 920 |
+
|
| 921 |
+
Same contract as _mix_mlstm: rope/window masks do not apply (position
|
| 922 |
+
and memory live in the recurrence); future-known covariate rows get a
|
| 923 |
+
time-reversed second pass, averaged.
|
| 924 |
+
"""
|
| 925 |
+
N, T, _ = x.shape
|
| 926 |
+
H, Dh = self.cfg.num_heads, self.cfg.head_dim
|
| 927 |
+
g = self.gates_x(h).view(N, T, 4, H, Dh).permute(2, 0, 1, 3, 4)
|
| 928 |
+
out = _slstm_scan(g, self.rec) # (N, H, T, Dh)
|
| 929 |
+
if bidirectional_rows is not None and bool(bidirectional_rows.any()):
|
| 930 |
+
bid = bidirectional_rows
|
| 931 |
+
rev = _slstm_scan(g[:, bid].flip(2), self.rec).flip(2)
|
| 932 |
+
out = out.clone()
|
| 933 |
+
out[bid] = 0.5 * (out[bid] + rev)
|
| 934 |
+
mixed = self.mh_norm(out).transpose(1, 2).reshape(N, T, H * Dh)
|
| 935 |
+
x = self.attn_b * x + self.attn_a * self.proj(mixed)
|
| 936 |
+
return self.mlp_b * x + self.mlp_a * self.mlp(self.norm2(x))
|
| 937 |
+
|
| 938 |
+
def _mix_mamba(self, x, h, *, bidirectional_rows=None):
|
| 939 |
+
"""Mamba-2 time mixing inside the host residual scaffold.
|
| 940 |
+
|
| 941 |
+
Same contract as the other recurrent mixers: rope/window masks do not
|
| 942 |
+
apply (position lives in the decay), and future-known covariate rows
|
| 943 |
+
get a time-reversed second pass, averaged.
|
| 944 |
+
"""
|
| 945 |
+
N, T, _ = x.shape
|
| 946 |
+
H, Dh = self.cfg.num_heads, self.cfg.head_dim
|
| 947 |
+
qkv = self.qkv(h).view(N, T, 3, H, Dh)
|
| 948 |
+
q, k, v = (t.transpose(1, 2) for t in qkv.unbind(dim=2)) # (N,H,T,Dh)
|
| 949 |
+
dt = F.softplus(self.mamba_dt(h)).transpose(1, 2) # (N,H,T)
|
| 950 |
+
out = _mamba_scan(q, k, v, dt, self.mamba_A_log, self.mamba_skip)
|
| 951 |
+
if bidirectional_rows is not None and bool(bidirectional_rows.any()):
|
| 952 |
+
bid = bidirectional_rows
|
| 953 |
+
rev = _mamba_scan(
|
| 954 |
+
q[bid].flip(2), k[bid].flip(2), v[bid].flip(2),
|
| 955 |
+
dt[bid].flip(2), self.mamba_A_log, self.mamba_skip,
|
| 956 |
+
).flip(2)
|
| 957 |
+
out = out.clone()
|
| 958 |
+
out[bid] = 0.5 * (out[bid] + rev)
|
| 959 |
+
mixed = self.mh_norm(out).transpose(1, 2).reshape(N, T, H * Dh)
|
| 960 |
+
mixed = mixed * F.silu(self.ogate(h))
|
| 961 |
+
x = self.attn_b * x + self.attn_a * self.proj(mixed)
|
| 962 |
+
return self.mlp_b * x + self.mlp_a * self.mlp(self.norm2(x))
|
| 963 |
+
|
| 964 |
+
def _mix_mlstm(self, x, h, *, bidirectional_rows=None):
|
| 965 |
+
"""TiRex-style mLSTM time mixing inside the host residual scaffold.
|
| 966 |
+
|
| 967 |
+
``h`` is the pre-normed input. Ignores rope and window masks (position
|
| 968 |
+
and locality live in the recurrence); bidirectional rows (future-known
|
| 969 |
+
covariates) get a time-reversed second pass, averaged.
|
| 970 |
+
"""
|
| 971 |
+
N, T, _ = x.shape
|
| 972 |
+
H, Dh = self.cfg.num_heads, self.cfg.head_dim
|
| 973 |
+
qkv = self.qkv(h).view(N, T, 3, H, Dh)
|
| 974 |
+
q, k, v = (t.transpose(1, 2) for t in qkv.unbind(dim=2)) # (N,H,T,Dh)
|
| 975 |
+
g = _soft_cap(self.gates_if(h)) # (N,T,2H)
|
| 976 |
+
i_pre = g[..., :H].transpose(1, 2) # (N,H,T)
|
| 977 |
+
f_pre = g[..., H:].transpose(1, 2)
|
| 978 |
+
out = _mlstm_scan(q, k, v, i_pre, f_pre)
|
| 979 |
+
if bidirectional_rows is not None and bool(bidirectional_rows.any()):
|
| 980 |
+
bid = bidirectional_rows
|
| 981 |
+
rev = _mlstm_scan(
|
| 982 |
+
q[bid].flip(2), k[bid].flip(2), v[bid].flip(2),
|
| 983 |
+
i_pre[bid].flip(2), f_pre[bid].flip(2),
|
| 984 |
+
).flip(2)
|
| 985 |
+
out = out.clone()
|
| 986 |
+
out[bid] = 0.5 * (out[bid] + rev)
|
| 987 |
+
mixed = self.mh_norm(out).transpose(1, 2).reshape(N, T, H * Dh)
|
| 988 |
+
mixed = mixed * torch.sigmoid(self.ogate(h))
|
| 989 |
+
x = self.attn_b * x + self.attn_a * self.proj(mixed)
|
| 990 |
+
return self.mlp_b * x + self.mlp_a * self.mlp(self.norm2(x))
|
| 991 |
+
|
| 992 |
+
def _attend(self, q, k, v, *, causal: bool, attn_mask=None, block_mask=None):
|
| 993 |
+
if block_mask is not None:
|
| 994 |
+
# scale must match the SDPA path exactly β this model uses 1/d, not
|
| 995 |
+
# the conventional 1/sqrt(d), and a mismatch here would look like a
|
| 996 |
+
# subtle quality regression rather than a bug.
|
| 997 |
+
try:
|
| 998 |
+
return _flex_fn()(q, k, v, block_mask=block_mask,
|
| 999 |
+
scale=1.0 / self.cfg.head_dim)
|
| 1000 |
+
except Exception:
|
| 1001 |
+
# Compilation can fail for reasons that have nothing to do with
|
| 1002 |
+
# this model β Triton builds a small C extension and needs the
|
| 1003 |
+
# Python dev headers, which a slim image may not carry. The two
|
| 1004 |
+
# paths are numerically identical (verified to ~3e-7 relative),
|
| 1005 |
+
# so degrade to sdpa rather than kill a training run hours in.
|
| 1006 |
+
global _FLEX_FN
|
| 1007 |
+
_FLEX_FN = _FLEX_UNAVAILABLE
|
| 1008 |
+
attn_mask = _additive_from_block(block_mask, q)
|
| 1009 |
+
return F.scaled_dot_product_attention(
|
| 1010 |
+
q, k, v,
|
| 1011 |
+
is_causal=(causal and attn_mask is None),
|
| 1012 |
+
attn_mask=attn_mask,
|
| 1013 |
+
scale=1.0 / self.cfg.head_dim,
|
| 1014 |
+
)
|
| 1015 |
+
|
| 1016 |
+
def forward(self, x, *, bidirectional_rows=None, attn_mask=None,
|
| 1017 |
+
attn_mask_bidir=None, block_mask=None, block_mask_bidir=None):
|
| 1018 |
+
"""``x`` is ``(N, T, d)``.
|
| 1019 |
+
|
| 1020 |
+
``bidirectional_rows`` (time axis only) is an ``(N,)`` bool selecting
|
| 1021 |
+
rows that may attend forward β future-known covariates. Rather than
|
| 1022 |
+
materialise a ``(V, T, T)`` mask, the batch is SPLIT by type and the two
|
| 1023 |
+
halves run as separate calls, which keeps both on the fast kernel path.
|
| 1024 |
+
``attn_mask`` is an additive ``(T, T)`` applied to every row.
|
| 1025 |
+
"""
|
| 1026 |
+
N, T, _ = x.shape
|
| 1027 |
+
h = self.norm1(x)
|
| 1028 |
+
if self.mixer == "slstm":
|
| 1029 |
+
return self._mix_slstm(x, h, bidirectional_rows=bidirectional_rows)
|
| 1030 |
+
if self.mixer == "mlstm":
|
| 1031 |
+
return self._mix_mlstm(x, h, bidirectional_rows=bidirectional_rows)
|
| 1032 |
+
if self.mixer == "mamba":
|
| 1033 |
+
return self._mix_mamba(x, h, bidirectional_rows=bidirectional_rows)
|
| 1034 |
+
qkv = self.qkv(h).view(N, T, 3, self.cfg.num_heads, self.cfg.head_dim)
|
| 1035 |
+
q, k, v = qkv.unbind(dim=2)
|
| 1036 |
+
q, k, v = (t.transpose(1, 2) for t in (q, k, v))
|
| 1037 |
+
if self.axis == "time" and self.cfg.use_rope:
|
| 1038 |
+
if self.cfg.rope_learnable:
|
| 1039 |
+
# Nyquist guard. A rotation above pi radians PER POSITION
|
| 1040 |
+
# aliases: adjacent positions become indistinguishable and the
|
| 1041 |
+
# pair emits noise rather than position. Nothing in the loss
|
| 1042 |
+
# prevents the optimiser walking there, and the failure is
|
| 1043 |
+
# silent β the model would just get worse for a reason no
|
| 1044 |
+
# metric names. Clamped in log space, where the parameter lives.
|
| 1045 |
+
inv_freq = self.log_inv_freq.clamp(max=math.log(math.pi)).exp()
|
| 1046 |
+
else:
|
| 1047 |
+
inv_freq = self.inv_freq
|
| 1048 |
+
s = self.cfg.rope_scale
|
| 1049 |
+
j = self.cfg.rope_scale_jitter
|
| 1050 |
+
if j and self.training:
|
| 1051 |
+
# Log-uniform in [1/j, j] so shrink and stretch are symmetric β
|
| 1052 |
+
# uniform in s would bias every draw toward compression. One draw
|
| 1053 |
+
# per forward, not per row: within a batch the positional metric
|
| 1054 |
+
# must be consistent or attention compares incompatible spacings.
|
| 1055 |
+
u = torch.rand((), device=q.device).item()
|
| 1056 |
+
s = s * float(math.exp((2.0 * u - 1.0) * math.log(j)))
|
| 1057 |
+
q, k = _xpos(q, k, inv_freq, self.zeta,
|
| 1058 |
+
scale_base=self.cfg.xpos_scale_base,
|
| 1059 |
+
rope_scale=s,
|
| 1060 |
+
yarn=self.cfg.yarn, yarn_alpha=self.cfg.yarn_alpha,
|
| 1061 |
+
yarn_beta=self.cfg.yarn_beta,
|
| 1062 |
+
attn_temp=self.cfg.attn_temp,
|
| 1063 |
+
partial_k=self.cfg.rope_partial_k)
|
| 1064 |
+
q = q * (F.softplus(self.per_dim_scale) / math.log(2.0))
|
| 1065 |
+
|
| 1066 |
+
causal = self.axis == "time"
|
| 1067 |
+
# Bidirectional rows need their OWN mask. `_attend` sets
|
| 1068 |
+
# is_causal=(causal and attn_mask is None), so once a window mask is
|
| 1069 |
+
# supplied, causality comes from the MASK alone β and window_mask() is
|
| 1070 |
+
# built causal. Feeding the causal band to the bidirectional half
|
| 1071 |
+
# therefore makes future-known covariates causal, silently: no error, no
|
| 1072 |
+
# metric, just the Β§2 capability quietly gone. Verified by probe β a
|
| 1073 |
+
# future-cov row's dependence on a future position drops from 3.8e-2 to
|
| 1074 |
+
# exactly 0 the moment a window is enabled.
|
| 1075 |
+
bmask = attn_mask_bidir if attn_mask_bidir is not None else (
|
| 1076 |
+
None if attn_mask is None else attn_mask
|
| 1077 |
+
)
|
| 1078 |
+
# A block mask supersedes the additive one: it encodes the SAME
|
| 1079 |
+
# predicate, causality included, so passing both would be redundant and
|
| 1080 |
+
# passing the additive one alongside would force the slow path anyway.
|
| 1081 |
+
bb = block_mask_bidir if block_mask_bidir is not None else block_mask
|
| 1082 |
+
am = None if block_mask is not None else attn_mask
|
| 1083 |
+
ab = None if bb is not None else bmask
|
| 1084 |
+
if bidirectional_rows is None or not causal:
|
| 1085 |
+
attn = self._attend(q, k, v, causal=causal, attn_mask=am,
|
| 1086 |
+
block_mask=block_mask)
|
| 1087 |
+
elif bool(bidirectional_rows.all()):
|
| 1088 |
+
attn = self._attend(q, k, v, causal=False, attn_mask=ab, block_mask=bb)
|
| 1089 |
+
elif not bool(bidirectional_rows.any()):
|
| 1090 |
+
attn = self._attend(q, k, v, causal=True, attn_mask=am,
|
| 1091 |
+
block_mask=block_mask)
|
| 1092 |
+
else:
|
| 1093 |
+
bid = bidirectional_rows
|
| 1094 |
+
attn = torch.empty_like(q)
|
| 1095 |
+
attn[~bid] = self._attend(
|
| 1096 |
+
q[~bid], k[~bid], v[~bid], causal=True, attn_mask=am,
|
| 1097 |
+
block_mask=block_mask,
|
| 1098 |
+
)
|
| 1099 |
+
# Future-known covariates: bidirectional along time. Safe only
|
| 1100 |
+
# because variate_mask() forbids their queries from reading target
|
| 1101 |
+
# keys β otherwise this is the leak.
|
| 1102 |
+
attn[bid] = self._attend(
|
| 1103 |
+
q[bid], k[bid], v[bid], causal=False, attn_mask=ab, block_mask=bb,
|
| 1104 |
+
)
|
| 1105 |
+
|
| 1106 |
+
attn = attn.transpose(1, 2).reshape(N, T, self.cfg.num_heads * self.cfg.head_dim)
|
| 1107 |
+
x = self.attn_b * x + self.attn_a * self.proj(attn)
|
| 1108 |
+
x = self.mlp_b * x + self.mlp_a * self.mlp(self.norm2(x))
|
| 1109 |
+
return x
|
| 1110 |
+
|
| 1111 |
+
|
| 1112 |
+
class CascadeModel(nn.Module):
|
| 1113 |
+
"""Patch transformer with CPM, alternating time/variate attention, and the
|
| 1114 |
+
Β§2/Β§3 role machinery. Predicts each position's NEXT patch as quantiles."""
|
| 1115 |
+
|
| 1116 |
+
def __init__(self, cfg: CascadeModelConfig):
|
| 1117 |
+
super().__init__()
|
| 1118 |
+
self.cfg = cfg
|
| 1119 |
+
if cfg.embed_skip_mlp > 0:
|
| 1120 |
+
# Toto-2.0 patch_proj: skip(64->d) + linear2(act(linear1(64->h)))
|
| 1121 |
+
self.patch_embed = _MLPHead(cfg.patch_size * 2,
|
| 1122 |
+
cfg.embed_skip_mlp, cfg.d_model)
|
| 1123 |
+
self.embed_mlp = nn.Identity()
|
| 1124 |
+
else:
|
| 1125 |
+
self.patch_embed = nn.Linear(cfg.patch_size * 2, cfg.d_model)
|
| 1126 |
+
self.embed_mlp = _ResidualMLP(cfg.d_model, cfg.ffn_hidden)
|
| 1127 |
+
# Β§2: learned 3-way role embedding, added AFTER the residual-MLP patch
|
| 1128 |
+
# projection so it colours the token the transformer sees, not the raw
|
| 1129 |
+
# patch. Zero-init β enabling roles starts as an exact no-op.
|
| 1130 |
+
self.role_embed = nn.Embedding(N_ROLES, cfg.d_model) if cfg.use_variate_roles else None
|
| 1131 |
+
# Zero-init: at step 0 a masked patch's token is the origin, close to
|
| 1132 |
+
# what the linear embed's bias-only output would be β trains freely.
|
| 1133 |
+
self.mask_token = (nn.Parameter(torch.zeros(cfg.d_model))
|
| 1134 |
+
if cfg.embed_mask_token else None)
|
| 1135 |
+
_plan = cfg.time_mixer_plan()
|
| 1136 |
+
self.blocks = nn.ModuleList(
|
| 1137 |
+
_Block(cfg, axis=cfg.layer_axis(i), block_idx=i, mixer=_plan[i])
|
| 1138 |
+
for i in range(cfg.num_layers)
|
| 1139 |
+
)
|
| 1140 |
+
self.norm = nn.LayerNorm(cfg.d_model, eps=1e-4, elementwise_affine=False)
|
| 1141 |
+
self.out_mlp = (nn.Identity() if cfg.no_out_mlp
|
| 1142 |
+
else _ResidualMLP(cfg.d_model, cfg.ffn_hidden))
|
| 1143 |
+
if cfg.head_mlp_hidden > 0:
|
| 1144 |
+
self.head = _MLPHead(cfg.d_model, cfg.head_mlp_hidden,
|
| 1145 |
+
cfg.patch_size * cfg.num_quantiles)
|
| 1146 |
+
else:
|
| 1147 |
+
self.head = nn.Linear(cfg.d_model, cfg.patch_size * cfg.num_quantiles)
|
| 1148 |
+
self.apply(self._init_weights)
|
| 1149 |
+
if self.role_embed is not None:
|
| 1150 |
+
nn.init.zeros_(self.role_embed.weight)
|
| 1151 |
+
if cfg.head_mlp_hidden > 0:
|
| 1152 |
+
# AFTER the global init: the zero-init contract in _MLPHead's
|
| 1153 |
+
# docstring only holds if nothing re-randomises linear2.
|
| 1154 |
+
nn.init.zeros_(self.head.linear2.weight)
|
| 1155 |
+
nn.init.zeros_(self.head.linear2.bias)
|
| 1156 |
+
for blk in self.blocks:
|
| 1157 |
+
blk.reset_gate_biases() # no-op on attention blocks
|
| 1158 |
+
|
| 1159 |
+
def _init_weights(self, m: nn.Module) -> None:
|
| 1160 |
+
if isinstance(m, nn.Linear):
|
| 1161 |
+
fan_in = m.weight.shape[1]
|
| 1162 |
+
nn.init.normal_(m.weight, mean=0.0, std=1.0 / math.sqrt(fan_in))
|
| 1163 |
+
if m.bias is not None:
|
| 1164 |
+
nn.init.zeros_(m.bias)
|
| 1165 |
+
elif isinstance(m, nn.Embedding):
|
| 1166 |
+
nn.init.normal_(m.weight, mean=0.0, std=0.02)
|
| 1167 |
+
|
| 1168 |
+
def forward(
|
| 1169 |
+
self,
|
| 1170 |
+
patches: torch.Tensor,
|
| 1171 |
+
mask: torch.Tensor | None = None,
|
| 1172 |
+
*,
|
| 1173 |
+
variate_types: torch.Tensor | None = None,
|
| 1174 |
+
group_ids: torch.Tensor | None = None,
|
| 1175 |
+
) -> torch.Tensor:
|
| 1176 |
+
"""``patches``: ``(B, P, ps)`` or ``(B, C, P, ps)``. ``mask``: binary,
|
| 1177 |
+
1 = unobserved, patch-level or per-entry. ``variate_types``: ``(C,)`` in
|
| 1178 |
+
{0 target, 1 past-cov, 2 future-known-cov}. Returns
|
| 1179 |
+
``(B, [C,] P, ps, num_q)``."""
|
| 1180 |
+
squeeze_variates = patches.dim() == 3
|
| 1181 |
+
if squeeze_variates:
|
| 1182 |
+
patches = patches[:, None]
|
| 1183 |
+
if mask is not None:
|
| 1184 |
+
mask = mask[:, None]
|
| 1185 |
+
B, C, P, ps = patches.shape
|
| 1186 |
+
if mask is None:
|
| 1187 |
+
mask = torch.zeros_like(patches)
|
| 1188 |
+
else:
|
| 1189 |
+
if mask.dim() == 3:
|
| 1190 |
+
mask = mask[..., None].expand(B, C, P, ps)
|
| 1191 |
+
mask = mask.to(patches.dtype)
|
| 1192 |
+
x = torch.cat([patches * (1.0 - mask), mask], dim=-1)
|
| 1193 |
+
x = self.embed_mlp(self.patch_embed(x)) # (B, C, P, d)
|
| 1194 |
+
if self.mask_token is not None:
|
| 1195 |
+
# Patch-level replacement only when EVERY entry is missing β
|
| 1196 |
+
# partially observed patches keep the embed path (it still sees
|
| 1197 |
+
# real values there).
|
| 1198 |
+
full = mask.mean(dim=-1, keepdim=True) >= 1.0 - 1e-6
|
| 1199 |
+
x = torch.where(full, self.mask_token.to(x.dtype).view(1, 1, 1, -1), x)
|
| 1200 |
+
|
| 1201 |
+
roles_on = self.cfg.use_variate_roles and variate_types is not None
|
| 1202 |
+
if roles_on:
|
| 1203 |
+
vt = variate_types.to(x.device).long().reshape(-1)
|
| 1204 |
+
if vt.numel() != C:
|
| 1205 |
+
raise ValueError(f"variate_types has {vt.numel()} entries; expected C={C}")
|
| 1206 |
+
x = x + self.role_embed(vt).view(1, C, 1, -1)
|
| 1207 |
+
# Row b*C+c has the type of channel c β matches the reshape below.
|
| 1208 |
+
bidir_rows = (vt == ROLE_FUTURE_COV).repeat(B)
|
| 1209 |
+
vmask = variate_mask(vt, group_ids)
|
| 1210 |
+
else:
|
| 1211 |
+
bidir_rows = None
|
| 1212 |
+
vmask = None
|
| 1213 |
+
|
| 1214 |
+
W = int(self.cfg.time_window)
|
| 1215 |
+
S = int(getattr(self.cfg, "attn_sinks", 0))
|
| 1216 |
+
tmask = (window_mask(P, W, causal=True, sinks=S, device=x.device)
|
| 1217 |
+
if W > 0 else None)
|
| 1218 |
+
# The SYMMETRIC band, for future-known covariate rows only: they are
|
| 1219 |
+
# bounded by the same window but may look forward within it. Built only
|
| 1220 |
+
# when such rows exist, so the univariate path allocates nothing.
|
| 1221 |
+
tmask_bidir = (
|
| 1222 |
+
window_mask(P, W, causal=False, sinks=S, device=x.device)
|
| 1223 |
+
if W > 0 and bidir_rows is not None and bool(bidir_rows.any())
|
| 1224 |
+
else None
|
| 1225 |
+
)
|
| 1226 |
+
|
| 1227 |
+
# flex_attention only earns its keep when a mask is needed at all: with
|
| 1228 |
+
# W=0 plain SDPA already takes the fused causal path and is the fastest
|
| 1229 |
+
# option, so this never engages there.
|
| 1230 |
+
bmask_t = bmask_b = None
|
| 1231 |
+
if W > 0 and str(getattr(self.cfg, "attn_impl", "sdpa")) == "flex":
|
| 1232 |
+
try:
|
| 1233 |
+
bmask_t = flex_block_mask(P, W, causal=True, sinks=S,
|
| 1234 |
+
device=x.device)
|
| 1235 |
+
if tmask_bidir is not None:
|
| 1236 |
+
bmask_b = flex_block_mask(P, W, causal=False, sinks=S,
|
| 1237 |
+
device=x.device)
|
| 1238 |
+
except Exception:
|
| 1239 |
+
# torch < 2.5, or no compatible backend. Fall back rather than
|
| 1240 |
+
# fail: the sdpa path is numerically identical, only slower.
|
| 1241 |
+
bmask_t = bmask_b = None
|
| 1242 |
+
|
| 1243 |
+
for blk in self.blocks:
|
| 1244 |
+
if blk.axis == "time":
|
| 1245 |
+
x = blk(
|
| 1246 |
+
x.reshape(B * C, P, -1),
|
| 1247 |
+
bidirectional_rows=bidir_rows, attn_mask=tmask,
|
| 1248 |
+
attn_mask_bidir=tmask_bidir,
|
| 1249 |
+
block_mask=bmask_t, block_mask_bidir=bmask_b,
|
| 1250 |
+
).view(B, C, P, -1)
|
| 1251 |
+
else:
|
| 1252 |
+
x = (
|
| 1253 |
+
blk(x.transpose(1, 2).reshape(B * P, C, -1), attn_mask=vmask)
|
| 1254 |
+
.view(B, P, C, -1)
|
| 1255 |
+
.transpose(1, 2)
|
| 1256 |
+
)
|
| 1257 |
+
x = self.out_mlp(self.norm(x))
|
| 1258 |
+
out = self.head(x).view(B, C, P, ps, self.cfg.num_quantiles)
|
| 1259 |
+
return out[:, 0] if squeeze_variates else out
|
| 1260 |
+
|
| 1261 |
+
|
| 1262 |
+
# ββ losses βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 1263 |
+
|
| 1264 |
+
|
| 1265 |
+
def pinball_loss(pred_q, target, levels) -> torch.Tensor:
|
| 1266 |
+
"""Mean pinball loss. ``pred_q`` ``(..., num_q)``, ``target`` ``(...)``."""
|
| 1267 |
+
q = torch.tensor(levels, device=pred_q.device, dtype=pred_q.dtype)
|
| 1268 |
+
err = target.unsqueeze(-1) - pred_q
|
| 1269 |
+
return torch.maximum(q * err, (q - 1.0) * err).mean()
|
| 1270 |
+
|
| 1271 |
+
|
| 1272 |
+
def pinball_dense(
|
| 1273 |
+
pred_q: torch.Tensor,
|
| 1274 |
+
target: torch.Tensor,
|
| 1275 |
+
levels,
|
| 1276 |
+
*,
|
| 1277 |
+
horizon_mask: torch.Tensor,
|
| 1278 |
+
obs_mask: torch.Tensor | None = None,
|
| 1279 |
+
lam: float = 0.0,
|
| 1280 |
+
) -> torch.Tensor:
|
| 1281 |
+
"""Β§4 denser supervision: pinball on the CPM-masked region plus ``lam`` Γ
|
| 1282 |
+
pinball on the observed region.
|
| 1283 |
+
|
| 1284 |
+
``pred_q`` is ``(..., num_q)``, ``target`` and both masks broadcast to
|
| 1285 |
+
``pred_q.shape[:-1]``. Each term is normalised by its own mask weight, so
|
| 1286 |
+
``lam`` is a clean relative weight rather than something that drifts with
|
| 1287 |
+
how much CPM happened to mask this batch.
|
| 1288 |
+
|
| 1289 |
+
``lam = 0`` reduces exactly to masked-region-only training (upstream). The
|
| 1290 |
+
hazard to keep in view: supervising the observed region is next-patch
|
| 1291 |
+
prediction on visible context, which is a SHORTER-horizon task than the one
|
| 1292 |
+
CPM exists to train, and the long-horizon gap versus classical baselines is
|
| 1293 |
+
Toto's stated top open problem. Read this sweep split by term length; the
|
| 1294 |
+
aggregate will hide the trade.
|
| 1295 |
+
"""
|
| 1296 |
+
q = torch.tensor(levels, device=pred_q.device, dtype=pred_q.dtype)
|
| 1297 |
+
err = target.unsqueeze(-1) - pred_q
|
| 1298 |
+
loss = torch.maximum(q * err, (q - 1.0) * err) # (..., num_q)
|
| 1299 |
+
hm = horizon_mask.to(loss.dtype).unsqueeze(-1)
|
| 1300 |
+
h = (loss * hm).sum() / hm.sum().clamp(min=1.0)
|
| 1301 |
+
if lam == 0.0 or obs_mask is None:
|
| 1302 |
+
return h
|
| 1303 |
+
om = obs_mask.to(loss.dtype).unsqueeze(-1)
|
| 1304 |
+
o = (loss * om).sum() / om.sum().clamp(min=1.0)
|
| 1305 |
+
return h + lam * o
|
weights.safetensors
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:b0d17dbf670c83daaa477b2510cdaf89d5c0f2e744bed857ff69bf79be1f9ca3
|
| 3 |
+
size 70777960
|