This is a summary of conclusions drawn from the sections below — it introduces no evidence of its own. Every headline question this run has an artifact for appears as a measured value, the reference it is compared with, and the rule that produced the verdict; each row is computed from the same artifact as the section it summarizes, and that section is where the figures, the caveats and the full numbers are. The rule is printed so a reader can apply a different one to the same numbers; the verdict column is derived from it and is not written by hand anywhere.
| Measure | Measured | Compared against | Rule | Verdict | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Lowest overall MASE (Chronos-2) | 1.691 MASE | 1.761 MASE next-best model (TimesFM) | value < reference (lower is better) | better | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?MASE is scale-free (each series' error over its own naive-forecast error), so it is comparable across families; it rewards point accuracy only, not calibration.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Data families where one model separates significantly (1 of 5) | 1 family | 1 family one family (the minimum for any family-level claim) | value ≥ 1 | meets | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?Holm-corrected at α=0.05; a family absent from this count is one where the models were not distinguished, not one where they were equal. `power_state` is the third reading a non-detection needs: 'detected' vs. 'not detected, adequately powered' (a stated MDE this run could have caught) vs. 'not detected, underpowered or unsatisfiable' (no MDE is even computable at this n / n_boot).
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Best model beats a trivial (no-skill) forecast (block_bootstrap) | 1.533 MASE | 2.262 MASE better of naive-1 / seasonal-naive on this family (__seasonal_naive__) | value < reference (lower is better) | better | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?`mase` ≈ 1.0 for naive-1 under the default `mean_abs_diff` scale is true by construction, not a discovery -- the informative comparison is against seasonal-naive, which is not 1.0 by construction. A family where the best model does NOT clear this is a finding about that family, not a bug.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Best model beats a trivial (no-skill) forecast (mixture) | 1.209 MASE | 1.857 MASE better of naive-1 / seasonal-naive on this family (__seasonal_naive__) | value < reference (lower is better) | better | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?`mase` ≈ 1.0 for naive-1 under the default `mean_abs_diff` scale is true by construction, not a discovery -- the informative comparison is against seasonal-naive, which is not 1.0 by construction. A family where the best model does NOT clear this is a finding about that family, not a bug.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Best model beats a trivial (no-skill) forecast (parametric) | 2.814 MASE | 4.086 MASE better of naive-1 / seasonal-naive on this family (__seasonal_naive__) | value < reference (lower is better) | better | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?`mase` ≈ 1.0 for naive-1 under the default `mean_abs_diff` scale is true by construction, not a discovery -- the informative comparison is against seasonal-naive, which is not 1.0 by construction. A family where the best model does NOT clear this is a finding about that family, not a bug.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Best model beats a trivial (no-skill) forecast (random_parametric) | 1.771 MASE | 3.683 MASE better of naive-1 / seasonal-naive on this family (__seasonal_naive__) | value < reference (lower is better) | better | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?`mase` ≈ 1.0 for naive-1 under the default `mean_abs_diff` scale is true by construction, not a discovery -- the informative comparison is against seasonal-naive, which is not 1.0 by construction. A family where the best model does NOT clear this is a finding about that family, not a bug.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Best model beats a trivial (no-skill) forecast (sequential_par) | 1.070 MASE | 1.448 MASE better of naive-1 / seasonal-naive on this family (__naive__) | value < reference (lower is better) | better | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?`mase` ≈ 1.0 for naive-1 under the default `mean_abs_diff` scale is true by construction, not a discovery -- the informative comparison is against seasonal-naive, which is not 1.0 by construction. A family where the best model does NOT clear this is a finding about that family, not a bug.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Peak cross-model CKA (weakest of 6 pairs: TimesFM ↔ Sundial, stacked_xf.4 ↔ model.layers.2) | 0.412 CKA | 0.046 CKA shuffled-series null at the same layer pair | value ≥ 4× reference | clears | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?Geometric evidence. A ratio over the shuffle null says the alignment is not an artifact of series statistics; it does not say either model uses the shared geometry. The 4× in the rule is a stated convention — the CIs are given so a stricter or looser rule can be applied to the same numbers.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Best stitching gain over the input-feature baseline (Sundial → Chronos-2) | 0.901 ΔR² | 0 ΔR² zero gain (the input-feature baseline itself) | 95% CI lower bound > 0 | excludes | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?The plotted value is the CI's lower bound, because the rule is about the CI and not the point estimate. Raw R² is deliberately not the headline: both models saw the same series, so only the gain above a probe built from the raw input is evidence of shared *learned* structure.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Crystallization-depth spread (Chronos-Bolt earliest, Sundial latest) | 1 relative depth (block axis) | 0.273 relative depth (block axis) earliest model's depth (Chronos-Bolt) | |difference| ≥ 0.1 relative depth | separated | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?Depth is a fraction of each model's own whole stack, including surfaces this run never captured, so a model whose coverage is partial legitimately tops out below 1.0 — check the coverage rows before reading a depth *location* across models.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Best accuracy-per-compute (Chronos-Bolt): overall MASE × GFLOPs per series | 3.416 MASE·GFLOPs | 13.070 MASE·GFLOPs next-best deal (TimesFM) | value < reference (lower is better) | better | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?FLOPs are measured with torch's FLOP counter on this run's own context and horizon, not derived from a parameter count — so this transfers to an architecture no adapter was written for. The product is a deliberate choice of how to trade the two, not the only one: the per-model parameters, GFLOPs and MASE are all in the table so a different trade can be computed from them. FLOPs are not latency.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Least-observed model's captured FLOP fraction (Sundial) | 0.224 fraction of forecast FLOPs | 0.900 fraction of forecast FLOPs 0.90 (the threshold that qualifies depth claims) | value ≥ 0.90 | below | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?Every claim in this report about *where inside a model* something happens is scoped to the fraction observed here. Accuracy and cost rows are unaffected — they are measured at the model's output.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Cross-model corruption-fingerprint agreement (pooled rank ρ) | 0.495 Spearman ρ | 0 Spearman ρ zero agreement (independent depth profiles) | 95% CI lower bound > 0 | excludes | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?Each model's per-layer sensitivity profile is placed on the shared relative-depth axis and rank-correlated, per corruption. The plotted value is the CI's lower bound. This is a comparison of two *within-model* causal fingerprints — it says the two models are affected in the same depth order, not that they share a mechanism. A corruption with a strongly negative ρ in the table is a real disagreement, not noise, and is what the pooled number averages away.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Clustering agreement (weakest of 6 pairs: TimesFM and Chronos-Bolt, AMI) | 0.401 AMI | 0 AMI zero (chance agreement — AMI is chance-corrected) | 95% CI lower bound > 0 | excludes | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?Descriptive evidence. Clusters are matched by label overlap, so a high AMI says two models partition this corpus alike; it says nothing about *why*, and cluster labels are approximate by construction. Every pair's own AMI is in the table beneath.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Most load-bearing attention head, TimesFM (stacked_xf.0 · head 11) | 0.198 ΔMASE | 0 ΔMASE TimesFM's own repeat-run noise floor (exactly zero — deterministic forecasts) | value ≥ 2× reference | clears | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?Mean-ablating one head and re-forecasting. A deterministic model's repeat-run floor is exactly zero, so any nonzero effect clears the rule by construction for that model — which is why the floor is printed rather than folded into a verdict. The 2× is a stated convention; the per-head floor multiples are in the table so a stricter bar can be applied.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Most load-bearing attention head, Chronos-2 (encoder.block.11 · head 7) | 0.055 ΔMASE | 0 ΔMASE Chronos-2's own repeat-run noise floor (exactly zero — deterministic forecasts) | value ≥ 2× reference | clears | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?Mean-ablating one head and re-forecasting. A deterministic model's repeat-run floor is exactly zero, so any nonzero effect clears the rule by construction for that model — which is why the floor is printed rather than folded into a verdict. The 2× is a stated convention; the per-head floor multiples are in the table so a stricter bar can be applied.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Most load-bearing attention head, Sundial (model.layers.3 · head 11) | 0.037 ΔMASE | 0.177 ΔMASE Sundial's own repeat-run noise floor | value ≥ 2× reference | does not clear | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?Mean-ablating one head and re-forecasting. A deterministic model's repeat-run floor is exactly zero, so any nonzero effect clears the rule by construction for that model — which is why the floor is printed rather than folded into a verdict. The 2× is a stated convention; the per-head floor multiples are in the table so a stricter bar can be applied.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Most load-bearing attention head, Chronos-Bolt (encoder.block.5 · head 7) | 0.157 ΔMASE | 0 ΔMASE Chronos-Bolt's own repeat-run noise floor (exactly zero — deterministic forecasts) | value ≥ 2× reference | clears | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?Mean-ablating one head and re-forecasting. A deterministic model's repeat-run floor is exactly zero, so any nonzero effect clears the rule by construction for that model — which is why the floor is printed rather than folded into a verdict. The 2× is a stated convention; the per-head floor multiples are in the table so a stricter bar can be applied.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| SAE feature alignment to ground truth, TimesFM (weakest of 10 layers: stacked_xf.10) | 0.145 mean |ρ| of matched features | 0.120 mean |ρ| of matched features label-permutation null (p95 over shuffles) | value > reference | above | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?Each feature is matched to whichever ground-truth field it correlates with best, so the mean is inflated by that search even under pure noise — the permutation null is how large the same search gets on shuffled labels. The headline is this model's weakest layer against its own null, so a pass means every analyzed layer cleared it; the per-layer table is beneath. Read the dead feature rate beside it: alignment computed over a mostly-dead dictionary describes very few live features.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| SAE feature alignment to ground truth, Chronos-2 (weakest of 7 layers: encoder.block.7) | 0.168 mean |ρ| of matched features | 0.120 mean |ρ| of matched features label-permutation null (p95 over shuffles) | value > reference | above | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?Each feature is matched to whichever ground-truth field it correlates with best, so the mean is inflated by that search even under pure noise — the permutation null is how large the same search gets on shuffled labels. The headline is this model's weakest layer against its own null, so a pass means every analyzed layer cleared it; the per-layer table is beneath. Read the dead feature rate beside it: alignment computed over a mostly-dead dictionary describes very few live features.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| SAE feature alignment to ground truth, Sundial (weakest of 9 layers: model.layers.5) | 0.158 mean |ρ| of matched features | 0.119 mean |ρ| of matched features label-permutation null (p95 over shuffles) | value > reference | above | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?Each feature is matched to whichever ground-truth field it correlates with best, so the mean is inflated by that search even under pure noise — the permutation null is how large the same search gets on shuffled labels. The headline is this model's weakest layer against its own null, so a pass means every analyzed layer cleared it; the per-layer table is beneath. Read the dead feature rate beside it: alignment computed over a mostly-dead dictionary describes very few live features.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| SAE feature alignment to ground truth, Chronos-Bolt (weakest of 3 layers: encoder.block.5) | 0.179 mean |ρ| of matched features | 0.115 mean |ρ| of matched features label-permutation null (p95 over shuffles) | value > reference | above | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?Each feature is matched to whichever ground-truth field it correlates with best, so the mean is inflated by that search even under pure noise — the permutation null is how large the same search gets on shuffled labels. The headline is this model's weakest layer against its own null, so a pass means every analyzed layer cleared it; the per-layer table is beneath. Read the dead feature rate beside it: alignment computed over a mostly-dead dictionary describes very few live features.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| SAE causal concepts, Chronos-2/encoder.block.6: strongest concept's effect vs. its null | 4.416 multiples of null p95 | 1 multiples of null p95 random-direction ablation null (p95, same magnitude) | value > reference | above | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?Each concept's name and its dominant channel are DERIVED from the same ablation battery this row scores, never authored -- a concept whose profile is empty ('no measured effect') is excluded from the max here by construction, not by a separate filter. The per-concept detail is every concept this target's dictionary clustered into, not only the winner -- and a concept with no measured effect says so in words rather than leaving the cell blank, which pandas would otherwise render as `NaN` and a reader would read as a failed measurement rather than the useful negative result it is.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| SAE causal concepts, Chronos-2/encoder.block.8: strongest concept's effect vs. its null | 3.203 multiples of null p95 | 1 multiples of null p95 random-direction ablation null (p95, same magnitude) | value > reference | above | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?Each concept's name and its dominant channel are DERIVED from the same ablation battery this row scores, never authored -- a concept whose profile is empty ('no measured effect') is excluded from the max here by construction, not by a separate filter. The per-concept detail is every concept this target's dictionary clustered into, not only the winner -- and a concept with no measured effect says so in words rather than leaving the cell blank, which pandas would otherwise render as `NaN` and a reader would read as a failed measurement rather than the useful negative result it is.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| SAE causal concepts, Chronos-Bolt/encoder.block.4: strongest concept's effect vs. its null | 3.267 multiples of null p95 | 1 multiples of null p95 random-direction ablation null (p95, same magnitude) | value > reference | above | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?Each concept's name and its dominant channel are DERIVED from the same ablation battery this row scores, never authored -- a concept whose profile is empty ('no measured effect') is excluded from the max here by construction, not by a separate filter. The per-concept detail is every concept this target's dictionary clustered into, not only the winner -- and a concept with no measured effect says so in words rather than leaving the cell blank, which pandas would otherwise render as `NaN` and a reader would read as a failed measurement rather than the useful negative result it is.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| SAE causal concepts, Sundial/model.layers.5: strongest concept's effect vs. its null | 2.288 multiples of null p95 | 1 multiples of null p95 random-direction ablation null (p95, same magnitude) | value > reference | above | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?Each concept's name and its dominant channel are DERIVED from the same ablation battery this row scores, never authored -- a concept whose profile is empty ('no measured effect') is excluded from the max here by construction, not by a separate filter. The per-concept detail is every concept this target's dictionary clustered into, not only the winner -- and a concept with no measured effect says so in words rather than leaving the cell blank, which pandas would otherwise render as `NaN` and a reader would read as a failed measurement rather than the useful negative result it is.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Registered claims that replicated on held-out private data | 1 claim | 1 claim registered claims that could be re-tested | value ≥ all re-testable claims | meets | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?47 claim(s) were registered before the private corpus was opened; 1 were re-testable. These are the only confirmatory results in this report — every other row is exploratory.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Concepts shared (same effect and inputs, reproducible): TimesFM & Chronos-2 | 0 concepts | 11 concepts stable, multi-model atlas concepts either model is part of | value ≥ 1× reference | does not clear | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?Denominator counts only concepts BOTH seed-stable and spanning 2+ models where TimesFM or Chronos-2 holds a member -- a concept whose stability was never measured is excluded from this row entirely, not treated as unstable (15 of 27 run-wide concepts are excluded for that or the single-model reason). | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Concepts shared (same effect and inputs, reproducible): TimesFM & Sundial | 1 concepts | 11 concepts stable, multi-model atlas concepts either model is part of | value ≥ 1× reference | does not clear | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?Denominator counts only concepts BOTH seed-stable and spanning 2+ models where TimesFM or Sundial holds a member -- a concept whose stability was never measured is excluded from this row entirely, not treated as unstable (15 of 27 run-wide concepts are excluded for that or the single-model reason).
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Concepts shared (same effect and inputs, reproducible): TimesFM & Chronos-Bolt | 1 concepts | 7 concepts stable, multi-model atlas concepts either model is part of | value ≥ 1× reference | does not clear | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?Denominator counts only concepts BOTH seed-stable and spanning 2+ models where TimesFM or Chronos-Bolt holds a member -- a concept whose stability was never measured is excluded from this row entirely, not treated as unstable (15 of 27 run-wide concepts are excluded for that or the single-model reason).
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Concepts shared (same effect and inputs, reproducible): Chronos-2 & Sundial | 1 concepts | 11 concepts stable, multi-model atlas concepts either model is part of | value ≥ 1× reference | does not clear | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?Denominator counts only concepts BOTH seed-stable and spanning 2+ models where Chronos-2 or Sundial holds a member -- a concept whose stability was never measured is excluded from this row entirely, not treated as unstable (15 of 27 run-wide concepts are excluded for that or the single-model reason).
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Concepts shared (same effect and inputs, reproducible): Chronos-2 & Chronos-Bolt | 0 concepts | 10 concepts stable, multi-model atlas concepts either model is part of | value ≥ 1× reference | does not clear | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?Denominator counts only concepts BOTH seed-stable and spanning 2+ models where Chronos-2 or Chronos-Bolt holds a member -- a concept whose stability was never measured is excluded from this row entirely, not treated as unstable (15 of 27 run-wide concepts are excluded for that or the single-model reason). | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Concepts shared (same effect and inputs, reproducible): Sundial & Chronos-Bolt | 0 concepts | 11 concepts stable, multi-model atlas concepts either model is part of | value ≥ 1× reference | does not clear | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What does this mean?Denominator counts only concepts BOTH seed-stable and spanning 2+ models where Sundial or Chronos-Bolt holds a member -- a concept whose stability was never measured is excluded from this row entirely, not treated as unstable (15 of 27 run-wide concepts are excluded for that or the single-model reason). | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A verdict here is arithmetic on one run, not a conclusion about the models in general. Every row inherits the evidence class of the section that produced it — behavioral, geometric, translatable, causal-within-model or descriptive — which the “How to read this report” note below defines, and which decides how much weight a cleared rule can carry.
A concept must clear the full evidence ladder -- same causal effect, same driving inputs, reproducible across an independent SAE seed -- to count as genuinely shared.
No concept has causal-effect members in all 4 models; the broadest span 3 of 4. Of the 1 concept(s) spanning 3 models: 1 partially shared. 9 multi-model concept(s) share the same causal EFFECT but fire on different series in each model (convergent) -- the models reach the same forecast adjustment from different inputs.
How sure: L2/L3 not jointly reached at full model count.
Per model, its reproducible model-specific concepts: what each does, what it fires on, and whether the model's own behavioral advantage on those series is actually traced to that concept's own ablation effect.
Bottom line: of 10 model-specific concept(s), 1 sit on series where their model forecasts better than every other model, and 0 of those are traced to the concept by its own ablation. A concept unique to a model is not, by itself, evidence of an advantage.
TimesFM: 3 reproducible model-specific concept(s).
'mild raises level' -- does: level +2.03x null, horizon_shape_near +1.93x null; fires on: ar_order (ρ=0.43, n=555); why: no model is clearly better or worse than this one on these series; removing it worsens this model's MASE (1.880x the null's 95th percentile)
'mild raises horizon_shape_near · unusually raises mase' -- does: horizon_shape_near +1.03x null, mase +1.03x null; fires on: n_seasonalities (ρ=0.49, n=555); why: no model is clearly better or worse than this one on these series; removing it worsens this model's MASE (1.025x the null's 95th percentile)
'shifts the level' -- does: level -1.26x null, mase +1.24x null; fires on: ar_coeff_sum (ρ=0.49, n=374); why: this model is worse than 2 model(s) on these series; removing it worsens this model's MASE (1.244x the null's 95th percentile)
Chronos-2: 3 reproducible model-specific concept(s).
'strong raises dispersion · unusually raises horizon_shape_far' -- does: dispersion +1.54x null, level -0.81x null; fires on: has_intermittency (ρ=0.37, n=555); why: no model is clearly better or worse than this one on these series; removing it does not move this model's MASE beyond the random-direction null (0.403x)
'strong lowers dispersion' -- does: dispersion -2.72x null, horizon_shape_far +1.89x null; fires on: provenance-driven: fires on mixture series; why: this model beats every other on these series, but removing the concept does not worsen its MASE; removing it does not move this model's MASE beyond the random-direction null (0.576x)
'strong lowers level · unusually lowers seasonal' -- does: level -5.68x null, dispersion -4.03x null; fires on: noise_scale (ρ=-0.37, n=555); why: no model is clearly better or worse than this one on these series; removing it worsens this model's MASE (1.378x the null's 95th percentile)
Sundial: 4 reproducible model-specific concept(s).
'strong raises dispersion · unusually raises spectral_centroid' -- does: dispersion +2.78x null, horizon_shape_near +1.32x null; fires on: provenance-driven: fires on block_bootstrap series; why: this model is worse than 3 model(s) on these series; removing it does not move this model's MASE beyond the random-direction null (0.285x)
'strong raises horizon_shape_far · unusually raises mase' -- does: horizon_shape_near +1.02x null, horizon_shape_far +0.97x null; fires on: n_seasonalities (ρ=0.62, n=555); why: this model is worse than 1 model(s) on these series; removing it does not move this model's MASE beyond the random-direction null (0.672x)
'strong raises horizon_shape_far · unusually raises horizon_shape_near' -- does: horizon_shape_far +3.80x null, horizon_shape_near +2.63x null; fires on: ar_coeff_sum (ρ=0.14, n=374); why: this model is worse than 2 model(s) on these series; removing it improves this model's MASE (0.068x the null's 95th percentile)
'strong raises dispersion · unusually raises seasonal' -- does: dispersion +3.61x null, seasonal +3.12x null; fires on: n_changepoints (ρ=-0.22, n=555); why: this model is worse than 2 model(s) on these series; removing it improves this model's MASE (2.873x the null's 95th percentile)
Chronos-Bolt: 0 model-specific concepts (reproducible or not yet measured).
How sure: uniqueness is relative to the analyzed layers and dictionaries; reproducibility is L3; what a concept fires on is correlational; the advantage link combines a behavioral gap with a within-model ablation; nothing here is confirmed on private data (L6).
Each metric measures a different kind of similarity (behavior, geometry, linear translatability, clustering, SAE effect, SAE inputs), so they need not agree: read each on its own scale, never averaged into one score.
Closest pair, by metric: Sundial/Chronos-Bolt on 2 metric(s) (Best-layer CKA 0.928, Input transfer 0.950); Chronos-2/Sundial on 2 metric(s) (Stitching gain 0.901, Atlas co-membership 0.588); TimesFM/Sundial on 2 metric(s) (Cluster agreement (AMI) 0.684, Shared concepts 1); TimesFM/Chronos-2 on 1 metric(s) (Error agreement 0.947).
Furthest pair, by metric: TimesFM/Chronos-Bolt on 4 metric(s) (Best-layer CKA 0.381, Stitching gain 0.614, Cluster agreement (AMI) 0.422, Input transfer 0.777); Chronos-2/Chronos-Bolt on 1 metric(s) (Error agreement 0.728); Sundial/Chronos-Bolt on 1 metric(s) (Atlas co-membership 0.192); TimesFM/Chronos-2 on 1 metric(s) (Shared concepts 0).
Kendall's W across every measured metric: 0.281 (p=0.0700, 7 metric(s)); within representation metrics only: 0.530 (p=0.1379, 3 metric(s)). With only a handful of model pairs, Kendall's W has low power: a non-significant p does NOT mean the metrics agree, and a significant one should still be read alongside the per-metric rank table above, not instead of it.
Disagreements: Sundial and Chronos-Bolt: rank 1 of 6 on Best-layer CKA, rank 6 of 6 on Atlas co-membership. Sundial and Chronos-Bolt: rank 1 of 6 on Input transfer, rank 6 of 6 on Atlas co-membership. Chronos-2 and Chronos-Bolt: rank 2 of 6 on Stitching gain, rank 6 of 6 on Error agreement....and 10 more contrast(s) below.
How sure: 13 large rank disagreement(s) found across metric families
| Pair | Error agreement | Best-layer CKA | Stitching gain | Cluster agreement (AMI) | Atlas co-membership | Input transfer | Shared concepts | Median rank | Rank range |
|---|---|---|---|---|---|---|---|---|---|
| TimesFM / Chronos-2 | 1 | 4 | 4 | 2 | 3 | 5 | 5 | 4.0 | 4.0 |
| TimesFM / Sundial | 2 | 5 | 5 | 1 | 2 | 2 | 2 | 2.0 | 4.0 |
| TimesFM / Chronos-Bolt | 5 | 6 | 6 | 6 | 4 | 6 | 2 | 6.0 | 4.0 |
| Chronos-2 / Sundial | 3 | 2 | 1 | 3 | 1 | 4 | 2 | 2.0 | 3.0 |
| Chronos-2 / Chronos-Bolt | 6 | 3 | 2 | 5 | 5 | 3 | 5 | 5.0 | 4.0 |
| Sundial / Chronos-Bolt | 4 | 1 | 3 | 4 | 6 | 1 | 5 | 4.0 | 5.0 |
Kendall's W (all measured metrics): 0.281 (p=0.0700, 7 metric(s)). Within representation metrics only: 0.530 (p=0.1379, 3 metric(s)). With only a handful of model pairs, Kendall's W has low power: a non-significant p does NOT mean the metrics agree, and a significant one should still be read alongside the per-metric rank table above, not instead of it.
| model | smape | pinball | mae_over_mad | mase |
|---|---|---|---|---|
| Chronos-2 | 0.706 | 0.580 | 0.874 | 1.691 |
| Chronos-Bolt | 0.800 | 0.743 | 1.002 | 2.151 |
| Sundial | 0.804 | 0.777 | 1.049 | 1.950 |
| TimesFM | 0.722 | 0.601 | 0.917 | 1.761 |
New to this report? How to read this report states the evidence-class ladder every section below is ordered by.
Impulse alignment check (diagonal-hit fraction) — near 1.0 means declared token time spans are trustworthy for this checkpoint/library version.
| model | min | mean | shallowest layer | gate |
|---|---|---|---|---|
| TimesFM | 1.00 | 1.00 | stacked_xf.0 | pass |
| Chronos-2 | 1.00 | 1.00 | encoder.block.0 | pass |
| Sundial | 0.12 | 0.48 | model.layers.0 | pass |
| Chronos-Bolt | 1.00 | 1.00 | encoder.block.0 | pass |
tsfm_lens 0.1.0 · run time 6h 25m
models TimesFM (timesfm): google/timesfm-2.5-200m-pytorch; Chronos-2 (chronos2): amazon/chronos-2; Sundial (sundial): thuml/sundial-base-128m; Chronos-Bolt (chronos_bolt): amazon/chronos-bolt-small
packages torch 2.12.0, numpy 2.1.0, pandas 2.3.3, zarr 2.18.7, sklearn 1.7.2, transformers 4.57.6, timesfm 2.0.2, chronos 2.3.1
Non-finite activation values at write time — any nonzero count here means that layer's stored values include inf/NaN, which store.load would otherwise raise on the first time an analysis stage actually reads that layer.
| model/layer | count | total | fraction |
|---|---|---|---|
| Chronos-2/encoder.block.0 | 0 | 11857920 | 0.0000% |
| Chronos-2/encoder.block.1 | 0 | 11857920 | 0.0000% |
| Chronos-2/encoder.block.10 | 0 | 11857920 | 0.0000% |
| Chronos-2/encoder.block.11 | 0 | 11857920 | 0.0000% |
| Chronos-2/encoder.block.2 | 0 | 11857920 | 0.0000% |
| Chronos-2/encoder.block.3 | 0 | 11857920 | 0.0000% |
| Chronos-2/encoder.block.4 | 0 | 11857920 | 0.0000% |
| Chronos-2/encoder.block.5 | 0 | 11857920 | 0.0000% |
| Chronos-2/encoder.block.6 | 0 | 11857920 | 0.0000% |
| Chronos-2/encoder.block.7 | 0 | 11857920 | 0.0000% |
| Chronos-2/encoder.block.8 | 0 | 11857920 | 0.0000% |
| Chronos-2/encoder.block.9 | 0 | 11857920 | 0.0000% |
| Chronos-Bolt/encoder.block.0 | 0 | 7905280 | 0.0000% |
| Chronos-Bolt/encoder.block.1 | 0 | 7905280 | 0.0000% |
| Chronos-Bolt/encoder.block.2 | 0 | 7905280 | 0.0000% |
| Chronos-Bolt/encoder.block.3 | 0 | 7905280 | 0.0000% |
| Chronos-Bolt/encoder.block.4 | 0 | 7905280 | 0.0000% |
| Chronos-Bolt/encoder.block.5 | 0 | 7905280 | 0.0000% |
| Sundial/model.layers.0 | 0 | 11857920 | 0.0000% |
| Sundial/model.layers.1 | 0 | 11857920 | 0.0000% |
| Sundial/model.layers.10 | 0 | 11857920 | 0.0000% |
| Sundial/model.layers.11 | 0 | 11857920 | 0.0000% |
| Sundial/model.layers.2 | 0 | 11857920 | 0.0000% |
| Sundial/model.layers.3 | 0 | 11857920 | 0.0000% |
| Sundial/model.layers.4 | 0 | 11857920 | 0.0000% |
| Sundial/model.layers.5 | 0 | 11857920 | 0.0000% |
| Sundial/model.layers.6 | 0 | 11857920 | 0.0000% |
| Sundial/model.layers.7 | 0 | 11857920 | 0.0000% |
| Sundial/model.layers.8 | 0 | 11857920 | 0.0000% |
| Sundial/model.layers.9 | 0 | 11857920 | 0.0000% |
| TimesFM/stacked_xf.0 | 0 | 19763200 | 0.0000% |
| TimesFM/stacked_xf.10 | 0 | 19763200 | 0.0000% |
| TimesFM/stacked_xf.12 | 0 | 19763200 | 0.0000% |
| TimesFM/stacked_xf.14 | 0 | 19763200 | 0.0000% |
| TimesFM/stacked_xf.16 | 0 | 19763200 | 0.0000% |
| TimesFM/stacked_xf.18 | 0 | 19763200 | 0.0000% |
| TimesFM/stacked_xf.2 | 0 | 19763200 | 0.0000% |
| TimesFM/stacked_xf.4 | 0 | 19763200 | 0.0000% |
| TimesFM/stacked_xf.6 | 0 | 19763200 | 0.0000% |
| TimesFM/stacked_xf.8 | 0 | 19763200 | 0.0000% |
Part 1 — The setup and whether to trust it
Whether this run's cross-model comparisons are fair between the configured models, and what the benchmark corpus actually contains.
↑ contentsEvery measured asymmetry between each pair of models in this run, before any result section.
Question
Given everything the other stages found, is this a fair comparison, and what's actually solid enough to act on?
How
Collects every stage's artifacts into one document, states upfront which measured asymmetries between each pair of models (parameters, compute, coverage, forecast determinism) apply before any result is read, and marks every section as rendered, skipped, or failed rather than silently omitting anything.
Good vs. bad result
Good: every enabled stage's section actually rendered (no 'failed' rows in the coverage panel) and the fairness card names its asymmetries with real measured values rather than 'not yet measured'. Bad: any section marked 'failed' (a bug, not an expected degrade) or a fairness row that couldn't be measured, which should downgrade how much weight a depth-located claim in that section deserves.
What it cannot tell you
The report presents what the pipeline measured; it adds no new evidence of its own. A 'rendered' status only means a section produced output without error, not that a result inside it is strong — that's for the evidence-class ladder shown once at the top (geometric / translatable / causal-within-model / descriptive / illustrative / behavioral) to decide, section by section.
This run compares 4 models, so there are 6 pairs. Fairness is a property of a pair, so each gets its own card below; the first is open and the rest are collapsed.
| Axis | TimesFM | Chronos-2 | Asymmetry | Qualifies |
|---|---|---|---|---|
| Analysis eligibility | full (spans declared by adapter) | full (spans declared by adapter) | both fully eligible | every non-L0 section |
| Capability tier | 3 (decomposable) | 3 (decomposable) | same tier | no stage dropped |
| Parameters | 231.3M | 119.5M | 1.94× | all quality claims |
| FLOPs per forward (per series) | 7.42 GFLOPs | 8.65 GFLOPs | 1.17× | all quality claims |
| Captured FLOP fraction | 42.5% | 97.5% | 55.0 pt gap | all depth-located claims |
| Depth axis ('block') | caps at 0.947 | caps at 1.000 | 94.7% overlap | all cross-depth figures |
| Forecast determinism / noise floor | deterministic | deterministic | both same kind | all delta claims |
| Finest resolvable lag (token width) | 32 steps | 16 steps | 2.0× — matched at 32 steps | all cross-model attention-lag claims |
| Declared training exposure | not yet measured | not yet measured | n/a | all behavioral claims |
| Capability intersection | not yet measured | not yet measured | n/a | the asymmetric analyses |
| Axis | TimesFM | Sundial | Asymmetry | Qualifies |
|---|---|---|---|---|
| Analysis eligibility | full (spans declared by adapter) | full (spans declared by adapter) | both fully eligible | every non-L0 section |
| Capability tier | 3 (decomposable) | 2 (steerable) | run capped at tier 2 by the lower model | no stage dropped |
| Parameters | 231.3M | 128.3M | 1.80× | all quality claims |
| FLOPs per forward (per series) | 7.42 GFLOPs | 7.44 GFLOPs | 1.00× | all quality claims |
| Captured FLOP fraction | 42.5% | 22.4% | 20.1 pt gap | all depth-located claims |
| Depth axis ('block') | caps at 0.947 | caps at 1.000 | 94.7% overlap | all cross-depth figures |
| Forecast determinism / noise floor | deterministic | ±0.177 MASE | one deterministic, one sampled | all delta claims |
| Finest resolvable lag (token width) | not yet measured | not yet measured | n/a | all attention-lag claims (needs the attention stage with pattern capture supported by both adapters) |
| Declared training exposure | not yet measured | not yet measured | n/a | all behavioral claims |
| Capability intersection | not yet measured | not yet measured | n/a | the asymmetric analyses |
| Axis | TimesFM | Chronos-Bolt | Asymmetry | Qualifies |
|---|---|---|---|---|
| Analysis eligibility | full (spans declared by adapter) | full (spans declared by adapter) | both fully eligible | every non-L0 section |
| Capability tier | 3 (decomposable) | 2 (steerable) | run capped at tier 2 by the lower model | no stage dropped |
| Parameters | 231.3M | 47.7M | 4.85× | all quality claims |
| FLOPs per forward (per series) | 7.42 GFLOPs | 1.59 GFLOPs | 4.67× | all quality claims |
| Captured FLOP fraction | 42.5% | 79.3% | 36.7 pt gap | all depth-located claims |
| Depth axis ('block') | caps at 0.947 | caps at 0.455 | 94.7% overlap | all cross-depth figures |
| Forecast determinism / noise floor | deterministic | deterministic | both same kind | all delta claims |
| Finest resolvable lag (token width) | not yet measured | not yet measured | n/a | all attention-lag claims (needs the attention stage with pattern capture supported by both adapters) |
| Declared training exposure | not yet measured | not yet measured | n/a | all behavioral claims |
| Capability intersection | not yet measured | not yet measured | n/a | the asymmetric analyses |
| Axis | Chronos-2 | Sundial | Asymmetry | Qualifies |
|---|---|---|---|---|
| Analysis eligibility | full (spans declared by adapter) | full (spans declared by adapter) | both fully eligible | every non-L0 section |
| Capability tier | 3 (decomposable) | 2 (steerable) | run capped at tier 2 by the lower model | no stage dropped |
| Parameters | 119.5M | 128.3M | 1.07× | all quality claims |
| FLOPs per forward (per series) | 8.65 GFLOPs | 7.44 GFLOPs | 1.16× | all quality claims |
| Captured FLOP fraction | 97.5% | 22.4% | 75.1 pt gap | all depth-located claims |
| Depth axis ('block') | caps at 1.000 | caps at 1.000 | 94.7% overlap | all cross-depth figures |
| Forecast determinism / noise floor | deterministic | ±0.177 MASE | one deterministic, one sampled | all delta claims |
| Finest resolvable lag (token width) | not yet measured | not yet measured | n/a | all attention-lag claims (needs the attention stage with pattern capture supported by both adapters) |
| Declared training exposure | not yet measured | not yet measured | n/a | all behavioral claims |
| Capability intersection | not yet measured | not yet measured | n/a | the asymmetric analyses |
| Axis | Chronos-2 | Chronos-Bolt | Asymmetry | Qualifies |
|---|---|---|---|---|
| Analysis eligibility | full (spans declared by adapter) | full (spans declared by adapter) | both fully eligible | every non-L0 section |
| Capability tier | 3 (decomposable) | 2 (steerable) | run capped at tier 2 by the lower model | no stage dropped |
| Parameters | 119.5M | 47.7M | 2.50× | all quality claims |
| FLOPs per forward (per series) | 8.65 GFLOPs | 1.59 GFLOPs | 5.45× | all quality claims |
| Captured FLOP fraction | 97.5% | 79.3% | 18.3 pt gap | all depth-located claims |
| Depth axis ('block') | caps at 1.000 | caps at 0.455 | 94.7% overlap | all cross-depth figures |
| Forecast determinism / noise floor | deterministic | deterministic | both same kind | all delta claims |
| Finest resolvable lag (token width) | not yet measured | not yet measured | n/a | all attention-lag claims (needs the attention stage with pattern capture supported by both adapters) |
| Declared training exposure | not yet measured | not yet measured | n/a | all behavioral claims |
| Capability intersection | not yet measured | not yet measured | n/a | the asymmetric analyses |
| Axis | Sundial | Chronos-Bolt | Asymmetry | Qualifies |
|---|---|---|---|---|
| Analysis eligibility | full (spans declared by adapter) | full (spans declared by adapter) | both fully eligible | every non-L0 section |
| Capability tier | 2 (steerable) | 2 (steerable) | same tier | no stage dropped |
| Parameters | 128.3M | 47.7M | 2.69× | all quality claims |
| FLOPs per forward (per series) | 7.44 GFLOPs | 1.59 GFLOPs | 4.69× | all quality claims |
| Captured FLOP fraction | 22.4% | 79.3% | 56.8 pt gap | all depth-located claims |
| Depth axis ('block') | caps at 1.000 | caps at 0.455 | 94.7% overlap | all cross-depth figures |
| Forecast determinism / noise floor | ±0.177 MASE | deterministic | one deterministic, one sampled | all delta claims |
| Finest resolvable lag (token width) | not yet measured | not yet measured | n/a | all attention-lag claims (needs the attention stage with pattern capture supported by both adapters) |
| Declared training exposure | not yet measured | not yet measured | n/a | all behavioral claims |
| Capability intersection | not yet measured | not yet measured | n/a | the asymmetric analyses |
Every measured asymmetry between the models in this run, one card per pair, before any result section. This is the page to check first, and the strongest single argument that this repo's comparisons are honest rather than merely careful.
How to read it
Every row is read from an already-measured artifact -- no value here is hand-written. A row reading 'not yet measured' means the stage or analysis named in Qualifies is either disabled in this config or not yet built anywhere in the repo; read any claim that row would qualify with the same caution states for it in prose.
Limitations
This card is only as complete as the F-items behind it. F3, F7 and F8 have no landed measurement anywhere in the repo yet, so their rows are a statement of absence, not a small number -- absence of a row here is never evidence of fairness.
What the benchmark corpus actually is and whether it can be trusted, before any model result.
Question
Can the benchmark corpus itself be trusted -- is it free of copied reference series, free of near-duplicates, and diverse enough that a model can't do well here just by memorizing one shape?
How
Reads the sealed corpus's own manifest (when present) and, optionally, an existing `benchmark_validation` report, and renders both as a fixed trust ladder of named claims -- never recomputes a leakage or diversity check itself, and never imports `benchmark_validation`.
Good vs. bad result
Good: every trust-ladder row reads `measured` with a real reference and a stated verdict. Bad: a row reads `not_checked` -- the corpus was built with `--references none`, so every candidate passed the leakage gate trivially, which is NOT the same as a corpus that was checked and found clean -- or `not_recorded`, meaning no audit ever ran at all.
What it cannot tell you
Two rows are always unresolvable and are rendered that way rather than omitted: whether the private split's distribution genuinely matches the dev split's (no mechanism in this repo compares them), and whether any model being compared was trained on data shaped like this corpus (no audit anywhere can inspect a checkpoint's own training data). A `measured` row is evidence the corpus is sound by the checks that exist -- it is not proof no other check would find a problem.
Sealed corpus, visibility public, epoch 0, 965 sealed samples (965 usable after length filtering). Global digest 65e020884dfdb9df….
Series counts by tier and by generator, for THIS run's own corpus.
How to read it
Each bar is a count of series sharing that label. `tier` distinguishes leakage-safe synthetic series from real-derived ones; `generator` names the construction mechanism.
Limitations
This renders only the corpus this run actually loaded (`data.path`), never a dev-vs-private side-by-side -- the private split is loaded independently, only by the `confirm` stage, and is not available here to compare against without loading a second corpus this stage was not given.
One representative context window (512 steps) per family, 5 of 5 families shown.
How to read it
Each panel is one real series from this corpus, not an average or a synthetic composite -- picked per family (`np.random.default_rng` seeded on `run.seed`) rather than by a head slice, since this corpus is written grouped by generator and a plain prefix would silently select a family-skewed sample.
Limitations
Each panel has its own y-axis: series scales are not comparable across panels, and this is illustrative, not a diversity measurement (that is Figure 3 below, computed in feature space).
Equal-frequency histogram of pairwise shape-similarity scores over 965 series (redundancy fraction 0.0). Effective dimensionality 5.294 of 22 catch22/24 features; near-collision fraction 0.0518.
How to read it
Computed by `benchmark_validation` in **catch22 feature space, never on UMAP coordinates** -- distances here are the real diversity measurement, unlike Figure 4 below. This particular validation report's provenance is UNVERIFIED (item C1.3) -- it is matched to this corpus by configured path only, not by a cross-checked digest, so it may in principle describe a different corpus than the one this run actually used.
Limitations
A high redundancy fraction can be a true finding, not a defect -- e.g. many pure-seasonal series sharing one period differ only in noise and are legitimately near-duplicate in shape. Read this figure alongside effective dimensionality, never alone.
Feature-space map: a standalone interactive 3-D UMAP projection exists alongside this corpus’s validation report at ../../validation_large/feature_space_3d.html.
This section deliberately does not re-plot or re-derive a UMAP embedding -- `validation_report.json` persists only aggregated quantiles and bucket histograms, never raw per-sequence coordinates, and item C1.2 forbids this package from importing `benchmark_validation` to regenerate one.
How to read it
Open the linked standalone HTML file directly (`benchmark_validation`'s own `plot_embedding` output) for the interactive 3-D view, colored by generator.
Limitations
Three things this repo insists on stating every time UMAP is mentioned: diversity is measured in catch22 feature space, never on UMAP coordinates (Figure 3 above is the real measurement); UMAP distorts global distances and cluster sizes, so gaps in the 3-D plot are not quantitative; and this is a CORPUS feature-space embedding, a different object entirely from an activation-space embedding of a model's internals.
Distance-to-nearest-reference quantiles for series the gate accepted vs. rejected, against 82 real reference series from ['hf/Monash-University/monash_tsf/covid_deaths/train', 'hf/Monash-University/monash_tsf/saugeenday/train', 'hf/Monash-University/monash_tsf/tourism_quarterly/train', 'hf/Monash-University/monash_tsf/traffic_weekly/train', 'hf/Monash-University/monash_tsf/us_births/train', 'hf/Monash-University/monash_tsf/vehicle_trips/train']. 68 of 2000 candidates rejected (14 cross-split near-duplicate pairs).
How to read it
A series below the gate threshold is rejected as too close to a real reference series. Only aggregated quantiles are persisted, not the raw per-candidate distance array, so this is a quantile comparison, not a full histogram.
Limitations
This gate measures INSTANCE-level leakage only (an exact copy of a reference series) -- it says nothing about DISTRIBUTIONAL leakage (a model having seen data *shaped like* this), which is carried by construction for every real-derived-tier sample and cannot be audited by this or any other check.
| Claim | Measured | Compared against | Rule | Verdict | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| No series here is a copy of a real reference series (68 of 2000 candidates rejected) | 0.352 distance | 0.350 distance gate threshold (dtw) | value > reference | above | ||||||||||||||||
What does this mean?
| ||||||||||||||||||||
| No two series within a split are near-duplicates of each other | 7 pairs | 0 pairs 0 within-split near-duplicate pairs | value ≤ 0 | does not clear | ||||||||||||||||
What does this mean?
| ||||||||||||||||||||
| The dev and private splits share no series | 14 pairs | 0 pairs 0 cross-split near-duplicate pairs | value ≤ 0 | does not clear | ||||||||||||||||
What does this mean?
| ||||||||||||||||||||
| The private split looks like the dev split | not measured | not measured a declared equivalence margin | value > reference | inconclusive | ||||||||||||||||
What does this mean?No mechanism in this repo currently compares the private split's distribution against the dev split's item B1's audit block is written identically to both splits by construction (same epoch, same verdict), so it cannot answer this question. Recorded as inconclusive rather than omitted. | ||||||||||||||||||||
| A model cannot do well here by memorizing one shape (effective dimensionality) | 5.294 | 2 benchmark_validation's default min_effective_dimensionality (gates.py) -- not read from this report's own config | value ≥ 2 | meets | ||||||||||||||||
What does this mean?
| ||||||||||||||||||||
| Series here vary in more than one way (7 distinct per-group dominant features of 7 groups) | 7 | 2 at least 2 distinct dominant features across groups | value ≥ 2 | meets | ||||||||||||||||
What does this mean?
| ||||||||||||||||||||
| The models being compared were not trained on this data | not measured | not measured a checkpoint's own training corpus | value > reference | not_verifiable | ||||||||||||||||
What does this mean?Nothing in this repo can inspect a checkpoint's training corpus. the two-tier design audits INSTANCE-level leakage (rows 1-3 above: is any series here a copy of something we checked against) but DISTRIBUTIONAL leakage -- has a model's training data ever seen data shaped like this -- is carried by construction for every real_derived-tier sample and is not something any audit in this repo, or any other, can rule out. This row is intentionally unresolvable and is rendered rather than omitted so it cannot be mistaken for a question nobody thought to ask. | ||||||||||||||||||||
Seven claims about the corpus itself, each derived from `corpus/card.json` -- never a model result.
How to read it
`not_recorded` means no audit ever ran; `not_checked` means the leakage gate ran with zero reference series (`--references none`) so every candidate passed trivially -- NOT the same as a corpus checked and found clean. `inconclusive` and `not_verifiable` rows are claims nothing in this repo can currently resolve, rendered rather than omitted.
Limitations
A `measured`/`clears` verdict is evidence the corpus is sound by the checks that exist here -- it is not proof no other check would find a problem, and rows 4 and 7 are permanently open questions this section states rather than answers.
Part 2 — How well each model forecasts
Behavioral accuracy per benchmark family, what each model costs to run, and what its input front-end does before any layer runs.
↑ contentsForecast quality per benchmark family: the hypotheses the deeper levels try to explain.
Question
Which model actually forecasts more accurately, and on what kinds of data?
How
Runs every model's native forecasting procedure on every benchmark series, scores each series' error against a naive same-scale baseline, and statistically compares the paired per-series differences within each data family, correcting for testing many families -- and, when more than two models are configured, many model pairs -- at once.
Good vs. bad result
Good: a family where the paired difference's confidence interval clearly excludes zero after correction — a real, replicable accuracy edge on that kind of data. Bad: every family's interval spans zero (no reliable difference survives correction), or a gap that looks real in the bar chart but isn't backed by a significant test.
What it cannot tell you
This is purely behavioral: it can tell you which model wins and where, but nothing about why, or what mechanism inside either model produces the gap — that's what every stage after this one exists to investigate. It also measures point-forecast accuracy only; a model can score well here and still have badly miscalibrated uncertainty (a separate calibration diagnostic covers that, but it is not this headline number). And it is the ONLY stage that compares more than two models: everything after it compares the designated pair only, so with three models the extra pairs are unexamined there rather than weakly evidenced.
Per-family forecast error (MASE, mean absolute error scaled by each series' own naive one-step error) for every configured model. This is the purely behavioral baseline everything else in the report tries to explain mechanistically.
How to read it
Lower bars are better. Bars near 1.0 mean the model is about as good as a naive one-step-repeat forecast on that family; well below 1.0 is genuine skill. Compare bar heights within a family across models, not across families (family difficulty varies a lot).
Limitations
MASE rewards point-forecast accuracy only, not calibration — a model can have great MASE and terrible quantile coverage. With more than two models configured, every model appears here, but the paired significance test below only ever compares the first two (the deep-dive pair every other section analyzes).
| model | repeats | n_series | deterministic | mean |ΔMASE| | p95 |ΔMASE| | max |ΔMASE| |
|---|---|---|---|---|---|---|
| TimesFM | 3 | 16 | True | 0.000 | 0.000 | 0.000 |
| Chronos-2 | 3 | 16 | True | 0.000 | 0.000 | 0.000 |
| Sundial | 3 | 16 | False | 0.177 | 0.638 | 1.662 |
| Chronos-Bolt | 3 | 16 | True | 0.000 | 0.000 | 0.000 |
Each model forecasts the same small series subset (16 series) 3 times; this is how much MASE varies between calls that should, absent sampling, be identical. Every ΔMASE elsewhere in this report (head/MLP ablation, SAE forecast-preservation, L3 restoration) is otherwise implicitly compared against zero.
How to read it
`deterministic: true` with a floor of exactly 0 is expected and correct for a model with no sampling in its forecast path -- a free wiring sanity check (here: Chronos-2, Chronos-Bolt and TimesFM); Sundial samples and so does not. A model that samples its forecast will show a nonzero floor; a ΔMASE smaller than that floor is not distinguishable from noise.
Limitations
Measured on a small subset for speed, so the floor estimate itself has some uncertainty -- read it as an order-of-magnitude reference, not a precise bound.
116 of 3860 series excluded from every MASE mean/ratio/test above and below (scale='mean_abs_diff', min_scale_frac=0.05) -- their MASE denominator was too small relative to the target's own level to trust. smape/pinball/mae_over_mad below still include them. Per-family/per-archetype breakdown is in the "excluded" column of each table.
| model | smape | pinball | mae_over_mad | mase |
|---|---|---|---|---|
| Chronos-2 | 0.706 | 0.580 | 0.874 | 1.691 |
| Chronos-Bolt | 0.800 | 0.743 | 1.002 | 2.151 |
| Sundial | 0.804 | 0.777 | 1.049 | 1.950 |
| TimesFM | 0.722 | 0.601 | 0.917 | 1.761 |
| model | family | mase | mae_over_mad | smape | pinball | mase_n_excluded | seasonal_naive_available | seasonal_naive_n_excluded |
|---|---|---|---|---|---|---|---|---|
| Chronos-2 | block_bootstrap | 1.533 | 1.029 | 1.241 | 0.547 | 0 | NaN | NaN |
| Chronos-2 | mixture | 1.209 | 0.822 | 0.639 | 0.480 | 11 | NaN | NaN |
| Chronos-2 | parametric | 2.814 | 0.861 | 0.654 | 0.891 | 4 | NaN | NaN |
| Chronos-2 | random_parametric | 1.771 | 0.858 | 0.656 | 0.586 | 14 | NaN | NaN |
| Chronos-2 | sequential_par | 1.113 | 1.123 | 0.902 | 0.355 | 0 | NaN | NaN |
| Chronos-Bolt | block_bootstrap | 1.604 | 1.065 | 1.238 | 0.578 | 0 | NaN | NaN |
| Chronos-Bolt | mixture | 1.214 | 0.831 | 0.648 | 0.477 | 11 | NaN | NaN |
| Chronos-Bolt | parametric | 2.870 | 0.877 | 0.653 | 0.905 | 4 | NaN | NaN |
| Chronos-Bolt | random_parametric | 2.791 | 1.135 | 0.866 | 0.951 | 14 | NaN | NaN |
| Chronos-Bolt | sequential_par | 1.070 | 1.090 | 0.899 | 0.340 | 0 | NaN | NaN |
| Sundial | block_bootstrap | 1.601 | 1.228 | 1.129 | 0.624 | 0 | NaN | NaN |
| Sundial | mixture | 1.461 | 1.052 | 0.844 | 0.653 | 11 | NaN | NaN |
| Sundial | parametric | 3.115 | 0.959 | 0.706 | 1.099 | 4 | NaN | NaN |
| Sundial | random_parametric | 2.089 | 1.038 | 0.750 | 0.833 | 14 | NaN | NaN |
| Sundial | sequential_par | 1.076 | 1.118 | 0.827 | 0.409 | 0 | NaN | NaN |
| TimesFM | block_bootstrap | 1.538 | 1.031 | 1.229 | 0.550 | 0 | NaN | NaN |
| TimesFM | mixture | 1.336 | 0.909 | 0.666 | 0.527 | 11 | NaN | NaN |
| TimesFM | parametric | 2.895 | 0.881 | 0.676 | 0.900 | 4 | NaN | NaN |
| TimesFM | random_parametric | 1.822 | 0.893 | 0.677 | 0.599 | 14 | NaN | NaN |
| TimesFM | sequential_par | 1.075 | 1.107 | 0.838 | 0.340 | 0 | NaN | NaN |
| __naive__ | block_bootstrap | 2.326 | 1.682 | 0.927 | 1.163 | 0 | True | 0.000 |
| __naive__ | mixture | 2.493 | 1.532 | 1.126 | 1.341 | 11 | True | 0.000 |
| __naive__ | parametric | 4.179 | 1.278 | 0.821 | 2.078 | 4 | True | 0.000 |
| __naive__ | random_parametric | 4.090 | 1.565 | 1.014 | 2.102 | 14 | True | 0.000 |
| __naive__ | sequential_par | 1.448 | 1.482 | 0.929 | 0.724 | 0 | True | 0.000 |
| __seasonal_naive__ | block_bootstrap | 2.262 | 2.053 | 0.953 | 1.131 | 0 | True | 0.000 |
| __seasonal_naive__ | mixture | 1.857 | 1.400 | 0.851 | 1.039 | 11 | True | 0.000 |
| __seasonal_naive__ | parametric | 4.086 | 1.258 | 0.817 | 2.044 | 4 | True | 0.000 |
| __seasonal_naive__ | random_parametric | 3.683 | 1.438 | 0.916 | 1.910 | 14 | True | 0.000 |
| __seasonal_naive__ | sequential_par | 1.520 | 1.547 | 0.927 | 0.760 | 0 | True | 0.000 |
`__naive__` and `__seasonal_naive__` are not configured models -- they are the trivial forecasts every real model should beat: repeat the last context value, or repeat the last full dominant period. Their MASE, if not excluded as unreliable, is what the scorecard's 'beats a trivial forecast' row below compares each family's best model against.
How to read it
`__naive__`'s MASE is ≈1.0 under the default `mean_abs_diff` scale BY CONSTRUCTION -- that is not a discovery. `__seasonal_naive__` is the informative one: it is not 1.0 by construction, and a family where the best model does not beat it is worth reading as a real finding, not a bug.
Limitations
`__seasonal_naive__`'s MASE is missing (not zero, not a fallback to naive-1) for any family where every series is too short to hold one full detected period -- see `seasonal_naive_available` on that row.
`mae_over_mad` is a scale-free companion to MASE that doesn't depend on the context, only the target's own dispersion.
How to read it
It should move roughly in step with MASE. If MASE looks anomalously low/high for a family but `mae_over_mad` doesn't, suspect a MASE scale-term artifact rather than genuine model behavior on that family.
Limitations
Not a drop-in MASE replacement — it can itself look small/undefined on a near-constant target, which is a different, legitimate degeneracy this metric doesn't protect against.
Families with no per-sample archetype label (shown under their family name instead): block_bootstrap, mixture, parametric, sequential_par.
| model | archetype | mase | mae_over_mad | smape | pinball | mase_n_excluded |
|---|---|---|---|---|---|---|
| Chronos-2 | amplitude_modulated | 2.002 | 0.770 | 0.833 | 0.631 | 0 |
| Chronos-2 | anomaly_heavy | 0.986 | 0.599 | 0.445 | 0.337 | 1 |
| Chronos-2 | ar_colored_noise | 0.848 | 0.954 | 0.789 | 0.272 | 0 |
| Chronos-2 | block_bootstrap | 1.533 | 1.029 | 1.241 | 0.547 | 0 |
| Chronos-2 | clean_low_noise | 3.678 | 0.695 | 0.553 | 1.285 | 5 |
| Chronos-2 | intermittent_bursts | 1.111 | 1.049 | 1.379 | 0.354 | 0 |
| Chronos-2 | mixture | 1.209 | 0.822 | 0.639 | 0.480 | 11 |
| Chronos-2 | multi_seasonal_complex | 1.233 | 0.360 | 0.391 | 0.396 | 2 |
| Chronos-2 | noisy_chaotic | 1.064 | 1.037 | 0.660 | 0.342 | 0 |
| Chronos-2 | nonsinusoidal_seasonal | 2.964 | 0.719 | 0.910 | 0.909 | 0 |
| Chronos-2 | parametric | 2.814 | 0.861 | 0.654 | 0.891 | 4 |
| Chronos-2 | random_walk_drift | 2.872 | 1.705 | 0.564 | 0.935 | 1 |
| Chronos-2 | regime_switching | 2.613 | 1.362 | 0.497 | 0.886 | 2 |
| Chronos-2 | seasonal_dominant | 0.395 | 0.105 | 0.225 | 0.126 | 0 |
| Chronos-2 | sequential_par | 1.113 | 1.123 | 0.902 | 0.355 | 0 |
| Chronos-2 | trend_dominant | 0.785 | 0.774 | 0.248 | 0.262 | 3 |
| Chronos-Bolt | amplitude_modulated | 2.467 | 0.991 | 1.000 | 0.813 | 0 |
| Chronos-Bolt | anomaly_heavy | 1.785 | 0.862 | 0.693 | 0.576 | 1 |
| Chronos-Bolt | ar_colored_noise | 0.916 | 1.016 | 0.838 | 0.287 | 0 |
| Chronos-Bolt | block_bootstrap | 1.604 | 1.065 | 1.238 | 0.578 | 0 |
| Chronos-Bolt | clean_low_noise | 5.580 | 1.043 | 0.830 | 2.069 | 5 |
| Chronos-Bolt | intermittent_bursts | 1.170 | 1.109 | 1.385 | 0.376 | 0 |
| Chronos-Bolt | mixture | 1.214 | 0.831 | 0.648 | 0.477 | 11 |
| Chronos-Bolt | multi_seasonal_complex | 5.560 | 1.257 | 1.047 | 1.786 | 2 |
| Chronos-Bolt | noisy_chaotic | 1.209 | 1.168 | 0.711 | 0.382 | 0 |
| Chronos-Bolt | nonsinusoidal_seasonal | 4.460 | 1.080 | 1.166 | 1.433 | 0 |
| Chronos-Bolt | parametric | 2.870 | 0.877 | 0.653 | 0.905 | 4 |
| Chronos-Bolt | random_walk_drift | 3.074 | 1.898 | 0.579 | 1.015 | 1 |
| Chronos-Bolt | regime_switching | 2.850 | 1.392 | 0.549 | 0.971 | 2 |
| Chronos-Bolt | seasonal_dominant | 3.212 | 0.830 | 1.030 | 1.218 | 0 |
| Chronos-Bolt | sequential_par | 1.070 | 1.090 | 0.899 | 0.340 | 0 |
| Chronos-Bolt | trend_dominant | 1.026 | 0.894 | 0.297 | 0.323 | 3 |
| Sundial | amplitude_modulated | 2.080 | 0.821 | 0.898 | 0.755 | 0 |
| Sundial | anomaly_heavy | 1.237 | 0.700 | 0.517 | 0.463 | 1 |
| Sundial | ar_colored_noise | 0.897 | 1.006 | 0.826 | 0.330 | 0 |
| Sundial | block_bootstrap | 1.601 | 1.228 | 1.129 | 0.624 | 0 |
| Sundial | clean_low_noise | 3.886 | 0.829 | 0.705 | 1.847 | 5 |
| Sundial | intermittent_bursts | 1.164 | 1.109 | 1.351 | 0.432 | 0 |
| Sundial | mixture | 1.461 | 1.052 | 0.844 | 0.653 | 11 |
| Sundial | multi_seasonal_complex | 2.311 | 0.591 | 0.627 | 0.904 | 2 |
| Sundial | noisy_chaotic | 1.205 | 1.187 | 0.713 | 0.449 | 0 |
| Sundial | nonsinusoidal_seasonal | 3.430 | 0.827 | 1.050 | 1.180 | 0 |
| Sundial | parametric | 3.115 | 0.959 | 0.706 | 1.099 | 4 |
| Sundial | random_walk_drift | 3.163 | 1.968 | 0.594 | 1.226 | 1 |
| Sundial | regime_switching | 3.003 | 1.902 | 0.586 | 1.193 | 2 |
| Sundial | seasonal_dominant | 0.852 | 0.225 | 0.415 | 0.349 | 0 |
| Sundial | sequential_par | 1.076 | 1.118 | 0.827 | 0.409 | 0 |
| Sundial | trend_dominant | 1.839 | 1.575 | 0.446 | 0.787 | 3 |
| TimesFM | amplitude_modulated | 2.111 | 0.834 | 0.900 | 0.662 | 0 |
| TimesFM | anomaly_heavy | 1.002 | 0.609 | 0.455 | 0.326 | 1 |
| TimesFM | ar_colored_noise | 0.875 | 0.974 | 0.799 | 0.274 | 0 |
| TimesFM | block_bootstrap | 1.538 | 1.031 | 1.229 | 0.550 | 0 |
| TimesFM | clean_low_noise | 3.411 | 0.667 | 0.552 | 1.213 | 5 |
| TimesFM | intermittent_bursts | 1.164 | 1.099 | 1.394 | 0.370 | 0 |
| TimesFM | mixture | 1.336 | 0.909 | 0.666 | 0.527 | 11 |
| TimesFM | multi_seasonal_complex | 1.460 | 0.358 | 0.429 | 0.468 | 2 |
| TimesFM | noisy_chaotic | 1.111 | 1.083 | 0.674 | 0.349 | 0 |
| TimesFM | nonsinusoidal_seasonal | 3.417 | 0.815 | 0.961 | 1.043 | 0 |
| TimesFM | parametric | 2.895 | 0.881 | 0.676 | 0.900 | 4 |
| TimesFM | random_walk_drift | 2.875 | 1.747 | 0.555 | 0.934 | 1 |
| TimesFM | regime_switching | 2.394 | 1.432 | 0.476 | 0.850 | 2 |
| TimesFM | seasonal_dominant | 0.430 | 0.118 | 0.258 | 0.142 | 0 |
| TimesFM | sequential_par | 1.075 | 1.107 | 0.838 | 0.340 | 0 |
| TimesFM | trend_dominant | 0.833 | 0.809 | 0.301 | 0.254 | 3 |
Paired tests (α=0.05, Holm-corrected across archetypes, positive Δ favors first model):
| archetype | MASE ratio | paired ΔMASE | lo | hi | p (boot) | p (Holm) | favored |
|---|---|---|---|---|---|---|---|
| intermittent_bursts | 1.047 | -0.053 | -0.092 | -0.020 | 0.001 | 0.008 | Chronos-2 |
| mixture | 1.105 | -0.127 | -0.183 | -0.076 | 0.001 | 0.008 | Chronos-2 |
| nonsinusoidal_seasonal | 1.153 | -0.453 | -0.774 | -0.159 | 0.001 | 0.014 | Chronos-2 |
| noisy_chaotic | 1.044 | -0.046 | -0.105 | 0.003 | 0.066 | 0.858 | none |
| amplitude_modulated | 1.054 | -0.108 | -0.261 | 0.056 | 0.192 | 1.000 | none |
| anomaly_heavy | 1.016 | -0.016 | -0.128 | 0.087 | 0.797 | 1.000 | none |
| ar_colored_noise | 1.031 | -0.026 | -0.063 | 0.005 | 0.114 | 1.000 | none |
| block_bootstrap | 1.003 | -0.005 | -0.034 | 0.024 | 0.664 | 1.000 | none |
| clean_low_noise | 0.928 | 0.266 | -0.428 | 1.008 | 0.457 | 1.000 | none |
| multi_seasonal_complex | 1.185 | -0.227 | -0.687 | 0.253 | 0.325 | 1.000 | none |
| parametric | 1.029 | -0.081 | -0.194 | 0.031 | 0.178 | 1.000 | none |
| random_walk_drift | 1.001 | -0.003 | -0.228 | 0.236 | 0.995 | 1.000 | none |
| regime_switching | 0.916 | 0.219 | -0.159 | 0.607 | 0.278 | 1.000 | none |
| seasonal_dominant | 1.088 | -0.035 | -0.094 | 0.015 | 0.217 | 1.000 | none |
| sequential_par | 0.967 | 0.037 | -0.019 | 0.116 | 0.267 | 1.000 | none |
| trend_dominant | 1.062 | -0.048 | -0.137 | 0.015 | 0.208 | 1.000 | none |
Reliability curve: for each nominal quantile level (e.g. p90), the fraction of (series, horizon-step) positions where the true target actually fell at or below that level's forecast. A perfectly calibrated model traces the diagonal.
How to read it
Above the diagonal means this model's forecasts at that level are set too high (the target clears them more often than the nominal rate implies); below the diagonal means set too low. This is orthogonal to point-forecast accuracy (MASE) above -- a model can have excellent MASE and poor calibration, or vice versa.
Limitations
Computed by pooling every (series, horizon-step) position; a model that's well-calibrated on average can still be miscalibrated on a specific family or horizon range the pooled curve doesn't show. the forecast-stochasticity asymmetry applies here too: a sampled model's quantiles reflect real predictive uncertainty a deterministic model's quantile head cannot represent the same way.
Probability integral transform: where each target actually falls within its own model's quantile forecasts, approximated by linear interpolation between the handful of quantile levels this repo requests.
How to read it
A flat histogram across [0, 1] is the calibration signature; a hump in the middle means intervals are too wide (underconfident, targets cluster near the median forecast); mass piled at the edges means intervals are too narrow (overconfident).
Limitations
Coarse by construction -- only as fine-grained as the configured quantile levels (`l0.quantiles`), not a true continuous-CDF PIT.
| model | nominal coverage | empirical coverage | mean interval width | quantile crossing rate |
|---|---|---|---|---|
| TimesFM | 0.800 | 0.795 | 48.157 | 0.000 |
| Chronos-2 | 0.800 | 0.772 | 45.585 | 0.000 |
| Sundial | 0.800 | 0.369 | 20.108 | 0.000 |
| Chronos-Bolt | 0.800 | 0.749 | 48.634 | 0.000 |
Outer-interval (lowest to highest configured quantile level) empirical vs. nominal coverage, mean interval width (sharpness), and how often a model's own quantile levels are non-monotonic (a claimed higher-level forecast below a lower-level one -- a real forecast-head defect, not a calibration question).
How to read it
Empirical coverage close to nominal is good; a wide gap either way means this model's stated interval doesn't mean what it claims. Sharpness alone (narrower is 'better') is only meaningful once coverage is already close to nominal -- a narrow, badly-undercovering interval is not an improvement.
Limitations
Quantile crossing rate should be 0 or near-0 for any competently implemented quantile head; a nonzero rate here is a real defect worth investigating in that model's `predict` path, not a modeling nuance to read past.
For each model, series are grouped into equal-count deciles by that model's OWN quantile-band width, and each decile's mean realized MASE is plotted against it — the free reliability check a practitioner already has after one model's forecast, needing no second checkpoint.
How to read it
A rising line means this model's own stated uncertainty tracks its actual error: when its band is wide, expect a bigger miss. found this signal beats cross-model disagreement as an error predictor in 10 of 11 scorable model-runs across six existing run directories — this panel is that winning baseline, not the losing heuristic.
Limitations
A model with a flat or non-monotonic line here has an uninformative uncertainty band even if its point forecasts are good — width and accuracy are different properties. Computed on this run's own dev corpus only; whether the relationship holds on a different data distribution is untested.
| model | Spearman (own width vs error) | deciles |
|---|---|---|
| TimesFM | 0.842 | 10 |
| Chronos-2 | 0.818 | 10 |
| Sundial | 0.840 | 10 |
| Chronos-Bolt | 0.794 | 10 |
Per-horizon-step absolute error, scaled by the same per-series MASE denominator used everywhere else in L0 -- the whole-horizon MASE elsewhere in this report is this curve's own mean.
How to read it
A rising curve means error compounds with forecast distance, as expected; a flat curve means the model's error is dominated by something other than distance-from-context (e.g. a systematic bias). Compare the *shape*, not just the endpoints, between models: one model can start worse at h=1 and end better at h=H, which the whole-horizon average alone would hide.
Limitations
Pooled across every series in the corpus; a family- or archetype-specific curve would need the `by_family` breakdown in the underlying artifact, not shown here.
Same per-horizon-step reduction applied to pinball loss instead of point MASE -- so this reflects the whole quantile forecast's calibration-weighted accuracy at each step, not just the point forecast.
How to read it
Read alongside the calibration section above: a model whose pinball loss grows faster than its MASE at long horizons is likely widening its intervals appropriately (expected and healthy); one whose pinball loss stays flat while MASE grows may be under-widening its uncertainty at long range.
Limitations
Same pooling caveat as the MASE curve above.
| family | MASE ratio | paired ΔMASE | lo | hi | p (boot) | p (Holm) | favored | Power / MDE |
|---|---|---|---|---|---|---|---|---|
| mixture | 1.105 | -0.127 | -0.186 | -0.076 | 0.001 | 0.015 | Chronos-2 | achieved power 98% at this n |
| block_bootstrap | 1.003 | -0.005 | -0.033 | 0.024 | 0.703 | 1.000 | none | No difference detected. A true difference of >= 0.039 MASE would have been detected 80% of the time at this n. |
| parametric | 1.029 | -0.081 | -0.195 | 0.033 | 0.172 | 1.000 | none | No difference detected. A true difference of >= 0.165 MASE would have been detected 80% of the time at this n. |
| random_parametric | 1.029 | -0.052 | -0.142 | 0.037 | 0.266 | 1.000 | none | No difference detected. A true difference of >= 0.142 MASE would have been detected 80% of the time at this n. |
| sequential_par | 0.967 | 0.037 | -0.018 | 0.120 | 0.250 | 1.000 | none | No difference detected. A true difference of >= 0.078 MASE would have been detected 80% of the time at this n. |
`Power / MDE`: for a family with no detected difference, the smallest true difference this run's sample size could reliably (80% of the time) have caught; for a family that already found a strength, how often a repeat of this exact test would find it again.
How to read it
A family reading 'not testable' has no meaningful MDE at all -- either the Holm correction for this many comparisons cannot reach significance at this n_boot no matter the effect size, the family has too few series to resample, or every series gave an identical paired delta. Read 'no difference detected, MDE = X' as a statement about this RUN's resolving power, never as evidence the two models behave the same on that family.
Limitations
Simulation-based and therefore itself noisy at the `n_sim` used; not a substitute for running more series if the MDE is larger than the effect size a reader actually cares about.
Positive Δ favors TimesFM. Holm-adjusted across every (pair, family) test in this run, not within this pair alone.
| family | MASE ratio | paired ΔMASE | lo | hi | p (boot) | p (Holm) | favored |
|---|---|---|---|---|---|---|---|
| random_parametric | 0.872 | 0.267 | 0.151 | 0.383 | 0.001 | 0.015 | TimesFM |
| mixture | 0.915 | 0.125 | 0.058 | 0.200 | 0.001 | 0.019 | TimesFM |
| block_bootstrap | 0.960 | 0.064 | 0.025 | 0.101 | 0.002 | 0.036 | TimesFM |
| parametric | 0.929 | 0.221 | 0.065 | 0.377 | 0.008 | 0.128 | none |
| sequential_par | 0.999 | 0.001 | -0.029 | 0.031 | 0.911 | 1.000 | none |
Positive Δ favors TimesFM. Holm-adjusted across every (pair, family) test in this run, not within this pair alone.
| family | MASE ratio | paired ΔMASE | lo | hi | p (boot) | p (Holm) | favored |
|---|---|---|---|---|---|---|---|
| mixture | 1.101 | -0.122 | -0.186 | -0.067 | 0.001 | 0.015 | Chronos-Bolt |
| random_parametric | 0.653 | 0.968 | 0.757 | 1.179 | 0.001 | 0.015 | TimesFM |
| block_bootstrap | 0.959 | 0.066 | 0.011 | 0.138 | 0.013 | 0.195 | none |
| parametric | 1.008 | -0.024 | -0.195 | 0.135 | 0.773 | 1.000 | none |
| sequential_par | 1.005 | -0.006 | -0.040 | 0.032 | 0.804 | 1.000 | none |
Positive Δ favors Chronos-2. Holm-adjusted across every (pair, family) test in this run, not within this pair alone.
| family | MASE ratio | paired ΔMASE | lo | hi | p (boot) | p (Holm) | favored |
|---|---|---|---|---|---|---|---|
| block_bootstrap | 0.957 | 0.069 | 0.032 | 0.107 | 0.001 | 0.015 | Chronos-2 |
| mixture | 0.828 | 0.252 | 0.174 | 0.344 | 0.001 | 0.015 | Chronos-2 |
| parametric | 0.903 | 0.301 | 0.150 | 0.461 | 0.001 | 0.015 | Chronos-2 |
| random_parametric | 0.848 | 0.319 | 0.205 | 0.439 | 0.001 | 0.015 | Chronos-2 |
| sequential_par | 1.033 | -0.036 | -0.127 | 0.031 | 0.432 | 1.000 | none |
Positive Δ favors Chronos-2. Holm-adjusted across every (pair, family) test in this run, not within this pair alone.
| family | MASE ratio | paired ΔMASE | lo | hi | p (boot) | p (Holm) | favored |
|---|---|---|---|---|---|---|---|
| random_parametric | 0.635 | 1.020 | 0.805 | 1.252 | 0.001 | 0.015 | Chronos-2 |
| block_bootstrap | 0.955 | 0.072 | 0.018 | 0.141 | 0.006 | 0.102 | none |
| mixture | 0.996 | 0.005 | -0.023 | 0.031 | 0.726 | 1.000 | none |
| parametric | 0.980 | 0.056 | -0.087 | 0.195 | 0.412 | 1.000 | none |
| sequential_par | 1.040 | -0.043 | -0.134 | 0.017 | 0.252 | 1.000 | none |
Positive Δ favors Sundial. Holm-adjusted across every (pair, family) test in this run, not within this pair alone.
| family | MASE ratio | paired ΔMASE | lo | hi | p (boot) | p (Holm) | favored |
|---|---|---|---|---|---|---|---|
| mixture | 1.204 | -0.247 | -0.340 | -0.166 | 0.001 | 0.015 | Chronos-Bolt |
| random_parametric | 0.749 | 0.701 | 0.512 | 0.884 | 0.001 | 0.015 | Sundial |
| parametric | 1.085 | -0.245 | -0.430 | -0.046 | 0.016 | 0.224 | none |
| block_bootstrap | 0.998 | 0.003 | -0.057 | 0.076 | 0.979 | 1.000 | none |
| sequential_par | 1.006 | -0.007 | -0.053 | 0.038 | 0.764 | 1.000 | none |
The model pairs this run configures beyond the first. L0 is the only stage that can honestly run for all of them -- it needs nothing but each model's `predict`, no alignment, no shared window axis.
How to read it
Read these exactly like the first pair's table above; the correction is joint, so a p (Holm) here and one there came out of the same adjustment.
Limitations
A few stages report one pair only -- named in the multiplicity ledger below, and read from the run's own record rather than listed here. The pairs they omit are unexamined there, which is a stronger statement than 'weakly evidenced'.
3599 corrected comparisons were made in this report, in 45 independent correction families. Each family's own correction (Holm for behavioral/confirm comparisons, BH for cross-model transfer tests) is applied within it and never across families, so the counts below do not add up to one test — they are the multiplicity a reader would otherwise have to infer from the tables. This run configures 4 models, so L0 tests all 6 pairs and corrects across every (pair, family) test at once. L3's cross-model fingerprint agreement, the per-family exemplars and the held-out confirmation report one pair only (TimesFM vs. Chronos-2), because each produces a single artifact rather than a per-pair one; the remaining pairs are not weakly-evidenced there, they are unexamined.
| correction family | comparisons | method | α | n_boot | most stringent threshold | smallest p (Holm) reachable | min. batch to survive (BH) |
|---|---|---|---|---|---|---|---|
| L0 per-family paired tests | 30 | holm | 0.050 | 2000 | 0.002 | 0.015 | NaN |
| L0 per-archetype paired tests | 16 | holm | 0.050 | 2000 | 0.003 | 0.008 | NaN |
| Confirm — pre-registered hypotheses (private corpus) | 1 | holm | 0.050 | 2000 | 0.050 | 0.001 | NaN |
| Transfer — Chronos-2 → Chronos-Bolt (forward leg, exact) | 12 | bh | 0.050 | 200 | 0.004 | NaN | 2.000 |
| Transfer — Chronos-2 → Chronos-Bolt (reverse leg, exact) | 12 | bh | 0.050 | 200 | 0.004 | NaN | 2.000 |
| Transfer — Chronos-2 → Sundial (forward leg, exact) | 36 | bh | 0.050 | 200 | 0.001 | NaN | 4.000 |
| Transfer — Chronos-2 → Sundial (reverse leg, exact) | 36 | bh | 0.050 | 200 | 0.001 | NaN | 4.000 |
| Transfer — Chronos-2 → TimesFM (forward leg, exact) | 40 | bh | 0.050 | 200 | 0.001 | NaN | 4.000 |
| Transfer — Chronos-2 → TimesFM (reverse leg, exact) | 40 | bh | 0.050 | 200 | 0.001 | NaN | 4.000 |
| Transfer — Chronos-Bolt → Chronos-2 (forward leg, exact) | 12 | bh | 0.050 | 200 | 0.004 | NaN | 2.000 |
| Transfer — Chronos-Bolt → Chronos-2 (reverse leg, exact) | 12 | bh | 0.050 | 200 | 0.004 | NaN | 2.000 |
| Transfer — Chronos-Bolt → Sundial (forward leg, exact) | 18 | bh | 0.050 | 200 | 0.003 | NaN | 2.000 |
| Transfer — Chronos-Bolt → Sundial (reverse leg, exact) | 18 | bh | 0.050 | 200 | 0.003 | NaN | 2.000 |
| Transfer — Chronos-Bolt → TimesFM (forward leg, exact) | 20 | bh | 0.050 | 200 | 0.003 | NaN | 2.000 |
| Transfer — Chronos-Bolt → TimesFM (reverse leg, exact) | 20 | bh | 0.050 | 200 | 0.003 | NaN | 2.000 |
| Transfer — Sundial → Chronos-2 (forward leg, exact) | 18 | bh | 0.050 | 200 | 0.003 | NaN | 2.000 |
| Transfer — Sundial → Chronos-2 (reverse leg, exact) | 18 | bh | 0.050 | 200 | 0.003 | NaN | 2.000 |
| Transfer — Sundial → Chronos-Bolt (forward leg, exact) | 9 | bh | 0.050 | 200 | 0.006 | NaN | 1.000 |
| Transfer — Sundial → Chronos-Bolt (reverse leg, exact) | 9 | bh | 0.050 | 200 | 0.006 | NaN | 1.000 |
| Transfer — Sundial → TimesFM (forward leg, exact) | 30 | bh | 0.050 | 200 | 0.002 | NaN | 3.000 |
| Transfer — Sundial → TimesFM (reverse leg, exact) | 30 | bh | 0.050 | 200 | 0.002 | NaN | 3.000 |
| Atlas Transfer — Chronos-2 → Chronos-Bolt (forward leg, exact) | 81 | bh | 0.050 | 200 | 0.001 | NaN | 9.000 |
| Atlas Transfer — Chronos-2 → Chronos-Bolt (reverse leg, exact) | 81 | bh | 0.050 | 200 | 0.001 | NaN | 9.000 |
| Atlas Transfer — Chronos-2 → Sundial (forward leg, exact) | 243 | bh | 0.050 | 200 | 0.000 | NaN | 25.000 |
| Atlas Transfer — Chronos-2 → Sundial (reverse leg, exact) | 243 | bh | 0.050 | 200 | 0.000 | NaN | 25.000 |
| Atlas Transfer — Chronos-2 → TimesFM (forward leg, exact) | 270 | bh | 0.050 | 200 | 0.000 | NaN | 27.000 |
| Atlas Transfer — Chronos-2 → TimesFM (reverse leg, exact) | 270 | bh | 0.050 | 200 | 0.000 | NaN | 27.000 |
| Atlas Transfer — Chronos-Bolt → Chronos-2 (forward leg, exact) | 28 | bh | 0.050 | 200 | 0.002 | NaN | 3.000 |
| Atlas Transfer — Chronos-Bolt → Chronos-2 (reverse leg, exact) | 28 | bh | 0.050 | 200 | 0.002 | NaN | 3.000 |
| Atlas Transfer — Chronos-Bolt → Sundial (forward leg, exact) | 36 | bh | 0.050 | 200 | 0.001 | NaN | 4.000 |
| Atlas Transfer — Chronos-Bolt → Sundial (reverse leg, exact) | 36 | bh | 0.050 | 200 | 0.001 | NaN | 4.000 |
| Atlas Transfer — Chronos-Bolt → TimesFM (forward leg, exact) | 40 | bh | 0.050 | 200 | 0.001 | NaN | 4.000 |
| Atlas Transfer — Chronos-Bolt → TimesFM (reverse leg, exact) | 40 | bh | 0.050 | 200 | 0.001 | NaN | 4.000 |
| Atlas Transfer — Sundial → Chronos-2 (forward leg, exact) | 196 | bh | 0.050 | 200 | 0.000 | NaN | 20.000 |
| Atlas Transfer — Sundial → Chronos-2 (reverse leg, exact) | 196 | bh | 0.050 | 200 | 0.000 | NaN | 20.000 |
| Atlas Transfer — Sundial → Chronos-Bolt (forward leg, exact) | 84 | bh | 0.050 | 200 | 0.001 | NaN | 9.000 |
| Atlas Transfer — Sundial → Chronos-Bolt (reverse leg, exact) | 84 | bh | 0.050 | 200 | 0.001 | NaN | 9.000 |
| Atlas Transfer — Sundial → TimesFM (forward leg, exact) | 280 | bh | 0.050 | 200 | 0.000 | NaN | 28.000 |
| Atlas Transfer — Sundial → TimesFM (reverse leg, exact) | 280 | bh | 0.050 | 200 | 0.000 | NaN | 28.000 |
| Atlas Transfer — TimesFM → Chronos-2 (forward leg, exact) | 119 | bh | 0.050 | 200 | 0.000 | NaN | 12.000 |
| Atlas Transfer — TimesFM → Chronos-2 (reverse leg, exact) | 119 | bh | 0.050 | 200 | 0.000 | NaN | 12.000 |
| Atlas Transfer — TimesFM → Chronos-Bolt (forward leg, exact) | 51 | bh | 0.050 | 200 | 0.001 | NaN | 6.000 |
| Atlas Transfer — TimesFM → Chronos-Bolt (reverse leg, exact) | 51 | bh | 0.050 | 200 | 0.001 | NaN | 6.000 |
| Atlas Transfer — TimesFM → Sundial (forward leg, exact) | 153 | bh | 0.050 | 200 | 0.000 | NaN | 16.000 |
| Atlas Transfer — TimesFM → Sundial (reverse leg, exact) | 153 | bh | 0.050 | 200 | 0.000 | NaN | 16.000 |
Coarse p-floor — 40 of 42 BH transfer families. Their exact permutation p-values are floored at 1/(n_null+1), which sits above BH's rank-1 bar q/m, so a lone transfer cannot survive there: BH is step-up, and a family only declares discoveries once 2–28 floor-level p-values arrive together. Survivors in these families are genuine FDR-controlled results; the non-survivors are partly arithmetic. Set concepts.transfer_p_method: adaptive to resolve floor-hitting legs with a larger null.
How many statistical comparisons this report actually made, and under what correction.
How to read it
'Most stringent threshold' is alpha/n -- the bar the *smallest* p-value in that family must clear under Holm's first step. Later steps are progressively less strict, so this is the ceiling on severity, not the bar every test faced.
Limitations
These families are corrected separately, by design: the dev corpus is hypothesis-generating and Confirm is one-shot by construction. Pooling them into one Bonferroni family would be more conservative but would also mean a pre-registered confirmation paid for every exploratory look, which is exactly the trade the exploration/confirmation split exists to avoid.
What each model costs to run — parameters, measured FLOPs, latency, VRAM — and what its L0 quality looks like per unit of compute rather than in absolute terms.
Question
What does each model cost to run, and is its forecast quality bought with more compute?
How
Runs a handful of extra forward (and, optionally, full-forecast) passes through each model while measuring parameter counts, FLOPs, wall-clock latency, and peak GPU memory, then re-plots each model's L0 accuracy against those costs instead of looking at accuracy alone.
Good vs. bad result
Good: FLOPs are measured directly (not falling back to an unmeasured or 'suspicious_low' reading) and the model sits down-and-to-the-left on the compute-normalized chart — lower error for less compute. Bad: a `flops_sanity: suspicious_low` verdict (the measurement can't see a fused or custom kernel and is undercounting compute), or the L0 stage didn't run, so cost can't be normalized by quality at all.
What it cannot tell you
Cost is measured only at this run's own context length, batch, and horizon — it does not generalize to a different sequence length, and FLOPs are not the same thing as latency (a model with fewer FLOPs can still be slower on real hardware). It also only tells you the price of a forward pass, never whether that price bought anything mechanistically interesting — that's what every later stage is for.
Measured over batch 8, context 512, horizon 64.
| model | params (M) | body (M) | blocks | FLOPs/series | forward (ms) | predict (ms) | peak VRAM (MB) | FLOPs check |
|---|---|---|---|---|---|---|---|---|
| TimesFM | 231.289 | 196.715 | 20 | 7.42 GFLOPs | 38.069 | 37.017 | 977.705 | plausible |
| Chronos-2 | 119.478 | 113.274 | 12 | 8.65 GFLOPs | 20.653 | 21.686 | 257.922 | plausible |
| Sundial | 128.330 | 113.311 | 12 | 7.44 GFLOPs | 7.375 | 56.351 | 595.922 | plausible |
| Chronos-Bolt | 47.718 | 18.881 | 6 | 1.59 GFLOPs | 13.731 | 13.656 | 109.311 | plausible |
| model | blocks captured | params captured | FLOPs of capture pass | FLOPs of full forecast | capture pass / forecast | observed (headline) | depth claims qualified |
|---|---|---|---|---|---|---|---|
| TimesFM | 10/20 | 42.5% | 42.5% | 42.5% | 100.0% | 42.5% | True |
| Chronos-2 | 12/12 | 94.8% | 97.5% | 97.5% | 100.0% | 97.5% | False |
| Sundial | 12/12 | 88.3% | 97.9% | 22.4% | 22.9% | 22.4% | True |
| Chronos-Bolt | 6/6 | 39.6% | 79.3% | 79.3% | 100.0% | 79.3% | True |
⚠ TimesFM: 34.6M parameters (15%) lie outside the 20 blocks this run's layer regex matched.
⚠ TimesFM: 10 of 20 matched blocks are skipped by capture_layer_stride=2.
⚠ Sundial: 15.0M parameters (12%) lie outside the 12 blocks this run's layer regex matched.
⚠ Sundial: the captured forward pass performs only 23% of the FLOPs of a full forecast at this run's decode settings; the remainder (a decoder, or repeated sampled decode steps) runs unobserved.
⚠ Chronos-Bolt: 28.8M parameters (60%) lie outside the 6 blocks this run's layer regex matched.
Computational coverage, as opposed to the section coverage in report/coverage.json: what fraction of each model's own forward work the capture surface saw. This is the single most important caveat on any depth-located claim, and until now it existed only as prose in.
How to read it
Read the 'observed (headline)' column first. Blocks-captured measures capture_layer_stride loss only and is 1/1 even for a regex that covers just an encoder; params- and FLOPs-captured use whole-model denominators and so do see that. Any model under 90% gets every depth-located finding qualified automatically in the findings list. A headline marked 'or less' is an upper bound taken from the capture-pass/forecast ratio, used when per-block FLOPs did not resolve by name — it still gates correctly, since a model failing the bar even optimistically has certainly failed it.
Limitations
The FLOPs denominators come from the same measured counter as the table above, so a 'suspicious_low' FLOPs check disarms these fractions too. 'FLOPs of full forecast' is measured at this run's decoding settings — for a sampled decoder, num_samples moves the denominator, so it is a property of this run, not of the architecture alone. A blank means not measurable here, which is not the same as full coverage.
How much of each model's *full forecast* has actually happened by a given point on the relative-depth axis that every cross-model depth figure in this report shares. It is the honesty check on those figures: two models at the same relative depth have generally not done the same share of their work.
How to read it
Each curve rises from 0 toward the fraction of that model's own measured forecast FLOPs its captured blocks account for. Read a depth-located claim about a model whose curve is far below another's at the same x as being about a different amount of computation — a claim at depth 0.5 is only 'halfway through the model' if the curve is near 0.5 there too. Chronos-Bolt, Sundial and TimesFM top out well short of 1.0 here — that matches the coverage table above rather than contradicting it, and is the reason a depth-located claim about those models carries an automatic qualifier.
Limitations
Normalized by predict.flops (the full forecast, incl. every sampled decode pass) when `budget.measure_predict` measured it — the fix (D2) / named, now built — falling back to the capture-pass FLOPs only when no forecast measurement exists, in which case a curve reaching 1.0 means 'covers its own forward pass', not 'covers the forecast'.
The practitioner's question, which no accuracy number alone can answer: is the more accurate model simply the one that spent more? Overall MASE is re-plotted against measured cost — FLOPs per series on the left, parameters on the right.
How to read it
Lower is better on the y axis; further left is cheaper on the x axis. A model in the lower-left is winning outright. A model that is lower but further right is buying its accuracy with compute, and whether that is a good trade is a deployment decision this chart deliberately does not make for you. Both x axes are logarithmic, because model sizes worth comparing differ by orders of magnitude.
Limitations
FLOPs are a measured proxy for cost, not a measure of wall-clock latency — a model can be FLOP-cheap and slow, or FLOP-heavy and fast, depending on how well its shapes map onto the hardware. Both are measured at this run's single context length and horizon and do not extrapolate to others. Models whose internals could not be measured are absent from this chart rather than plotted at zero.
Measured cost of one forward pass over this run's own context length and batch, per model. FLOPs are measured with torch.utils.flop_counter.FlopCounterMode rather than derived from a hand-written formula, so the number is architecture-agnostic and works for a model nobody has written a cost model for. Parameters are split into front-end / body / head by module position relative to the captured blocks.
How to read it
Latency is a median over repeated calls on this machine and is the least portable row here — read FLOPs and parameters for anything meant to transfer. FLOPs/series divides by the measured batch, so it is comparable across models even when their batch sizes differ. In the compute-normalized panel, down and to the left is better: lower MASE for less compute.
Limitations
FLOPs are not latency: a model with fewer FLOPs can be slower if its shape suits the hardware worse, and a fused or custom kernel the counter cannot see is undercounted (the flops_sanity row states whether the measurement clears an analytic lower bound — a suspicious_low verdict means this model's compute-normalized numbers should not be trusted). The parameter role split is a positional heuristic, not an architectural fact, and is reported as such per model. Cost is measured on this run's context length and horizon only; both scale the answer, attention super-linearly.
What each model does to its input before any layer runs: quantization resolution, scale-equivariance, context-truncation-from-the-back, and NaN handling.
Question
What does each model do to its input BEFORE any layer runs -- how coarsely does it quantize the series, does scaling the input scale the forecast back out cleanly, how does accuracy degrade as recent context goes missing, and what happens when a context value is NaN?
How
Reads each re-quantizing tokenizer's own bin geometry to score how coarse one quantization step is relative to a series' own amplitude; calls `predict` on the input scaled up/down by large factors and compares the rescaled-back forecast to the original; calls `predict` with the most recent context progressively withheld (a staleness scenario, not a front-trim) to trace a degradation curve; and injects NaN at the front, middle, and back of the context to see whether `predict` errors, silently produces a non-finite forecast, or genuinely handles it.
Good vs. bad result
Good: a re-quantizing tokenizer's bin width is a small fraction of the series' own amplitude with little saturating clipping, near-zero scale-equivariance residual, graceful (not cliff-shaped) accuracy degradation as recent context is withheld, and a NaN verdict of 'handled' or an explicit, clean error rather than a silently corrupted forecast. Bad: heavy clipping or a large quantization step relative to signal amplitude, a scale-equivariance residual that grows with the scale factor, a sharp cliff at a specific context length, or a 'propagates' NaN verdict -- a non-finite input silently becomes a non-finite forecast with no error to flag it.
What it cannot tell you
Every diagnostic here is about the FRONT DOOR only -- what happens before or around a forward pass, never what happens inside one (that's every other stage's job). Quantization resolution is meaningful only for a re-quantizing tokenizer and is reported as 'not applicable', never a fabricated zero, for a continuous-embedding architecture. NaN handling is checked at only a handful of hand-placed positions and one missing-fraction, not exhaustively; and none of these four probes says anything about forecast quality on ordinary, well-formed input -- L0 is what answers that.
Measured over 64 sampled series, context 512, horizon 64.
| model | status | bin width (frac of amplitude) | series with any clipping | mean clip fraction |
|---|---|---|---|---|
| TimesFM | not_applicable | — | — | — |
| Chronos-2 | not_applicable | — | — | — |
| Sundial | not_applicable | — | — | — |
| Chronos-Bolt | not_applicable | — | — | — |
TimesFM: not applicable — adapter.token_ids is None -- no re-quantizing tokenizer for this probe to measure (continuous patch-MLP embedding)
Chronos-2: not applicable — adapter.token_ids is None -- no re-quantizing tokenizer for this probe to measure (continuous patch-MLP embedding)
Sundial: not applicable — adapter.token_ids is None -- no re-quantizing tokenizer for this probe to measure (continuous patch-MLP embedding)
Chronos-Bolt: not applicable — adapter.token_ids is None -- no re-quantizing tokenizer for this probe to measure (continuous patch-MLP embedding)
A re-quantizing tokenizer maps each context onto a fixed number of bins whose edges are set from that series' own statistics. This asks how coarse one bin actually is relative to a series' own amplitude, and how often the tokenizer's saturating clamp is hit.
How to read it
A small 'bin width' fraction means the tokenizer can distinguish fine detail; a large one means real amplitude differences within a series collapse onto the same token. Read 'series with any clipping' alongside it — clipping means a value was extreme enough to fall entirely outside the tokenizer's bin range, not just coarsely binned.
Limitations
Only meaningful for a re-quantizing tokenizer — a continuous embedding has no bin geometry for this probe to measure and is reported as 'not applicable', never a fabricated zero (Chronos-2, Chronos-Bolt, Sundial and TimesFM in this run). The bin geometry is read directly from the checkpoint's own tokenizer, never hardcoded.
| model | factor | residual (× context scale) | max residual | non-finite series |
|---|---|---|---|---|
| TimesFM | 1000.0 | 0.0000 | 0.0000 | 0 |
| TimesFM | 0.001 | 0.0000 | 0.0000 | 0 |
| Chronos-2 | 1000.0 | 0.0087 | 0.0531 | 0 |
| Chronos-2 | 0.001 | 0.0093 | 0.0520 | 0 |
| Sundial | 1000.0 | 0.0000 | 0.0002 | 0 |
| Sundial | 0.001 | 0.0332 | 0.2105 | 0 |
| Chronos-Bolt | 1000.0 | 0.0084 | 0.0414 | 0 |
| Chronos-Bolt | 0.001 | 0.0087 | 0.0442 | 0 |
A forecaster that only cares about a series' shape should predict the same thing (after unscaling) whether the input arrives as raw units or multiplied by 1000 or 0.001 — this checks whether that holds in practice.
How to read it
The residual is the mean absolute difference between the original forecast and the rescaled-then-unscaled one, normalized by each series' own typical step size (the same scale MASE uses) so it's comparable across series. Near zero means the model is effectively scale-equivariant at that factor; a residual that grows with the scale factor means extreme scales genuinely confuse the model's own internal normalization, not just numerical noise. A model flagged as 'not scale-equivariant through this adapter' crossed a threshold set relative to the other models measured in this same run (10x their median worst residual, floored at 1.0 context-scale unit) — read this as 'this adapter likely bypasses the checkpoint's own input normalization', not as an architectural property of the model family.
Limitations
Non-finite series (overflow/underflow at an extreme scale factor) are excluded from the residual average but counted separately — a model that fails outright at 1000× is a different, more severe finding than one that degrades gracefully, and averaging the two together would hide which one happened.
| model | shape | baseline MASE (median) | most-truncated MASE (median) | most-truncated MASE (raw mean) | worst step (frac of total degradation) |
|---|---|---|---|---|---|
| TimesFM | graceful | 0.963 | 3.567 | 3.13e+05 | 0.36 |
| Chronos-2 | graceful | 0.980 | 3.739 | 3.13e+05 | 0.38 |
| Sundial | graceful | 1.281 | 3.770 | 3.13e+05 | 0.52 |
| Chronos-Bolt | graceful | 1.289 | 3.952 | 3.13e+05 | 0.47 |
Unlike the existing phase-sensitivity and context-scaling diagnostics (which both trim OLD history from the front), this asks what happens when the most RECENT context is what's missing — a data-staleness or reporting-lag scenario — by keeping the front of the context and asking the model to forecast further ahead to reach the same fixed target.
How to read it
'Graceful' means accuracy degrades roughly evenly as more recent context goes missing; 'cliff' means it stays flat until one specific length, then jumps sharply — a hard floor below which the model has almost nothing useful left to work with. 'no_degradation' means withholding recent context didn't measurably hurt this model on this corpus.
Limitations
This is a genuinely different axis from phase-sensitivity (sub-patch-width front shifts) and context-scaling/E20 (which keeps recent history intact and only drops old history) — do not read this section as a duplicate or a replacement for either. A model that cannot forecast far enough to bridge a large staleness gap has that length point skipped rather than crashing the whole diagnostic; fewer than 3 surviving points means the shape could not be characterized at all for that model. Baseline/most-truncated MASE and the shape classification all use the per-length MEDIAN, not the raw mean, over series — at the shortest available-context lengths, a handful of series are locally near-flat over that short a window, which sends MASE's own denominator toward its floor and that series' MASE toward an astronomical, non-representative value regardless of forecast quality. The raw mean is shown alongside specifically so a large gap between the two columns is visible as the tell that this is happening, rather than silently absorbed into one number.
| model | verdict | raised | propagated non-finite | clean | scenarios |
|---|---|---|---|---|---|
| TimesFM | propagates | 0 | 3 | 0 | 3 |
| Chronos-2 | handled | 0 | 0 | 3 | 3 |
| Sundial | propagates | 0 | 3 | 0 | 3 |
| Chronos-Bolt | handled | 0 | 0 | 3 | 3 |
Whether each model errors, silently propagates a NaN into its forecast, or genuinely handles a missing timestep in its context — three very different outcomes this repo does not assume in advance.
How to read it
'errors' and 'handled' are both acceptable outcomes (a loud failure is honest; genuine handling is a real capability). 'propagates' is the dangerous case: a non-finite forecast with no error raised looks like an ordinary result until something downstream notices the NaN. 'mixed' means the verdict depends on where in the context the value went missing.
Limitations
Checked at only three hand-placed positions (front/middle/back of context) and one missing-fraction (default 5% of context) — not exhaustive. A model verdict here says nothing about forecast QUALITY on ordinary, well-formed input; it only characterizes what happens at this one specific failure mode.
Part 3 — Where the forecast forms inside each model
Which layers were worth the expensive analyses below, what each model's own depth profile looks like, and where its forecast crystallizes.
↑ contentsWhich of each model's own captured layers were flagged as worth further, expensive analysis — and what sae.targets: auto trained on.
Question
Which of this model's own layers are worth spending the expensive stages (Lens, L1, L2, L3, attention, SAE) on?
How
Scores every layer a model actually captured with a cheap, architecture-agnostic proxy for 'interesting residual-stream activity' — by default, how much a layer's own trajectory through activation space bends and does work — and flags the highest scorers within a compute budget.
Good vs. bad result
Good: the selected layer(s) coincide with, or precede, the layers where L1/L2/L3/Lens later find the strongest real signal — the cheap proxy pointed at something genuine. Bad: a selection sitting at the very first or very last layer with no real signal there, or a run where the report has to state the method fell back to a uniform-stride null because its own selection failed.
What it cannot tell you
This is a cheap proxy for interestingness, not interestingness itself — it won a single-corpus, single-checkpoint-pair bake-off, not a validated rule across architectures. It also only screens the layers `capture_layer_stride` actually captured, so at a stride greater than 1 it cannot see, and cannot recommend, half the model's blocks; it answers 'which captured layer looks most active,' not 'which is the best layer in the whole model.'
Screened all 20 of 20 model blocks (dedicated stride-1 screening pass, independent of capture_layer_stride=2).
A cheap score over this model's own layers, used to decide which few layers are worth spending an expensive analysis (an SAE) on. The bars are the score; the highlighted ones are what the screen selected — the highest-scoring layers, up to a budget of 5 for this model and nothing else.
How to read it
Height is only meaningful relative to the other bars for the same model — it is a ranking device, not a quantity with units. A screen worth trusting picks layers in the middle-to-late range and clearly separates them from the rest; a flat profile means the screen found nothing to distinguish layers by, and the selection is close to arbitrary.
Limitations
This is a cheap proxy for interestingness, not interestingness itself — it was chosen by a bake-off against random and uniform-stride nulls on one corpus and one checkpoint pair. It also scores only the layers this run actually captured, so if the header above warns that not every block was screened, a better layer may exist that was never looked at.
Screened all 12 of 12 model blocks (dedicated stride-1 screening pass, independent of capture_layer_stride=1).
A cheap score over this model's own layers, used to decide which few layers are worth spending an expensive analysis (an SAE) on. The bars are the score; the highlighted ones are what the screen selected — the highest-scoring layers, up to a budget of 3 for this model and nothing else.
How to read it
Height is only meaningful relative to the other bars for the same model — it is a ranking device, not a quantity with units. A screen worth trusting picks layers in the middle-to-late range and clearly separates them from the rest; a flat profile means the screen found nothing to distinguish layers by, and the selection is close to arbitrary.
Limitations
This is a cheap proxy for interestingness, not interestingness itself — it was chosen by a bake-off against random and uniform-stride nulls on one corpus and one checkpoint pair. It also scores only the layers this run actually captured, so if the header above warns that not every block was screened, a better layer may exist that was never looked at.
Screened all 12 of 12 model blocks (dedicated stride-1 screening pass, independent of capture_layer_stride=1).
A cheap score over this model's own layers, used to decide which few layers are worth spending an expensive analysis (an SAE) on. The bars are the score; the highlighted ones are what the screen selected — the highest-scoring layers, up to a budget of 3 for this model and nothing else.
How to read it
Height is only meaningful relative to the other bars for the same model — it is a ranking device, not a quantity with units. A screen worth trusting picks layers in the middle-to-late range and clearly separates them from the rest; a flat profile means the screen found nothing to distinguish layers by, and the selection is close to arbitrary.
Limitations
This is a cheap proxy for interestingness, not interestingness itself — it was chosen by a bake-off against random and uniform-stride nulls on one corpus and one checkpoint pair. It also scores only the layers this run actually captured, so if the header above warns that not every block was screened, a better layer may exist that was never looked at.
Screened all 6 of 6 model blocks (dedicated stride-1 screening pass, independent of capture_layer_stride=1).
A cheap score over this model's own layers, used to decide which few layers are worth spending an expensive analysis (an SAE) on. The bars are the score; the highlighted ones are what the screen selected — the highest-scoring layers, up to a budget of 2 for this model and nothing else.
How to read it
Height is only meaningful relative to the other bars for the same model — it is a ranking device, not a quantity with units. A screen worth trusting picks layers in the middle-to-late range and clearly separates them from the rest; a flat profile means the screen found nothing to distinguish layers by, and the selection is close to arbitrary.
Limitations
This is a cheap proxy for interestingness, not interestingness itself — it was chosen by a bake-off against random and uniform-stride nulls on one corpus and one checkpoint pair. It also scores only the layers this run actually captured, so if the header above warns that not every block was screened, a better layer may exist that was never looked at.
A cheap, architecture-agnostic pre-screen run on every one of a model's own captured layers before any expensive downstream stage (lens/L1/L2/L3/attention/SAE) -- the layer(s) it picks per model are what `sae.targets: auto` trains a dictionary on. The bar height is the selector's own internal score (not comparable across models or across methods); the highlighted bars are the layers actually selected, within this run's compute budget.
How to read it
Read this as "where this method thinks it's worth spending expensive compute", not as a finished interpretability claim -- nothing else in the report depends on it being right, only on what gets trained downstream if `sae.targets` is left empty.
Limitations
The default method (`work_bend`) won a single-corpus, single-checkpoint-pair bake-off (2026-08-05) — real signal, not a settled cross-architecture rule. On some models/corpora the theoretical best possible selector has little room to beat a free uniform-stride null; a method not beating it there is not necessarily broken. `factor_emergence` has a known, diagnosed weighting flaw and underperformed in that bake-off.
Per-model depth profiles: where representations expand, where family information becomes decodable, and how far each layer moves from raw input statistics.
Question
What does each model's own internal representation look like at each depth, on its own terms?
How
For each layer of each model separately, measures how many effective dimensions its activations actually use, how close its representation still is to simple statistics of the raw input, and how well a simple classifier can read the data's family straight out of it.
Good vs. bad result
Good: a clear expand-then-compress effective-dimensionality curve, a family-decodability curve that rises well above chance at some depth, and a representation that visibly moves away from raw-input statistics with depth. Bad: a flat effective-dimensionality curve or a family-probe accuracy that never clears chance — either means this per-model view has nothing to say about that model's depth behavior.
What it cannot tell you
Everything here is per-model and descriptive — it never directly compares models against each other (L1 exists for that). 'Decodable' does not mean 'used by the forecast': a layer can carry perfect family information the model itself never reads out. It's also limited to the window-pooled representation, so structure that lives only within a window and not across windows is invisible to it.
Participation ratio of each layer's activation covariance spectrum — an effective count of how many dimensions the representation actually spreads its variance across (not the raw width of the layer), per model, per depth.
How to read it
Higher means the representation is using more of its available capacity at that layer; a dip means activity is collapsing onto fewer effective directions there. Compare *shape* across depth within a model (expansion then compression is a common pattern) rather than comparing raw values across models with different widths — a 64-dim and a 48-dim layer aren't on the same scale.
Limitations
This is a per-model diagnostic, not a cross-model comparison — two models can have very different effective-dimensionality curves and still solve the forecasting task equally well. It also only sees the *window-pooled* representation, so within-window structure that pooling discards isn't reflected here.
Linear CKA between each layer's window states and a hand-crafted baseline of that same window's raw values, FFT magnitudes, and summary statistics — how far, per model and per depth, the representation has moved from simple local input statistics.
How to read it
Near 1.0 means this layer is still basically a linear function of raw local window stats (typical right after an embedding, before much mixing). Near 0 means the representation encodes something the simple local baseline can't see at all, most often because attention has already mixed information across positions/windows before this depth — that decorrelates a *window's* state from that *same window's* own raw statistics even though the information hasn't vanished, it's just no longer purely local.
Limitations
A curve that's low and flat across every depth (including layer 0) usually means mixing saturates fast, which is expected for architectures with very few tokens per context (a handful of patches attend to each other almost immediately). Architectures with many more tokens per context typically show a more gradual decline instead. Low here is neither good nor bad on its own: it says the representation isn't simply local, not whether it's useful.
Held-out logistic-regression accuracy predicting the benchmark family from each layer's window states (PCA-reduced first), split by series so windows of a training series never leak into validation — where in depth family identity becomes linearly decodable.
How to read it
The dotted line is chance (majority-class baseline for however many families exist); the dash-dot line per model is a permutation null — the identical probe refit with family labels reshuffled at the series level, showing how high accuracy can get by chance alone on this exact split and architecture. A peak well above *both* lines means that depth linearly encodes which kind of series this is. The peak layer is called out in the findings below as where family information is most accessible.
Limitations
'Decodable' is not the same as 'used by the forecast' — a layer can carry perfect family information the model never actually reads out (cross-check against the tuned lens and behavioral sensitivity to see what's causally load-bearing). Accuracy is also capped by how separable the configured families actually are in the benchmark, not just by the model. The permutation null is the stronger of the two floors — the majority-class chance line ignores the classifier and split entirely, so a probe can clear it while still scoring within the null's own p95, which means its apparent decodability could be search/split artifact rather than real information.
| layer | rel. depth | eff. dim | CKA to input | probe acc. | probe − chance | screen score | screened in | mean Δact (all corruptions) | best restoration | closest layer in another model | that layer's CKA |
|---|---|---|---|---|---|---|---|---|---|---|---|
| encoder.block.0 | 0.000 | 9.456 | 0.005 | 0.770 | 0.343 | -1.718 | False | 0.594 | 0.063 | Sundial:model.layers.0 | 0.913 |
| encoder.block.1 | 0.091 | 13.026 | 0.006 | 0.924 | 0.497 | -1.281 | False | 0.609 | layer not patched | Sundial:model.layers.0 | 0.897 |
| encoder.block.2 | 0.182 | 17.369 | 0.007 | 0.928 | 0.501 | -1.290 | False | 0.625 | 0.065 | Chronos-Bolt:encoder.block.2 | 0.892 |
| encoder.block.3 | 0.273 | 24.437 | 0.009 | 0.939 | 0.512 | -0.960 | False | 0.641 | layer not patched | Chronos-Bolt:encoder.block.2 | 0.875 |
| encoder.block.4 | 0.364 | 33.292 | 0.010 | 0.946 | 0.519 | -0.889 | False | 0.648 | 0.053 | Chronos-Bolt:encoder.block.2 | 0.846 |
| encoder.block.5 | 0.455 | 45.933 | 0.012 | 0.952 | 0.525 | -0.240 | False | 0.668 | layer not patched | Chronos-Bolt:encoder.block.3 | 0.817 |
| encoder.block.6 | 0.545 | 53.964 | 0.013 | 0.949 | 0.522 | -0.055 | False | 0.677 | 0.045 | Chronos-Bolt:encoder.block.3 | 0.793 |
| encoder.block.7 | 0.636 | 66.976 | 0.016 | 0.950 | 0.523 | 0.109 | False | 0.703 | layer not patched | Chronos-Bolt:encoder.block.4 | 0.712 |
| encoder.block.8 | 0.727 | 65.852 | 0.018 | 0.961 | 0.533 | 0.303 | True | 0.704 | 0.048 | Chronos-Bolt:encoder.block.4 | 0.634 |
| encoder.block.9 | 0.818 | 59.877 | 0.019 | 0.963 | 0.536 | -0.007 | False | 0.721 | layer not patched | Chronos-Bolt:encoder.block.4 | 0.537 |
| encoder.block.10 | 0.909 | 48.954 | 0.019 | 0.954 | 0.527 | 4.954 | True | 0.745 | 0.049 | Sundial:model.layers.11 | 0.492 |
| encoder.block.11 | 1.000 | 4.146 | 0.010 | 0.961 | 0.534 | 1.074 | True | 0.377 | layer not patched | Sundial:model.layers.11 | 0.432 |
Every per-layer quantity this run measured for Chronos-2, joined by layer name across the stages that produced them.
| layer | rel. depth | eff. dim | CKA to input | probe acc. | probe − chance | screen score | screened in | skip-lens MASE | mean Δact (all corruptions) | best restoration | closest layer in another model | that layer's CKA |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| encoder.block.0 | 0.000 | 5.942 | 0.010 | 0.706 | 0.279 | -2.050 | False | 4.414 | 0.438 | 0.060 | Sundial:model.layers.0 | 0.928 |
| encoder.block.1 | 0.091 | 8.730 | 0.012 | 0.777 | 0.350 | -1.553 | False | 3.954 | 0.503 | layer not patched | Sundial:model.layers.0 | 0.908 |
| encoder.block.2 | 0.182 | 12.464 | 0.012 | 0.793 | 0.365 | -0.227 | False | 3.706 | 0.532 | 0.036 | Sundial:model.layers.1 | 0.896 |
| encoder.block.3 | 0.273 | 20.024 | 0.010 | 0.808 | 0.380 | 0.279 | False | 3.341 | 0.555 | layer not patched | Chronos-2:encoder.block.2 | 0.858 |
| encoder.block.4 | 0.364 | 30.040 | 0.011 | 0.833 | 0.405 | 3.255 | True | 3.090 | 0.564 | 0.056 | Chronos-2:encoder.block.4 | 0.789 |
| encoder.block.5 | 0.455 | 35.363 | 0.012 | 0.809 | 0.381 | 0.295 | True | 3.171 | 0.533 | layer not patched | Chronos-2:encoder.block.5 | 0.632 |
Every per-layer quantity this run measured for Chronos-Bolt, joined by layer name across the stages that produced them.
| layer | rel. depth | eff. dim | CKA to input | probe acc. | probe − chance | screen score | screened in | skip-lens MASE | mean Δact (all corruptions) | best restoration | closest layer in another model | that layer's CKA |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| model.layers.0 | 0.000 | 7.279 | 0.007 | 0.688 | 0.260 | -2.069 | False | 4.662 | 0.545 | 0.089 | Chronos-Bolt:encoder.block.0 | 0.928 |
| model.layers.1 | 0.091 | 10.654 | 0.010 | 0.823 | 0.396 | -0.926 | False | 4.689 | 0.560 | layer not patched | Chronos-Bolt:encoder.block.1 | 0.906 |
| model.layers.2 | 0.182 | 15.247 | 0.011 | 0.873 | 0.446 | -1.517 | False | 4.627 | 0.614 | 0.078 | Chronos-Bolt:encoder.block.2 | 0.767 |
| model.layers.3 | 0.273 | 17.769 | 0.011 | 0.927 | 0.500 | 1.623 | True | 4.327 | 0.672 | layer not patched | Chronos-Bolt:encoder.block.2 | 0.598 |
| model.layers.4 | 0.364 | 6.561 | 0.005 | 0.941 | 0.514 | -0.295 | False | 4.203 | 0.699 | 0.067 | TimesFM:stacked_xf.18 | 0.396 |
| model.layers.5 | 0.455 | 7.173 | 0.004 | 0.940 | 0.513 | -0.154 | False | 4.122 | 0.721 | layer not patched | TimesFM:stacked_xf.18 | 0.386 |
| model.layers.6 | 0.545 | 8.200 | 0.005 | 0.944 | 0.516 | 0.315 | False | 4.137 | 0.731 | 0.085 | TimesFM:stacked_xf.18 | 0.379 |
| model.layers.7 | 0.636 | 10.153 | 0.005 | 0.944 | 0.516 | 0.167 | False | 3.856 | 0.742 | layer not patched | TimesFM:stacked_xf.18 | 0.376 |
| model.layers.8 | 0.727 | 13.630 | 0.006 | 0.940 | 0.512 | -0.448 | False | 3.713 | 0.749 | 0.079 | Chronos-2:encoder.block.7 | 0.370 |
| model.layers.9 | 0.818 | 18.231 | 0.008 | 0.932 | 0.504 | 0.394 | False | 3.309 | 0.748 | layer not patched | Chronos-2:encoder.block.7 | 0.420 |
| model.layers.10 | 0.909 | 27.828 | 0.012 | 0.935 | 0.508 | 2.449 | True | 2.795 | 0.729 | 0.056 | Chronos-2:encoder.block.7 | 0.542 |
| model.layers.11 | 1.000 | 11.677 | 0.013 | 0.933 | 0.506 | 0.460 | True | 2.445 | 0.697 | layer not patched | Chronos-2:encoder.block.8 | 0.518 |
Every per-layer quantity this run measured for Sundial, joined by layer name across the stages that produced them.
| layer | rel. depth | eff. dim | CKA to input | probe acc. | probe − chance | screen score | screened in | skip-lens MASE | mean Δact (all corruptions) | best restoration | closest layer in another model | that layer's CKA |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| stacked_xf.0 | 0.000 | 25.528 | 0.002 | 0.642 | 0.214 | -0.681 | False | 4.348 | 0.608 | 0.078 | Chronos-2:encoder.block.3 | 0.359 |
| stacked_xf.2 | 0.105 | 32.980 | 0.007 | 0.842 | 0.414 | 0.053 | False | 3.784 | 0.394 | layer not patched | Chronos-2:encoder.block.5 | 0.416 |
| stacked_xf.4 | 0.211 | 36.621 | 0.010 | 0.911 | 0.483 | -0.666 | False | 3.512 | 0.340 | 0.068 | Chronos-2:encoder.block.7 | 0.426 |
| stacked_xf.6 | 0.316 | 30.978 | 0.010 | 0.931 | 0.504 | 0.582 | False | 3.477 | 0.316 | layer not patched | Chronos-2:encoder.block.7 | 0.391 |
| stacked_xf.8 | 0.421 | 25.568 | 0.008 | 0.934 | 0.506 | -1.293 | False | 3.394 | 0.310 | 0.083 | Chronos-2:encoder.block.7 | 0.358 |
| stacked_xf.10 | 0.526 | 22.949 | 0.007 | 0.936 | 0.509 | 1.151 | True | 3.303 | 0.306 | layer not patched | Chronos-2:encoder.block.8 | 0.347 |
| stacked_xf.12 | 0.632 | 19.427 | 0.006 | 0.941 | 0.513 | -1.432 | False | 3.295 | 0.307 | 0.082 | Chronos-2:encoder.block.11 | 0.332 |
| stacked_xf.14 | 0.737 | 14.768 | 0.005 | 0.938 | 0.510 | -0.438 | False | 3.237 | 0.292 | layer not patched | Chronos-2:encoder.block.11 | 0.310 |
| stacked_xf.16 | 0.842 | 8.083 | 0.003 | 0.908 | 0.481 | 0.281 | False | 3.002 | 0.315 | 0.047 | Sundial:model.layers.4 | 0.267 |
| stacked_xf.18 | 0.947 | 2.806 | 0.003 | 0.870 | 0.442 | 4.708 | True | 2.713 | 0.289 | layer not patched | Sundial:model.layers.4 | 0.396 |
Every per-layer quantity this run measured for TimesFM, joined by layer name across the stages that produced them.
One row per captured layer, one column per per-layer quantity the run measured, so a single layer can be read across every stage at once instead of by cross-referencing five figures.
How to read it
Columns come from different stages and mean different things. eff. dim and CKA to input are descriptive geometry (how many directions the layer's representation spreads over, and how much it still resembles raw input statistics). probe acc. is decodability of the data family from that layer, worth reading as probe − chance. screen score is the cheap interestingness heuristic that chose sae.targets: auto, and screened in marks its picks. skip-lens MASE is the forecast quality obtainable from that layer through the model's own head — it descending and then flattening is the crystallization the Forecast lens section measures. mean Δact and best restoration are the layer's average reaction to the corruption battery and the most any single patch at that layer recovered. closest layer in other model is that layer's argmax over the cross-model CKA matrix.
Limitations
A blank cell means that stage did not measure that layer — stages run at independent strides (l3.patching.layer_stride, capture_layer_stride), so absence is a config fact, not a zero. Nothing here is causal except best restoration, and that is causal within its own model only. Relative depth is a fraction of the model's whole stack including surfaces this run never captured, so the last row of a partially-observed model is not that model's output.
Per-layer forecasts read out with the model's own head: where in depth the final forecast crystallizes, and how much of it a linear probe already sees.
Question
At what depth does each model's forecast actually take its final shape?
How
Feeds each layer's own activations into the model's normal output pathway, as if that layer were the last one, to see how good a forecast it already produces; separately, fits a small linear readout per layer to check whether the forecast is already recoverable there even if the model's own head can't decode it yet.
Good vs. bad result
Good: a curve that reaches close to final accuracy well before the last layer ('crystallizes early'), consistent with a similarly early rise in the tuned-lens readout. Bad: a flat, uninformative curve where the tuned lens also shows nothing until the very last layer — the forecast genuinely needs the model's full depth — or the two disagree sharply, itself informative about miscalibrated early layers.
What it cannot tell you
The direct (skip-lens) readout can be misleadingly pessimistic about early layers for reasons unrelated to information content — the model's final block was never trained to decode them — which is exactly why the tuned-lens readout exists alongside it. Even together, both only detect *linearly* recoverable structure; a forecast could be present in a layer in a form no linear readout can see.
Chronos-2: the forecast head reads positions that a final-block patch of this adapter's token_slice span cannot reach, so every layer would return an identical forecast. A skip-lens curve is produced by overwriting a layer's states and reading the model's own forecast; where the forecast head does not read the overwritten positions, every layer returns the identical forecast, so the curve would be flat by construction rather than as a finding. It is withheld instead. The tuned lens below is a separate mechanism (a probe fit on stored states, no patching) and does cover Chronos-2.
The logit-lens analog for forecasting: layer-l's token states are patched into the model's own final block, and its own head decodes a forecast from them — using the real output pathway, no access to internals beyond the existing patch primitive. The dotted line is each model's true final-layer MASE.
How to read it
A curve that drops toward the final-MASE line early in depth means the forecast is already largely formed well before the last layer ('crystallizes early'); a curve that only reaches it at the last point means the model needs its full depth. The 'crystallization depth' finding below is the first relative depth whose MASE lands within a configurable tolerance of final.
Limitations
Like classic logit lens, early layers can be miscalibrated for reasons unrelated to information content (the final block/head wasn't trained to decode them) — a high early MASE doesn't prove the forecast isn't already linearly present, only that this particular readout can't see it yet. That's exactly the gap the tuned lens below (a probe fit specifically for each layer) is designed to close.
A ridge probe fit per layer (held-out by series) predicting either the model's own final forecast (solid) or the true target (dashed) from that layer's window states — a readout that, unlike the skip lens above, is tuned for each layer instead of relying on the final head to decode it.
How to read it
High solid-line R² early in depth means the forecast is already linearly recoverable from that layer even if the skip lens (constrained to the model's own head) can't show it yet. The dashed 'ground truth' line is usually lower and caps out at whatever the model's own final-layer accuracy allows — it can't exceed how good the forecast itself is.
Limitations
A linear probe only detects *linear* readability; a layer could carry the forecast in a nonlinear form invisible here. Splits are by held-out series (matching the L2 discipline), so R² reflects generalization to new series, not in-sample fit.
How early in each model's depth an individual forecast step becomes readable, instead of the whole horizon averaged into one curve. Each model has its own colour scale — compare the pattern within a panel, not the shade across panels.
The skip-lens MASE curve above, resolved by forecast horizon step instead of averaged over the whole horizon: each cell is that layer's skip-lens forecast error at that one specific step ahead.
How to read it
A column that stays dark (low MASE) across most of depth means that horizon step crystallizes early; a column that only lightens near the bottom row means the model needs its full depth to forecast that far ahead. Comparing near-term columns (small horizon step) against far-term columns answers whether a model commits to its short-horizon forecast earlier in depth than its long-horizon one.
Limitations
Same caveats as the whole-horizon skip lens above (miscalibration at early layers is a readout limitation, not proof the forecast isn't linearly present yet — see the tuned lens for that) — colors are not comparable across models, only within one model's own grid.
Gaps are unresolved steps, not missing data: TimesFM 60 of 64 steps (its deepest captured layer, stacked_xf.18, is still 1.15 MASE away from reproducing the model's own forecast). At those horizon steps the skip-lens MASE never came within tolerance of that step's own final-layer MASE at any captured layer, so there is no crossing depth to plot. The usual cause is that the deepest captured layer is not the model's true final block — under a capture stride above 1 the last blocks are skipped, so the curve stops short of where the forecast actually finishes forming, and the steps that finish latest are the ones left unresolved. Capturing at stride 1 closes it. Read a gap as 'not resolved within the layers measured', never as a deeper crystallization point.
For each forecast horizon step independently, the first relative depth whose skip-lens MASE at that step lands within tolerance of that step's own final-layer MASE — the same crystallization-depth definition above, just computed once per horizon step instead of once for the whole averaged curve.
How to read it
A rising curve (crystallization depth increasing with horizon step) means the model settles its near-term forecast earlier in depth than its far-term one — plausible if later steps need more integrated context. A flat curve means the model commits to the whole horizon at once, regardless of how far out a given step is.
Limitations
A gap in the curve (missing marker) means that horizon step's skip-lens MASE never came within tolerance at any captured layer — read as 'not resolved', not as 'infinitely deep'.
Part 4 — Do the models represent things the same way?
Representational geometry and linear stitching between every model pair, how each model clusters the benchmark on its own, and how similar every model pair is across every metric this pipeline measures independently of the concept atlas below.
↑ contentsLinear CKA between every layer pair: where the two models' representations share geometry. Correlational evidence only.
Question
Do the models represent this data similarly at all?
How
Compares every pair of layers, one from each model, by how similarly they organize the same set of series geometrically — a comparison that ignores each layer's own arbitrary rotation and scale — and checks the result against a shuffled-series control.
Good vs. bad result
Good: a peak similarity that sits clearly above the shuffled-series null, especially one that follows a sensible pattern by depth (early layers matching early layers). Bad: a similarity score that's high everywhere and barely rises above the null — a sign the number mostly reflects that the models see the same input, not that they've learned anything in common.
What it cannot tell you
This is correlational: a high score never establishes that the two models compute the same thing, only that their representations are geometrically similar — which two under-trained or too-simple networks can also produce for reasons that have nothing to do with shared learning. It says nothing about mechanism; L2 and L3 exist specifically because this stage can't answer that.
Linear CKA between every layer pair of the two models, in feature space (invariant to rotation/scaling of either representation, so it compares geometry, not raw coordinates). This is the first, cheapest cross-model question: do these two layers organize the same benchmark similarly at all?
How to read it
1.0 is identical geometry up to rotation; 0 is unrelated. High values are expected and not by themselves impressive: both models process the exact same structured input, and CKA is well known to be inflated by shared input-driven variance alone, independent of any shared computation — that is exactly why L2's stitching-gain-over-input-baseline exists as the corrected comparison. The dotted reference line on the depth-correspondence chart below is an empirical null: the same statistic recomputed after shuffling which series lines up with which. A peak far above that null line means the number is at least tracking genuine per-sample correspondence (not an artifact of comparing any two reasonable encoders) — it does not by itself mean the models learned the same thing.
Limitations
Correlational only; says nothing about mechanism (see L2/L3 for that). Sensitive to how many series/windows are sampled — the CI widens for family-conditioned values with few series. Layer-pair geometry can also look similar simply because both networks are under-trained or too small relative to the input's effective dimensionality — that inflates CKA the same way shared input structure does, and the two are hard to tell apart from this number alone.
| model A | model B | peak CKA | at | rel. depth | shuffled null |
|---|---|---|---|---|---|
| TimesFM | Chronos-2 | 0.43 [0.42, 0.44] | L4 ↔ L7 | 0.21 / 0.64 | 0.037 |
| TimesFM | Sundial | 0.41 [0.40, 0.43] | L4 ↔ L2 | 0.21 / 0.18 | 0.046 |
| TimesFM | Chronos-Bolt | 0.38 [0.37, 0.40] | L4 ↔ L2 | 0.21 / 0.18 | 0.012 |
| Chronos-2 | Sundial | 0.91 [0.91, 0.92] | L0 ↔ L0 | 0.00 / 0.00 | 0.001 |
| Chronos-2 | Chronos-Bolt | 0.91 [0.90, 0.92] | L0 ↔ L0 | 0.00 / 0.00 | 0.001 |
| Sundial | Chronos-Bolt | 0.93 [0.92, 0.93] | L0 ↔ L0 | 0.00 / 0.00 | 0.001 |
The peak-CKA layer pair for every model pair in this run, each against its own shuffled-series null. The heatmap at the top of this section is the first row of this table.
How to read it
Compare each pair's peak against ITS OWN null column, never against another pair's peak: the null absorbs how much similarity the shared input alone produces for that particular pair of architectures, and that quantity is not the same for two pairs.
Limitations
Every value is a maximum over the two models' layer grids, so larger models offer more candidates to maximize over and their peaks are biased upward relative to smaller ones. The relative depths use the 'block' axis, so a model with an uncaptured surface legitimately never reaches 1.0.
The same layer-by-layer CKA matrix as the heatmap at the top of this section, for every model pair, on one shared 0-1 colour scale so the panels are comparable to each other.
For each pair, every layer of model A matched to its best-matching layer of model B, against relative depth on the 'block' axis. The dotted line in each panel is that pair's own shuffled-series null. All panels share a 0-1 y-axis, so curve heights are directly comparable between pairs.
For each layer of the first model, the best-matching layer of the second model and their CKA, plotted against relative depth — a compact way to see whether early layers match early layers (architectures process the input in a similar order) or whether matches jump around in depth.
How to read it
A roughly monotonic line (early-to-early, late-to-late) suggests comparable processing order despite different depths/patch sizes. A flat, uniformly-high line usually means the input's own structure dominates every layer's geometry about equally — see the null-line caveat above.
Limitations
The 'best match' is a max over the other model's layers, which mechanically biases the curve upward versus any single fixed pairing (more candidates to match against) and can look artificially smooth even when the underlying matrix is noisy — always sanity-check against the heatmap above. The x-axis is the 'block' depth axis: 'block' places a layer by its position over the model's whole stack, including any surface this run never captured, so a model whose captured layers stop partway up it legitimately ends short of 1.0 instead of being stretched to fill the axis, as Chronos-Bolt and TimesFM do in this run.
Peak CKA computed within one benchmark family at a time, for every model pair. Read down a family (which pairs agree on this kind of series?) and across families (does one family separate every pair, or only some?) — a family where one pair's bar is much lower than its neighbours is where those two models' representations diverge specifically.
The same peak-CKA computation restricted to one benchmark family at a time (e.g. only trending series, only spiky series), so a family where two models diverge structurally doesn't get averaged away by families where they agree.
How to read it
Compare bar heights across families, not to some universal threshold — a lower bar means this family's structure is where those models' representations differ most, which is exactly the kind of finding the exemplar case studies exist to make concrete.
Limitations
Families with fewer than `l1.min_family_series` series are dropped entirely (too few series for a stable per-family CKA), so a family's absence here isn't evidence of anything.
Spearman rank correlation between the two models' series-by-series dissimilarity matrices, at each depth of model A. This is the rank-based companion to the CKA curves above: a pair high on CKA but low here agrees about overall geometry while ordering individual series differently.
| layer_a | layer_b | spearman |
|---|---|---|
| stacked_xf.0 | encoder.block.3 | 0.593 |
| stacked_xf.2 | encoder.block.5 | 0.705 |
| stacked_xf.4 | encoder.block.7 | 0.653 |
| stacked_xf.6 | encoder.block.7 | 0.659 |
| stacked_xf.8 | encoder.block.7 | 0.647 |
| stacked_xf.10 | encoder.block.8 | 0.573 |
| stacked_xf.12 | encoder.block.11 | 0.451 |
| stacked_xf.14 | encoder.block.11 | 0.416 |
| stacked_xf.16 | encoder.block.11 | 0.444 |
| stacked_xf.18 | encoder.block.7 | 0.463 |
A second opinion on the CKA-matched layer pairs above: each layer's series are ranked by pairwise dissimilarity (1 minus correlation) into a representational dissimilarity matrix (RDM), and the two models' RDMs at each matched pair are Spearman rank-correlated. RSA is invariant to a different class of transform than CKA (monotonic distance rescaling instead of rotation), so agreement between the two is evidence the CKA match isn't an artifact of its specific invariance.
How to read it
Spearman ρ near 1 means the two models rank which series-pairs are similar/dissimilar in the same order at that layer pair; near 0 means the rankings are unrelated even though CKA (a different notion of agreement) may have matched these layers.
Limitations
Computed on series-level pooled embeddings only (no window resolution), over a capped sample (`l1.rsa_max_series`) for cost — a rough second check, not a replacement for the CKA statistics above.
The same linear-CKA statistic as the heatmap above, but computed on each target's PERSISTED, ENCODED SAE feature activations (`store.load(..., space='sae')`) instead of raw activation-space hidden states.
Best feature-space pair: L8 ↔ L11, CKA 0.59 [0.56, 0.63].
This is NOT computed over the same layer pairs as the activation-space CKA above — SAE targets are pinned for forecast-readability, not chosen to peak on this statistic, so it is not yet a like-for-like 'feature space vs. activation space' verdict at the same depth.
How to read it
A high value here means the two models' SPARSE, human-legible feature dictionaries agree on which series look similar — a stronger, more interpretable echo of shared structure than the raw activation-space CKA above, since a feature basis is (attempted to be) meaningful on its own rather than an arbitrary rotation of the hidden space.
Limitations
Requires `sae.persist_features: true` (off by default) and at least two SAE targets spanning both comparison-pair models — most runs will not have this artifact at all, which is why it renders only when found rather than as an empty placeholder.
Ridge maps between window states, reported as gain over an input-feature baseline; only that gain is evidence of shared learned structure.
Question
Can one model's layer actually be translated into the other's, beyond what's explained by both simply seeing the same input?
How
Fits a simple linear map from one model's layer activations to the other's, compares how well it predicts against a hand-built baseline that only ever sees the raw input (never the other model), and reports the gap between the two as the real evidence.
Good vs. bad result
Good: the best pair's gain over the input baseline has a confidence interval that clearly sits above zero — real evidence the source layer predicts the target layer better than raw input alone could. Bad: that interval includes zero — the apparent shared structure could just be an artifact of the models seeing the same series.
What it cannot tell you
Only the gain over the input baseline counts as evidence here — raw predictive accuracy alone is untrustworthy, since both models process the same input and would score well on that basis alone. This also only detects *linear* translatability (a genuine nonlinear correspondence between two layers can score zero gain), and it is still not a causal claim: a good stitch means the two layers' information is compatible, not that either model's forecast actually depends on it.
| model A | model B | A → B | B → A | best of the two |
|---|---|---|---|---|
| TimesFM | Chronos-2 | +0.707 | +0.611 | +0.707 |
| TimesFM | Sundial | +0.681 | +0.609 | +0.681 |
| TimesFM | Chronos-Bolt | +0.649 | +0.580 | +0.649 |
| Chronos-2 | Sundial | +0.891 | +0.911 | +0.911 |
| Chronos-2 | Chronos-Bolt | +0.893 | +0.908 | +0.908 |
| Sundial | Chronos-Bolt | +0.878 | +0.865 | +0.878 |
One row per model pair. A → B is the gain when that row's model A is stitched into its model B, B → A the reverse — so each row is self-contained and the two columns always refer to that row's own two models, never to another pair's. The per-direction heatmaps below give the full layer grid behind each number.
How to read it
Only the gain ABOVE the input baseline is evidence of shared learned structure, so a value at or below zero means that direction carries no stitching evidence regardless of how high its raw R² is. The two directions of one pair are fit independently and are not expected to match.
Limitations
A point estimate without its CI: the per-direction headings below carry the interval, and a gain whose CI straddles zero is not evidence no matter what this column shows. Nothing here corrects for having looked at C(n,2) x 2 directions.
For every (source layer, target layer) pair, a ridge probe is fit from the source model's window states to the target model's, and scored as held-out R². The heatmap color is not that raw R² — it's the *gain* above a hand-crafted input-feature probe (raw window values, FFT magnitudes, summary stats) fit to predict the same target, because both models saw the same input, so high raw R² can just mean 'both are reasonable functions of the input,' not 'these representations share learned structure.'
How to read it
Red (positive ΔR²) at a pair means the source layer predicts the target layer better than raw input features alone can — genuine evidence of shared structure beyond input. Blue (negative) means the input baseline actually wins; that pair carries no stitching evidence at all. The title line's gain CI is the one number to trust: if its low end is above zero, the best pair's gain is real; if the CI straddles zero, treat the whole heatmap as noise no matter how saturated it looks.
Limitations
Ridge R² rewards *linear* translatability only — a nonlinear correspondence between two layers would show up as zero gain here even if it exists. Direction matters: A→B and B→A are fit and scored independently and are not expected to agree.
For every (source layer, target layer) pair, a ridge probe is fit from the source model's window states to the target model's, and scored as held-out R². The heatmap color is not that raw R² — it's the *gain* above a hand-crafted input-feature probe (raw window values, FFT magnitudes, summary stats) fit to predict the same target, because both models saw the same input, so high raw R² can just mean 'both are reasonable functions of the input,' not 'these representations share learned structure.'
How to read it
Red (positive ΔR²) at a pair means the source layer predicts the target layer better than raw input features alone can — genuine evidence of shared structure beyond input. Blue (negative) means the input baseline actually wins; that pair carries no stitching evidence at all. The title line's gain CI is the one number to trust: if its low end is above zero, the best pair's gain is real; if the CI straddles zero, treat the whole heatmap as noise no matter how saturated it looks.
Limitations
Ridge R² rewards *linear* translatability only — a nonlinear correspondence between two layers would show up as zero gain here even if it exists. Direction matters: A→B and B→A are fit and scored independently and are not expected to agree.
For every (source layer, target layer) pair, a ridge probe is fit from the source model's window states to the target model's, and scored as held-out R². The heatmap color is not that raw R² — it's the *gain* above a hand-crafted input-feature probe (raw window values, FFT magnitudes, summary stats) fit to predict the same target, because both models saw the same input, so high raw R² can just mean 'both are reasonable functions of the input,' not 'these representations share learned structure.'
How to read it
Red (positive ΔR²) at a pair means the source layer predicts the target layer better than raw input features alone can — genuine evidence of shared structure beyond input. Blue (negative) means the input baseline actually wins; that pair carries no stitching evidence at all. The title line's gain CI is the one number to trust: if its low end is above zero, the best pair's gain is real; if the CI straddles zero, treat the whole heatmap as noise no matter how saturated it looks.
Limitations
Ridge R² rewards *linear* translatability only — a nonlinear correspondence between two layers would show up as zero gain here even if it exists. Direction matters: A→B and B→A are fit and scored independently and are not expected to agree.
For every (source layer, target layer) pair, a ridge probe is fit from the source model's window states to the target model's, and scored as held-out R². The heatmap color is not that raw R² — it's the *gain* above a hand-crafted input-feature probe (raw window values, FFT magnitudes, summary stats) fit to predict the same target, because both models saw the same input, so high raw R² can just mean 'both are reasonable functions of the input,' not 'these representations share learned structure.'
How to read it
Red (positive ΔR²) at a pair means the source layer predicts the target layer better than raw input features alone can — genuine evidence of shared structure beyond input. Blue (negative) means the input baseline actually wins; that pair carries no stitching evidence at all. The title line's gain CI is the one number to trust: if its low end is above zero, the best pair's gain is real; if the CI straddles zero, treat the whole heatmap as noise no matter how saturated it looks.
Limitations
Ridge R² rewards *linear* translatability only — a nonlinear correspondence between two layers would show up as zero gain here even if it exists. Direction matters: A→B and B→A are fit and scored independently and are not expected to agree.
For every (source layer, target layer) pair, a ridge probe is fit from the source model's window states to the target model's, and scored as held-out R². The heatmap color is not that raw R² — it's the *gain* above a hand-crafted input-feature probe (raw window values, FFT magnitudes, summary stats) fit to predict the same target, because both models saw the same input, so high raw R² can just mean 'both are reasonable functions of the input,' not 'these representations share learned structure.'
How to read it
Red (positive ΔR²) at a pair means the source layer predicts the target layer better than raw input features alone can — genuine evidence of shared structure beyond input. Blue (negative) means the input baseline actually wins; that pair carries no stitching evidence at all. The title line's gain CI is the one number to trust: if its low end is above zero, the best pair's gain is real; if the CI straddles zero, treat the whole heatmap as noise no matter how saturated it looks.
Limitations
Ridge R² rewards *linear* translatability only — a nonlinear correspondence between two layers would show up as zero gain here even if it exists. Direction matters: A→B and B→A are fit and scored independently and are not expected to agree.
For every (source layer, target layer) pair, a ridge probe is fit from the source model's window states to the target model's, and scored as held-out R². The heatmap color is not that raw R² — it's the *gain* above a hand-crafted input-feature probe (raw window values, FFT magnitudes, summary stats) fit to predict the same target, because both models saw the same input, so high raw R² can just mean 'both are reasonable functions of the input,' not 'these representations share learned structure.'
How to read it
Red (positive ΔR²) at a pair means the source layer predicts the target layer better than raw input features alone can — genuine evidence of shared structure beyond input. Blue (negative) means the input baseline actually wins; that pair carries no stitching evidence at all. The title line's gain CI is the one number to trust: if its low end is above zero, the best pair's gain is real; if the CI straddles zero, treat the whole heatmap as noise no matter how saturated it looks.
Limitations
Ridge R² rewards *linear* translatability only — a nonlinear correspondence between two layers would show up as zero gain here even if it exists. Direction matters: A→B and B→A are fit and scored independently and are not expected to agree.
For every (source layer, target layer) pair, a ridge probe is fit from the source model's window states to the target model's, and scored as held-out R². The heatmap color is not that raw R² — it's the *gain* above a hand-crafted input-feature probe (raw window values, FFT magnitudes, summary stats) fit to predict the same target, because both models saw the same input, so high raw R² can just mean 'both are reasonable functions of the input,' not 'these representations share learned structure.'
How to read it
Red (positive ΔR²) at a pair means the source layer predicts the target layer better than raw input features alone can — genuine evidence of shared structure beyond input. Blue (negative) means the input baseline actually wins; that pair carries no stitching evidence at all. The title line's gain CI is the one number to trust: if its low end is above zero, the best pair's gain is real; if the CI straddles zero, treat the whole heatmap as noise no matter how saturated it looks.
Limitations
Ridge R² rewards *linear* translatability only — a nonlinear correspondence between two layers would show up as zero gain here even if it exists. Direction matters: A→B and B→A are fit and scored independently and are not expected to agree.
For every (source layer, target layer) pair, a ridge probe is fit from the source model's window states to the target model's, and scored as held-out R². The heatmap color is not that raw R² — it's the *gain* above a hand-crafted input-feature probe (raw window values, FFT magnitudes, summary stats) fit to predict the same target, because both models saw the same input, so high raw R² can just mean 'both are reasonable functions of the input,' not 'these representations share learned structure.'
How to read it
Red (positive ΔR²) at a pair means the source layer predicts the target layer better than raw input features alone can — genuine evidence of shared structure beyond input. Blue (negative) means the input baseline actually wins; that pair carries no stitching evidence at all. The title line's gain CI is the one number to trust: if its low end is above zero, the best pair's gain is real; if the CI straddles zero, treat the whole heatmap as noise no matter how saturated it looks.
Limitations
Ridge R² rewards *linear* translatability only — a nonlinear correspondence between two layers would show up as zero gain here even if it exists. Direction matters: A→B and B→A are fit and scored independently and are not expected to agree.
For every (source layer, target layer) pair, a ridge probe is fit from the source model's window states to the target model's, and scored as held-out R². The heatmap color is not that raw R² — it's the *gain* above a hand-crafted input-feature probe (raw window values, FFT magnitudes, summary stats) fit to predict the same target, because both models saw the same input, so high raw R² can just mean 'both are reasonable functions of the input,' not 'these representations share learned structure.'
How to read it
Red (positive ΔR²) at a pair means the source layer predicts the target layer better than raw input features alone can — genuine evidence of shared structure beyond input. Blue (negative) means the input baseline actually wins; that pair carries no stitching evidence at all. The title line's gain CI is the one number to trust: if its low end is above zero, the best pair's gain is real; if the CI straddles zero, treat the whole heatmap as noise no matter how saturated it looks.
Limitations
Ridge R² rewards *linear* translatability only — a nonlinear correspondence between two layers would show up as zero gain here even if it exists. Direction matters: A→B and B→A are fit and scored independently and are not expected to agree.
For every (source layer, target layer) pair, a ridge probe is fit from the source model's window states to the target model's, and scored as held-out R². The heatmap color is not that raw R² — it's the *gain* above a hand-crafted input-feature probe (raw window values, FFT magnitudes, summary stats) fit to predict the same target, because both models saw the same input, so high raw R² can just mean 'both are reasonable functions of the input,' not 'these representations share learned structure.'
How to read it
Red (positive ΔR²) at a pair means the source layer predicts the target layer better than raw input features alone can — genuine evidence of shared structure beyond input. Blue (negative) means the input baseline actually wins; that pair carries no stitching evidence at all. The title line's gain CI is the one number to trust: if its low end is above zero, the best pair's gain is real; if the CI straddles zero, treat the whole heatmap as noise no matter how saturated it looks.
Limitations
Ridge R² rewards *linear* translatability only — a nonlinear correspondence between two layers would show up as zero gain here even if it exists. Direction matters: A→B and B→A are fit and scored independently and are not expected to agree.
For every (source layer, target layer) pair, a ridge probe is fit from the source model's window states to the target model's, and scored as held-out R². The heatmap color is not that raw R² — it's the *gain* above a hand-crafted input-feature probe (raw window values, FFT magnitudes, summary stats) fit to predict the same target, because both models saw the same input, so high raw R² can just mean 'both are reasonable functions of the input,' not 'these representations share learned structure.'
How to read it
Red (positive ΔR²) at a pair means the source layer predicts the target layer better than raw input features alone can — genuine evidence of shared structure beyond input. Blue (negative) means the input baseline actually wins; that pair carries no stitching evidence at all. The title line's gain CI is the one number to trust: if its low end is above zero, the best pair's gain is real; if the CI straddles zero, treat the whole heatmap as noise no matter how saturated it looks.
Limitations
Ridge R² rewards *linear* translatability only — a nonlinear correspondence between two layers would show up as zero gain here even if it exists. Direction matters: A→B and B→A are fit and scored independently and are not expected to agree.
For every (source layer, target layer) pair, a ridge probe is fit from the source model's window states to the target model's, and scored as held-out R². The heatmap color is not that raw R² — it's the *gain* above a hand-crafted input-feature probe (raw window values, FFT magnitudes, summary stats) fit to predict the same target, because both models saw the same input, so high raw R² can just mean 'both are reasonable functions of the input,' not 'these representations share learned structure.'
How to read it
Red (positive ΔR²) at a pair means the source layer predicts the target layer better than raw input features alone can — genuine evidence of shared structure beyond input. Blue (negative) means the input baseline actually wins; that pair carries no stitching evidence at all. The title line's gain CI is the one number to trust: if its low end is above zero, the best pair's gain is real; if the CI straddles zero, treat the whole heatmap as noise no matter how saturated it looks.
Limitations
Ridge R² rewards *linear* translatability only — a nonlinear correspondence between two layers would show up as zero gain here even if it exists. Direction matters: A→B and B→A are fit and scored independently and are not expected to agree.
How each model organizes the benchmark, with clusters labeled by what they approximately activate for.
Question
How does each model organize the whole benchmark on its own terms, and do the models group the data the same way?
How
Projects each model's activations, at its own side of the strongest cross-model layer pair, down to a small number of dimensions, clusters them, labels each cluster by what kind of data dominates it, and compares how much each pair's groupings agree using a chance-corrected overlap score.
Good vs. bad result
Good: clean, well-separated clusters that line up with real, interpretable properties of the data, and a partition-agreement score meaningfully above chance between a pair of models. Bad: a single smeared blob with no real separation, or cluster labels that don't correspond to anything a human would recognize as a coherent group.
What it cannot tell you
The 2D map is a visualization only — apparent distances or gaps between clusters on the plot are not quantitative and should never be read as a diversity or separation measure. Cluster labels are approximate (majority family plus salient statistics), not ground truth, and everything here is descriptive: it says how each model happens to partition the data, not why, and not whether that partition is causally meaningful to either model's forecast.
Each model's window states at its side of the L1 peak-CKA layer pair, reduced to 2D (UMAP if enabled, else PCA) and k-means clustered — a low-dimensional map of how each model organizes the whole benchmark, colored by its own cluster assignment.
How to read it
Clean, well-separated color blobs mean that model's representation carves the benchmark into distinct groups at this layer; a single smeared blob means it doesn't separate much at all there. Hover any point for its series id, true family, and the cluster's approximate label — compare cluster shapes side by side, not exact colors (cluster indices aren't matched across models).
Limitations
The 2D layout is a projection for visualization only — apparent distances between clusters aren't meaningful, only which points share a cluster. Cluster *labels* are approximate (majority family + salient signal stats), so treat them as a reading aid, not ground truth; the partition-overlap statistic below is the quantitative version of what this plot shows visually.
| cluster | size | purity | label |
|---|---|---|---|
| 0 | 145 | 0.641 | mixture (64%) · anti-persistent · broadband/noisy spectrum |
| 1 | 302 | 0.927 | random_parametric (93%) · mixed characteristics |
| 2 | 106 | 1.000 | mixture (100%) · smooth/persistent |
| 3 | 145 | 0.745 | parametric (74%) · clean · smooth/persistent |
| 4 | 102 | 0.373 | mixture (37%) · rising trend · smooth/persistent |
| cluster | size | purity | label |
|---|---|---|---|
| 0 | 198 | 0.540 | parametric (54%) · smooth/persistent · clean |
| 1 | 126 | 0.754 | mixture (75%) · anti-persistent · broadband/noisy spectrum |
| 2 | 107 | 1.000 | mixture (100%) · smooth/persistent |
| 3 | 146 | 0.993 | random_parametric (99%) · peaked spectrum · clean |
| 4 | 223 | 0.641 | random_parametric (64%) · mixed characteristics |
| cluster | size | purity | label |
|---|---|---|---|
| 0 | 159 | 0.767 | random_parametric (77%) · clean · peaked spectrum |
| 1 | 113 | 0.929 | mixture (93%) · smooth/persistent |
| 2 | 188 | 0.574 | parametric (57%) · clean · smooth/persistent |
| 3 | 162 | 0.586 | mixture (59%) · broadband/noisy spectrum · anti-persistent |
| 4 | 178 | 0.888 | random_parametric (89%) · anti-persistent |
| cluster | size | purity | label |
|---|---|---|---|
| 0 | 128 | 0.836 | random_parametric (84%) · falling trend · clean |
| 1 | 129 | 0.736 | mixture (74%) · anti-persistent · broadband/noisy spectrum |
| 2 | 141 | 0.716 | random_parametric (72%) · anti-persistent · noisy |
| 3 | 275 | 0.367 | mixture (37%) · smooth/persistent |
| 4 | 127 | 0.543 | random_parametric (54%) · rising trend · clean |
Row-normalized contingency between the two models' cluster assignments (what fraction of model A's cluster i falls into each of model B's clusters), plus adjusted mutual information (AMI) as a single overlap statistic.
How to read it
A heatmap concentrated on (close to) a diagonal-like permutation means the two partitions correspond well, even if cluster numbers don't literally match; a spread-out heatmap means little correspondence. AMI=1.0 is identical partitions, 0 is what you'd expect from independent random partitions of the same size.
Limitations
AMI corrects for chance agreement from cluster count/size alone, but its bootstrap CI (when shown) resamples label pairs, not the clustering itself — it reflects assignment stability, not k-means initialization variance. `k` is often 'auto' (number of benchmark families), so overlap partly reflects how family-like each model's natural clusters are, not just agreement between the two models.
Row-normalized contingency between each pair's own cluster assignments, on one shared 0-1 colour scale so the panels are comparable to each other — the same statistic as the single reference-pair heatmap above, for every pair this run measured, not just the designated one.
| model A | model B | AMI |
|---|---|---|
| TimesFM | Chronos-2 | 0.60 [0.57, 0.63] |
| TimesFM | Sundial | 0.68 [0.65, 0.72] |
| TimesFM | Chronos-Bolt | 0.42 [0.40, 0.46] |
| Chronos-2 | Sundial | 0.59 [0.56, 0.62] |
| Chronos-2 | Chronos-Bolt | 0.45 [0.43, 0.50] |
| Sundial | Chronos-Bolt | 0.51 [0.48, 0.55] |
Adjusted mutual information between each pair of models' cluster assignments. The heatmap grid above draws every pair's own overlap; this table gives the same pairs' exact AMI values.
How to read it
AMI is chance-corrected, so 0 is what independent partitions of the same sizes would give and the values are directly comparable across rows even when the pairs have different cluster counts.
Limitations
Each row is an independent statistic with its own CI; nothing here corrects for the fact that C(n,2) of them were looked at, so read the spread across rows rather than singling out the largest.
Every representation/behavioral/SAE similarity metric this pipeline computes, one row per metric, one dot per model pair -- moved here from "Concepts" because it is not about concepts.
Question
Which features does each model's dictionary actually use when it forecasts, do they group into named concepts, and does another model group the same series the same way?
How
For every trained dictionary, zeroes each candidate feature out of the model's own reconstruction on the series where that feature fires hardest, and measures nine properties of the forecast against a random-direction null. Features that move something are clustered by what they move into concepts (or the dictionary is declared non-modular when no clean grouping exists). Each concept's top series are then checked in every other model: does some feature there separate the same series better than random series of the same kind would, and does that feature's own top series come back the other way? Finally every concept is described in a sentence composed only from what was measured. Separately, every causal feature across every model is also pooled into one shared space and clustered directly against each other, so a group there can span several models even when a dictionary's own per-target clustering above found no clean grouping within it.
Good vs. bad result
Good: features whose removal moves the forecast well above the null, concepts with several members each, and transfers that clear the matched null in both directions. Bad: most targets declared non-modular (the dictionary's causal features do not group), or transfer rates that are high only because the matched null is weak for that kind of series.
What it cannot tell you
A transfer that clears its null says another model separates the same series, not that it uses the feature the same way causally. The rates are uncorrected for the many tests made, and nothing yet says how often a concept would transfer to a second dictionary trained on the SAME model, so a rate cannot be read as high or low on its own. Everything here is measured on the development corpus only.
Every representation/behavioral/SAE similarity metric this pipeline already computes, one row per metric, one dot per model pair -- the evidence behind the compact “How similar is each pair?” answer box in “At a glance” above.
Every measured similarity metric, one row per metric, one dot per model pair on that metric's OWN native axis -- ranges are never rescaled across metrics, since a stitching gain and a CKA value are not the same kind of number even though both happen to run roughly 0-1.
How to read it
Whiskers are the metric's own bootstrap CI where one exists. The dotted vertical line is that metric's own reference (a null, a chance level, or the input-feature baseline) -- read a pair's distance from ITS metric's own reference, never compare raw positions across rows. Use the dropdown to highlight one pair across every metric at once.
Limitations
Metrics disagree by design (this run's own measured fact): a pair close on one axis can be far on another. A missing row means that metric's own stage artifact was not present for this run.
| Pair | Error agreement | Best-layer CKA | Stitching gain | Cluster agreement (AMI) | Atlas co-membership | Input transfer | Shared concepts | Median rank | Rank range |
|---|---|---|---|---|---|---|---|---|---|
| TimesFM / Chronos-2 | 1 | 4 | 4 | 2 | 3 | 5 | 5 | 4.0 | 4.0 |
| TimesFM / Sundial | 2 | 5 | 5 | 1 | 2 | 2 | 2 | 2.0 | 4.0 |
| TimesFM / Chronos-Bolt | 5 | 6 | 6 | 6 | 4 | 6 | 2 | 6.0 | 4.0 |
| Chronos-2 / Sundial | 3 | 2 | 1 | 3 | 1 | 4 | 2 | 2.0 | 3.0 |
| Chronos-2 / Chronos-Bolt | 6 | 3 | 2 | 5 | 5 | 3 | 5 | 5.0 | 4.0 |
| Sundial / Chronos-Bolt | 4 | 1 | 3 | 4 | 6 | 1 | 5 | 4.0 | 5.0 |
Kendall's W (all measured metrics): 0.281 (p=0.0700, 7 metric(s)). Within representation metrics only: 0.530 (p=0.1379, 3 metric(s)). With only a handful of model pairs, Kendall's W has low power: a non-significant p does NOT mean the metrics agree, and a significant one should still be read alongside the per-metric rank table above, not instead of it.
Error agreement -- model x model. Whether the two models make similar per-series forecast errors (Spearman correlation of log MASE across series).
Best-layer CKA -- model x model. The most similar pair of layers' linear representational geometry: the max linear CKA over every layer-pair between the two models.
Stitching gain -- model x model. How much of one model's activations a linear probe trained on the other model's activations explains, beyond an input-feature baseline (both directions, averaged).
Cluster agreement (AMI) -- model x model. Whether the two models' activation clusters group the same series together (adjusted mutual information).
Atlas co-membership -- model x model. How often the two models' causally-ablated SAE features land in the same cross-model concept (shared causal effect profile), versus a model-label permutation null.
Input transfer -- model x model. Whether an atlas concept's top-firing series in one model are also grouped by the OTHER model's own SAE dictionary (shared input selectivity, both directions).
Shared concepts -- model x model. Count of cross-model concepts classed as sharing BOTH causal effect and input selectivity between the two models.
Part 5 — What causally drives the forecast
Corruption sensitivity and within-model activation patching, attention structure and head/MLP causality, and the seasonality circuit.
↑ contentsWhere each model's depth reacts to structured corruptions, and where clean activations causally restore corrupted forecasts.
Question
Where, causally, does each model actually carry a specific structural property of the data — and does damaging it there hurt the forecast?
How
Corrupts one structural property of the input at a time (trend, seasonality, added noise, and so on), measures how much each layer's activations shift because of it, then splices the clean, uncorrupted activations back into an otherwise-corrupted forward pass, one layer at a time, to see how much of the clean forecast that single splice restores.
Good vs. bad result
Good: a restoration curve that rises toward 1.0 at some depth for a given corruption — that layer causally carries the fix for that property — and two models whose sensitivity fingerprints peak at matching relative depths for the same corruption. Bad: a restoration curve that never clears a small fraction anywhere, or a corruption whose measured sensitivity is small only because it touches a tiny fraction of the input's timesteps in the first place, not because the model is robust to it.
What it cannot tell you
The activation-shift fingerprints are a magnitude-of-change measure by themselves, not a causal one — a layer can shift a lot without that shift ever affecting the final forecast, which is exactly why the patching curve exists alongside it. Even the patching curve is causal only *within* one model: this stage never transplants activations between models, so any cross-model comparison here is two separately-measured within-model curves side by side, never a joint causal test.
For each corruption (columns) and layer (rows), the relative change in that layer's activations between clean and corrupted input, averaged over series — a [depth x corruption] fingerprint of which structural property each model reacts to, and where.
How to read it
Brighter cells mean that layer's representation shifted more under that corruption. Reading down a column shows where in depth a given property (say, seasonality) gets encoded; reading across a row shows what a given layer is currently sensitive to. Two models with similar column shapes react to the same properties at similar relative depths, even if their absolute layer counts differ. The depth axis (named per panel above) places each layer within the model's *whole* stack, not just its captured layers, so a model with a real but uncaptured surface legitimately caps out partway up the axis rather than reaching 1.0, as Chronos-Bolt and TimesFM do in this run.
Limitations
This is a magnitude-of-change measure, not a causal one — a layer can shift a lot without that shift affecting the final forecast at all (see the behavioral-sensitivity bars and the activation-patching curve below for the causal follow-through). Different architectures normalize activations differently, so raw magnitudes are not directly comparable across models — only the column *shape* (where the peak is) should be compared.
One bar group per corruption, one bar per model pair — every pair in the run is shown and named, so a bar is never read as a statement about models it does not compare.
Each model's per-corruption fingerprint (the column above) is interpolated onto the depth range each pair of models actually shares (never extrapolated past either model's own span), and the two resulting depth profiles are Spearman rank-correlated — one number per corruption summarizing whether both models encode that property at matching relative depths. On this run's depth axis some pairs' spans only partly overlap (TimesFM vs Chronos-2: 95%; TimesFM vs Sundial: 95%; TimesFM vs Chronos-Bolt: 48%; Chronos-2 vs Chronos-Bolt: 45%; Sundial vs Chronos-Bolt: 45%); agreement is computed over that overlap only (never extrapolated across it), so the un-overlapped depth is excluded rather than invented.
How to read it
+1 means both models' sensitivity peaks at the same relative depth for that corruption; -1 means they peak at opposite ends; 0 means unrelated depth profiles. The lowest bar is called out in the findings as the most divergent corruption for each pair — the structural property that pair's architectures seem to handle at meaningfully different points in depth.
Limitations
Rank correlation over a coarse 33-point depth grid can be noisy for very shallow models (few layers to interpolate between), and says nothing about whether the property matters to the forecast at all — cross-reference with behavioral sensitivity below.
How much each corruption changes the final *forecast* (scaled mean absolute change), independent of any internals — the behavioral counterpart to the activation fingerprints above. Value labels are drawn on every bar specifically because this battery's corruptions are not strength-matched (next note) — a shared linear axis dominated by one outsized corruption can make every other bar look flat even when its own value is not small.
How to read it
Taller bars mean that corruption matters more to this model's output. A corruption with a tall activation fingerprint but a short bar here is being represented internally without much consequence for the forecast — an interesting mismatch worth checking against the patching curve below, which is the causal version of this same question. Read the printed value, not just bar height, before concluding a corruption 'does nothing.'
Limitations
Scale is in MASE-like units (MAE over each series' own naive scale), so it's comparable across families but reflects each corruption's configured strength as much as the model's intrinsic sensitivity — a fair cross-model comparison, not a fair cross-corruption one unless strengths were tuned to match. How unfair a given cross-corruption comparison is, is measured rather than described here: the breakdown table below gives each corruption's own input footprint and perturbation energy, which is what a bar's height should be read against. A corruption altering well under 1% of timesteps produces a small series-averaged value arithmetically, whatever the model does at the points it touched — the per-window patching heatmap further down is where such localized damage shows whether it is still causally recoverable. Dotted reference lines mark each sampling model's own repeat-run MASE noise floor (see the Overall metrics section above) -- a bar below its model's line is not distinguishable from repeat-run noise.
| corruption | model | input touched (%) | input energy | strength matched | forecast Δ | Δ lo | Δ hi | Δ in floor units | activation peak depth | peak Δact | mean Δact | depth agreement ρ | best restoration | restored at |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| level_shift | Chronos-2 | 38.237 | 85118.562 | False | 11.590 | 11.012 | 12.170 | no floor (deterministic) | 0.909 | 0.867 | 0.749 | 0.040 | 0.036 | encoder.block.0 |
| level_shift | Chronos-Bolt | 38.237 | 85118.562 | False | 11.524 | 10.966 | 12.104 | no floor (deterministic) | 0.364 | 0.701 | 0.663 | 0.040 | 0.060 | encoder.block.0 |
| level_shift | Sundial | 38.237 | 85118.562 | False | 10.765 | 10.231 | 11.323 | 60.9× | 0.455 | 0.828 | 0.795 | 0.040 | 0.054 | model.layers.0 |
| level_shift | TimesFM | 38.237 | 85118.562 | False | 11.426 | 10.860 | 12.003 | no floor (deterministic) | 0.000 | 0.312 | 0.194 | 0.040 | 0.058 | stacked_xf.8 |
| frequency_shift | Chronos-2 | 60.303 | 44380.930 | False | 2.795 | 2.574 | 3.028 | no floor (deterministic) | 0.909 | 1.186 | 1.130 | 0.222 | not patched | not patched |
| frequency_shift | Chronos-Bolt | 60.303 | 44380.930 | False | 2.576 | 2.384 | 2.773 | no floor (deterministic) | 0.364 | 1.021 | 0.927 | 0.222 | not patched | not patched |
| frequency_shift | Sundial | 60.303 | 44380.930 | False | 2.829 | 2.618 | 3.057 | 16.0× | 0.455 | 1.184 | 1.086 | 0.222 | not patched | not patched |
| frequency_shift | TimesFM | 60.303 | 44380.930 | False | 2.703 | 2.495 | 2.920 | no floor (deterministic) | 0.000 | 1.040 | 0.583 | 0.222 | not patched | not patched |
| deseasonalize | Chronos-2 | 49.920 | 6126.171 | False | 2.389 | 2.195 | 2.602 | no floor (deterministic) | 0.909 | 0.787 | 0.637 | 0.259 | 0.051 | encoder.block.4 |
| deseasonalize | Chronos-Bolt | 49.920 | 6126.171 | False | 2.146 | 1.982 | 2.326 | no floor (deterministic) | 0.364 | 0.580 | 0.519 | 0.259 | 0.030 | encoder.block.4 |
| deseasonalize | Sundial | 49.920 | 6126.171 | False | 2.103 | 1.940 | 2.277 | 11.9× | 0.818 | 0.765 | 0.677 | 0.259 | 0.022 | model.layers.10 |
| deseasonalize | TimesFM | 49.920 | 6126.171 | False | 2.186 | 1.998 | 2.396 | no floor (deterministic) | 0.000 | 0.538 | 0.393 | 0.259 | 0.083 | stacked_xf.8 |
| detrend | Chronos-2 | 19.398 | 948.467 | False | 1.891 | 1.662 | 2.121 | no floor (deterministic) | 0.909 | 0.292 | 0.211 | 0.330 | not patched | not patched |
| detrend | Chronos-Bolt | 19.398 | 948.467 | False | 1.795 | 1.579 | 2.018 | no floor (deterministic) | 0.364 | 0.212 | 0.184 | 0.330 | not patched | not patched |
| detrend | Sundial | 19.398 | 948.467 | False | 1.533 | 1.356 | 1.718 | 8.7× | 0.818 | 0.263 | 0.228 | 0.330 | not patched | not patched |
| detrend | TimesFM | 19.398 | 948.467 | False | 1.719 | 1.509 | 1.948 | no floor (deterministic) | 0.947 | 0.126 | 0.105 | 0.330 | not patched | not patched |
| warp | Chronos-2 | 46.519 | 27093.529 | False | 1.563 | 1.411 | 1.720 | no floor (deterministic) | 0.909 | 0.778 | 0.689 | -0.640 | 0.065 | encoder.block.2 |
| warp | Chronos-Bolt | 46.519 | 27093.529 | False | 1.565 | 1.425 | 1.699 | no floor (deterministic) | 0.273 | 0.529 | 0.502 | -0.640 | 0.009 | encoder.block.4 |
| warp | Sundial | 46.519 | 27093.529 | False | 1.461 | 1.338 | 1.590 | 8.3× | 0.818 | 0.710 | 0.646 | -0.640 | 0.089 | model.layers.0 |
| warp | TimesFM | 46.519 | 27093.529 | False | 1.506 | 1.370 | 1.647 | no floor (deterministic) | 0.000 | 0.901 | 0.407 | -0.640 | 0.026 | stacked_xf.12 |
| noise | Chronos-2 | 60.660 | 22732.613 | False | 1.245 | 1.115 | 1.387 | no floor (deterministic) | 0.909 | 0.825 | 0.752 | -0.738 | 0.049 | encoder.block.10 |
| noise | Chronos-Bolt | 60.660 | 22732.613 | False | 1.343 | 1.220 | 1.477 | no floor (deterministic) | 0.091 | 0.672 | 0.629 | -0.738 | 0.056 | encoder.block.4 |
| noise | Sundial | 60.660 | 22732.613 | False | 1.382 | 1.279 | 1.498 | 7.8× | 0.727 | 0.920 | 0.853 | -0.738 | 0.085 | model.layers.6 |
| noise | TimesFM | 60.660 | 22732.613 | False | 1.180 | 1.085 | 1.290 | no floor (deterministic) | 0.000 | 0.982 | 0.484 | -0.738 | 0.021 | stacked_xf.12 |
| smooth | Chronos-2 | 22.232 | 10737.406 | False | 0.905 | 0.841 | 0.967 | no floor (deterministic) | 0.909 | 0.740 | 0.600 | -0.418 | not patched | not patched |
| smooth | Chronos-Bolt | 22.232 | 10737.406 | False | 1.034 | 0.960 | 1.110 | no floor (deterministic) | 0.273 | 0.484 | 0.449 | -0.418 | not patched | not patched |
| smooth | Sundial | 22.232 | 10737.406 | False | 1.079 | 0.990 | 1.170 | 6.1× | 0.818 | 0.840 | 0.743 | -0.418 | not patched | not patched |
| smooth | TimesFM | 22.232 | 10737.406 | False | 1.006 | 0.920 | 1.104 | no floor (deterministic) | 0.000 | 0.539 | 0.352 | -0.418 | not patched | not patched |
| spike | Chronos-2 | 1.526 | 36907.762 | False | 0.490 | 0.429 | 0.562 | no floor (deterministic) | 0.909 | 0.608 | 0.552 | -0.787 | -0.055 | encoder.block.10 |
| spike | Chronos-Bolt | 1.526 | 36907.762 | False | 0.818 | 0.743 | 0.901 | no floor (deterministic) | 0.364 | 0.601 | 0.549 | -0.787 | -0.082 | encoder.block.2 |
| spike | Sundial | 1.526 | 36907.762 | False | 0.942 | 0.863 | 1.026 | 5.3× | 1.000 | 0.835 | 0.739 | -0.787 | 0.035 | model.layers.2 |
| spike | TimesFM | 1.526 | 36907.762 | False | 0.812 | 0.721 | 0.919 | no floor (deterministic) | 0.000 | 0.803 | 0.406 | -0.787 | -0.048 | stacked_xf.4 |
| dropout | Chronos-2 | 8.126 | 2884.297 | False | 0.755 | 0.669 | 0.840 | no floor (deterministic) | 0.818 | 0.621 | 0.465 | 0.498 | 0.013 | encoder.block.2 |
| dropout | Chronos-Bolt | 8.126 | 2884.297 | False | 0.699 | 0.634 | 0.770 | no floor (deterministic) | 0.455 | 0.328 | 0.263 | 0.498 | 0.036 | encoder.block.4 |
| dropout | Sundial | 8.126 | 2884.297 | False | 0.821 | 0.754 | 0.893 | 4.6× | 0.818 | 0.500 | 0.389 | 0.498 | 0.047 | model.layers.2 |
| dropout | TimesFM | 8.126 | 2884.297 | False | 0.784 | 0.694 | 0.881 | no floor (deterministic) | 0.000 | 0.242 | 0.205 | 0.498 | 0.057 | stacked_xf.12 |
Every corruption in this run's battery, per model: how much of the input it altered and with how much energy, how far the forecast moved, where the activations moved most, whether the two models moved at comparable depths, and how much of the damage patching recovered.
How to read it
Read input touched (%) and input energy first — they are properties of the corruption, identical for every model, and they set the scale a response should be read against. A corruption altering under 1% of timesteps produces a small series-averaged forecast Δ arithmetically, whatever the model does at the points it touched. Δ in floor units divides the response by that model's own repeat-run variation, so a value near 1 is not distinguishable from the model's own noise; a model with no sampling in its forecast path has a zero floor and is labelled rather than divided by. Rows are ordered by the model-averaged forecast Δ, so the top row is this battery's strongest corruption as measured on these models, not as expected.
Limitationsstrength matched is False for every row unless l3.calibrate: input_energy was set, and it is the column that decides whether comparing two rows is fair. Comparing two models within a row is fair either way — they received the same corrupted input. Activation magnitudes are not comparable across architectures (different normalization), so peak Δact/mean Δact should be compared down a model's own column and by peak location across models, not by value. best restoration is present only for the corruptions l3.patching.corruptions selected; every other row says so in the cell rather than leaving it blank, because a corruption nobody patched and a corruption whose patch recovered nothing are different findings.
One panel per corruption, every model overlaid on a shared restoration scale — so a model's depth profile is read down a single panel, and two corruptions are compared by putting their panels side by side. Clicking a model in the legend hides it in every panel at once.
At each layer, clean (uncorrupted) token states are spliced into an otherwise-corrupted forward pass, one alignment window at a time, and each patched forecast is scored against how much of the clean-vs-corrupted forecast gap that single window's worth of clean state restored. The curve is the average restoration across all windows at that layer — a genuinely localized causal probe of where the corrupted property's effect on the *forecast* is carried.
How to read it
1.0 means patching that layer (on average, one window at a time) fully restores the clean forecast; 0 means no effect; negative means patching that window actively made the corrupted forecast worse (a real and informative outcome, not an error — it means that window's clean state is actively misleading once the rest of the context is still corrupted). A curve that rises with depth suggests the corruption's effect on the output is increasingly concentrated in later layers' local token states; a flat curve near 0 suggests the damage isn't carried locally at all (check the per-window heatmaps below for exactly where it lives instead).
Limitations
Deliberately NOT a whole-context (every position at once) patch: overwriting an entire layer's complete state is mathematically guaranteed to reach exactly 100% restoration at every layer in any purely sequential residual architecture (nothing about the input survives past a fully-overwritten layer), which tests wiring, not depth. Window-local patching avoids that ceiling, but values from different corruptions aren't on a shared physical scale (each is normalized by its own clean-vs-corrupted damage) — compare shapes/crossovers within a corruption, not raw levels across corruptions. Unlike the ΔMASE figures elsewhere in this report, these values are NOT expressed in repeat-run-noise-floor units: restoration is already normalized by each corruption's own damage, and that denominator is not stored in MASE units, so the conversion would need a change to the L3 stage itself rather than to this chart. Read a near-zero restoration as "not localized here", not as "below the noise floor".
Where in both depth and time each corruption's effect on TimesFM's forecast is causally carried: one grid per corruption, brighter = patching that one (layer, window) cell recovered more.
The full [depth x time-window] grid the curve above averages over: each cell patches only that layer's tokens belonging to that one time window, so this is where in *both* depth and time a corruption's effect on the forecast is causally concentrated.
How to read it
A bright cell means restoring just that (layer, window) recovered most of the clean forecast — the corrupted property's effect on the output is concentrated there. A hot column at a late window (near forecast start) usually just reflects recency — the model naturally weights recent context more — rather than anything specific to the corruption.
Limitations
Every window is scored against the *same* full-context damage denominator (so cells are additive/comparable within one corruption's grid), but that also means a model with many small-effect windows and one with a single dominant window can show similar curve-level averages above for very different reasons — always check the grid, not just the averaged curve.
Where in both depth and time each corruption's effect on Chronos-2's forecast is causally carried: one grid per corruption, brighter = patching that one (layer, window) cell recovered more.
Where in both depth and time each corruption's effect on Sundial's forecast is causally carried: one grid per corruption, brighter = patching that one (layer, window) cell recovered more.
Where in both depth and time each corruption's effect on Chronos-Bolt's forecast is causally carried: one grid per corruption, brighter = patching that one (layer, window) cell recovered more.
| corruption | TimesFM | Chronos-2 | Sundial | Chronos-Bolt |
|---|---|---|---|---|
| deseasonalize | differs (0.42 → 0.21) | same depth (0.18) | differs (0.91 → 0.18) | differs (0.36 → 0.00) |
| noise | same depth (0.00) | differs (0.91 → 0.36) | differs (0.18 → 0.00) | same depth (0.36) |
| level_shift | differs (0.63 → 0.42) | same depth (0.00) | same depth (0.00) | same depth (0.00) |
| spike | differs (0.00 → 0.21) | same depth (0.91) | differs (0.36 → 0.18) | same depth (0.36) |
| warp | differs (0.00 → 0.42) | differs (0.36 → 0.18) | same depth (0.00) | same depth (0.36) |
| dropout | differs (0.84 → 0.63) | differs (0.73 → 0.18) | differs (0.91 → 0.00) | differs (0.36 → 0.00) |
For each corruption, whether the layer that best repairs the first forecast step is the same layer that best repairs the last one. Depths are on each model's own relative-depth axis.
The same restoration, resolved by how far ahead the forecast step is rather than collapsed over the horizon, for TimesFM.
The same window-averaged restoration curve above, resolved by forecast horizon step instead of collapsed over it: each cell asks how much of the clean-vs-corrupted gap AT THAT specific forecast step (not the whole horizon on average) patching that layer restored.
How to read it
A cell that fades toward the right (later horizon steps) means that layer's causal contribution to restoring the corruption's damage is concentrated in the near-term part of the forecast; a flat row means the layer's causal role is uniform across the whole forecast horizon.
Limitations
Uses the exact per-window-averaged restoration already computed for the depth curve above — no new forward passes — so it inherits the same per-corruption normalization caveat: compare shapes within one corruption's row, not raw levels across corruptions.
The same restoration, resolved by how far ahead the forecast step is rather than collapsed over the horizon, for Chronos-2.
The same restoration, resolved by how far ahead the forecast step is rather than collapsed over the horizon, for Sundial.
The same restoration, resolved by how far ahead the forecast step is rather than collapsed over the horizon, for Chronos-Bolt.
A concrete, single-series version of the aggregate patching curves above: for one series, the clean context and the corrupted context it produced, its own clean / corrupted / patched forecasts under every corruption that was patched, and its own restoration grid at the corruption that damaged it most.
How to read it
The patched forecast at each corruption uses the single (layer, window) cell that restored the most on average across the whole sampled batch — named in the table as patch_layer / patch_window — not this series' own best cell, which the table gives separately as own_best_layer / own_best_window. Where the two differ, the plotted patch is not the best available for this series, and recovered_frac is correspondingly lower than own_best_restoration. A negative recovered_frac means patching moved the forecast further from the clean one than the corruption did. The context traces are plotted on the same time axis as the forecasts but before step 0 — the corrupted context is what the model actually read before producing the forecast from corrupted input trace; the clean context is what it read for the other two forecasts. Each panel supports the usual Plotly affordances (drag to zoom into a region, double-click to reset, camera icon to save an image) via the toolbar in its top-right corner — the same detail-on-demand the SAE exemplar panels give through their click-to-enlarge modal, adapted to a multi-panel figure that already draws every corruption at once.
Limitations
These series are a family-stratified sample of the patched batch, not a typical or a worst case: useful for making the aggregate curves concrete and for checking that the patch mechanism does what the aggregate says, not for estimating how often any pattern here occurs. All quantities are scaled by each series' own naive-forecast error, so they are comparable across series of different amplitude.
| corruption | damage | recovered_frac | mase_clean | mase_naive | beats_naive | mase_corrupted | mase_patched | patch_layer | patch_window | own_best_restoration | own_best_layer | own_best_window |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| deseasonalize | 0.829 | 0.684 | 2.023 | 1.767 | False | 1.642 | 1.920 | stacked_xf.16 | 15 | 0.984 | stacked_xf.16 | 15 |
| noise | 0.335 | -0.103 | 2.023 | 1.767 | False | 2.083 | 2.098 | stacked_xf.16 | 13 | 0.993 | stacked_xf.16 | 15 |
| level_shift | 6.364 | 0.280 | 2.023 | 1.767 | False | 7.760 | 5.978 | stacked_xf.0 | 15 | 0.979 | stacked_xf.16 | 15 |
| spike | 0.391 | -0.351 | 2.023 | 1.767 | False | 1.689 | 1.646 | stacked_xf.0 | 2 | 0.978 | stacked_xf.16 | 15 |
| warp | 0.462 | 0.555 | 2.023 | 1.767 | False | 2.124 | 2.190 | stacked_xf.12 | 13 | 0.981 | stacked_xf.16 | 13 |
| dropout | 0.051 | -0.798 | 2.023 | 1.767 | False | 2.019 | 2.054 | stacked_xf.4 | 5 | 0.998 | stacked_xf.12 | 13 |
Every patched corruption for series d54b542c0edbac49 under TimesFM, in units of this series' own naive-forecast error. On this series TimesFM's clean forecast does not beat a flat line (2.02 against 1.77 for holding the last observed value, same units). That is a property of the series, not of the corruption experiment: with nothing periodic in the context to extrapolate, the best available response is a level estimate, which is why the clean, corrupted and patched traces all look flat and all sit close together. Read the clean-vs-corrupted gap on this panel; the clean-vs-truth gap is a ceiling every model in this run hits.
Series d54b542c0edbac49 under TimesFM: one panel per patched corruption. Before step 0, the clean context and the corrupted context it produced — the last 64 steps shown by default for most corruptions, since that keeps them readable; spike and dropout touch only a small, randomly-located span of the full context, so those two default to a wider view with that span shaded and labelled corrupted span so it isn't missed. The full context is plotted underneath every panel either way — use the autoscale button in the toolbar (top-right of the figure) to zoom out and see all of it, on any corruption; after it, the clean forecast, the corrupted one, and the one recovered by patching. Each panel is patched at the single layer×window cell that restored the most on average across the whole batch — the patch_layer/patch_window pair in the table above, not this series' own best cell, which the table gives separately as own_best_layer. The context and forecast of the same condition share a color (clean = blue, corrupted = orange), so each pair reads as one continuous line across the divider; the gap between true continuation and forecast from clean input is this model's ordinary forecast error on this series, which the corruption experiment neither creates nor removes — the quantity under study is the gap between the clean and corrupted forecasts. Legend clicks apply to every panel; use the toolbar in the top-right of the figure to zoom into any region.
Series d54b542c0edbac49, level_shift (the corruption that damaged this series most under TimesFM): how much patching each single layer×window cell recovered, for this series alone.
| corruption | damage | recovered_frac | mase_clean | mase_naive | beats_naive | mase_corrupted | mase_patched | patch_layer | patch_window | own_best_restoration | own_best_layer | own_best_window |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| deseasonalize | 2.304 | -0.163 | 0.546 | 5.016 | True | 2.561 | 3.003 | stacked_xf.16 | 15 | 0.899 | stacked_xf.12 | 13 |
| noise | 0.575 | 0.059 | 0.546 | 5.016 | True | 0.899 | 0.758 | stacked_xf.16 | 13 | 0.969 | stacked_xf.0 | 15 |
| level_shift | 11.329 | 0.621 | 0.546 | 5.016 | True | 11.443 | 4.403 | stacked_xf.0 | 15 | 0.979 | stacked_xf.0 | 15 |
| spike | 0.555 | 0.000 | 0.546 | 5.016 | True | 0.945 | 0.945 | stacked_xf.0 | 2 | 0.953 | stacked_xf.4 | 11 |
| warp | 3.168 | 0.025 | 0.546 | 5.016 | True | 3.392 | 3.316 | stacked_xf.12 | 13 | 0.802 | stacked_xf.16 | 15 |
| dropout | 0.153 | 0.113 | 0.546 | 5.016 | True | 0.581 | 0.550 | stacked_xf.4 | 5 | 0.994 | stacked_xf.4 | 13 |
Every patched corruption for series c334536c37301114 under TimesFM, in units of this series' own naive-forecast error.
Series c334536c37301114 under TimesFM: one panel per patched corruption. Before step 0, the clean context and the corrupted context it produced — the last 64 steps shown by default for most corruptions, since that keeps them readable; spike and dropout touch only a small, randomly-located span of the full context, so those two default to a wider view with that span shaded and labelled corrupted span so it isn't missed. The full context is plotted underneath every panel either way — use the autoscale button in the toolbar (top-right of the figure) to zoom out and see all of it, on any corruption; after it, the clean forecast, the corrupted one, and the one recovered by patching. Each panel is patched at the single layer×window cell that restored the most on average across the whole batch — the patch_layer/patch_window pair in the table above, not this series' own best cell, which the table gives separately as own_best_layer. The context and forecast of the same condition share a color (clean = blue, corrupted = orange), so each pair reads as one continuous line across the divider; the gap between true continuation and forecast from clean input is this model's ordinary forecast error on this series, which the corruption experiment neither creates nor removes — the quantity under study is the gap between the clean and corrupted forecasts. Legend clicks apply to every panel; use the toolbar in the top-right of the figure to zoom into any region.
Series c334536c37301114, level_shift (the corruption that damaged this series most under TimesFM): how much patching each single layer×window cell recovered, for this series alone.
| corruption | damage | recovered_frac | mase_clean | mase_naive | beats_naive | mase_corrupted | mase_patched | patch_layer | patch_window | own_best_restoration | own_best_layer | own_best_window |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| deseasonalize | 0.214 | -0.360 | 1.787 | 1.767 | False | 1.687 | 1.670 | encoder.block.0 | 9 | 0.992 | encoder.block.10 | 15 |
| noise | 0.347 | 0.037 | 1.787 | 1.767 | False | 1.888 | 1.911 | encoder.block.0 | 10 | 0.981 | encoder.block.4 | 8 |
| level_shift | 6.771 | 0.127 | 1.787 | 1.767 | False | 7.655 | 6.793 | encoder.block.0 | 15 | 0.983 | encoder.block.0 | 13 |
| spike | 0.236 | -0.114 | 1.787 | 1.767 | False | 1.909 | 1.906 | encoder.block.6 | 6 | 0.983 | encoder.block.0 | 2 |
| warp | 0.310 | -0.008 | 1.787 | 1.767 | False | 2.091 | 2.098 | encoder.block.0 | 2 | 0.986 | encoder.block.6 | 15 |
| dropout | 0.085 | -1.271 | 1.787 | 1.767 | False | 1.796 | 1.778 | encoder.block.2 | 5 | 0.993 | encoder.block.0 | 1 |
Every patched corruption for series d54b542c0edbac49 under Chronos-2, in units of this series' own naive-forecast error. On this series Chronos-2's clean forecast does not beat a flat line (1.79 against 1.77 for holding the last observed value, same units). That is a property of the series, not of the corruption experiment: with nothing periodic in the context to extrapolate, the best available response is a level estimate, which is why the clean, corrupted and patched traces all look flat and all sit close together. Read the clean-vs-corrupted gap on this panel; the clean-vs-truth gap is a ceiling every model in this run hits.
Series d54b542c0edbac49 under Chronos-2: one panel per patched corruption. Before step 0, the clean context and the corrupted context it produced — the last 64 steps shown by default for most corruptions, since that keeps them readable; spike and dropout touch only a small, randomly-located span of the full context, so those two default to a wider view with that span shaded and labelled corrupted span so it isn't missed. The full context is plotted underneath every panel either way — use the autoscale button in the toolbar (top-right of the figure) to zoom out and see all of it, on any corruption; after it, the clean forecast, the corrupted one, and the one recovered by patching. Each panel is patched at the single layer×window cell that restored the most on average across the whole batch — the patch_layer/patch_window pair in the table above, not this series' own best cell, which the table gives separately as own_best_layer. The context and forecast of the same condition share a color (clean = blue, corrupted = orange), so each pair reads as one continuous line across the divider; the gap between true continuation and forecast from clean input is this model's ordinary forecast error on this series, which the corruption experiment neither creates nor removes — the quantity under study is the gap between the clean and corrupted forecasts. Legend clicks apply to every panel; use the toolbar in the top-right of the figure to zoom into any region.
Series d54b542c0edbac49, level_shift (the corruption that damaged this series most under Chronos-2): how much patching each single layer×window cell recovered, for this series alone.
| corruption | damage | recovered_frac | mase_clean | mase_naive | beats_naive | mase_corrupted | mase_patched | patch_layer | patch_window | own_best_restoration | own_best_layer | own_best_window |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| deseasonalize | 1.743 | -0.107 | 0.532 | 5.016 | True | 2.002 | 2.195 | encoder.block.0 | 9 | 0.917 | encoder.block.6 | 14 |
| noise | 0.657 | 0.209 | 0.532 | 5.016 | True | 0.830 | 0.679 | encoder.block.0 | 10 | 0.957 | encoder.block.0 | 10 |
| level_shift | 10.897 | 0.508 | 0.532 | 5.016 | True | 11.070 | 5.530 | encoder.block.0 | 15 | 0.976 | encoder.block.0 | 15 |
| spike | 0.175 | -0.232 | 0.532 | 5.016 | True | 0.487 | 0.530 | encoder.block.6 | 6 | 0.970 | encoder.block.4 | 2 |
| warp | 3.283 | -0.030 | 0.532 | 5.016 | True | 3.477 | 3.581 | encoder.block.0 | 2 | 0.748 | encoder.block.2 | 6 |
| dropout | 0.110 | 0.379 | 0.532 | 5.016 | True | 0.502 | 0.532 | encoder.block.2 | 5 | 0.990 | encoder.block.0 | 5 |
Every patched corruption for series c334536c37301114 under Chronos-2, in units of this series' own naive-forecast error.
Series c334536c37301114 under Chronos-2: one panel per patched corruption. Before step 0, the clean context and the corrupted context it produced — the last 64 steps shown by default for most corruptions, since that keeps them readable; spike and dropout touch only a small, randomly-located span of the full context, so those two default to a wider view with that span shaded and labelled corrupted span so it isn't missed. The full context is plotted underneath every panel either way — use the autoscale button in the toolbar (top-right of the figure) to zoom out and see all of it, on any corruption; after it, the clean forecast, the corrupted one, and the one recovered by patching. Each panel is patched at the single layer×window cell that restored the most on average across the whole batch — the patch_layer/patch_window pair in the table above, not this series' own best cell, which the table gives separately as own_best_layer. The context and forecast of the same condition share a color (clean = blue, corrupted = orange), so each pair reads as one continuous line across the divider; the gap between true continuation and forecast from clean input is this model's ordinary forecast error on this series, which the corruption experiment neither creates nor removes — the quantity under study is the gap between the clean and corrupted forecasts. Legend clicks apply to every panel; use the toolbar in the top-right of the figure to zoom into any region.
Series c334536c37301114, level_shift (the corruption that damaged this series most under Chronos-2): how much patching each single layer×window cell recovered, for this series alone.
| corruption | damage | recovered_frac | mase_clean | mase_naive | beats_naive | mase_corrupted | mase_patched | patch_layer | patch_window | own_best_restoration | own_best_layer | own_best_window |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| deseasonalize | 0.286 | -0.413 | 1.955 | 1.767 | False | 1.719 | 1.762 | model.layers.10 | 15 | 0.995 | model.layers.10 | 15 |
| noise | 0.768 | 0.392 | 1.955 | 1.767 | False | 1.820 | 1.870 | model.layers.2 | 15 | 0.987 | model.layers.8 | 15 |
| level_shift | 5.847 | 0.475 | 1.955 | 1.767 | False | 6.773 | 3.995 | model.layers.8 | 15 | 0.982 | model.layers.10 | 15 |
| spike | 0.258 | -0.438 | 1.955 | 1.767 | False | 1.922 | 1.822 | model.layers.2 | 6 | 0.987 | model.layers.0 | 2 |
| warp | 0.215 | -1.457 | 1.955 | 1.767 | False | 2.047 | 1.734 | model.layers.10 | 15 | 0.988 | model.layers.10 | 15 |
| dropout | 0.141 | -2.113 | 1.955 | 1.767 | False | 1.831 | 1.737 | model.layers.6 | 15 | 0.993 | model.layers.10 | 15 |
Every patched corruption for series d54b542c0edbac49 under Sundial, in units of this series' own naive-forecast error. On this series Sundial's clean forecast does not beat a flat line (1.95 against 1.77 for holding the last observed value, same units). That is a property of the series, not of the corruption experiment: with nothing periodic in the context to extrapolate, the best available response is a level estimate, which is why the clean, corrupted and patched traces all look flat and all sit close together. Read the clean-vs-corrupted gap on this panel; the clean-vs-truth gap is a ceiling every model in this run hits.
Series d54b542c0edbac49 under Sundial: one panel per patched corruption. Before step 0, the clean context and the corrupted context it produced — the last 64 steps shown by default for most corruptions, since that keeps them readable; spike and dropout touch only a small, randomly-located span of the full context, so those two default to a wider view with that span shaded and labelled corrupted span so it isn't missed. The full context is plotted underneath every panel either way — use the autoscale button in the toolbar (top-right of the figure) to zoom out and see all of it, on any corruption; after it, the clean forecast, the corrupted one, and the one recovered by patching. Each panel is patched at the single layer×window cell that restored the most on average across the whole batch — the patch_layer/patch_window pair in the table above, not this series' own best cell, which the table gives separately as own_best_layer. The context and forecast of the same condition share a color (clean = blue, corrupted = orange), so each pair reads as one continuous line across the divider; the gap between true continuation and forecast from clean input is this model's ordinary forecast error on this series, which the corruption experiment neither creates nor removes — the quantity under study is the gap between the clean and corrupted forecasts. Legend clicks apply to every panel; use the toolbar in the top-right of the figure to zoom into any region.
Series d54b542c0edbac49, level_shift (the corruption that damaged this series most under Sundial): how much patching each single layer×window cell recovered, for this series alone.
| corruption | damage | recovered_frac | mase_clean | mase_naive | beats_naive | mase_corrupted | mase_patched | patch_layer | patch_window | own_best_restoration | own_best_layer | own_best_window |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| deseasonalize | 1.913 | 0.285 | 0.623 | 5.016 | True | 2.417 | 1.868 | model.layers.10 | 15 | 0.873 | model.layers.10 | 15 |
| noise | 0.696 | -0.082 | 0.623 | 5.016 | True | 1.213 | 1.113 | model.layers.2 | 15 | 0.976 | model.layers.0 | 6 |
| level_shift | 9.580 | 0.576 | 0.623 | 5.016 | True | 9.939 | 4.424 | model.layers.8 | 15 | 0.984 | model.layers.2 | 15 |
| spike | 0.621 | -0.027 | 0.623 | 5.016 | True | 1.098 | 1.066 | model.layers.2 | 6 | 0.977 | model.layers.0 | 11 |
| warp | 2.925 | 0.849 | 0.623 | 5.016 | True | 3.387 | 0.951 | model.layers.10 | 15 | 0.960 | model.layers.10 | 15 |
| dropout | 0.162 | -0.493 | 0.623 | 5.016 | True | 0.709 | 0.735 | model.layers.6 | 15 | 0.981 | model.layers.2 | 13 |
Every patched corruption for series c334536c37301114 under Sundial, in units of this series' own naive-forecast error.
Series c334536c37301114 under Sundial: one panel per patched corruption. Before step 0, the clean context and the corrupted context it produced — the last 64 steps shown by default for most corruptions, since that keeps them readable; spike and dropout touch only a small, randomly-located span of the full context, so those two default to a wider view with that span shaded and labelled corrupted span so it isn't missed. The full context is plotted underneath every panel either way — use the autoscale button in the toolbar (top-right of the figure) to zoom out and see all of it, on any corruption; after it, the clean forecast, the corrupted one, and the one recovered by patching. Each panel is patched at the single layer×window cell that restored the most on average across the whole batch — the patch_layer/patch_window pair in the table above, not this series' own best cell, which the table gives separately as own_best_layer. The context and forecast of the same condition share a color (clean = blue, corrupted = orange), so each pair reads as one continuous line across the divider; the gap between true continuation and forecast from clean input is this model's ordinary forecast error on this series, which the corruption experiment neither creates nor removes — the quantity under study is the gap between the clean and corrupted forecasts. Legend clicks apply to every panel; use the toolbar in the top-right of the figure to zoom into any region.
Series c334536c37301114, level_shift (the corruption that damaged this series most under Sundial): how much patching each single layer×window cell recovered, for this series alone.
| corruption | damage | recovered_frac | mase_clean | mase_naive | beats_naive | mase_corrupted | mase_patched | patch_layer | patch_window | own_best_restoration | own_best_layer | own_best_window |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| deseasonalize | 0.207 | -0.239 | 1.870 | 1.767 | False | 1.696 | 1.841 | encoder.block.4 | 15 | 0.991 | encoder.block.4 | 8 |
| noise | 0.603 | -0.563 | 1.870 | 1.767 | False | 1.871 | 2.230 | encoder.block.0 | 15 | 0.975 | encoder.block.0 | 14 |
| level_shift | 6.712 | 0.208 | 1.870 | 1.767 | False | 7.547 | 6.150 | encoder.block.0 | 15 | 0.972 | encoder.block.0 | 13 |
| spike | 0.572 | -0.119 | 1.870 | 1.767 | False | 1.940 | 1.938 | encoder.block.0 | 14 | 0.906 | encoder.block.2 | 4 |
| warp | 0.575 | -0.011 | 1.870 | 1.767 | False | 2.324 | 2.360 | encoder.block.0 | 11 | 0.955 | encoder.block.4 | 15 |
| dropout | 0.376 | -0.007 | 1.870 | 1.767 | False | 1.940 | 1.939 | encoder.block.0 | 9 | 0.976 | encoder.block.0 | 1 |
Every patched corruption for series d54b542c0edbac49 under Chronos-Bolt, in units of this series' own naive-forecast error. On this series Chronos-Bolt's clean forecast does not beat a flat line (1.87 against 1.77 for holding the last observed value, same units). That is a property of the series, not of the corruption experiment: with nothing periodic in the context to extrapolate, the best available response is a level estimate, which is why the clean, corrupted and patched traces all look flat and all sit close together. Read the clean-vs-corrupted gap on this panel; the clean-vs-truth gap is a ceiling every model in this run hits.
Series d54b542c0edbac49 under Chronos-Bolt: one panel per patched corruption. Before step 0, the clean context and the corrupted context it produced — the last 64 steps shown by default for most corruptions, since that keeps them readable; spike and dropout touch only a small, randomly-located span of the full context, so those two default to a wider view with that span shaded and labelled corrupted span so it isn't missed. The full context is plotted underneath every panel either way — use the autoscale button in the toolbar (top-right of the figure) to zoom out and see all of it, on any corruption; after it, the clean forecast, the corrupted one, and the one recovered by patching. Each panel is patched at the single layer×window cell that restored the most on average across the whole batch — the patch_layer/patch_window pair in the table above, not this series' own best cell, which the table gives separately as own_best_layer. The context and forecast of the same condition share a color (clean = blue, corrupted = orange), so each pair reads as one continuous line across the divider; the gap between true continuation and forecast from clean input is this model's ordinary forecast error on this series, which the corruption experiment neither creates nor removes — the quantity under study is the gap between the clean and corrupted forecasts. Legend clicks apply to every panel; use the toolbar in the top-right of the figure to zoom into any region.
Series d54b542c0edbac49, level_shift (the corruption that damaged this series most under Chronos-Bolt): how much patching each single layer×window cell recovered, for this series alone.
| corruption | damage | recovered_frac | mase_clean | mase_naive | beats_naive | mase_corrupted | mase_patched | patch_layer | patch_window | own_best_restoration | own_best_layer | own_best_window |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| deseasonalize | 2.011 | 0.038 | 0.620 | 5.016 | True | 2.325 | 2.246 | encoder.block.4 | 15 | 0.918 | encoder.block.4 | 12 |
| noise | 0.543 | 0.181 | 0.620 | 5.016 | True | 0.921 | 0.793 | encoder.block.0 | 15 | 0.982 | encoder.block.0 | 6 |
| level_shift | 10.998 | 0.583 | 0.620 | 5.016 | True | 11.144 | 4.731 | encoder.block.0 | 15 | 0.977 | encoder.block.0 | 15 |
| spike | 0.565 | 0.385 | 0.620 | 5.016 | True | 0.844 | 0.692 | encoder.block.0 | 14 | 0.941 | encoder.block.2 | 11 |
| warp | 4.255 | -0.028 | 0.620 | 5.016 | True | 4.453 | 4.592 | encoder.block.0 | 11 | 0.742 | encoder.block.4 | 6 |
| dropout | 0.164 | 0.009 | 0.620 | 5.016 | True | 0.645 | 0.642 | encoder.block.0 | 9 | 0.991 | encoder.block.2 | 13 |
Every patched corruption for series c334536c37301114 under Chronos-Bolt, in units of this series' own naive-forecast error.
Series c334536c37301114 under Chronos-Bolt: one panel per patched corruption. Before step 0, the clean context and the corrupted context it produced — the last 64 steps shown by default for most corruptions, since that keeps them readable; spike and dropout touch only a small, randomly-located span of the full context, so those two default to a wider view with that span shaded and labelled corrupted span so it isn't missed. The full context is plotted underneath every panel either way — use the autoscale button in the toolbar (top-right of the figure) to zoom out and see all of it, on any corruption; after it, the clean forecast, the corrupted one, and the one recovered by patching. Each panel is patched at the single layer×window cell that restored the most on average across the whole batch — the patch_layer/patch_window pair in the table above, not this series' own best cell, which the table gives separately as own_best_layer. The context and forecast of the same condition share a color (clean = blue, corrupted = orange), so each pair reads as one continuous line across the divider; the gap between true continuation and forecast from clean input is this model's ordinary forecast error on this series, which the corruption experiment neither creates nor removes — the quantity under study is the gap between the clean and corrupted forecasts. Legend clicks apply to every panel; use the toolbar in the top-right of the figure to zoom into any region.
Series c334536c37301114, level_shift (the corruption that damaged this series most under Chronos-Bolt): how much patching each single layer×window cell recovered, for this series alone.
Where heads look as a function of temporal lag, which heads carry seasonal structure, and which heads and MLP blocks forecasts causally depend on.
Question
Which attention heads look where in time, and which of them (or which MLP blocks) actually matter to the forecast?
How
Averages each head's attention weight as a function of how far back in time it looks, flags heads whose attention concentrates near seasonal-period multiples, and separately re-runs the forecast with individual heads or MLP blocks zeroed out to see how much accuracy degrades.
Good vs. bad result
Good: a head with a clean, repeating attention stripe at a real seasonal lag (a periodicity head) whose removal via ablation measurably hurts accuracy on exactly that kind of data — pattern and causal importance agreeing. Bad: no head or MLP block's removal moves accuracy at all, or the architecture reports 'unsupported' because it exposes no attention weights to inspect.
What it cannot tell you
The lag-profile and periodicity-head numbers are unconditional averages over sampled series, so a head that's periodic only on some data families and flat on others can look unremarkable in the averaged view even though it's doing real, family-specific work. Pattern support (whether attention weights or ablation are even available) varies by architecture, so a missing or 'unsupported' result here is a capability gap, not evidence the model lacks that structure.
Average attention weight as a function of how many steps behind the query a key token is, for every head of every captured layer — reveals which heads act locally (mass concentrated at small lag) versus which look far back (mass at large or periodic lags).
How to read it
A bright stripe at a fixed lag repeating every `period` steps is a candidate periodicity/induction head — it's specifically looking one season back. A head with all its mass at lag 0-1 is doing local/recency-based aggregation, not long-range structure.
Limitations
This is an unconditional average over sampled series, so a head that's periodic only on seasonal families and local on trend-only families will show a blurred, unremarkable average here — the top-periodicity-heads table below is computed per-family specifically to avoid that dilution. Architectures with no exposed attention pattern (purely functional attention) show 'unsupported' instead of this heatmap.
| layer | head | score | family |
|---|---|---|---|
| stacked_xf.1 | 8 | 0.040 | block_bootstrap |
| stacked_xf.0 | 3 | 0.022 | block_bootstrap |
| stacked_xf.0 | 15 | 0.018 | block_bootstrap |
| stacked_xf.0 | 0 | 0.015 | block_bootstrap |
| stacked_xf.0 | 14 | 0.015 | block_bootstrap |
Per head, per family: normalized attention mass falling within ±1 lag of that family's seasonal period (and its multiples), minus a mask-fraction baseline — the mass a head paying uniform attention to every lag would put in those same positions purely by chance, given how many of the possible lags count as 'near a period multiple.' Each head keeps only its best-scoring family (shown in the table) so a head periodic on one family isn't diluted by its flat behavior on the others, the way the unconditional heatmap above would show it.
How to read it
'score' is excess mass over that chance baseline, not a raw fraction: 0 means this head's mass near seasonal-lag multiples is exactly what a uniform head would show by chance (no real periodicity signal); a score of, say, 0.30 means an extra 30 percentage points of this head's attention mass sits at seasonal-lag multiples beyond chance — this is the induction-head analog for forecasting. Higher is a stronger, more specifically seasonal head.
Limitations
Only tests period multiples derived from each benchmark family's *labeled* seasonal period — a head genuinely periodic at an unlabeled or non-integer-ratio period would score near zero here despite being real. The reported family is whichever gave that head its single highest score, not every family it responds to.
Each head's output projection input is fixed to its mean activation (mean-ablation: removes what's head-specific about this input while preserving the head's typical/average contribution) and the resulting forecast degradation is measured — a direct causal test of which heads the forecast depends on, not just which heads look interesting.
How to read it
Positive ΔMASE (red) means removing that head hurts the forecast — it's load-bearing. Near-zero or negative (blue) means the head is redundant or even actively unhelpful for this benchmark. Concretely: a cell at +0.15 means mean-ablating that head made this model's average MASE 0.15 worse in absolute terms (e.g. 1.00 → 1.15, roughly 15% worse relative to a MASE-1.0 baseline); a cell at -0.05 means ablating it left the forecast slightly *better*. The most load-bearing head is called out in the findings.
Limitations
Mean-ablation is a specific, relatively mild intervention (replacing with the *average* behavior, not zero or noise) — a head could still matter under a harsher ablation. Heads can also compensate for each other (redundant circuits), so ablating one at a time can understate the importance of a head that's only critical once its backup is also removed.
MLP ablation unavailable: no wrapping MLP submodule found for this architecture (its feed-forward block may be exposed as separate Linear layers instead of one named module).
Average attention weight as a function of how many steps behind the query a key token is, for every head of every captured layer — reveals which heads act locally (mass concentrated at small lag) versus which look far back (mass at large or periodic lags).
How to read it
A bright stripe at a fixed lag repeating every `period` steps is a candidate periodicity/induction head — it's specifically looking one season back. A head with all its mass at lag 0-1 is doing local/recency-based aggregation, not long-range structure.
Limitations
This is an unconditional average over sampled series, so a head that's periodic only on seasonal families and local on trend-only families will show a blurred, unremarkable average here — the top-periodicity-heads table below is computed per-family specifically to avoid that dilution. Architectures with no exposed attention pattern (purely functional attention) show 'unsupported' instead of this heatmap.
| layer | head | score | family |
|---|---|---|---|
| encoder.block.3 | 5 | 0.406 | block_bootstrap |
| encoder.block.2 | 10 | 0.401 | block_bootstrap |
| encoder.block.3 | 3 | 0.391 | block_bootstrap |
| encoder.block.5 | 1 | 0.387 | block_bootstrap |
| encoder.block.5 | 4 | 0.373 | block_bootstrap |
Per head, per family: normalized attention mass falling within ±1 lag of that family's seasonal period (and its multiples), minus a mask-fraction baseline — the mass a head paying uniform attention to every lag would put in those same positions purely by chance, given how many of the possible lags count as 'near a period multiple.' Each head keeps only its best-scoring family (shown in the table) so a head periodic on one family isn't diluted by its flat behavior on the others, the way the unconditional heatmap above would show it.
How to read it
'score' is excess mass over that chance baseline, not a raw fraction: 0 means this head's mass near seasonal-lag multiples is exactly what a uniform head would show by chance (no real periodicity signal); a score of, say, 0.30 means an extra 30 percentage points of this head's attention mass sits at seasonal-lag multiples beyond chance — this is the induction-head analog for forecasting. Higher is a stronger, more specifically seasonal head.
Limitations
Only tests period multiples derived from each benchmark family's *labeled* seasonal period — a head genuinely periodic at an unlabeled or non-integer-ratio period would score near zero here despite being real. The reported family is whichever gave that head its single highest score, not every family it responds to.
| layer | head | score | family |
|---|---|---|---|
| encoder.block.3 | 5 | 0.062 | block_bootstrap |
| encoder.block.4 | 4 | 0.062 | block_bootstrap |
| encoder.block.3 | 1 | 0.062 | block_bootstrap |
| encoder.block.3 | 2 | 0.062 | block_bootstrap |
| encoder.block.3 | 0 | 0.062 | block_bootstrap |
The same statistic, recomputed after binning this model's lag axis to 32 time steps — the token width of the coarsest model in this run (TimesFM). Lag index means a different number of timesteps for each model (this one resolves 16 steps), so the native table above compares unlike to unlike across models.
How to read it
This is the table a CROSS-MODEL claim may cite; the native one above is the right axis for a statement about this model alone. If a head's rank differs between the two, the native ranking was partly a statement about patch size.
Limitations
Binning can only lose resolution, never add it, so a genuinely sub-bin-width periodicity in the finer model is invisible here by construction — that is the point: it is not comparable to a model that cannot resolve it at all. A difference smaller than 32 steps is not interpretable across models under any mode.
Each head's output projection input is fixed to its mean activation (mean-ablation: removes what's head-specific about this input while preserving the head's typical/average contribution) and the resulting forecast degradation is measured — a direct causal test of which heads the forecast depends on, not just which heads look interesting.
How to read it
Positive ΔMASE (red) means removing that head hurts the forecast — it's load-bearing. Near-zero or negative (blue) means the head is redundant or even actively unhelpful for this benchmark. Concretely: a cell at +0.15 means mean-ablating that head made this model's average MASE 0.15 worse in absolute terms (e.g. 1.00 → 1.15, roughly 15% worse relative to a MASE-1.0 baseline); a cell at -0.05 means ablating it left the forecast slightly *better*. The most load-bearing head is called out in the findings.
Limitations
Mean-ablation is a specific, relatively mild intervention (replacing with the *average* behavior, not zero or noise) — a head could still matter under a harsher ablation. Heads can also compensate for each other (redundant circuits), so ablating one at a time can understate the importance of a head that's only critical once its backup is also removed.
The same mean-ablation causal test as the head heatmap above, applied to each block's MLP sublayer as a whole instead of individual attention heads.
How to read it
Taller bars mean that block's MLP matters more to the forecast. Comparing this to the head-ablation heatmap for the same block shows whether a layer's causal contribution is mostly attention-driven, MLP-driven, or both.
Limitations
Same caveats as head ablation: mean-ablation is mild, and redundancy across blocks can hide a block's true importance if another block backs it up.
Attention patterns unsupported for this architecture.
Each head's output projection input is fixed to its mean activation (mean-ablation: removes what's head-specific about this input while preserving the head's typical/average contribution) and the resulting forecast degradation is measured — a direct causal test of which heads the forecast depends on, not just which heads look interesting.
How to read it
Positive ΔMASE (red) means removing that head hurts the forecast — it's load-bearing. Near-zero or negative (blue) means the head is redundant or even actively unhelpful for this benchmark. Concretely: a cell at +0.15 means mean-ablating that head made this model's average MASE 0.15 worse in absolute terms (e.g. 1.00 → 1.15, roughly 15% worse relative to a MASE-1.0 baseline); a cell at -0.05 means ablating it left the forecast slightly *better*. The most load-bearing head is called out in the findings.
Limitations
Mean-ablation is a specific, relatively mild intervention (replacing with the *average* behavior, not zero or noise) — a head could still matter under a harsher ablation. Heads can also compensate for each other (redundant circuits), so ablating one at a time can understate the importance of a head that's only critical once its backup is also removed.
⚠ Sundial's most load-bearing head (L3·h11) ablates to ΔMASE +0.037 (0.2× this model's repeat-run floor of ±0.177, below its own repeat-run noise floor) — so no head in this model cleared its own repeat-run noise floor, and no ranking finding is emitted from this heatmap.
The same mean-ablation causal test as the head heatmap above, applied to each block's MLP sublayer as a whole instead of individual attention heads.
How to read it
Taller bars mean that block's MLP matters more to the forecast. Comparing this to the head-ablation heatmap for the same block shows whether a layer's causal contribution is mostly attention-driven, MLP-driven, or both. The dotted line is this model's own repeat-run MASE noise floor: a bar below it is not distinguishable from calling the model twice.
Limitations
Same caveats as head ablation: mean-ablation is mild, and redundancy across blocks can hide a block's true importance if another block backs it up.
Attention patterns unsupported for this architecture.
Each head's output projection input is fixed to its mean activation (mean-ablation: removes what's head-specific about this input while preserving the head's typical/average contribution) and the resulting forecast degradation is measured — a direct causal test of which heads the forecast depends on, not just which heads look interesting.
How to read it
Positive ΔMASE (red) means removing that head hurts the forecast — it's load-bearing. Near-zero or negative (blue) means the head is redundant or even actively unhelpful for this benchmark. Concretely: a cell at +0.15 means mean-ablating that head made this model's average MASE 0.15 worse in absolute terms (e.g. 1.00 → 1.15, roughly 15% worse relative to a MASE-1.0 baseline); a cell at -0.05 means ablating it left the forecast slightly *better*. The most load-bearing head is called out in the findings.
Limitations
Mean-ablation is a specific, relatively mild intervention (replacing with the *average* behavior, not zero or noise) — a head could still matter under a harsher ablation. Heads can also compensate for each other (redundant circuits), so ablating one at a time can understate the importance of a head that's only critical once its backup is also removed.
The same mean-ablation causal test as the head heatmap above, applied to each block's MLP sublayer as a whole instead of individual attention heads.
How to read it
Taller bars mean that block's MLP matters more to the forecast. Comparing this to the head-ablation heatmap for the same block shows whether a layer's causal contribution is mostly attention-driven, MLP-driven, or both.
Limitations
Same caveats as head ablation: mean-ablation is mild, and redundancy across blocks can hide a block's true importance if another block backs it up.
Part 6 — Features and concepts
The sparse feature dictionaries trained per model and per layer, the concepts they cluster into, whether those concepts are shared across models, and concrete per-family case studies.
↑ contentsPer-target reconstruction/dead-feature/forecast-preservation summary, plus exemplar series for the dictionary's ground-truth-matched features.
Question
Can each model's layer be decomposed into a small number of individually interpretable features, do those features actually matter to the forecast, and do the two models' features play the same role?
How
Trains a sparse dictionary that reconstructs a layer's activations from only a handful of active 'feature' directions at a time, then checks reconstruction quality, how many learned features ever fire at all, whether swapping in the reconstruction changes the forecast, and whether any feature's activation tracks a known ground-truth property of the data (like a trend order or a seasonal period). A causal channel battery then patches each alive feature's direction into a clean forward pass and measures a real, per-channel response (not just correlation with a label), scored against a random-direction null. Features are clustered into named 'roles' by their shared response and structural signature, and each model's roles are matched against the other model's by cosine similarity of their null-normalized response fingerprints, checked against an untrained-twin floor.
Good vs. bad result
Good: high reconstruction fidelity, a low dead-feature rate, forecast-preservation deltas that stay within the SAE's own seed-to-seed noise floor, and features whose activation clearly tracks a real ground-truth field well above what random label shuffling would produce by chance. For the causal layer: a channel response that clears the random-direction null, and a cross-model role match rate that clears its own untrained-twin floor (not just zero). Bad: the large majority of features never firing at all (a common failure mode), a forecast-preservation delta far outside the noise floor, a ground-truth alignment score that isn't meaningfully above its own permutation-null control, or a role match rate that looks large but sits below the untrained-twin floor — architecture match alone can produce that, not shared learned structure.
What it cannot tell you
A feature firing on a particular kind of series is illustrative correlation unless the causal channel battery has confirmed a real patched response for that feature — check the channel result, not just the ground-truth alignment score, before reading any feature as meaningful. A cross-model role match is a geometric correspondence in response space, not evidence the two models use that role the same way causally — read the match rate against its own untrained-twin floor before treating any match as evidence of a shared feature; a rate that does not clear that floor is not an established claim for that pair, and this is a per-run measurement, not a fixed property of the method. Only the small alive fraction of the dictionary (often under 10%) can ever show up as an example, and the headline alignment number is inflated by searching many candidate ground-truth fields per feature, so it must always be read next to its permutation-null control, never on its own.
A sparse dictionary is only useful here if four things hold, in order, and each column below tests exactly one of them. (1) Is it a faithful stand-in for the layer? That is reconstruction fidelity — and it is a floor, not a finding: a dictionary that cannot rebuild the layer is describing something else. (2) Is enough of it actually in use? That is the dead-feature share. High fidelity from a mostly-dead dictionary means every feature shown was drawn from a small surviving minority. (3) Does the model still forecast the same way through it? That is ΔMASE, and it is a stronger test than fidelity, because fidelity is measured in activation space where all directions count equally and the forecast does not care equally about all of them — a reconstruction can be numerically excellent and still drop the one direction the forecast head reads. ΔMASE sign then asks whether that number survives refitting the dictionary at another random seed; where it does not, the damage and its direction are not a measurement at all. (4) Do its features correspond to anything nameable? That is alignment, read against each dictionary's own label-permutation null rather than against zero. This is the one closest to the question the section exists for — the goal is reading features, not rebuilding layers — and it is the one that most often disagrees with fidelity: on this evidence a dictionary can rebuild its layer almost perfectly while none of its features corresponds to any labelled property. Open the table below for each column's exact arithmetic.
Every trained dictionary on one row, worst first. LEFT: how much of each dictionary is dead, against the acceptance bar it was judged on. MIDDLE: how well the live part reconstructs the layer. RIGHT: each dictionary's ground-truth alignment (orange) against ITS OWN label-permutation null (grey tick) -- the bar's length is the margin, and a grey tick to the right of the orange dot means the names carry no more signal than shuffled labels would.
| target | reconstruction fidelity | reconstruction fidelity (held out) | dead rate | dead-rate gate | admission | ΔMASE (window) | ΔMASE (token) | ΔMASE (token, held out) | granularity gap | ΔMASE vs own floor | ΔMASE sign | alignment mean abs rho | permutation null p95 | alignment vs null |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| TimesFM/stacked_xf.14 | 0.869 | 0.605 | 0.263 | passes (under 30%) | REFUSED — failed: reconstruction fidelity, forecast preservation | 0.075 | 0.075 | 0.752 | 0.000 | no floor (deterministic) | resolvable (spread ±0.009 over 3 seeds) | 0.156 | 0.111 | clears null p95 by +0.045 |
| TimesFM/stacked_xf.10 | 0.879 | 0.620 | 0.239 | passes (under 30%) | REFUSED — failed: reconstruction fidelity, forecast preservation | 0.022 | 0.022 | 0.426 | 0.000 | no floor (deterministic) | NOT resolvable (spread ±0.088 over 3 seeds) | 0.145 | 0.120 | clears null p95 by +0.025 |
| TimesFM/stacked_xf.0 | 0.967 | 0.910 | 0.209 | passes (under 30%) | admitted | 0.169 | 0.169 | -0.103 | 0.000 | no floor (deterministic) | NOT resolvable (spread ±0.168 over 3 seeds) | 0.176 | 0.115 | clears null p95 by +0.061 |
| TimesFM/stacked_xf.4 | 0.917 | 0.704 | 0.204 | passes (under 30%) | REFUSED — failed: reconstruction fidelity | -0.005 | -0.005 | 0.125 | 0.000 | no floor (deterministic) | NOT resolvable (spread ±0.086 over 3 seeds) | 0.149 | 0.115 | clears null p95 by +0.034 |
| TimesFM/stacked_xf.2 | 0.936 | 0.818 | 0.186 | passes (under 30%) | REFUSED — failed: reconstruction fidelity | -0.018 | -0.018 | -0.034 | 0.000 | no floor (deterministic) | resolvable (spread ±0.075 over 3 seeds) | 0.165 | 0.115 | clears null p95 by +0.050 |
| TimesFM/stacked_xf.12 | 0.886 | 0.618 | 0.170 | passes (under 30%) | REFUSED — failed: reconstruction fidelity, forecast preservation | 0.000 | 0.000 | 0.350 | 0.000 | no floor (deterministic) | NOT resolvable (spread ±0.043 over 3 seeds) | 0.150 | 0.115 | clears null p95 by +0.035 |
| TimesFM/stacked_xf.6 | 0.898 | 0.662 | 0.163 | passes (under 30%) | REFUSED — failed: reconstruction fidelity | 0.045 | 0.045 | 0.126 | 0.000 | no floor (deterministic) | NOT resolvable (spread ±0.127 over 3 seeds) | 0.146 | 0.116 | clears null p95 by +0.030 |
| TimesFM/stacked_xf.8 | 0.893 | 0.630 | 0.159 | passes (under 30%) | REFUSED — failed: reconstruction fidelity, forecast preservation | -0.004 | -0.004 | 0.302 | 0.000 | no floor (deterministic) | resolvable (spread ±0.062 over 3 seeds) | 0.148 | 0.114 | clears null p95 by +0.033 |
| TimesFM/stacked_xf.16 | 0.898 | 0.659 | 0.142 | passes (under 30%) | REFUSED — failed: reconstruction fidelity, forecast preservation | 0.085 | 0.085 | 0.629 | 0.000 | no floor (deterministic) | NOT resolvable (spread ±0.093 over 3 seeds) | 0.169 | 0.111 | clears null p95 by +0.059 |
| TimesFM/stacked_xf.18 | 0.907 | 0.864 | 0.121 | passes (under 30%) | admitted | -0.053 | -0.053 | 0.130 | 0.000 | no floor (deterministic) | NOT resolvable (spread ±0.079 over 3 seeds) | 0.197 | 0.122 | clears null p95 by +0.075 |
| Chronos-2/encoder.block.11 | 0.912 | 0.890 | 0.065 | passes (under 30%) | admitted | 0.000 | 0.000 | 0.000 | 0.000 | no floor (deterministic) | NOT resolvable (spread ±0.000 over 3 seeds) | 0.243 | 0.114 | clears null p95 by +0.129 |
| Sundial/model.layers.11 | 0.961 | 0.822 | 0.039 | passes (under 30%) | REFUSED — failed: reconstruction fidelity | 0.075 | 0.018 | 0.172 | 0.057 | 0.4× | resolvable (spread ±0.371 over 3 seeds) | 0.165 | 0.118 | clears null p95 by +0.047 |
| Sundial/model.layers.10 | 0.947 | 0.735 | 0.019 | passes (under 30%) | REFUSED — failed: reconstruction fidelity, forecast preservation | 0.103 | -0.005 | 0.339 | 0.107 | 0.6× | resolvable (spread ±0.270 over 3 seeds) | 0.166 | 0.121 | clears null p95 by +0.045 |
| Chronos-Bolt/encoder.block.3 | 0.953 | 0.881 | 0.014 | passes (under 30%) | admitted | 0.125 | -0.054 | 0.103 | 0.179 | no floor (deterministic) | resolvable (spread ±0.097 over 3 seeds) | 0.188 | 0.114 | clears null p95 by +0.074 |
| Sundial/model.layers.9 | 0.943 | 0.724 | 0.012 | passes (under 30%) | REFUSED — failed: reconstruction fidelity, forecast preservation | 0.164 | 0.011 | 0.362 | 0.153 | 0.9× | resolvable (spread ±0.254 over 3 seeds) | 0.164 | 0.121 | clears null p95 by +0.043 |
| Sundial/model.layers.8 | 0.945 | 0.739 | 0.009 | passes (under 30%) | REFUSED — failed: reconstruction fidelity, forecast preservation | 0.137 | 0.058 | 0.351 | 0.079 | 0.8× | resolvable (spread ±0.277 over 3 seeds) | 0.163 | 0.119 | clears null p95 by +0.044 |
| Chronos-Bolt/encoder.block.5 | 0.959 | 0.848 | 0.008 | passes (under 30%) | REFUSED — failed: reconstruction fidelity | 0.159 | -0.076 | -0.038 | 0.235 | no floor (deterministic) | resolvable (spread ±0.155 over 3 seeds) | 0.179 | 0.115 | clears null p95 by +0.065 |
| Chronos-Bolt/encoder.block.4 | 0.957 | 0.856 | 0.008 | passes (under 30%) | admitted | 0.197 | 0.038 | 0.152 | 0.159 | no floor (deterministic) | resolvable (spread ±0.209 over 3 seeds) | 0.189 | 0.114 | clears null p95 by +0.075 |
| Sundial/model.layers.3 | 0.963 | 0.822 | 0.008 | passes (under 30%) | REFUSED — failed: reconstruction fidelity | 0.133 | 0.019 | 0.077 | 0.114 | 0.8× | resolvable (spread ±0.252 over 3 seeds) | 0.162 | 0.119 | clears null p95 by +0.043 |
| Sundial/model.layers.7 | 0.947 | 0.757 | 0.006 | passes (under 30%) | REFUSED — failed: reconstruction fidelity, forecast preservation | 0.173 | 0.064 | 0.266 | 0.109 | 1.0× | resolvable (spread ±0.258 over 3 seeds) | 0.160 | 0.119 | clears null p95 by +0.041 |
| Sundial/model.layers.6 | 0.951 | 0.778 | 0.006 | passes (under 30%) | REFUSED — failed: reconstruction fidelity | 0.194 | -0.006 | 0.241 | 0.200 | 1.1× | resolvable (spread ±0.228 over 3 seeds) | 0.160 | 0.120 | clears null p95 by +0.040 |
| Sundial/model.layers.5 | 0.956 | 0.803 | 0.006 | passes (under 30%) | REFUSED — failed: reconstruction fidelity | 0.194 | -0.005 | 0.197 | 0.199 | 1.1× | resolvable (spread ±0.292 over 3 seeds) | 0.158 | 0.119 | clears null p95 by +0.039 |
| Chronos-2/encoder.block.10 | 0.925 | 0.675 | 0.005 | passes (under 30%) | REFUSED — failed: reconstruction fidelity | 0.003 | -0.010 | 0.002 | 0.013 | no floor (deterministic) | resolvable (spread ±0.017 over 3 seeds) | 0.168 | 0.118 | clears null p95 by +0.050 |
| Sundial/model.layers.4 | 0.964 | 0.834 | 0.005 | passes (under 30%) | REFUSED — failed: reconstruction fidelity | 0.137 | -0.122 | 0.246 | 0.259 | 0.8× | resolvable (spread ±0.246 over 3 seeds) | 0.159 | 0.119 | clears null p95 by +0.040 |
| Chronos-2/encoder.block.8 | 0.917 | 0.662 | 0.004 | passes (under 30%) | REFUSED — failed: reconstruction fidelity | 0.001 | -0.049 | 0.039 | 0.049 | no floor (deterministic) | resolvable (spread ±0.095 over 3 seeds) | 0.168 | 0.120 | clears null p95 by +0.049 |
| Chronos-2/encoder.block.9 | 0.920 | 0.664 | 0.004 | passes (under 30%) | REFUSED — failed: reconstruction fidelity | -0.007 | -0.029 | 0.072 | 0.022 | no floor (deterministic) | resolvable (spread ±0.071 over 3 seeds) | 0.170 | 0.118 | clears null p95 by +0.053 |
| Chronos-2/encoder.block.5 | 0.912 | 0.712 | 0.003 | passes (under 30%) | REFUSED — failed: reconstruction fidelity | 0.150 | -0.074 | 0.110 | 0.224 | no floor (deterministic) | resolvable (spread ±0.106 over 3 seeds) | 0.172 | 0.119 | clears null p95 by +0.053 |
| Chronos-2/encoder.block.6 | 0.907 | 0.682 | 0.003 | passes (under 30%) | REFUSED — failed: reconstruction fidelity | 0.036 | -0.080 | 0.128 | 0.116 | no floor (deterministic) | resolvable (spread ±0.091 over 3 seeds) | 0.173 | 0.117 | clears null p95 by +0.055 |
| Chronos-2/encoder.block.7 | 0.914 | 0.654 | 0.002 | passes (under 30%) | REFUSED — failed: reconstruction fidelity | -0.014 | -0.061 | 0.065 | 0.047 | no floor (deterministic) | resolvable (spread ±0.149 over 3 seeds) | 0.168 | 0.120 | clears null p95 by +0.048 |
Every column, in words, with its arithmetic.
| Column | What it means, and why it matters | How it is calculated |
|---|---|---|
target | One trained dictionary: a model and the single layer of it this dictionary was fitted on. Every other column is a property of that one dictionary, so two rows differ in the model, the layer and the fit at once. | Named `model/layer` exactly as the `sae` stage resolved it. |
reconstruction fidelity | How faithfully the sparse dictionary can rebuild the layer's own activations from a handful of active features. This is the FLOOR on everything below it: a dictionary that cannot reproduce the layer is not describing the layer. | 1 - (sum of squared reconstruction error / sum of squared error of predicting the mean activation), over the activations the dictionary was fitted on. 1.0 is exact; 0.0 is no better than predicting the mean; negative is worse than that. |
reconstruction fidelity (held out) | The same quantity on SERIES the dictionary never saw during training. A large drop from the fitted value means the dictionary memorized these series rather than learning the layer's structure. | Identical formula, evaluated on a held-out split of whole SERIES (never windows -- windows inside one series are dependent, so a window split would leak). Drawn as a diamond on the same bar as the fitted value, so the gap between them is a visible length. |
dead rate | The fraction of the dictionary's features that never activate on any input. A dead feature is capacity that was allocated and never used, so a high rate means every feature shown was drawn from a small alive minority rather than from the whole dictionary. | (features whose activation is exactly zero on every probed row) / (dictionary size). |
dead-rate gate | The pass/fail verdict on the dead share, printed together with the bar it was compared against rather than only as a word. | `dead rate` compared to the configured acceptance threshold. A target with no threshold configured reads `no gate configured` -- its rate was recorded but never checked, which is not the same as passing. |
admission | Whether this dictionary was admitted for feature-level reading at all, and on which bar it failed if not. | Every configured acceptance check (reconstruction fidelity, forecast damage) evaluated together. A bar that was never MEASURED leaves the verdict `undecidable` rather than `passed` -- an unmeasured check is not a cleared one. |
ΔMASE (window) | How much the model's forecast error changes when the layer's real activations are replaced by the dictionary's reconstruction of them. Near zero means the dictionary is a faithful enough stand-in that the model still forecasts the same way; large positive means the reconstruction threw away something the forecast needed. | MASE(forecast from the reconstructed activations) - MASE(forecast from the real activations), with the reconstruction done on the pooled WINDOW axis and then broadcast back over the tokens each window covers. That broadcast is lossy for any model whose tokens are narrower than the window, which is why the token column beside it exists. |
ΔMASE (token) | The same measurement with no window pooling: every raw token is encoded and decoded on its own. This is the column to read as dictionary quality -- it has no architecture confound in it. | MASE(reconstructed) - MASE(real), reconstructing each token independently. |
ΔMASE (token, held out) | Token-granularity forecast damage measured on series the dictionary was never fitted on. | Same difference of MASEs, evaluated on the held-out series split. |
granularity gap | The distance between the two ΔMASE columns. It measures an ARCHITECTURE difference, not a difference in dictionary quality: it is exactly 0 for a model whose token width equals the alignment window (nothing is broadcast, so the two are the same computation) and grows with the mismatch. | |ΔMASE (window) - ΔMASE (token)|. A large value says the window number is inflated by pooling loss and should not be read as dictionary damage. |
ΔMASE vs own floor | Whether the forecast damage is larger than the amount this model's forecast moves between two identical runs. A model that samples its forecast has a floor above zero; a deterministic one has a floor of exactly zero, so any nonzero damage clears it by arithmetic and the comparison says nothing. | |ΔMASE (token)| divided by that model's measured repeat-run MASE spread. Reads `no floor (deterministic)` when the model's repeat spread is exactly zero, rather than reporting a division by it. |
ΔMASE sign | Whether the SIGN of the forecast damage survives retraining the dictionary at a different random seed. Training an SAE is stochastic; if refitting it moves ΔMASE by more than ΔMASE itself, then 'the reconstruction made the forecast better' and 'worse' are the same measurement and neither should be quoted. | The dictionary is retrained at several seeds against a FROZEN activation store (so seed is the only thing that varies) and the standard deviation of ΔMASE across those seeds is recorded. `resolvable` means |ΔMASE| exceeds that spread; `NOT resolvable` means it does not. The spread and the seed count are printed in the cell. |
alignment mean abs rho | How strongly this dictionary's features correspond to real, labelled properties of the input series -- the closest thing here to 'are these features interpretable'. It is a different question from reconstruction fidelity, and the two can disagree: a dictionary can rebuild a layer almost perfectly while none of its features corresponds to anything nameable, and the whole point of the section is reading features, not rebuilding layers. | Each probed feature's activation is correlated (Spearman, across series) against every candidate ground-truth field; the feature keeps its single best |ρ|; the column is the MEAN of those best |ρ| over all matched features. Because each feature keeps its best of many candidates, this number is inflated above zero by the search alone -- which is exactly why it is never read against zero, only against the permutation null beside it. |
permutation null p95 | How large the alignment number gets by pure chance, for THIS dictionary, at this feature count, under this same best-of-many search. It is the reference the measured alignment has to beat. | The ground-truth labels are shuffled across series and the entire matching procedure is re-run many times; this column is the 95th percentile of the resulting mean |ρ|. Every ingredient except the label-to-series correspondence is held fixed, so the difference between the two columns is the part the labels explain. |
alignment vs null | The signed margin of the measured alignment over this target's own permutation null, with the verdict it implies. | `alignment mean abs rho` - `permutation null p95`. Positive means the feature names carry signal the same search on shuffled labels would not have produced; zero or negative means they do not. |
The figure draws 4 of these 14 numbers -- the three that are comparisons ACROSS dictionaries, plus the null each alignment is read against. The collapsed table above carries all of them, and is the only place the rule behind each verdict is printed.
How to read it
Worst dictionary first, sorted by dead-feature rate, because a dead dictionary invalidates every feature read off it where low fidelity only weakens them. Read the dead rate and the alignment verdict TOGETHER: a dictionary can be almost entirely alive and still align to labelled properties no better than a mostly-dead one, so neither column alone answers whether a target is worth reading. The alignment column is referenced against each target's own label-permutation null, never against zero, because every feature is matched to its best of many candidate fields and that search inflates the mean even on shuffled labels. `granularity gap` is the distance between the two forecast-preservation numbers: it is exactly 0 for a model whose token width equals the alignment window and grows with the mismatch, so it measures an architecture difference rather than a difference in reconstruction quality.
Limitations
Every column is a property of one dictionary, so nothing here is a cross-model comparison: two targets differ in the model, the layer, and the dictionary that was trained on them at once. A passing dead-rate gate is a floor, not a finding.
585 of 1326 rendered ablation panels (44.1%) have a forecast sd below 10% of their context sd — read as measured before it is read as a defect.
| archetype | n | Chronos-2 | Chronos-Bolt | Sundial | TimesFM |
|---|---|---|---|---|---|
| anomaly_heavy | 39 | 94.4% | 66.7% | 38.5% | 20.0% |
| intermittent_bursts | 57 | 91.7% | 100.0% | 22.7% | 50.0% |
| unknown | 763 | 66.7% | 86.4% | 63.8% | 35.8% |
| random_walk_drift | 23 | 80.0% | 28.6% | 50.0% | |
| ar_colored_noise | 70 | 84.6% | 78.6% | 24.0% | 44.4% |
| regime_switching | 17 | 45.5% | 0.0% | 50.0% | |
| noisy_chaotic | 72 | 53.3% | 55.6% | 10.0% | 6.9% |
| trend_dominant | 30 | 0.0% | 0.0% | 0.0% | 15.4% |
| amplitude_modulated | 39 | 0.0% | 0.0% | 0.0% | 0.0% |
| clean_low_noise | 116 | 0.0% | 0.0% | 0.0% | 0.0% |
| multi_seasonal_complex | 15 | 0.0% | 0.0% | 0.0% | 0.0% |
| nonsinusoidal_seasonal | 25 | 0.0% | 0.0% | 0.0% | |
| seasonal_dominant | 60 | 0.0% | 0.0% | 0.0% | 0.0% |
Share of rendered ablation panels that are flat (forecast sd < 10% of context sd), one row per archetype the corpus recorded, ordered worst first.
How to read it
Structured archetypes (a real trend or seasonal component) should show 0% regardless of model; a noise-like archetype (no autocorrelation to extrapolate) flattening for every model is the MMSE-optimal response, not a defect. A row where one model flattens and another does not, on the SAME archetype, is the behavioral difference Item H4 below controls for.
Limitations
Archetype is a property of the CORPUS the run was built against, not of the model — a run whose corpus carries no archetype label contributes only an "unknown" row.
Each model's own raw forecast (bar) against the SAE's full reconstruction of it (diamond) — both as median forecast sd over context sd, across every rendered ablation panel. A short segment says the dictionary changes little; the per-model spread itself is what the bars carry.
| model | raw model (median sd ratio) | SAE reconstruction (median sd ratio) | raw % flat | recon % flat |
|---|---|---|---|---|
| Chronos-Bolt | 0.077 | 0.050 | 58.7% | 69.0% |
| Chronos-2 | 0.084 | 0.070 | 54.7% | 59.0% |
| Sundial | 0.125 | 0.123 | 44.8% | 45.2% |
| TimesFM | 0.371 | 0.327 | 20.9% | 23.9% |
Whether the ~6x per-model spread in flatness is a property of each model's own forecast, or an artifact of the SAE reconstructing it.
How to read it
The raw (unpatched) and reconstructed columns are close for every model, and the spread across models is present in the RAW column before any dictionary touches the forecast — so the spread is a model property, safe to render as one, not a reconstruction artifact.
Limitations
This is Item H4(ii): the `unpatched` forecast was already in every ablation artifact at zero extra forward passes. It does not control for a confound correlated with reconstruction FIDELITY across targets (H4(i), not computed here) — a real but smaller, partial check this one does not replace.
Unit: correlational structural-property coverage of individual SAE features (not the causal, cross-model atlas CONCEPTS -- see Model comparison § What is shared? for that unit).
| model | properties covered | strongest | only this model | shared with all |
|---|---|---|---|---|
| Chronos-2 | 4 | ar_coeff_sum (52%) | none | ar_coeff_sum, seasonal_period_dominant, n_seasonalities |
| Sundial | 4 | seasonal_period_dominant (54%) | none | seasonal_period_dominant, ar_coeff_sum, n_seasonalities |
| Chronos-Bolt | 5 | seasonal_period_dominant (44%) | none | seasonal_period_dominant, n_changepoints, ar_coeff_sum |
| TimesFM | 7 | n_seasonalities (74%) | ar_order (10%), noise_scale (6%) | n_seasonalities, seasonal_period_dominant, ar_coeff_sum |
One row per model, pooled over all of that model's analyzed layers. A property counts as covered when at least 5% of a layer's ground-truth-matched features track it at that layer — a maximum over layers, not an average, so a property a model represents at one depth and nowhere else still counts as covered. only this model is the direct answer to "what does this model account for that the others don't".
Share of each model's ground-truth-matched SAE features that track each property, at the layer where that model tracks it most. Columns are ordered by how many models reach the property: left of the black line are the 4 properties all 4 models account for, right of it are those only some do. A blank cell means no layer of that model devoted 5% of its matched features to that property.
The cross-model summary of the SAE section: which properties of the benchmark each model's sparse features organize around, pooled over that model's layers, and whether each property is common to every model or specific to one.
How to read it
Read the black line first. Properties to its left are the shared vocabulary — every model in this run devotes features to them, which is the closest thing this pipeline offers to 'these models learned the same thing'. Properties to its right are where the dictionaries diverge. A high share is not a quality claim: it says a large fraction of that layer's interpretable features track this property, not that the model forecasts it well. Cross-check a unique property against the models' CKA in the geometry section — two models with near-identical geometry having no unique properties is a consistent picture, and one with unique properties despite high CKA is worth a second look.
Limitations
Coverage is computed over features that matched a ground-truth field at all, so it describes the interpretable slice of each dictionary, not the whole of it — a model whose features are real but do not correspond to any field this benchmark labels will look like it covers less. The fields are the benchmark's own generator parameters, so a property the corpus does not vary cannot appear here for any model. 'Unique' is relative to the models in THIS run and to the 5% threshold; a model just under it at every layer reads as not covering the property. Correlational throughout — a feature tracking a property is not evidence the model uses it, which is what the causal channel battery exists to test.
One row per analyzed layer, one column per STRUCTURAL property of the input series (corpus provenance regressed out first, so no column here is a fact about how the benchmark was built). Colour is the share of that dictionary's matched features tracking that property; the number in the cell is how many. Read DOWN a model's own layers for a depth trend and ACROSS models for a difference in what they organize around.
Which properties of the data each layer's sparse features latch onto, and whether the models differ.
How to read it
A column that is dark for one model and pale for another is the interesting case: it says the two dictionaries decompose the same corpus around different properties. Within one model, a property that strengthens or fades down the rows is a depth trend in what that model represents. Fields are ordered by total matches across the whole run, so the leftmost columns are the properties this corpus actually exercises -- a pale column on the right may simply be a property few series in this corpus have.
Limitations
Correlational, and only that: a cell says a feature's activation covaries with a labelled property after provenance is regressed out, not that the feature causally carries it. The causal claim is the channel battery in the roles block below, which has been run on a subset of targets. Each feature is also matched to its BEST candidate field, so a feature whose two best fields are nearly tied is assigned to one of them arbitrarily.
Within that picture, the single strongest feature per model and layer is one click away below: the one whose activation best correlates with a structural property of the input series, after regressing out which generator produced it.
| model | layer | feature | structural correlate | ρ | n series |
|---|---|---|---|---|---|
| TimesFM | stacked_xf.10 | #712 | Seasonal component count | 0.281 | 555 |
| TimesFM | stacked_xf.18 | #408 | Seasonal component count | -0.231 | 555 |
| TimesFM | stacked_xf.6 | #3921 | Seasonal component count | 0.312 | 555 |
| TimesFM | stacked_xf.16 | #712 | Seasonal component count | 0.297 | 555 |
| TimesFM | stacked_xf.2 | #4664 | Dominant period | -0.309 | 443 |
| TimesFM | stacked_xf.14 | #712 | Seasonal component count | 0.281 | 555 |
| TimesFM | stacked_xf.4 | #574 | Dominant period | -0.299 | 443 |
| TimesFM | stacked_xf.0 | #2996 | Dominant period | -0.263 | 443 |
| TimesFM | stacked_xf.8 | #1192 | Seasonal component count | 0.277 | 555 |
| TimesFM | stacked_xf.12 | #712 | Seasonal component count | 0.272 | 555 |
| Chronos-2 | encoder.block.8 | #1209 | Autocorrelation strength | 0.293 | 374 |
| Chronos-2 | encoder.block.10 | #4020 | Autocorrelation strength | 0.300 | 374 |
| Chronos-2 | encoder.block.11 | #561 | Seasonal component count | 0.356 | 555 |
| Chronos-2 | encoder.block.7 | #2278 | Dominant period | -0.282 | 443 |
| Chronos-2 | encoder.block.9 | #4680 | Autocorrelation strength | -0.248 | 374 |
| Chronos-2 | encoder.block.6 | #3087 | Seasonal component count | -0.308 | 555 |
| Chronos-2 | encoder.block.5 | #3168 | Autocorrelation strength | 0.281 | 374 |
| Sundial | model.layers.3 | #2033 | Dominant period | -0.317 | 443 |
| Sundial | model.layers.10 | #5065 | Dominant period | 0.271 | 443 |
| Sundial | model.layers.11 | #2763 | Dominant period | 0.313 | 443 |
| Sundial | model.layers.9 | #5065 | Dominant period | 0.277 | 443 |
| Sundial | model.layers.6 | #5065 | Dominant period | 0.380 | 443 |
| Sundial | model.layers.7 | #5065 | Dominant period | 0.382 | 443 |
| Sundial | model.layers.5 | #2033 | Dominant period | -0.319 | 443 |
| Sundial | model.layers.4 | #2033 | Dominant period | -0.335 | 443 |
| Sundial | model.layers.8 | #1679 | Seasonal component count | -0.272 | 555 |
| Chronos-Bolt | encoder.block.4 | #4325 | Dominant period | -0.273 | 443 |
| Chronos-Bolt | encoder.block.5 | #1866 | Changepoint count | -0.266 | 555 |
| Chronos-Bolt | encoder.block.3 | #4586 | Dominant period | 0.291 | 443 |
Of 6144 probed features, 661 correlate with a structural property of the series and 1042 with a corpus bookkeeping label (mean |ρ| 0.079 vs 0.142). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#712 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a larger number of seasonal components (rho 0.28, n 555). | Seasonal component count ρ=+0.28, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | parametric (generator) ρ=+0.53 | |
#4370 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of seasonal components (rho 0.28, n 555). | Seasonal component count ρ=+0.28, n=555 | not a candidate | not measured | parametric (generator) ρ=+0.36 | |
#5638 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a larger number of seasonal components (rho 0.25, n 555). | Seasonal component count ρ=+0.25, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | parametric (generator) ρ=+0.36 | |
#1136 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.25, n 443). | Dominant period ρ=-0.25, n=443 | not a candidate | not measured | parametric (generator) ρ=+0.38 | |
#5702 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of seasonal components (rho 0.24, n 555). | Seasonal component count ρ=+0.24, n=555 | not a candidate | not measured | parametric (generator) ρ=+0.34 | |
#453 | This feature moves the forecast's seasonal magnitude on the series it fires on (1.17 times the random-direction null), and also moves its spectral centroid, strongest on series with a larger number of seasonal components (rho 0.24, n 555). | Seasonal component count ρ=+0.24, n=555 | removing it lowers seasonal strength (1.2x its null) | n=8 | parametric (generator) ρ=+0.49 | |
#3751 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a larger number of seasonal components (rho 0.24, n 555). | Seasonal component count ρ=+0.24, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | parametric (generator) ρ=+0.41 | |
#3320 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a larger number of seasonal components (rho 0.23, n 555). | Seasonal component count ρ=+0.23, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | parametric (generator) ρ=+0.54 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real. The two series columns are the same series in the same order, so a thumbnail and the overlay beside it describe one series seen twice.
| In the data | Name | What it measures | What a high value means |
|---|---|---|---|
dispersion | Spread | How much the forecast varies within itself (its standard deviation). | Feature makes the forecast swing more from step to step. |
flatness | Flatness | How close the forecast is to a constant line. | Feature makes the forecast closer to a flat, constant line. |
horizon_shape_far | Far horizon | Shape of the late part of the forecast -- its furthest-out steps. | Feature changes the long-range forecast's shape by a larger amount. |
horizon_shape_near | Near horizon | Shape of the first part of the forecast -- the steps just after the context ends. | Feature changes the near-term forecast's shape by a larger amount. |
level | Level | Mean value of the forecast -- its overall height. | Feature raises the whole forecast. |
mase | Accuracy (MASE) | Forecast error against the true continuation, scaled by a naive baseline. | Feature makes the forecast WORSE (higher error). |
seasonal | Seasonal strength | Energy in the forecast concentrated at the series' own dominant repeating rhythm. | Feature makes the forecast more strongly periodic. |
spectral_centroid | Frequency balance | Centre of mass of the forecast's frequency spectrum -- low means the forecast is dominated by slow, smooth movement, high means by fast wiggles. | Feature shifts the forecast toward higher-frequency, choppier movement. |
trend | Trend | Slope of the forecast -- whether it rises or falls as it continues forward. | Feature pushes the forecast to slope upward more steeply. |
Of 1536 probed features, 265 correlate with a structural property of the series and 344 with a corpus bookkeeping label (mean |ρ| 0.089 vs 0.191). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#408 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller number of seasonal components (rho 0.23, n 555). | Seasonal component count ρ=-0.23, n=555 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.45 | |
#1456 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.22, n 443). | Dominant period ρ=+0.22, n=443 | not a candidate | not measured | random parametric (generator) ρ=+0.26 | |
#8 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of seasonal components (rho 0.22, n 555). | Seasonal component count ρ=+0.22, n=555 | not a candidate | not measured | nonsinusoidal seasonal (archetype) ρ=+0.32 | |
#593 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of seasonal components (rho 0.19, n 555). | Seasonal component count ρ=+0.19, n=555 | not a candidate | not measured | parametric (generator) ρ=+0.40 | |
#1212 | This feature increases the forecast's overall level on the series it fires on (1.27 times the random-direction null), and also decreases forecast error, strongest on series with a larger number of seasonal components (rho 0.19, n 555). | Seasonal component count ρ=+0.19, n=555 | removing it lowers level (1.3x its null) | n=8 | parametric (generator) ρ=+0.42 | |
#1061 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of seasonal components (rho 0.18, n 555). | Seasonal component count ρ=+0.18, n=555 | not a candidate | not measured | parametric (generator) ρ=+0.40 | |
#582 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of seasonal components (rho 0.18, n 555). | Seasonal component count ρ=+0.18, n=555 | not a candidate | not measured | nonsinusoidal seasonal (archetype) ρ=+0.25 | |
#1201 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of seasonal components (rho 0.18, n 555). | Seasonal component count ρ=+0.18, n=555 | not a candidate | not measured | parametric (generator) ρ=+0.46 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real. The two series columns are the same series in the same order, so a thumbnail and the overlay beside it describe one series seen twice.
What each channel means: see the first target's legend above (same nine channels every target).
Of 6144 probed features, 752 correlate with a structural property of the series and 1199 with a corpus bookkeeping label (mean |ρ| 0.078 vs 0.143). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#3921 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a larger number of seasonal components (rho 0.31, n 555). | Seasonal component count ρ=+0.31, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | mixture (generator) ρ=-0.30 | |
#4664 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a smaller dominant seasonal period (rho 0.25, n 443). | Dominant period ρ=-0.25, n=443 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | realism stress (tier) ρ=-0.59 | |
#453 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a larger number of seasonal components (rho 0.24, n 555). | Seasonal component count ρ=+0.24, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | realism stress (tier) ρ=-0.48 | |
#137 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a smaller dominant seasonal period (rho 0.22, n 443). | Dominant period ρ=-0.22, n=443 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | realism stress (tier) ρ=-0.52 | |
#2106 | This feature moves the near horizon of the forecast on the series it fires on (1.32 times the random-direction null), and also decreases its trend slope, strongest on series with a smaller dominant seasonal period (rho 0.22, n 443). | Dominant period ρ=-0.22, n=443 | removing it reshapes near horizon (1.3x its null) | n=8 | random parametric (generator) ρ=-0.38 | |
#3751 | This feature decreases the forecast's spectral centroid on the series it fires on (1.42 times the random-direction null), and also moves the near horizon of the forecast, strongest on series with a smaller dominant seasonal period (rho 0.21, n 443). | Dominant period ρ=-0.21, n=443 | removing it raises frequency balance (1.8x its null) | n=8 | ar colored noise (archetype) ρ=+0.29 | |
#3038 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a larger number of seasonal components (rho 0.21, n 555). | Seasonal component count ρ=+0.21, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | parametric (generator) ρ=+0.51 | |
#5638 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a smaller dominant seasonal period (rho 0.21, n 443). | Dominant period ρ=-0.21, n=443 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | intermittent bursts (archetype) ρ=+0.30 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real. The two series columns are the same series in the same order, so a thumbnail and the overlay beside it describe one series seen twice.
What each channel means: see the first target's legend above (same nine channels every target).
Of 6144 probed features, 410 correlate with a structural property of the series and 555 with a corpus bookkeeping label (mean |ρ| 0.086 vs 0.167). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#712 | This feature decreases the forecast's overall level on the series it fires on (1.06 times the random-direction null), strongest on series with a larger number of seasonal components (rho 0.30, n 555). | Seasonal component count ρ=+0.30, n=555 | removing it raises level (1.1x its null) | n=8 | parametric (generator) ρ=+0.51 | |
#3320 | This feature moves the near horizon of the forecast on the series it fires on (1.02 times the random-direction null), strongest on series with a larger number of seasonal components (rho 0.27, n 555). | Seasonal component count ρ=+0.27, n=555 | removing it reshapes near horizon (1.0x its null) | n=8 | parametric (generator) ρ=+0.54 | |
#3302 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of seasonal components (rho 0.26, n 555). | Seasonal component count ρ=+0.26, n=555 | not a candidate | not measured | parametric (generator) ρ=+0.32 | |
#5143 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a larger number of seasonal components (rho 0.25, n 555). | Seasonal component count ρ=+0.25, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | parametric (generator) ρ=+0.54 | |
#301 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of seasonal components (rho 0.25, n 555). | Seasonal component count ρ=+0.25, n=555 | not a candidate | not measured | parametric (generator) ρ=+0.50 | |
#3751 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a larger number of seasonal components (rho 0.25, n 555). | Seasonal component count ρ=+0.25, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | parametric (generator) ρ=+0.51 | |
#5638 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a larger number of seasonal components (rho 0.24, n 555). | Seasonal component count ρ=+0.24, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | parametric (generator) ρ=+0.48 | |
#2468 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of seasonal components (rho 0.24, n 555). | Seasonal component count ρ=+0.24, n=555 | not a candidate | not measured | parametric (generator) ρ=+0.50 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real. The two series columns are the same series in the same order, so a thumbnail and the overlay beside it describe one series seen twice.
What each channel means: see the first target's legend above (same nine channels every target).
Of 6144 probed features, 446 correlate with a structural property of the series and 662 with a corpus bookkeeping label (mean |ρ| 0.091 vs 0.160). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#4664 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a smaller dominant seasonal period (rho 0.31, n 443). | Dominant period ρ=-0.31, n=443 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | parametric (generator) ρ=+0.31 | |
#3751 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.30, n 443). | Dominant period ρ=-0.30, n=443 | not a candidate | not measured | intermittent bursts (archetype) ρ=+0.31 | |
#1568 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.28, n 443). | Dominant period ρ=-0.28, n=443 | not a candidate | not measured | intermittent bursts (archetype) ρ=+0.35 | |
#5638 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a smaller dominant seasonal period (rho 0.28, n 443). | Dominant period ρ=-0.28, n=443 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | intermittent bursts (archetype) ρ=+0.41 | |
#1742 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a smaller dominant seasonal period (rho 0.27, n 443). | Dominant period ρ=-0.27, n=443 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | intermittent bursts (archetype) ρ=+0.39 | |
#301 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.27, n 443). | Dominant period ρ=-0.27, n=443 | not a candidate | not measured | clean low noise (archetype) ρ=-0.32 | |
#1136 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.26, n 443). | Dominant period ρ=-0.26, n=443 | not a candidate | not measured | intermittent bursts (archetype) ρ=+0.28 | |
#3534 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a smaller dominant seasonal period (rho 0.26, n 443). | Dominant period ρ=-0.26, n=443 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | intermittent bursts (archetype) ρ=+0.33 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real. The two series columns are the same series in the same order, so a thumbnail and the overlay beside it describe one series seen twice.
What each channel means: see the first target's legend above (same nine channels every target).
Of 6144 probed features, 3064 correlate with a structural property of the series and 4353 with a corpus bookkeeping label (mean |ρ| 0.084 vs 0.167). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#1209 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger AR coefficient sum (rho 0.29, n 374). | Autocorrelation strength ρ=+0.29, n=374 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.33 | |
#2594 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller AR coefficient sum (rho 0.26, n 374). | Autocorrelation strength ρ=-0.26, n=374 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.41 | |
#5513 | This feature moves the near horizon of the forecast on the series it fires on (2.63 times the random-direction null), and also moves its overall level, strongest on series with a smaller number of seasonal components (rho 0.26, n 555). | Seasonal component count ρ=-0.26, n=555 | removing it reshapes near horizon (2.6x its null) | n=8 | trend dominant (archetype) ρ=+0.45 | |
#587 | This feature moves the far horizon of the forecast on the series it fires on (2.26 times the random-direction null), and also increases its overall level, strongest on series with a larger AR coefficient sum (rho 0.23, n 374). | Autocorrelation strength ρ=+0.23, n=374 | removing it raises spread (2.3x its null) | n=8 | noisy chaotic (archetype) ρ=+0.25 | |
#3440 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.22, n 443). | Dominant period ρ=-0.22, n=443 | not a candidate | not measured | clean low noise (archetype) ρ=+0.16 | |
#2360 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.22, n 443). | Dominant period ρ=-0.22, n=443 | not a candidate | not measured | anomaly heavy (archetype) ρ=+0.21 | |
#5523 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger AR coefficient sum (rho 0.21, n 374). | Autocorrelation strength ρ=+0.21, n=374 | not a candidate | not measured | noisy chaotic (archetype) ρ=+0.18 | |
#100 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger AR coefficient sum (rho 0.21, n 374). | Autocorrelation strength ρ=+0.21, n=374 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.38 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real. The two series columns are the same series in the same order, so a thumbnail and the overlay beside it describe one series seen twice.
What each channel means: see the first target's legend above (same nine channels every target).
Of 6144 probed features, 3327 correlate with a structural property of the series and 4594 with a corpus bookkeeping label (mean |ρ| 0.081 vs 0.166). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#4020 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger AR coefficient sum (rho 0.30, n 374). | Autocorrelation strength ρ=+0.30, n=374 | not a candidate | not measured | noisy chaotic (archetype) ρ=+0.27 | |
#1119 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller number of seasonal components (rho 0.27, n 555). | Seasonal component count ρ=-0.27, n=555 | not a candidate | not measured | trend dominant (archetype) ρ=+0.39 | |
#4928 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller AR coefficient sum (rho 0.26, n 374). | Autocorrelation strength ρ=-0.26, n=374 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.28 | |
#2727 | This feature decreases the forecast's seasonal magnitude on the series it fires on (4.87 times the random-direction null), and also decreases its spread, strongest on series with a smaller number of seasonal components (rho 0.25, n 555). | Seasonal component count ρ=-0.25, n=555 | removing it raises seasonal strength (4.9x its null) | n=8 | ar colored noise (archetype) ρ=+0.28 | |
#2522 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger AR coefficient sum (rho 0.24, n 374). | Autocorrelation strength ρ=+0.24, n=374 | not a candidate | not measured | noisy chaotic (archetype) ρ=+0.14 | |
#5264 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger AR coefficient sum (rho 0.24, n 374). | Autocorrelation strength ρ=+0.24, n=374 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.24 | |
#1941 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a smaller number of seasonal components (rho 0.22, n 555). | Seasonal component count ρ=-0.22, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | realism stress (tier) ρ=+0.48 | |
#490 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.21, n 443). | Dominant period ρ=+0.21, n=443 | not a candidate | not measured | multi seasonal complex (archetype) ρ=+0.22 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real. The two series columns are the same series in the same order, so a thumbnail and the overlay beside it describe one series seen twice.
What each channel means: see the first target's legend above (same nine channels every target).
Of 768 probed features, 353 correlate with a structural property of the series and 447 with a corpus bookkeeping label (mean |ρ| 0.109 vs 0.239). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | Top-activating series (click to enlarge) | Corpus label |
|---|---|---|---|---|
#561 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of seasonal components (rho 0.36, n 555). | Seasonal component count ρ=+0.36, n=555 | random parametric (generator) ρ=+0.34 | |
#585 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger AR coefficient sum (rho 0.30, n 374). | Autocorrelation strength ρ=+0.30, n=374 | ar colored noise (archetype) ρ=+0.18 | |
#15 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.28, n 443). | Dominant period ρ=+0.28, n=443 | realism stress (tier) ρ=+0.37 | |
#106 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.28, n 443). | Dominant period ρ=+0.28, n=443 | multi seasonal complex (archetype) ρ=+0.46 | |
#82 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.26, n 443). | Dominant period ρ=+0.26, n=443 | sequential par (generator) ρ=+0.30 | |
#67 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.25, n 443). | Dominant period ρ=-0.25, n=443 | clean low noise (archetype) ρ=+0.26 | |
#422 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller number of changepoints (rho 0.24, n 555). | Changepoint count ρ=-0.24, n=555 | random parametric (generator) ρ=+0.36 | |
#198 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller number of seasonal components (rho 0.24, n 555). | Seasonal component count ρ=-0.24, n=555 | sequential par (generator) ρ=+0.29 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation.
Of 6144 probed features, 2131 correlate with a structural property of the series and 3458 with a corpus bookkeeping label (mean |ρ| 0.091 vs 0.159). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#2033 | This feature increases the forecast's overall level on the series it fires on (1.87 times the random-direction null), and also moves the near horizon of the forecast, strongest on series with a smaller dominant seasonal period (rho 0.32, n 443). | Dominant period ρ=-0.32, n=443 | removing it lowers level (1.9x its null) | n=8 | parametric (generator) ρ=+0.45 | |
#2518 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.30, n 443). | Dominant period ρ=+0.30, n=443 | not a candidate | not measured | clean low noise (archetype) ρ=+0.24 | |
#5767 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.30, n 443). | Dominant period ρ=-0.30, n=443 | not a candidate | not measured | amplitude modulated (archetype) ρ=+0.18 | |
#5747 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.29, n 443). | Dominant period ρ=+0.29, n=443 | not a candidate | not measured | random walk drift (archetype) ρ=+0.37 | |
#2394 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a larger number of changepoints (rho 0.27, n 555). | Changepoint count ρ=+0.27, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | random walk drift (archetype) ρ=+0.41 | |
#1284 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.26, n 443). | Dominant period ρ=-0.26, n=443 | not a candidate | not measured | random parametric (generator) ρ=+0.13 | |
#1679 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a smaller number of seasonal components (rho 0.25, n 555). | Seasonal component count ρ=-0.25, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | realism stress (tier) ρ=+0.42 | |
#5085 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.25, n 443). | Dominant period ρ=-0.25, n=443 | not a candidate | not measured | clean low noise (archetype) ρ=+0.15 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real. The two series columns are the same series in the same order, so a thumbnail and the overlay beside it describe one series seen twice.
What each channel means: see the first target's legend above (same nine channels every target).
Of 6144 probed features, 3137 correlate with a structural property of the series and 4821 with a corpus bookkeeping label (mean |ρ| 0.088 vs 0.164). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#5065 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.27, n 443). | Dominant period ρ=+0.27, n=443 | not a candidate | not measured | random parametric (generator) ρ=+0.25 | |
#5998 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger AR coefficient sum (rho 0.27, n 374). | Autocorrelation strength ρ=+0.27, n=374 | not a candidate | not measured | sequential par (generator) ρ=+0.25 | |
#4717 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller AR coefficient sum (rho 0.26, n 374). | Autocorrelation strength ρ=-0.26, n=374 | not a candidate | not measured | noisy chaotic (archetype) ρ=+0.20 | |
#3637 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger AR coefficient sum (rho 0.23, n 374). | Autocorrelation strength ρ=+0.23, n=374 | not a candidate | not measured | intermittent bursts (archetype) ρ=+0.32 | |
#4076 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller number of seasonal components (rho 0.23, n 555). | Seasonal component count ρ=-0.23, n=555 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.29 | |
#3288 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of changepoints (rho 0.23, n 555). | Changepoint count ρ=+0.23, n=555 | not a candidate | not measured | regime switching (archetype) ρ=+0.42 | |
#2420 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a smaller number of seasonal components (rho 0.22, n 555). | Seasonal component count ρ=-0.22, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | intermittent bursts (archetype) ρ=+0.36 | |
#2287 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger AR coefficient sum (rho 0.22, n 374). | Autocorrelation strength ρ=+0.22, n=374 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.37 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real. The two series columns are the same series in the same order, so a thumbnail and the overlay beside it describe one series seen twice.
What each channel means: see the first target's legend above (same nine channels every target).
Of 6144 probed features, 2926 correlate with a structural property of the series and 4240 with a corpus bookkeeping label (mean |ρ| 0.087 vs 0.163). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#2763 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.31, n 443). | Dominant period ρ=+0.31, n=443 | not a candidate | not measured | multi seasonal complex (archetype) ρ=+0.32 | |
#4578 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a smaller number of seasonal components (rho 0.28, n 555). | Seasonal component count ρ=-0.28, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | intermittent bursts (archetype) ρ=+0.56 | |
#4502 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger AR coefficient sum (rho 0.27, n 374). | Autocorrelation strength ρ=+0.27, n=374 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.36 | |
#1201 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.26, n 443). | Dominant period ρ=+0.26, n=443 | not a candidate | not measured | clean low noise (archetype) ρ=+0.22 | |
#5006 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of changepoints (rho 0.26, n 555). | Changepoint count ρ=+0.26, n=555 | not a candidate | not measured | random parametric (generator) ρ=-0.36 | |
#2287 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger AR coefficient sum (rho 0.26, n 374). | Autocorrelation strength ρ=+0.26, n=374 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.32 | |
#2775 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.25, n 443). | Dominant period ρ=+0.25, n=443 | not a candidate | not measured | realism stress (tier) ρ=+0.29 | |
#5561 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller AR coefficient sum (rho 0.25, n 374). | Autocorrelation strength ρ=-0.25, n=374 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.26 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real. The two series columns are the same series in the same order, so a thumbnail and the overlay beside it describe one series seen twice.
What each channel means: see the first target's legend above (same nine channels every target).
Of 6144 probed features, 913 correlate with a structural property of the series and 1293 with a corpus bookkeeping label (mean |ρ| 0.097 vs 0.185). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#4325 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.27, n 443). | Dominant period ρ=-0.27, n=443 | not a candidate | not measured | clean low noise (archetype) ρ=+0.17 | |
#1732 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller AR coefficient sum (rho 0.26, n 374). | Autocorrelation strength ρ=-0.26, n=374 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.25 | |
#1593 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller number of changepoints (rho 0.25, n 555). | Changepoint count ρ=-0.25, n=555 | not a candidate | not measured | realism stress (tier) ρ=-0.32 | |
#6017 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of changepoints (rho 0.25, n 555). | Changepoint count ρ=+0.25, n=555 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.23 | |
#5244 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.25, n 443). | Dominant period ρ=+0.25, n=443 | not a candidate | not measured | random parametric (generator) ρ=+0.32 | |
#2978 | This feature decreases the forecast's seasonal magnitude on the series it fires on (4.09 times the random-direction null), and also moves forecast error, strongest on series with a smaller number of seasonal components (rho 0.24, n 555). | Seasonal component count ρ=-0.24, n=555 | removing it raises seasonal strength (4.1x its null) | n=8 | ar colored noise (archetype) ρ=+0.31 | |
#6004 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.23, n 443). | Dominant period ρ=-0.23, n=443 | not a candidate | not measured | seasonal dominant (archetype) ρ=+0.23 | |
#1905 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.23, n 443). | Dominant period ρ=-0.23, n=443 | not a candidate | not measured | seasonal dominant (archetype) ρ=+0.26 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real. The two series columns are the same series in the same order, so a thumbnail and the overlay beside it describe one series seen twice.
What each channel means: see the first target's legend above (same nine channels every target).
Of 6144 probed features, 861 correlate with a structural property of the series and 1203 with a corpus bookkeeping label (mean |ρ| 0.094 vs 0.175). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#1866 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller number of changepoints (rho 0.27, n 555). | Changepoint count ρ=-0.27, n=555 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.25 | |
#5560 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller AR coefficient sum (rho 0.25, n 374). | Autocorrelation strength ρ=-0.25, n=374 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.23 | |
#3471 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.25, n 443). | Dominant period ρ=-0.25, n=443 | not a candidate | not measured | block bootstrap (generator) ρ=+0.31 | |
#4771 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller number of changepoints (rho 0.25, n 555). | Changepoint count ρ=-0.25, n=555 | not a candidate | not measured | intermittent bursts (archetype) ρ=+0.31 | |
#474 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of changepoints (rho 0.23, n 555). | Changepoint count ρ=+0.23, n=555 | not a candidate | not measured | multi seasonal complex (archetype) ρ=+0.16 | |
#5693 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a smaller number of changepoints (rho 0.23, n 555). | Changepoint count ρ=-0.23, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | mixture (generator) ρ=-0.35 | |
#5566 | This feature moves forecast error on the series it fires on (2.75 times the random-direction null), and also increases its spread and its seasonal magnitude, strongest on series with a smaller dominant seasonal period (rho 0.22, n 443). | Dominant period ρ=-0.22, n=443 | removing it lowers accuracy (mase) (2.7x its null) | n=8 | block bootstrap (generator) ρ=+0.31 | |
#2176 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of changepoints (rho 0.22, n 555). | Changepoint count ρ=+0.22, n=555 | not a candidate | not measured | seasonal dominant (archetype) ρ=-0.09 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real. The two series columns are the same series in the same order, so a thumbnail and the overlay beside it describe one series seen twice.
What each channel means: see the first target's legend above (same nine channels every target).
Of 6144 probed features, 460 correlate with a structural property of the series and 674 with a corpus bookkeeping label (mean |ρ| 0.084 vs 0.155). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#712 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a larger number of seasonal components (rho 0.28, n 555). | Seasonal component count ρ=+0.28, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | parametric (generator) ρ=+0.54 | |
#5702 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of seasonal components (rho 0.27, n 555). | Seasonal component count ρ=+0.27, n=555 | not a candidate | not measured | parametric (generator) ρ=+0.47 | |
#3320 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a larger number of seasonal components (rho 0.26, n 555). | Seasonal component count ρ=+0.26, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | parametric (generator) ρ=+0.56 | |
#301 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of seasonal components (rho 0.26, n 555). | Seasonal component count ρ=+0.26, n=555 | not a candidate | not measured | parametric (generator) ρ=+0.50 | |
#5638 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a larger number of seasonal components (rho 0.26, n 555). | Seasonal component count ρ=+0.26, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | parametric (generator) ρ=+0.46 | |
#4370 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of seasonal components (rho 0.26, n 555). | Seasonal component count ρ=+0.26, n=555 | not a candidate | not measured | parametric (generator) ρ=+0.39 | |
#1136 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of seasonal components (rho 0.25, n 555). | Seasonal component count ρ=+0.25, n=555 | not a candidate | not measured | parametric (generator) ρ=+0.48 | |
#1568 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of seasonal components (rho 0.25, n 555). | Seasonal component count ρ=+0.25, n=555 | not a candidate | not measured | parametric (generator) ρ=+0.47 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real. The two series columns are the same series in the same order, so a thumbnail and the overlay beside it describe one series seen twice.
What each channel means: see the first target's legend above (same nine channels every target).
Of 6144 probed features, 722 correlate with a structural property of the series and 1131 with a corpus bookkeeping label (mean |ρ| 0.080 vs 0.146). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#574 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.30, n 443). | Dominant period ρ=-0.30, n=443 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.23 | |
#3751 | This feature decreases forecast error on the series it fires on (1.44 times the random-direction null), strongest on series with a smaller dominant seasonal period (rho 0.25, n 443). | Dominant period ρ=-0.25, n=443 | removing it raises accuracy (mase) (1.5x its null) | n=8 | mixture (generator) ρ=-0.32 | |
#956 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a smaller dominant seasonal period (rho 0.25, n 443). | Dominant period ρ=-0.25, n=443 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | realism stress (tier) ρ=+0.35 | |
#2106 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a smaller dominant seasonal period (rho 0.25, n 443). | Dominant period ρ=-0.25, n=443 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | random parametric (generator) ρ=-0.27 | |
#1742 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.24, n 443). | Dominant period ρ=-0.24, n=443 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.32 | |
#5638 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.24, n 443). | Dominant period ρ=-0.24, n=443 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.30 | |
#1136 | This feature moves the forecast's spectral centroid on the series it fires on (1.62 times the random-direction null), and also moves its seasonal magnitude, strongest on series with a larger number of seasonal components (rho 0.23, n 555). | Seasonal component count ρ=+0.23, n=555 | removing it raises frequency balance (1.6x its null) | n=8 | realism stress (tier) ρ=-0.30 | |
#3038 | This feature decreases forecast error on the series it fires on (2.77 times the random-direction null), and also increases its spread and moves its trend slope, strongest on series with a smaller dominant seasonal period (rho 0.22, n 443). | Dominant period ρ=-0.22, n=443 | removing it raises accuracy (mase) (2.8x its null) | n=8 | parametric (generator) ρ=+0.31 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real. The two series columns are the same series in the same order, so a thumbnail and the overlay beside it describe one series seen twice.
What each channel means: see the first target's legend above (same nine channels every target).
Of 6144 probed features, 439 correlate with a structural property of the series and 564 with a corpus bookkeeping label (mean |ρ| 0.098 vs 0.165). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#2996 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.26, n 443). | Dominant period ρ=-0.26, n=443 | not a candidate | not measured | intermittent bursts (archetype) ρ=+0.34 | |
#964 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.26, n 443). | Dominant period ρ=-0.26, n=443 | not a candidate | not measured | random parametric (generator) ρ=-0.17 | |
#286 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.24, n 443). | Dominant period ρ=-0.24, n=443 | not a candidate | not measured | trend dominant (archetype) ρ=-0.21 | |
#5258 | This feature moves the forecast's spread on the series it fires on (2.01 times the random-direction null), and also moves its trend slope, strongest on series with a larger dominant seasonal period (rho 0.24, n 443). | Dominant period ρ=+0.24, n=443 | removing it lowers seasonal strength (2.9x its null) | n=8 | random parametric (generator) ρ=+0.30 | |
#6042 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.24, n 443). | Dominant period ρ=-0.24, n=443 | not a candidate | not measured | parametric (generator) ρ=+0.31 | |
#5822 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.23, n 443). | Dominant period ρ=-0.23, n=443 | not a candidate | not measured | intermittent bursts (archetype) ρ=+0.36 | |
#3458 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.23, n 443). | Dominant period ρ=+0.23, n=443 | not a candidate | not measured | multi seasonal complex (archetype) ρ=+0.28 | |
#4537 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of changepoints (rho 0.22, n 555). | Changepoint count ρ=+0.22, n=555 | not a candidate | not measured | multi seasonal complex (archetype) ρ=+0.15 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real. The two series columns are the same series in the same order, so a thumbnail and the overlay beside it describe one series seen twice.
What each channel means: see the first target's legend above (same nine channels every target).
Of 6144 probed features, 634 correlate with a structural property of the series and 979 with a corpus bookkeeping label (mean |ρ| 0.081 vs 0.144). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#1192 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of seasonal components (rho 0.28, n 555). | Seasonal component count ρ=+0.28, n=555 | not a candidate | not measured | parametric (generator) ρ=+0.30 | |
#3534 | This feature moves forecast error on the series it fires on (1.09 times the random-direction null), strongest on series with a larger number of seasonal components (rho 0.28, n 555). | Seasonal component count ρ=+0.28, n=555 | removing it raises accuracy (mase) (1.1x its null) | n=8 | realism stress (tier) ρ=-0.42 | |
#574 | This feature increases the forecast's overall level on the series it fires on (1.13 times the random-direction null), and also decreases its spectral centroid, strongest on series with a smaller dominant seasonal period (rho 0.27, n 443). | Dominant period ρ=-0.27, n=443 | removing it lowers level (1.1x its null) | n=8 | parametric (generator) ρ=+0.40 | |
#2106 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.25, n 443). | Dominant period ρ=-0.25, n=443 | not a candidate | not measured | random parametric (generator) ρ=-0.45 | |
#5247 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.24, n 443). | Dominant period ρ=-0.24, n=443 | not a candidate | not measured | parametric (generator) ρ=+0.35 | |
#712 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of seasonal components (rho 0.24, n 555). | Seasonal component count ρ=+0.24, n=555 | not a candidate | not measured | random walk drift (archetype) ρ=-0.31 | |
#4664 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a smaller dominant seasonal period (rho 0.23, n 443). | Dominant period ρ=-0.23, n=443 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | realism stress (tier) ρ=-0.53 | |
#453 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a larger number of seasonal components (rho 0.23, n 555). | Seasonal component count ρ=+0.23, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | realism stress (tier) ρ=-0.52 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real. The two series columns are the same series in the same order, so a thumbnail and the overlay beside it describe one series seen twice.
What each channel means: see the first target's legend above (same nine channels every target).
Of 6144 probed features, 2760 correlate with a structural property of the series and 4042 with a corpus bookkeeping label (mean |ρ| 0.084 vs 0.166). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#2278 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.28, n 443). | Dominant period ρ=-0.28, n=443 | not a candidate | not measured | block bootstrap (generator) ρ=+0.23 | |
#3134 | This feature moves forecast error on the series it fires on (2.44 times the random-direction null), and also decreases its spectral centroid and increases its trend slope, strongest on series with a larger AR coefficient sum (rho 0.26, n 374). | Autocorrelation strength ρ=+0.26, n=374 | removing it lowers accuracy (mase) (2.4x its null) | n=8 | intermittent bursts (archetype) ρ=+0.22 | |
#3440 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.24, n 443). | Dominant period ρ=-0.24, n=443 | not a candidate | not measured | random parametric (generator) ρ=+0.14 | |
#3224 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of seasonal components (rho 0.24, n 555). | Seasonal component count ρ=+0.24, n=555 | not a candidate | not measured | realism stress (tier) ρ=-0.41 | |
#4426 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller number of seasonal components (rho 0.23, n 555). | Seasonal component count ρ=-0.23, n=555 | not a candidate | not measured | anomaly heavy (archetype) ρ=+0.38 | |
#5513 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller number of seasonal components (rho 0.23, n 555). | Seasonal component count ρ=-0.23, n=555 | not a candidate | not measured | trend dominant (archetype) ρ=+0.42 | |
#5716 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller AR coefficient sum (rho 0.23, n 374). | Autocorrelation strength ρ=-0.23, n=374 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.19 | |
#3868 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.22, n 443). | Dominant period ρ=+0.22, n=443 | not a candidate | not measured | seasonal dominant (archetype) ρ=-0.25 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real. The two series columns are the same series in the same order, so a thumbnail and the overlay beside it describe one series seen twice.
What each channel means: see the first target's legend above (same nine channels every target).
Of 6144 probed features, 3362 correlate with a structural property of the series and 4553 with a corpus bookkeeping label (mean |ρ| 0.082 vs 0.169). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#4680 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller AR coefficient sum (rho 0.25, n 374). | Autocorrelation strength ρ=-0.25, n=374 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.36 | |
#4051 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller AR coefficient sum (rho 0.24, n 374). | Autocorrelation strength ρ=-0.24, n=374 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.37 | |
#2727 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger AR coefficient sum (rho 0.23, n 374). | Autocorrelation strength ρ=+0.23, n=374 | not a candidate | not measured | noisy chaotic (archetype) ρ=+0.24 | |
#3432 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller number of seasonal components (rho 0.23, n 555). | Seasonal component count ρ=-0.23, n=555 | not a candidate | not measured | anomaly heavy (archetype) ρ=+0.41 | |
#4077 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller AR coefficient sum (rho 0.23, n 374). | Autocorrelation strength ρ=-0.23, n=374 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.22 | |
#1138 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger AR coefficient sum (rho 0.23, n 374). | Autocorrelation strength ρ=+0.23, n=374 | not a candidate | not measured | noisy chaotic (archetype) ρ=+0.19 | |
#1310 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger AR coefficient sum (rho 0.23, n 374). | Autocorrelation strength ρ=+0.23, n=374 | not a candidate | not measured | noisy chaotic (archetype) ρ=+0.25 | |
#5639 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller number of changepoints (rho 0.23, n 555). | Changepoint count ρ=-0.23, n=555 | not a candidate | not measured | anomaly heavy (archetype) ρ=+0.18 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real.
What each channel means: see the first target's legend above (same nine channels every target).
Of 6144 probed features, 3085 correlate with a structural property of the series and 4792 with a corpus bookkeeping label (mean |ρ| 0.087 vs 0.162). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#5065 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.28, n 443). | Dominant period ρ=+0.28, n=443 | not a candidate | not measured | clean low noise (archetype) ρ=+0.28 | |
#1679 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a smaller number of seasonal components (rho 0.27, n 555). | Seasonal component count ρ=-0.27, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | realism stress (tier) ρ=+0.41 | |
#3027 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller AR coefficient sum (rho 0.25, n 374). | Autocorrelation strength ρ=-0.25, n=374 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.21 | |
#2535 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller AR coefficient sum (rho 0.25, n 374). | Autocorrelation strength ρ=-0.25, n=374 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.26 | |
#352 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger AR coefficient sum (rho 0.24, n 374). | Autocorrelation strength ρ=+0.24, n=374 | not a candidate | not measured | intermittent bursts (archetype) ρ=+0.27 | |
#1425 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.23, n 443). | Dominant period ρ=+0.23, n=443 | not a candidate | not measured | clean low noise (archetype) ρ=+0.33 | |
#2953 | This feature moves the far horizon of the forecast on the series it fires on (1.11 times the random-direction null), strongest on series with a smaller number of seasonal components (rho 0.23, n 555). | Seasonal component count ρ=-0.23, n=555 | removing it reshapes far horizon (1.1x its null) | n=8 | realism stress (tier) ρ=+0.44 | |
#1285 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger AR coefficient sum (rho 0.22, n 374). | Autocorrelation strength ρ=+0.22, n=374 | not a candidate | not measured | sequential par (generator) ρ=+0.21 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real. The two series columns are the same series in the same order, so a thumbnail and the overlay beside it describe one series seen twice.
What each channel means: see the first target's legend above (same nine channels every target).
Of 6144 probed features, 2438 correlate with a structural property of the series and 4073 with a corpus bookkeeping label (mean |ρ| 0.089 vs 0.157). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#5065 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.38, n 443). | Dominant period ρ=+0.38, n=443 | not a candidate | not measured | multi seasonal complex (archetype) ρ=+0.26 | |
#2033 | This feature moves the near horizon of the forecast on the series it fires on (2.57 times the random-direction null), strongest on series with a smaller dominant seasonal period (rho 0.30, n 443). | Dominant period ρ=-0.30, n=443 | removing it reshapes near horizon (2.6x its null) | n=8 | parametric (generator) ρ=+0.47 | |
#2336 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller AR coefficient sum (rho 0.26, n 374). | Autocorrelation strength ρ=-0.26, n=374 | not a candidate | not measured | noisy chaotic (archetype) ρ=+0.22 | |
#4672 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.26, n 443). | Dominant period ρ=+0.26, n=443 | not a candidate | not measured | clean low noise (archetype) ρ=+0.34 | |
#5686 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.25, n 443). | Dominant period ρ=+0.25, n=443 | not a candidate | not measured | clean low noise (archetype) ρ=+0.39 | |
#1284 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.24, n 443). | Dominant period ρ=-0.24, n=443 | not a candidate | not measured | random parametric (generator) ρ=+0.15 | |
#5318 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger AR coefficient sum (rho 0.24, n 374). | Autocorrelation strength ρ=+0.24, n=374 | not a candidate | not measured | realism stress (tier) ρ=+0.37 | |
#4902 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a smaller number of seasonal components (rho 0.24, n 555). | Seasonal component count ρ=-0.24, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | intermittent bursts (archetype) ρ=+0.33 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real. The two series columns are the same series in the same order, so a thumbnail and the overlay beside it describe one series seen twice.
What each channel means: see the first target's legend above (same nine channels every target).
Of 6144 probed features, 2646 correlate with a structural property of the series and 4425 with a corpus bookkeeping label (mean |ρ| 0.089 vs 0.158). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#5065 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.38, n 443). | Dominant period ρ=+0.38, n=443 | not a candidate | not measured | multi seasonal complex (archetype) ρ=+0.31 | |
#2354 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller number of seasonal components (rho 0.32, n 555). | Seasonal component count ρ=-0.32, n=555 | not a candidate | not measured | sequential par (generator) ρ=+0.41 | |
#2033 | This feature moves the near horizon of the forecast on the series it fires on (3.36 times the random-direction null), and also increases its trend slope, strongest on series with a smaller dominant seasonal period (rho 0.31, n 443). | Dominant period ρ=-0.31, n=443 | removing it reshapes near horizon (3.4x its null) | n=8 | parametric (generator) ρ=+0.46 | |
#1284 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.27, n 443). | Dominant period ρ=-0.27, n=443 | not a candidate | not measured | clean low noise (archetype) ρ=+0.18 | |
#1300 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.25, n 443). | Dominant period ρ=+0.25, n=443 | not a candidate | not measured | multi seasonal complex (archetype) ρ=+0.47 | |
#2146 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller AR coefficient sum (rho 0.25, n 374). | Autocorrelation strength ρ=-0.25, n=374 | not a candidate | not measured | noisy chaotic (archetype) ρ=+0.24 | |
#3912 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.24, n 443). | Dominant period ρ=-0.24, n=443 | not a candidate | not measured | seasonal dominant (archetype) ρ=+0.16 | |
#5413 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger AR coefficient sum (rho 0.23, n 374). | Autocorrelation strength ρ=+0.23, n=374 | not a candidate | not measured | sequential par (generator) ρ=+0.30 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real. The two series columns are the same series in the same order, so a thumbnail and the overlay beside it describe one series seen twice.
What each channel means: see the first target's legend above (same nine channels every target).
Of 6144 probed features, 952 correlate with a structural property of the series and 1351 with a corpus bookkeeping label (mean |ρ| 0.096 vs 0.182). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#4586 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a larger dominant seasonal period (rho 0.29, n 443). | Dominant period ρ=+0.29, n=443 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | realism stress (tier) ρ=+0.39 | |
#5068 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.27, n 443). | Dominant period ρ=-0.27, n=443 | not a candidate | not measured | clean low noise (archetype) ρ=+0.16 | |
#2365 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.27, n 443). | Dominant period ρ=-0.27, n=443 | not a candidate | not measured | parametric (generator) ρ=+0.47 | |
#259 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.26, n 443). | Dominant period ρ=+0.26, n=443 | not a candidate | not measured | random walk drift (archetype) ρ=+0.27 | |
#4027 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.25, n 443). | Dominant period ρ=+0.25, n=443 | not a candidate | not measured | random parametric (generator) ρ=+0.23 | |
#4140 | This feature increases the forecast's trend slope on the series it fires on (1.25 times the random-direction null), and also moves the near horizon of the forecast, strongest on series with a smaller dominant seasonal period (rho 0.24, n 443). | Dominant period ρ=-0.24, n=443 | removing it lowers trend (1.3x its null) | n=8 | amplitude modulated (archetype) ρ=+0.27 | |
#3111 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.23, n 443). | Dominant period ρ=+0.23, n=443 | not a candidate | not measured | random parametric (generator) ρ=+0.36 | |
#2514 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.23, n 443). | Dominant period ρ=+0.23, n=443 | not a candidate | not measured | mixture (generator) ρ=+0.21 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real. The two series columns are the same series in the same order, so a thumbnail and the overlay beside it describe one series seen twice.
What each channel means: see the first target's legend above (same nine channels every target).
Of 6144 probed features, 636 correlate with a structural property of the series and 955 with a corpus bookkeeping label (mean |ρ| 0.080 vs 0.148). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#712 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of seasonal components (rho 0.27, n 555). | Seasonal component count ρ=+0.27, n=555 | not a candidate | not measured | parametric (generator) ρ=+0.48 | |
#5702 | This feature decreases the forecast's overall level on the series it fires on (2.03 times the random-direction null), strongest on series with a larger number of seasonal components (rho 0.27, n 555). | Seasonal component count ρ=+0.27, n=555 | removing it raises level (2.0x its null) | n=8 | parametric (generator) ρ=+0.39 | |
#137 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a larger number of seasonal components (rho 0.26, n 555). | Seasonal component count ρ=+0.26, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | parametric (generator) ρ=+0.55 | |
#574 | This feature decreases forecast error on the series it fires on (1.29 times the random-direction null), and also decreases its spectral centroid and increases its overall level, strongest on series with a smaller dominant seasonal period (rho 0.26, n 443). | Dominant period ρ=-0.26, n=443 | removing it raises accuracy (mase) (1.3x its null) | n=8 | parametric (generator) ρ=+0.49 | |
#3534 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a larger number of seasonal components (rho 0.25, n 555). | Seasonal component count ρ=+0.25, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | parametric (generator) ρ=+0.49 | |
#533 | This feature increases the forecast's trend slope on the series it fires on (1.44 times the random-direction null), strongest on series with a larger number of seasonal components (rho 0.25, n 555). | Seasonal component count ρ=+0.25, n=555 | removing it lowers trend (1.4x its null) | n=8 | parametric (generator) ρ=+0.55 | |
#1136 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.24, n 443). | Dominant period ρ=-0.24, n=443 | not a candidate | not measured | parametric (generator) ρ=+0.30 | |
#453 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger number of seasonal components (rho 0.24, n 555). | Seasonal component count ρ=+0.24, n=555 | not a candidate | not measured | parametric (generator) ρ=+0.42 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real. The two series columns are the same series in the same order, so a thumbnail and the overlay beside it describe one series seen twice.
What each channel means: see the first target's legend above (same nine channels every target).
Of 6144 probed features, 1926 correlate with a structural property of the series and 2868 with a corpus bookkeeping label (mean |ρ| 0.088 vs 0.171). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#3087 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller number of seasonal components (rho 0.31, n 555). | Seasonal component count ρ=-0.31, n=555 | not a candidate | not measured | trend dominant (archetype) ρ=+0.36 | |
#652 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller AR coefficient sum (rho 0.29, n 374). | Autocorrelation strength ρ=-0.29, n=374 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.41 | |
#2346 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger AR coefficient sum (rho 0.28, n 374). | Autocorrelation strength ρ=+0.28, n=374 | not a candidate | not measured | random walk drift (archetype) ρ=+0.34 | |
#3585 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.27, n 443). | Dominant period ρ=+0.27, n=443 | not a candidate | not measured | parametric (generator) ρ=+0.53 | |
#3404 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller AR coefficient sum (rho 0.25, n 374). | Autocorrelation strength ρ=-0.25, n=374 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.34 | |
#1575 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller AR coefficient sum (rho 0.24, n 374). | Autocorrelation strength ρ=-0.24, n=374 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.41 | |
#3440 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.24, n 443). | Dominant period ρ=-0.24, n=443 | not a candidate | not measured | clean low noise (archetype) ρ=+0.13 | |
#623 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.23, n 443). | Dominant period ρ=+0.23, n=443 | not a candidate | not measured | random walk drift (archetype) ρ=+0.46 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real.
What each channel means: see the first target's legend above (same nine channels every target).
Of 6144 probed features, 1635 correlate with a structural property of the series and 2481 with a corpus bookkeeping label (mean |ρ| 0.091 vs 0.170). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#3168 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger AR coefficient sum (rho 0.28, n 374). | Autocorrelation strength ρ=+0.28, n=374 | not a candidate | not measured | noisy chaotic (archetype) ρ=+0.30 | |
#3087 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller number of seasonal components (rho 0.28, n 555). | Seasonal component count ρ=-0.28, n=555 | not a candidate | not measured | trend dominant (archetype) ρ=+0.40 | |
#4297 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger AR coefficient sum (rho 0.27, n 374). | Autocorrelation strength ρ=+0.27, n=374 | not a candidate | not measured | nonsinusoidal seasonal (archetype) ρ=+0.33 | |
#426 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.25, n 443). | Dominant period ρ=+0.25, n=443 | not a candidate | not measured | multi seasonal complex (archetype) ρ=+0.40 | |
#5488 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.24, n 443). | Dominant period ρ=-0.24, n=443 | not a candidate | not measured | clean low noise (archetype) ρ=+0.13 | |
#2917 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller number of changepoints (rho 0.24, n 555). | Changepoint count ρ=-0.24, n=555 | not a candidate | not measured | intermittent bursts (archetype) ρ=+0.34 | |
#5793 | This feature increases the forecast's spread on the series it fires on (5.24 times the random-direction null), and also moves the near horizon of the forecast, strongest on series with a smaller dominant seasonal period (rho 0.24, n 443). | Dominant period ρ=-0.24, n=443 | removing it lowers spread (5.2x its null) | n=8 | multi seasonal complex (archetype) ρ=+0.19 | |
#5003 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.24, n 443). | Dominant period ρ=-0.24, n=443 | not a candidate | not measured | clean low noise (archetype) ρ=+0.13 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real. The two series columns are the same series in the same order, so a thumbnail and the overlay beside it describe one series seen twice.
What each channel means: see the first target's legend above (same nine channels every target).
Of 6144 probed features, 2258 correlate with a structural property of the series and 3716 with a corpus bookkeeping label (mean |ρ| 0.091 vs 0.155). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#2033 | This feature moves the forecast's overall level on the series it fires on (3.11 times the random-direction null), and also moves the near horizon of the forecast, strongest on series with a smaller dominant seasonal period (rho 0.32, n 443). | Dominant period ρ=-0.32, n=443 | removing it raises level (3.1x its null) | n=8 | parametric (generator) ρ=+0.43 | |
#5065 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.32, n 443). | Dominant period ρ=+0.32, n=443 | not a candidate | not measured | clean low noise (archetype) ρ=+0.14 | |
#4902 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a smaller number of seasonal components (rho 0.28, n 555). | Seasonal component count ρ=-0.28, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | sequential par (generator) ρ=+0.35 | |
#1284 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.27, n 443). | Dominant period ρ=-0.27, n=443 | not a candidate | not measured | random parametric (generator) ρ=+0.15 | |
#853 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.25, n 443). | Dominant period ρ=+0.25, n=443 | not a candidate | not measured | clean low noise (archetype) ρ=+0.40 | |
#5486 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a smaller number of seasonal components (rho 0.25, n 555). | Seasonal component count ρ=-0.25, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | ar colored noise (archetype) ρ=+0.27 | |
#4148 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.24, n 443). | Dominant period ρ=-0.24, n=443 | not a candidate | not measured | clean low noise (archetype) ρ=+0.18 | |
#1679 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger AR coefficient sum (rho 0.23, n 374). | Autocorrelation strength ρ=+0.23, n=374 | not a candidate | not measured | random walk drift (archetype) ρ=+0.27 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real. The two series columns are the same series in the same order, so a thumbnail and the overlay beside it describe one series seen twice.
What each channel means: see the first target's legend above (same nine channels every target).
Of 6144 probed features, 2134 correlate with a structural property of the series and 3584 with a corpus bookkeeping label (mean |ρ| 0.090 vs 0.156). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#2033 | This feature increases the forecast's overall level on the series it fires on (2.90 times the random-direction null), and also moves the near horizon of the forecast, strongest on series with a smaller dominant seasonal period (rho 0.34, n 443). | Dominant period ρ=-0.34, n=443 | removing it lowers level (2.9x its null) | n=8 | parametric (generator) ρ=+0.45 | |
#5065 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.32, n 443). | Dominant period ρ=+0.32, n=443 | not a candidate | not measured | multi seasonal complex (archetype) ρ=+0.35 | |
#5486 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller number of seasonal components (rho 0.29, n 555). | Seasonal component count ρ=-0.29, n=555 | not a candidate | not measured | sequential par (generator) ρ=+0.24 | |
#5318 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger AR coefficient sum (rho 0.28, n 374). | Autocorrelation strength ρ=+0.28, n=374 | not a candidate | not measured | parametric (generator) ρ=-0.32 | |
#1284 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.27, n 443). | Dominant period ρ=-0.27, n=443 | not a candidate | not measured | random parametric (generator) ρ=+0.13 | |
#1626 | This feature moves the near horizon of the forecast on the series it fires on (1.75 times the random-direction null), and also decreases its spread, strongest on series with a larger number of seasonal components (rho 0.27, n 555). | Seasonal component count ρ=+0.27, n=555 | removing it reshapes near horizon (1.8x its null) | n=8 | realism stress (tier) ρ=-0.61 | |
#2354 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller number of seasonal components (rho 0.25, n 555). | Seasonal component count ρ=-0.25, n=555 | not a candidate | not measured | random parametric (generator) ρ=+0.30 | |
#4148 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller dominant seasonal period (rho 0.25, n 443). | Dominant period ρ=-0.25, n=443 | not a candidate | not measured | clean low noise (archetype) ρ=+0.14 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real. The two series columns are the same series in the same order, so a thumbnail and the overlay beside it describe one series seen twice.
What each channel means: see the first target's legend above (same nine channels every target).
Of 6144 probed features, 2898 correlate with a structural property of the series and 4601 with a corpus bookkeeping label (mean |ρ| 0.087 vs 0.161). Only the structural column is a statement about the model.
| Feature | What it looks like it does | Structural correlate | What removing it does | Top-activating series (click to enlarge) | Forecast with · without (click to enlarge) | Corpus label |
|---|---|---|---|---|---|---|
#1679 | This feature changed nothing above the random-direction null when removed from the series it fires on; it is strongest on series with a smaller number of seasonal components (rho 0.27, n 555). | Seasonal component count ρ=-0.27, n=555 | removing it moves no channel past its own null | 1 feature whose ablation did not move any channel past its own null — click to view its forecasts anywayn=8 | intermittent bursts (archetype) ρ=+0.47 | |
#4495 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.26, n 443). | Dominant period ρ=+0.26, n=443 | not a candidate | not measured | clean low noise (archetype) ρ=+0.45 | |
#2354 | This feature moves the near horizon of the forecast on the series it fires on (2.11 times the random-direction null), and also decreases its overall level, strongest on series with a smaller number of seasonal components (rho 0.25, n 555). | Seasonal component count ρ=-0.25, n=555 | removing it lowers frequency balance (2.1x its null) | n=8 | intermittent bursts (archetype) ρ=+0.44 | |
#5065 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.25, n 443). | Dominant period ρ=+0.25, n=443 | not a candidate | not measured | multi seasonal complex (archetype) ρ=+0.20 | |
#3318 | This feature was not tested for an effect on the forecast; it is strongest on series with a larger dominant seasonal period (rho 0.24, n 443). | Dominant period ρ=+0.24, n=443 | not a candidate | not measured | clean low noise (archetype) ρ=+0.37 | |
#4807 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller AR coefficient sum (rho 0.24, n 374). | Autocorrelation strength ρ=-0.24, n=374 | not a candidate | not measured | noisy chaotic (archetype) ρ=+0.23 | |
#5362 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller AR coefficient sum (rho 0.24, n 374). | Autocorrelation strength ρ=-0.24, n=374 | not a candidate | not measured | ar colored noise (archetype) ρ=+0.23 | |
#4902 | This feature was not tested for an effect on the forecast; it is strongest on series with a smaller number of seasonal components (rho 0.24, n 555). | Seasonal component count ρ=-0.24, n=555 | not a candidate | not measured | sequential par (generator) ρ=+0.30 |
One row per sparse feature, strongest structural correlate first. Each thumbnail is a series this feature fires hardest on -- grey is the context the model saw, dark the true continuation. The last two columns are causal rather than correlational: the feature is zeroed out of the reconstruction on the series it fires hardest on, and the paired forecasts show what its removal changes. The baseline there is the SAE's own full reconstruction, so the gap between the two lines is this feature's contribution and not the dictionary's; the third, muted trace is the RAW model forecast with no SAE reconstruction at all, so the gap between it and the baseline is the dictionary's own reconstruction cost, drawn on the same axes. The narrow strip BELOW each chart is that same gap (with the feature minus without it) drawn on its own scale, so a small effect is still visible even when it is too small to see as two overlapping lines above; the dotted line through it is zero, i.e. no difference. A channel is only counted as ‘cleared’ when the feature's own effect exceeds what removing that much of an ARBITRARY random direction does -- not simply whether the forecast moved. A candidate whose battery cleared nothing is collapsed below (still fully present in the DOM), since the measurement, not the picture, is what says whether an effect is real. The two series columns are the same series in the same order, so a thumbnail and the overlay beside it describe one series seen twice.
What each channel means: see the first target's legend above (same nine channels every target).
For each SAE target, the series-level ground-truth feature-alignment score is computed for every dictionary feature; this table shows, for the top few features with a significant ground-truth match, the exemplar series that feature fires hardest on -- the field it matches, that match's Spearman ρ, and (`field_value`) that exemplar series' own actual value of the matched field, so a reader can eyeball whether the correlation the number claims is real.
How to read it
A high |ρ| with `field_value` varying sensibly across the listed exemplars (e.g. activation tracking a seasonal period or trend order up and down) is a genuine, ground-truth-verified interpretable feature. `activation` is that feature's own encoded value for the listed series, not comparable in scale across different features or models.
Limitations
Illustrative evidence only, same class as the Exemplars section -- a feature firing here is not a causal claim about the forecast. A feature-level ablation/steering battery exists and has real-checkpoint numbers on record, but is off by default and not shown in this table. Only the small alive fraction of the dictionary can ever appear here (dead-feature rate is typically 90%+, shown above per target); real-derived-tier series carry no ground truth and never appear as exemplars regardless of how hard a feature fires on them. Separately, the 'ground-truth alignment' line's mean |ρ| above picks, per feature, the best of many candidate ground-truth fields -- a real inflation above zero from that search alone, even on pure noise, since the max of many weak correlations is not itself weak. The label-permutation null next to it reruns the identical search with each feature's series correspondence shuffled, so it shows how large that same number gets by chance; only a mean |ρ| clearly above the null's p95 supports reading the dictionary's alignment as real structure rather than search inflation.
3 of 29 targets' forecast-preservation ΔMASE is larger than 2× its own seed-to-seed spread. Each cell in the table below is the mean across seeds ± its spread; the two ΔMASE columns are IDENTICAL by construction for a model whose token width equals the alignment window, so where they differ the gap is the window-broadcast confound rather than a second opinion. 🔴 The frozen-store control FAILED at TimesFM/stacked_xf.10 (mase_clean_window sd 0.00596), TimesFM/stacked_xf.10 (mase_clean_token sd 0.00596), TimesFM/stacked_xf.18 (mase_clean_window sd 0.00596), TimesFM/stacked_xf.18 (mase_clean_token sd 0.00596), TimesFM/stacked_xf.6 (mase_clean_window sd 0.00596), TimesFM/stacked_xf.6 (mase_clean_token sd 0.00596), TimesFM/stacked_xf.16 (mase_clean_window sd 0.00596), TimesFM/stacked_xf.16 (mase_clean_token sd 0.00596), TimesFM/stacked_xf.2 (mase_clean_window sd 0.00596), TimesFM/stacked_xf.2 (mase_clean_token sd 0.00596), Chronos-2/encoder.block.8 (mase_clean_window sd 0.0959), Chronos-2/encoder.block.8 (mase_clean_token sd 0.0959), Chronos-2/encoder.block.10 (mase_clean_window sd 0.0959), Chronos-2/encoder.block.10 (mase_clean_token sd 0.0959), Chronos-2/encoder.block.11 (mase_clean_window sd 0.0959), Chronos-2/encoder.block.11 (mase_clean_token sd 0.0959), Sundial/model.layers.3 (mase_clean_window sd 0.378), Sundial/model.layers.3 (mase_clean_token sd 0.378), Sundial/model.layers.10 (mase_clean_window sd 0.378), Sundial/model.layers.10 (mase_clean_token sd 0.378), Sundial/model.layers.11 (mase_clean_window sd 0.378), Sundial/model.layers.11 (mase_clean_token sd 0.378), Chronos-Bolt/encoder.block.4 (mase_clean_window sd 0.105), Chronos-Bolt/encoder.block.4 (mase_clean_token sd 0.105), Chronos-Bolt/encoder.block.5 (mase_clean_window sd 0.105), Chronos-Bolt/encoder.block.5 (mase_clean_token sd 0.105), TimesFM/stacked_xf.14 (mase_clean_window sd 0.00596), TimesFM/stacked_xf.14 (mase_clean_token sd 0.00596), TimesFM/stacked_xf.4 (mase_clean_window sd 0.00596), TimesFM/stacked_xf.4 (mase_clean_token sd 0.00596), TimesFM/stacked_xf.0 (mase_clean_window sd 0.00596), TimesFM/stacked_xf.0 (mase_clean_token sd 0.00596), TimesFM/stacked_xf.8 (mase_clean_window sd 0.00596), TimesFM/stacked_xf.8 (mase_clean_token sd 0.00596), Chronos-2/encoder.block.7 (mase_clean_window sd 0.0959), Chronos-2/encoder.block.7 (mase_clean_token sd 0.0959), Chronos-2/encoder.block.9 (mase_clean_window sd 0.0959), Chronos-2/encoder.block.9 (mase_clean_token sd 0.0959), Sundial/model.layers.9 (mase_clean_window sd 0.378), Sundial/model.layers.9 (mase_clean_token sd 0.378), Sundial/model.layers.6 (mase_clean_window sd 0.378), Sundial/model.layers.6 (mase_clean_token sd 0.378), Sundial/model.layers.7 (mase_clean_window sd 0.378), Sundial/model.layers.7 (mase_clean_token sd 0.378), Chronos-Bolt/encoder.block.3 (mase_clean_window sd 0.105), Chronos-Bolt/encoder.block.3 (mase_clean_token sd 0.105), TimesFM/stacked_xf.12 (mase_clean_window sd 0.00596), TimesFM/stacked_xf.12 (mase_clean_token sd 0.00596), Chronos-2/encoder.block.6 (mase_clean_window sd 0.0959), Chronos-2/encoder.block.6 (mase_clean_token sd 0.0959), Chronos-2/encoder.block.5 (mase_clean_window sd 0.0959), Chronos-2/encoder.block.5 (mase_clean_token sd 0.0959), Sundial/model.layers.5 (mase_clean_window sd 0.378), Sundial/model.layers.5 (mase_clean_token sd 0.378), Sundial/model.layers.4 (mase_clean_window sd 0.378), Sundial/model.layers.4 (mase_clean_token sd 0.378), Sundial/model.layers.8 (mase_clean_window sd 0.378), Sundial/model.layers.8 (mase_clean_token sd 0.378) — the unpatched forecast moved between seeds, so something other than the SAE seed varied and every spread above is suspect.
| target | seeds | reconstruction fidelity | dead-feature rate | ΔMASE (token) | ΔMASE (window) | is that ΔMASE resolvable at one seed? |
|---|---|---|---|---|---|---|
| TimesFM/stacked_xf.10 | 3 | 0.880 ± 0.004 | 0.219 ± 0.042 | -0.059 ± 0.088 | -0.059 ± 0.088 | NOT resolvable — 0.7× its own seed spread (bar is 2×) |
| TimesFM/stacked_xf.18 | 3 | 0.904 ± 0.005 | 0.143 ± 0.029 | 0.030 ± 0.079 | 0.030 ± 0.079 | NOT resolvable — 0.4× its own seed spread (bar is 2×) |
| TimesFM/stacked_xf.6 | 3 | 0.899 ± 0.003 | 0.176 ± 0.012 | -0.101 ± 0.127 | -0.101 ± 0.127 | NOT resolvable — 0.8× its own seed spread (bar is 2×) |
| TimesFM/stacked_xf.16 | 3 | 0.900 ± 0.010 | 0.142 ± 0.045 | 0.075 ± 0.093 | 0.075 ± 0.093 | NOT resolvable — 0.8× its own seed spread (bar is 2×) |
| TimesFM/stacked_xf.2 | 3 | 0.933 ± 0.004 | 0.181 ± 0.010 | -0.085 ± 0.075 | -0.085 ± 0.075 | NOT resolvable — 1.1× its own seed spread (bar is 2×) |
| Chronos-2/encoder.block.8 | 3 | 0.916 ± 0.001 | 0.003 ± 0.001 | 0.012 ± 0.054 | 0.107 ± 0.095 | NOT resolvable — 0.2× its own seed spread (bar is 2×) |
| Chronos-2/encoder.block.10 | 3 | 0.926 ± 0.001 | 0.005 ± 0.001 | 0.008 ± 0.016 | 0.023 ± 0.017 | NOT resolvable — 0.5× its own seed spread (bar is 2×) |
| Chronos-2/encoder.block.11 | 3 | 0.889 ± 0.048 | 0.113 ± 0.107 | 0.000 ± 0.000 | 0.000 ± 0.000 | no effect and no spread — nothing to resolve |
| Sundial/model.layers.3 | 3 | 0.962 ± 0.000 | 0.008 ± 0.000 | 0.003 ± 0.014 | 0.423 ± 0.252 | NOT resolvable — 0.2× its own seed spread (bar is 2×) |
| Sundial/model.layers.10 | 3 | 0.947 ± 0.000 | 0.020 ± 0.001 | 0.077 ± 0.075 | 0.414 ± 0.270 | NOT resolvable — 1.0× its own seed spread (bar is 2×) |
| Sundial/model.layers.11 | 3 | 0.961 ± 0.000 | 0.036 ± 0.003 | 0.111 ± 0.098 | 0.503 ± 0.371 | NOT resolvable — 1.1× its own seed spread (bar is 2×) |
| Chronos-Bolt/encoder.block.4 | 3 | 0.958 ± 0.001 | 0.007 ± 0.003 | 0.032 ± 0.050 | 0.438 ± 0.209 | NOT resolvable — 0.6× its own seed spread (bar is 2×) |
| Chronos-Bolt/encoder.block.5 | 3 | 0.960 ± 0.001 | 0.007 ± 0.001 | -0.015 ± 0.063 | 0.338 ± 0.155 | NOT resolvable — 0.2× its own seed spread (bar is 2×) |
| TimesFM/stacked_xf.14 | 3 | 0.856 ± 0.022 | 0.264 ± 0.011 | 0.065 ± 0.009 | 0.065 ± 0.009 | resolvable — 7.2× its own seed spread (bar is 2×) |
| TimesFM/stacked_xf.4 | 3 | 0.913 ± 0.004 | 0.222 ± 0.016 | -0.078 ± 0.086 | -0.078 ± 0.086 | NOT resolvable — 0.9× its own seed spread (bar is 2×) |
| TimesFM/stacked_xf.0 | 3 | 0.965 ± 0.003 | 0.199 ± 0.009 | -0.024 ± 0.168 | -0.024 ± 0.168 | NOT resolvable — 0.1× its own seed spread (bar is 2×) |
| TimesFM/stacked_xf.8 | 3 | 0.885 ± 0.007 | 0.189 ± 0.043 | -0.073 ± 0.062 | -0.073 ± 0.062 | NOT resolvable — 1.2× its own seed spread (bar is 2×) |
| Chronos-2/encoder.block.7 | 3 | 0.914 ± 0.000 | 0.001 ± 0.001 | -0.030 ± 0.030 | 0.153 ± 0.149 | NOT resolvable — 1.0× its own seed spread (bar is 2×) |
| Chronos-2/encoder.block.9 | 3 | 0.920 ± 0.000 | 0.004 ± 0.000 | -0.011 ± 0.016 | 0.076 ± 0.071 | NOT resolvable — 0.7× its own seed spread (bar is 2×) |
| Sundial/model.layers.9 | 3 | 0.943 ± 0.000 | 0.011 ± 0.001 | 0.104 ± 0.080 | 0.458 ± 0.254 | NOT resolvable — 1.3× its own seed spread (bar is 2×) |
| Sundial/model.layers.6 | 3 | 0.951 ± 0.000 | 0.005 ± 0.001 | 0.044 ± 0.066 | 0.455 ± 0.228 | NOT resolvable — 0.7× its own seed spread (bar is 2×) |
| Sundial/model.layers.7 | 3 | 0.947 ± 0.000 | 0.006 ± 0.000 | 0.147 ± 0.073 | 0.464 ± 0.258 | resolvable — 2.0× its own seed spread (bar is 2×) |
| Chronos-Bolt/encoder.block.3 | 3 | 0.952 ± 0.004 | 0.012 ± 0.004 | -0.030 ± 0.065 | 0.234 ± 0.097 | NOT resolvable — 0.5× its own seed spread (bar is 2×) |
| TimesFM/stacked_xf.12 | 3 | 0.884 ± 0.008 | 0.185 ± 0.017 | -0.011 ± 0.043 | -0.011 ± 0.043 | NOT resolvable — 0.3× its own seed spread (bar is 2×) |
| Chronos-2/encoder.block.6 | 3 | 0.907 ± 0.000 | 0.003 ± 0.000 | -0.038 ± 0.045 | 0.140 ± 0.091 | NOT resolvable — 0.8× its own seed spread (bar is 2×) |
| Chronos-2/encoder.block.5 | 3 | 0.912 ± 0.001 | 0.004 ± 0.001 | -0.052 ± 0.021 | 0.270 ± 0.106 | resolvable — 2.5× its own seed spread (bar is 2×) |
| Sundial/model.layers.5 | 3 | 0.956 ± 0.000 | 0.006 ± 0.000 | 0.098 ± 0.098 | 0.522 ± 0.292 | NOT resolvable — 1.0× its own seed spread (bar is 2×) |
| Sundial/model.layers.4 | 3 | 0.963 ± 0.001 | 0.006 ± 0.001 | -0.031 ± 0.081 | 0.418 ± 0.246 | NOT resolvable — 0.4× its own seed spread (bar is 2×) |
| Sundial/model.layers.8 | 3 | 0.945 ± 0.000 | 0.010 ± 0.001 | 0.134 ± 0.101 | 0.456 ± 0.277 | NOT resolvable — 1.3× its own seed spread (bar is 2×) |
Every column, in words, with its arithmetic.
| Column | What it means, and why it matters | How it is calculated |
|---|---|---|
target | One trained dictionary: a model and the single layer of it this dictionary was fitted on. Every other column is a property of that one dictionary, so two rows differ in the model, the layer and the fit at once. | Named `model/layer` exactly as the `sae` stage resolved it. |
seeds | How many times this dictionary was retrained from scratch, varying nothing but the random seed, to size the spread every other number in this table carries. | Retrained against a FROZEN activation store, so the model, the layer and the rows are bit-identical across seeds and training stochasticity is the only variable. |
reconstruction fidelity | How faithfully the sparse dictionary can rebuild the layer's own activations from a handful of active features. This is the FLOOR on everything below it: a dictionary that cannot reproduce the layer is not describing the layer. | 1 - (sum of squared reconstruction error / sum of squared error of predicting the mean activation), over the activations the dictionary was fitted on. 1.0 is exact; 0.0 is no better than predicting the mean; negative is worse than that. |
dead-feature rate | Same quantity as `dead rate` in the dictionary-health table above, here as a mean across seeds with its spread. | (features that never activate) / (dictionary size), averaged over the retrained seeds. |
ΔMASE (token) | The same measurement with no window pooling: every raw token is encoded and decoded on its own. This is the column to read as dictionary quality -- it has no architecture confound in it. | MASE(reconstructed) - MASE(real), reconstructing each token independently. |
ΔMASE (window) | How much the model's forecast error changes when the layer's real activations are replaced by the dictionary's reconstruction of them. Near zero means the dictionary is a faithful enough stand-in that the model still forecasts the same way; large positive means the reconstruction threw away something the forecast needed. | MASE(forecast from the reconstructed activations) - MASE(forecast from the real activations), with the reconstruction done on the pooled WINDOW axis and then broadcast back over the tokens each window covers. That broadcast is lossy for any model whose tokens are narrower than the window, which is why the token column beside it exists. |
is that ΔMASE resolvable at one seed? | Same question as `ΔMASE sign` in the dictionary-health table above: whether the forecast damage is larger than the amount retraining the dictionary moves it. Where it is not, 'the reconstruction made the forecast better' and 'worse' are the same measurement. | |mean ΔMASE across seeds| compared against the standard deviation of ΔMASE across those same seeds. |
The same SAE target retrained at several training seeds against the identical, already-frozen activations. Nothing upstream varies — same store, same rows, same checkpoint — so the spread here is SAE-training stochasticity alone, and it is the floor every headline number in this section has to be read against.
How to read it
The ± is what a ΔMASE must exceed before its sign means anything: a delta smaller than twice it is one draw from a distribution that contains both signs, which is what the last column decides and says. The unpatched forecast is a CONTROL, not a result — it cannot depend on the SAE seed, so its spread must be exactly zero, and that verdict is stated once beneath the table rather than repeated as a row of zeros per target; a failure there means something other than the seed varied and every spread above it is suspect. Dead-feature rate and reconstruction fidelity are usually far more stable across seeds than the forecast deltas are.
Limitations
This floor is measured for this run's own targets and settings only; it does not transfer to a different layer, corpus, dictionary size, or k. It is also not the behavioral repeat-run floor shown elsewhere — that one measures the model's own forecast nondeterminism, this one measures the SAE's. A ΔMASE has to clear both to be a result.
Which of each model's causal features cluster into named concepts, whether another model groups the same series the same way, and how similar every model pair is overall -- the evidence behind the compact answer boxes in “At a glance”.
Question
Which features does each model's dictionary actually use when it forecasts, do they group into named concepts, and does another model group the same series the same way?
How
For every trained dictionary, zeroes each candidate feature out of the model's own reconstruction on the series where that feature fires hardest, and measures nine properties of the forecast against a random-direction null. Features that move something are clustered by what they move into concepts (or the dictionary is declared non-modular when no clean grouping exists). Each concept's top series are then checked in every other model: does some feature there separate the same series better than random series of the same kind would, and does that feature's own top series come back the other way? Finally every concept is described in a sentence composed only from what was measured. Separately, every causal feature across every model is also pooled into one shared space and clustered directly against each other, so a group there can span several models even when a dictionary's own per-target clustering above found no clean grouping within it.
Good vs. bad result
Good: features whose removal moves the forecast well above the null, concepts with several members each, and transfers that clear the matched null in both directions. Bad: most targets declared non-modular (the dictionary's causal features do not group), or transfer rates that are high only because the matched null is weak for that kind of series.
What it cannot tell you
A transfer that clears its null says another model separates the same series, not that it uses the feature the same way causally. The rates are uncorrected for the many tests made, and nothing yet says how often a concept would transfer to a second dictionary trained on the SAME model, so a rate cannot be read as high or low on its own. Everything here is measured on the development corpus only.
A concept family groups SAE features -- from any model in this run -- whose removal changes the forecast in a similar way; features land in the same family purely by the similarity of their own measured 9-channel causal-ablation effect, never by which model, layer or SAE dictionary they came from. This run has 9 families, covering 288 of 293 causal features (98.3%); 9 of 9 span more than one model. A column-permuted null (destroying each feature's own channel-to-channel structure, then re-clustering) produces about as many families and about as much coverage on its own (p_n_families=1.0000, p_frac_assigned=0.9851): the models' features do not fall into sharp, separated groups here -- these 9 families are a readable way to divide a continuum, not discovered clusters. Evidence class: descriptive. Every family draws member features from all 4 models in this run, but within each family, membership leans toward one model more than a model-label-shuffled null would (p_purity_above=0.0199) -- read this as "segregated by model", not as "each family belongs to one model": a family spanning every model and a family whose members lean toward one model are BOTH true at once, about different questions (how many models touch a family vs. how evenly they are mixed inside it).
These features steer the first third of the forecast (removing them moves it), and steer the last third of the forecast (removing them moves it). Found in 4 models (Chronos-2, Chronos-Bolt, Sundial, TimesFM). Its features fire most often on real weather/ETT-derived mixtures.
80 feature(s) across 4 model(s); fires on: real weather/ETT-derived mixtures (9) (source-driven: a real-derived generator name -- enrichment is measured relative to the corpus's own base rate for it, not an independent structural property); resampled real weather series (6) (source-driven: a real-derived generator name -- enrichment is measured relative to the corpus's own base rate for it, not an independent structural property); synthetic parametric series (trend, seasonality and noise, exact ground truth) (4).
These features steer the last third of the forecast (removing them moves it), and steer the first third of the forecast (removing them moves it). Found in 4 models (Chronos-2, Chronos-Bolt, Sundial, TimesFM). Its features fire most often on real weather/ETT-derived mixtures.
61 feature(s) across 4 model(s); fires on: real weather/ETT-derived mixtures (8) (source-driven: a real-derived generator name -- enrichment is measured relative to the corpus's own base rate for it, not an independent structural property); strongly seasonal series (5); series with frequent anomalies (3).
These features decrease the forecast's trend slope. Found in 4 models (Chronos-2, Chronos-Bolt, Sundial, TimesFM). Its features fire most often on real weather/ETT-derived mixtures.
18 feature(s) across 4 model(s); fires on: real weather/ETT-derived mixtures (3) (source-driven: a real-derived generator name -- enrichment is measured relative to the corpus's own base rate for it, not an independent structural property); sequential-PAR real-derived series (1) (source-driven: a real-derived generator name -- enrichment is measured relative to the corpus's own base rate for it, not an independent structural property).
These features increase the forecast's seasonal magnitude. Found in 4 models (Chronos-2, Chronos-Bolt, Sundial, TimesFM).
17 feature(s) across 4 model(s); fires on: no enrichment label survived its own permutation null for any member.
These features increase the forecast's trend slope, and increase the forecast's spread. Found in 4 models (Chronos-2, Chronos-Bolt, Sundial, TimesFM).
12 feature(s) across 4 model(s); fires on: no enrichment label survived its own permutation null for any member.
These features decrease the forecast's spread. Found in 3 models (Chronos-2, Chronos-Bolt, Sundial). Its features fire most often on resampled real weather series.
48 feature(s) across 3 model(s); fires on: resampled real weather series (5) (source-driven: a real-derived generator name -- enrichment is measured relative to the corpus's own base rate for it, not an independent structural property); strongly seasonal series (3); noisy autocorrelated series (2).
These features increase the forecast's trend slope, and steer the last third of the forecast (removing them moves it). Found in 3 models (Chronos-2, Sundial, TimesFM).
23 feature(s) across 3 model(s); fires on: no enrichment label survived its own permutation null for any member.
These features steer the first third of the forecast (removing them moves it), and shift the forecast toward higher frequencies (a rougher, less smooth shape). Found in 3 models (Chronos-2, Sundial, TimesFM).
11 feature(s) across 3 model(s); fires on: no enrichment label survived its own permutation null for any member.
These features steer the last third of the forecast (removing them moves it), and increase the forecast's overall level. Found in 2 models (Chronos-2, Sundial).
18 feature(s) across 2 model(s); fires on: no enrichment label survived its own permutation null for any member.
How many causal features from each model land in each family, and what share of that MODEL's own causal features that is.
How to read it
The number in each cell is a raw feature count; the colour is that count divided by the total number of causal features this model contributed to the whole pool (never by the family's own size), so a dark cell means a large share of one model's own vocabulary, not necessarily a large family.
Limitations
Descriptive: a shared family does not mean a shared INPUT -- see the drill-down below for each tight concept's own input-agreement test.
Each family's mean causal-ablation effect, one column per channel, in the direction the feature's PRESENCE moves the forecast (never the raw ablation direction) -- all nine channels are in the SAME units (multiples of a random-direction null), so one shared diverging colour scale is honest here.
How to read it
Red/blue is sign; the number in each cell is the size in null units. A blank-looking (near-white) cell is a channel this family does not move.
Limitations
This is the family's own MEAN over its members -- individual members can vary; the per-family drill-down below shows each member tight concept's own profile.
Every pooled causal feature, coloured by its FAMILY (grey = idiosyncratic, assigned to no family); a black-outlined marker is also a member of some atlas TIGHT concept (hover for which one).
How to read it
Coordinates are a linear PCA fit once across the whole pooled 9-channel space (a UMAP toggle is offered above the plot when available, purely as an alternative layout).
Limitations
Family membership is decided in the FULL 9-dimensional ablation-effect space, never in this 2-D projection -- two points drawn close together here can belong to different families (and two points far apart can belong to the same one) whenever the dimensions this projection does not show are where they actually differ. Read this map for the overall shape of the space, not for a single point's own family assignment.
These features steer the first third of the forecast (removing them moves it), and steer the last third of the forecast (removing them moves it). Found in 4 models (Chronos-2, Chronos-Bolt, Sundial, TimesFM). Its features fire most often on real weather/ETT-derived mixtures.
internal name: mild raises level (concept 2)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| TimesFM/stacked_xf.12 | ar_order (raw ρ=0.432, resid ρ=0.432, n=555); seasonal_period_dominant (raw ρ=-0.356, resid ρ=-0.356, n=443); n_seasonalities (raw ρ=0.352, resid ρ=0.352, n=555) | 0.0010 | noisy_chaotic (5.22x, q=0.0457); block_bootstrap (3.45x, q=0.0458) | no |
| TimesFM/stacked_xf.16 | trend_order (raw ρ=0.520, resid ρ=0.520, n=555); n_seasonalities (raw ρ=0.518, resid ρ=0.518, n=555); ar_coeff_sum (raw ρ=0.517, resid ρ=0.517, n=374) | 0.0010 | parametric (6.68x, q=0.0000) | no |
| TimesFM/stacked_xf.8 | ar_order (raw ρ=0.443, resid ρ=0.443, n=555); seasonal_period_dominant (raw ρ=-0.437, resid ρ=-0.437, n=443); ar_coeff_sum (raw ρ=0.377, resid ρ=0.377, n=374) | 0.0010 | block_bootstrap (8.27x, q=0.0000) | no |
No cross-model part pair to compare (single-model concept, or no scoreable part).
Exemplar for TimesFM/stacked_xf.12 (series 76e969cfc135b283, noisy_chaotic).
Exemplar for TimesFM/stacked_xf.16 (series 9eb788e5ff96b221, parametric).
Exemplar for TimesFM/stacked_xf.8 (series f59121696d9f590e, block_bootstrap).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial). L5 same causal effect on the same inputs: not reached (acts differently on at least one shared-input test (acts differently: 2, level only: 2, no specific agreement: 8, not scorable: 37)). L6: not measured: no registered concept_transfer claim for this concept.
internal name: strong raises horizon_shape_near · unusually lowers mase (concept 4)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Chronos-2/encoder.block.10 | has_random_walk (raw ρ=0.295, resid ρ=0.295, n=555); seasonal_period_dominant (raw ρ=0.161, resid ρ=0.161, n=443); seasonal_amplitude_max (raw ρ=-0.155, resid ρ=-0.155, n=443) | 0.0010 | random_walk_drift (13.04x, q=0.0000); noisy_chaotic (5.22x, q=0.0171) | no |
| Sundial/model.layers.8 | ar_coeff_sum (raw ρ=0.612, resid ρ=0.612, n=374); seasonal_period_dominant (raw ρ=-0.548, resid ρ=-0.548, n=443); trend_order (raw ρ=0.528, resid ρ=0.528, n=555) | 0.0010 | parametric (7.42x, q=0.0000) | no |
| Sundial/model.layers.9 | ar_coeff_sum (raw ρ=0.597, resid ρ=0.597, n=374); seasonal_period_dominant (raw ρ=-0.519, resid ρ=-0.519, n=443); trend_order (raw ρ=0.487, resid ρ=0.487, n=555) | 0.0010 | parametric (7.05x, q=0.0000) | no |
| Model A | Model B | Shared top-k series | Expected by chance | p (BH) | Beyond archetype? | Agrees | ρ over all series (descriptive) |
|---|---|---|---|---|---|---|---|
| Chronos-2 | Sundial | 0 | 0.41 | 1.0000 | no | no | 0.010 |
| Chronos-2 | Sundial | 0 | 0.41 | 1.0000 | no | no | 0.029 |
| Two parts agree on inputs when their top-firing series overlap more than two random sets of the same size would (exact hypergeometric test, Benjamini-Hochberg within this concept). 'Beyond archetype' asks whether the overlap also beats random sets drawn with the same mix of archetypes, i.e. whether the parts share more than a preference for one kind of series. The correlation over all series is shown for context only: it measures broad co-variation and can be high with no shared top series. | |||||||
Exemplar for Chronos-2/encoder.block.10 (series 1fa94d4b0ea3fe57, noisy_chaotic).
Exemplar for Sundial/model.layers.8 (series 9721b6a6f8cbd81b, parametric).
Exemplar for Sundial/model.layers.9 (series 8d858ceaa74180a7, parametric).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM). L5 same causal effect on the same inputs: not reached (acts differently on at least one shared-input test (acts differently: 2, no specific agreement: 9, not scorable: 9)). L6: not measured: no registered concept_transfer claim for this concept.
internal name: strong raises level · unusually lowers trend (concept 10)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Chronos-2/encoder.block.6 | n_seasonalities (raw ρ=-0.414, resid ρ=-0.414, n=555); ar_order (raw ρ=0.362, resid ρ=0.362, n=555); seasonal_amplitude_max (raw ρ=-0.355, resid ρ=-0.355, n=443) | 0.0010 | ar_colored_noise (18.88x, q=0.0000) | no |
| Sundial/model.layers.10 | ar_coeff_sum (raw ρ=0.535, resid ρ=0.535, n=374); seasonal_period_dominant (raw ρ=-0.434, resid ρ=-0.434, n=443); n_seasonalities (raw ρ=0.433, resid ρ=0.433, n=555) | 0.0010 | parametric (4.45x, q=0.0000); amplitude_modulated (4.39x, q=0.0160) | no |
| TimesFM/stacked_xf.10 | none | n/a | block_bootstrap (13.79x, q=0.0000) | YES -- block_bootstrap (100%) |
| Model A | Model B | Shared top-k series | Expected by chance | p (BH) | Beyond archetype? | Agrees | ρ over all series (descriptive) |
|---|---|---|---|---|---|---|---|
| Chronos-2 | Sundial | 0 | 0.41 | 1.0000 | no | no | -0.114 |
| Chronos-2 | TimesFM | 0 | 0.41 | 1.0000 | no | no | -0.033 |
| Sundial | TimesFM | 4 | 0.41 | 0.0016 | yes | yes | 0.252 |
| Two parts agree on inputs when their top-firing series overlap more than two random sets of the same size would (exact hypergeometric test, Benjamini-Hochberg within this concept). 'Beyond archetype' asks whether the overlap also beats random sets drawn with the same mix of archetypes, i.e. whether the parts share more than a preference for one kind of series. The correlation over all series is shown for context only: it measures broad co-variation and can be high with no shared top series. | |||||||
Exemplar for Chronos-2/encoder.block.6 (series 5a8f637dcde26a0e, ar_colored_noise).
Exemplar for Sundial/model.layers.10 (series 8d858ceaa74180a7, parametric).
Exemplar for TimesFM/stacked_xf.10 (series cd1d99d261870797, block_bootstrap).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM). L5 same causal effect on the same inputs: not reached (acts differently on at least one shared-input test (acts differently: 2, level only: 1, no specific agreement: 9, not scorable: 32)). L6: not measured: no registered concept_transfer claim for this concept.
internal name: strong raises level · unusually raises dispersion (concept 12)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Chronos-2/encoder.block.7 | n_seasonalities (raw ρ=-0.323, resid ρ=-0.323, n=555); has_intermittency (raw ρ=0.194, resid ρ=0.194, n=555); ar_coeff_sum (raw ρ=-0.144, resid ρ=-0.144, n=374) | 0.0010 | sequential_par (19.30x, q=0.0000) | YES -- sequential_par (100%) |
| Sundial/model.layers.10 | trend_order (raw ρ=0.074, resid ρ=0.074, n=555); ar_coeff_sum (raw ρ=0.069, resid ρ=0.069, n=374); n_changepoints (raw ρ=0.066, resid ρ=0.066, n=555) | 0.7532 | mixture (2.83x, q=0.0000) | YES -- mixture (85%) |
| Model A | Model B | Shared top-k series | Expected by chance | p (BH) | Beyond archetype? | Agrees | ρ over all series (descriptive) |
|---|---|---|---|---|---|---|---|
| Chronos-2 | Sundial | 0 | 0.41 | 1.0000 | no | no | -0.047 |
| Two parts agree on inputs when their top-firing series overlap more than two random sets of the same size would (exact hypergeometric test, Benjamini-Hochberg within this concept). 'Beyond archetype' asks whether the overlap also beats random sets drawn with the same mix of archetypes, i.e. whether the parts share more than a preference for one kind of series. The correlation over all series is shown for context only: it measures broad co-variation and can be high with no shared top series. | |||||||
Exemplar for Chronos-2/encoder.block.7 (series c9d483b254222c32, mixture).
Exemplar for Sundial/model.layers.10 (series e787501623adbf8b, mixture).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM). L5 same causal effect on the same inputs: partial (neither same-effect nor acts-differently on shared inputs (no specific agreement: 7, not scorable: 29)). L6: not measured: no registered concept_transfer claim for this concept.
internal name: dominant raises horizon_shape_near (concept 14)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Chronos-2/encoder.block.7 | has_intermittency (raw ρ=0.249, resid ρ=0.249, n=555); trend_scale (raw ρ=-0.084, resid ρ=-0.084, n=555); ar_order (raw ρ=-0.081, resid ρ=-0.081, n=555) | 0.0010 | sequential_par (11.58x, q=0.0000) | no |
| Chronos-2/encoder.block.8 | ar_coeff_sum (raw ρ=0.217, resid ρ=0.217, n=374); seasonal_period_dominant (raw ρ=-0.213, resid ρ=-0.213, n=443); noise_scale (raw ρ=0.150, resid ρ=0.150, n=555) | 0.0010 | noisy_chaotic (6.52x, q=0.0051) | no |
| Sundial/model.layers.6 | has_random_walk (raw ρ=0.216, resid ρ=0.216, n=555); seasonal_amplitude_max (raw ρ=-0.100, resid ρ=-0.100, n=443); n_seasonalities (raw ρ=-0.087, resid ρ=-0.087, n=555) | 0.0010 | random_walk_drift (7.82x, q=0.0005) | no |
| Model A | Model B | Shared top-k series | Expected by chance | p (BH) | Beyond archetype? | Agrees | ρ over all series (descriptive) |
|---|---|---|---|---|---|---|---|
| Chronos-2 | Sundial | 1 | 0.41 | 0.6900 | no | no | -0.017 |
| Chronos-2 | Sundial | 0 | 0.41 | 1.0000 | no | no | -0.007 |
| Two parts agree on inputs when their top-firing series overlap more than two random sets of the same size would (exact hypergeometric test, Benjamini-Hochberg within this concept). 'Beyond archetype' asks whether the overlap also beats random sets drawn with the same mix of archetypes, i.e. whether the parts share more than a preference for one kind of series. The correlation over all series is shown for context only: it measures broad co-variation and can be high with no shared top series. | |||||||
Exemplar for Chronos-2/encoder.block.7 (series 2f89e898a893a0be, intermittent_bursts).
Exemplar for Chronos-2/encoder.block.8 (series f969d7f4e643e063, noisy_chaotic).
Exemplar for Sundial/model.layers.6 (series b422f4cfbbe2a2ae, random_walk_drift).
How sure: L3 reproducible: not reached (the concept's grouping did NOT survive an independent replicate SAE). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM). L5 same causal effect on the same inputs: partial (neither same-effect nor acts-differently on shared inputs (no specific agreement: 2, not scorable: 15)). L6: not measured: no registered concept_transfer claim for this concept.
internal name: strong raises horizon_shape_near · unusually raises level (concept 16)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Chronos-2/encoder.block.9 | has_random_walk (raw ρ=0.680, resid ρ=0.680, n=555); seasonal_amplitude_max (raw ρ=-0.276, resid ρ=-0.276, n=443); n_seasonalities (raw ρ=-0.216, resid ρ=-0.216, n=555) | 0.0010 | block_bootstrap (11.72x, q=0.0000); random_walk_drift (3.91x, q=0.0377) | YES -- block_bootstrap (85%) |
| Chronos-Bolt/encoder.block.4 | n_seasonalities (raw ρ=-0.360, resid ρ=-0.360, n=555); seasonal_amplitude_max (raw ρ=-0.263, resid ρ=-0.263, n=443); trend_order (raw ρ=-0.218, resid ρ=-0.218, n=555) | 0.0010 | sequential_par (19.30x, q=0.0000) | YES -- sequential_par (100%) |
| Model A | Model B | Shared top-k series | Expected by chance | p (BH) | Beyond archetype? | Agrees | ρ over all series (descriptive) |
|---|---|---|---|---|---|---|---|
| Chronos-2 | Chronos-Bolt | 0 | 0.41 | 1.0000 | no | no | 0.399 |
| Two parts agree on inputs when their top-firing series overlap more than two random sets of the same size would (exact hypergeometric test, Benjamini-Hochberg within this concept). 'Beyond archetype' asks whether the overlap also beats random sets drawn with the same mix of archetypes, i.e. whether the parts share more than a preference for one kind of series. The correlation over all series is shown for context only: it measures broad co-variation and can be high with no shared top series. | |||||||
Exemplar for Chronos-2/encoder.block.9 (series 25933fdb1371a64c, block_bootstrap).
Exemplar for Chronos-Bolt/encoder.block.4 (series 5ea6c60d50ed412f, sequential_par).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM). L5 same causal effect on the same inputs: not reached (acts differently on at least one shared-input test (acts differently: 4, level only: 2, no specific agreement: 15, not scorable: 26, shape only: 1)). L6: not measured: no registered concept_transfer claim for this concept.
internal name: strong raises mase (concept 18)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Chronos-Bolt/encoder.block.5 | seasonal_period_dominant (raw ρ=0.247, resid ρ=0.247, n=443); has_random_walk (raw ρ=0.153, resid ρ=0.153, n=555); seasonal_amplitude_max (raw ρ=-0.150, resid ρ=-0.150, n=443) | 0.0010 | trend_dominant (30.16x, q=0.0000) | no |
| TimesFM/stacked_xf.0 | n_changepoints (raw ρ=0.366, resid ρ=0.366, n=555); trend_scale (raw ρ=0.311, resid ρ=0.311, n=555); trend_order (raw ρ=0.258, resid ρ=0.258, n=555) | 0.0010 | trend_dominant (24.13x, q=0.0000); random_walk_drift (9.13x, q=0.0000); regime_switching (4.67x, q=0.0394) | no |
| TimesFM/stacked_xf.2 | has_random_walk (raw ρ=0.294, resid ρ=0.294, n=555); seasonal_amplitude_max (raw ρ=-0.290, resid ρ=-0.290, n=443); n_seasonalities (raw ρ=-0.259, resid ρ=-0.259, n=555) | 0.0010 | trend_dominant (24.13x, q=0.0000); random_walk_drift (9.13x, q=0.0000); regime_switching (4.67x, q=0.0394) | no |
| Model A | Model B | Shared top-k series | Expected by chance | p (BH) | Beyond archetype? | Agrees | ρ over all series (descriptive) |
|---|---|---|---|---|---|---|---|
| Chronos-Bolt | TimesFM | 13 | 0.41 | 0.0000 | yes | yes | 0.524 |
| Chronos-Bolt | TimesFM | 13 | 0.41 | 0.0000 | yes | yes | 0.435 |
| Two parts agree on inputs when their top-firing series overlap more than two random sets of the same size would (exact hypergeometric test, Benjamini-Hochberg within this concept). 'Beyond archetype' asks whether the overlap also beats random sets drawn with the same mix of archetypes, i.e. whether the parts share more than a preference for one kind of series. The correlation over all series is shown for context only: it measures broad co-variation and can be high with no shared top series. | |||||||
Exemplar for Chronos-Bolt/encoder.block.5 (series 71c3bb97dcf523c2, trend_dominant).
Exemplar for TimesFM/stacked_xf.0 (series 278475b2a2dea6a7, trend_dominant).
Exemplar for TimesFM/stacked_xf.2 (series 30b6a99249a5e9ff, trend_dominant).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM). L5 same causal effect on the same inputs: reached (same causal effect on shared inputs (level only: 3, no specific agreement: 6, not scorable: 48, same causal effect: 1)). L6: not measured: no registered concept_transfer claim for this concept.
internal name: mild raises dispersion (concept 20)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Sundial/model.layers.10 | ar_coeff_sum (raw ρ=0.504, resid ρ=0.504, n=374); n_seasonalities (raw ρ=0.429, resid ρ=0.429, n=555); trend_order (raw ρ=0.374, resid ρ=0.374, n=555) | 0.0010 | mixture (3.33x, q=0.0000) | YES -- mixture (100%) |
| Sundial/model.layers.8 | ar_coeff_sum (raw ρ=0.337, resid ρ=0.337, n=374); n_changepoints (raw ρ=0.303, resid ρ=0.303, n=555); seasonal_period_dominant (raw ρ=-0.287, resid ρ=-0.287, n=443) | 0.0010 | mixture (3.33x, q=0.0000) | YES -- mixture (100%) |
| TimesFM/stacked_xf.14 | ar_order (raw ρ=0.478, resid ρ=0.478, n=555); n_seasonalities (raw ρ=0.405, resid ρ=0.405, n=555); seasonal_period_dominant (raw ρ=-0.402, resid ρ=-0.402, n=443) | 0.0010 | noisy_chaotic (5.22x, q=0.0228); clean_low_noise (4.83x, q=0.0228) | no |
| Model A | Model B | Shared top-k series | Expected by chance | p (BH) | Beyond archetype? | Agrees | ρ over all series (descriptive) |
|---|---|---|---|---|---|---|---|
| Sundial | TimesFM | 0 | 0.41 | 1.0000 | no | no | 0.214 |
| Sundial | TimesFM | 0 | 0.41 | 1.0000 | no | no | 0.105 |
| Two parts agree on inputs when their top-firing series overlap more than two random sets of the same size would (exact hypergeometric test, Benjamini-Hochberg within this concept). 'Beyond archetype' asks whether the overlap also beats random sets drawn with the same mix of archetypes, i.e. whether the parts share more than a preference for one kind of series. The correlation over all series is shown for context only: it measures broad co-variation and can be high with no shared top series. | |||||||
Exemplar for Sundial/model.layers.10 (series e7e084c61bf0ebc4, mixture).
Exemplar for Sundial/model.layers.8 (series 353e89dc472b97da, mixture).
Exemplar for TimesFM/stacked_xf.14 (series c7c2f35cd9505889, clean_low_noise).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM). L5 same causal effect on the same inputs: not reached (acts differently on at least one shared-input test (acts differently: 6, level only: 2, no specific agreement: 16, not scorable: 34)). L6: not measured: no registered concept_transfer claim for this concept.
internal name: strong raises horizon_shape_far · unusually raises mase (concept 21)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Sundial/model.layers.4 | n_seasonalities (raw ρ=0.619, resid ρ=0.619, n=555); ar_coeff_sum (raw ρ=0.617, resid ρ=0.617, n=374); seasonal_period_dominant (raw ρ=-0.601, resid ρ=-0.601, n=443) | 0.0010 | mixture (2.16x, q=0.0035) | no |
| Sundial/model.layers.7 | ar_coeff_sum (raw ρ=0.410, resid ρ=0.410, n=374); n_changepoints (raw ρ=0.341, resid ρ=0.341, n=555); trend_order (raw ρ=0.337, resid ρ=0.337, n=555) | 0.0010 | mixture (3.33x, q=0.0000) | YES -- mixture (100%) |
| Sundial/model.layers.9 | ar_coeff_sum (raw ρ=0.072, resid ρ=0.072, n=374); seasonal_amplitude_max (raw ρ=0.061, resid ρ=0.061, n=443); trend_order (raw ρ=0.039, resid ρ=0.039, n=555) | 0.7343 | mixture (3.33x, q=0.0000) | YES -- mixture (100%) |
No cross-model part pair to compare (single-model concept, or no scoreable part).
Exemplar for Sundial/model.layers.4 (series a6cc538c81861ce3, mixture).
Exemplar for Sundial/model.layers.7 (series 5483841f5c4c4f0e, mixture).
Exemplar for Sundial/model.layers.9 (series 5483841f5c4c4f0e, mixture).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, TimesFM). L5 same causal effect on the same inputs: not reached (acts differently on at least one shared-input test (acts differently: 1, level only: 7, no specific agreement: 27, not scorable: 23, shape only: 1)). L6: not measured: no registered concept_transfer claim for this concept.
internal name: strong raises horizon_shape_far · unusually raises horizon_shape_near (concept 22)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Sundial/model.layers.4 | ar_coeff_sum (raw ρ=0.139, resid ρ=0.139, n=374); trend_order (raw ρ=0.133, resid ρ=0.133, n=555); n_seasonalities (raw ρ=0.131, resid ρ=0.131, n=555) | 0.0260 | mixture (2.50x, q=0.0001) | no |
| Sundial/model.layers.5 | n_seasonalities (raw ρ=-0.567, resid ρ=-0.567, n=555); has_intermittency (raw ρ=0.445, resid ρ=0.445, n=555); seasonal_amplitude_max (raw ρ=-0.423, resid ρ=-0.423, n=443) | 0.0010 | intermittent_bursts (13.16x, q=0.0000); ar_colored_noise (8.39x, q=0.0000) | no |
No cross-model part pair to compare (single-model concept, or no scoreable part).
Exemplar for Sundial/model.layers.4 (series 17329d907c46fd70, mixture).
Exemplar for Sundial/model.layers.5 (series a6c63d16b1997799, sequential_par).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, TimesFM). L5 same causal effect on the same inputs: partial (neither same-effect nor acts-differently on shared inputs (level only: 1, no specific agreement: 4, not scorable: 27)). L6: not measured: no registered concept_transfer claim for this concept.
internal name: mild raises horizon_shape_near · unusually raises horizon_shape_far (concept 23)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Sundial/model.layers.5 | ar_coeff_sum (raw ρ=0.611, resid ρ=0.611, n=374); seasonal_period_dominant (raw ρ=-0.607, resid ρ=-0.607, n=443); n_seasonalities (raw ρ=0.538, resid ρ=0.538, n=555) | 0.0010 | mixture (3.16x, q=0.0000) | YES -- mixture (95%) |
| TimesFM/stacked_xf.4 | noise_scale (raw ρ=0.382, resid ρ=0.382, n=555); has_intermittency (raw ρ=0.324, resid ρ=0.324, n=555); seasonal_period_dominant (raw ρ=-0.305, resid ρ=-0.305, n=443) | 0.0010 | block_bootstrap (4.14x, q=0.0020); mixture (2.33x, q=0.0005) | no |
| TimesFM/stacked_xf.6 | seasonal_period_dominant (raw ρ=-0.452, resid ρ=-0.452, n=443); ar_order (raw ρ=0.373, resid ρ=0.373, n=555); noise_scale (raw ρ=0.310, resid ρ=0.310, n=555) | 0.0010 | mixture (2.50x, q=0.0001) | no |
| Model A | Model B | Shared top-k series | Expected by chance | p (BH) | Beyond archetype? | Agrees | ρ over all series (descriptive) |
|---|---|---|---|---|---|---|---|
| Sundial | TimesFM | 0 | 0.41 | 1.0000 | no | no | -0.152 |
| Sundial | TimesFM | 0 | 0.41 | 1.0000 | no | no | -0.054 |
| Two parts agree on inputs when their top-firing series overlap more than two random sets of the same size would (exact hypergeometric test, Benjamini-Hochberg within this concept). 'Beyond archetype' asks whether the overlap also beats random sets drawn with the same mix of archetypes, i.e. whether the parts share more than a preference for one kind of series. The correlation over all series is shown for context only: it measures broad co-variation and can be high with no shared top series. | |||||||
Exemplar for Sundial/model.layers.5 (series 98140d409191002e, mixture).
Exemplar for TimesFM/stacked_xf.4 (series 0455fcd12e1372d6, mixture).
Exemplar for TimesFM/stacked_xf.6 (series 0455fcd12e1372d6, mixture).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM). L5 same causal effect on the same inputs: partial (neither same-effect nor acts-differently on shared inputs (level only: 9, no specific agreement: 11, not scorable: 36)). L6: not measured: no registered concept_transfer claim for this concept.
internal name: mild raises horizon_shape_near · unusually raises dispersion (concept 24)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Sundial/model.layers.5 | none | n/a | sequential_par (14.48x, q=0.0000) | no |
| Sundial/model.layers.6 | has_intermittency (raw ρ=0.340, resid ρ=0.340, n=555); n_seasonalities (raw ρ=-0.326, resid ρ=-0.326, n=555); ar_coeff_sum (raw ρ=-0.202, resid ρ=-0.202, n=374) | 0.0010 | block_bootstrap (11.72x, q=0.0000) | YES -- block_bootstrap (85%) |
| TimesFM/stacked_xf.12 | seasonal_period_dominant (raw ρ=-0.393, resid ρ=-0.393, n=443); ar_order (raw ρ=0.375, resid ρ=0.375, n=555); trend_order (raw ρ=0.312, resid ρ=0.312, n=555) | 0.0010 | block_bootstrap (4.14x, q=0.0020); mixture (2.33x, q=0.0005) | no |
| Model A | Model B | Shared top-k series | Expected by chance | p (BH) | Beyond archetype? | Agrees | ρ over all series (descriptive) |
|---|---|---|---|---|---|---|---|
| Sundial | TimesFM | 2 | 0.41 | 0.1241 | no | no | 0.085 |
| Sundial | TimesFM | 0 | 0.41 | 1.0000 | no | no | 0.384 |
| Two parts agree on inputs when their top-firing series overlap more than two random sets of the same size would (exact hypergeometric test, Benjamini-Hochberg within this concept). 'Beyond archetype' asks whether the overlap also beats random sets drawn with the same mix of archetypes, i.e. whether the parts share more than a preference for one kind of series. The correlation over all series is shown for context only: it measures broad co-variation and can be high with no shared top series. | |||||||
Exemplar for Sundial/model.layers.5 (series ae89d4a89f8aa7b0, mixture).
Exemplar for Sundial/model.layers.6 (series 5e25859ea56891a3, block_bootstrap).
Exemplar for TimesFM/stacked_xf.12 (series 0455fcd12e1372d6, mixture).
How sure: L3 reproducible: not reached (the concept's grouping did NOT survive an independent replicate SAE). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM). L5 same causal effect on the same inputs: partial (neither same-effect nor acts-differently on shared inputs (level only: 1, no specific agreement: 2, not scorable: 32)). L6: not measured: no registered concept_transfer claim for this concept.
45 feature(s) in this family without a tight (atlas) concept of their own -- Chronos-2/encoder.block.10: 3; Chronos-2/encoder.block.5: 4; Chronos-2/encoder.block.6: 3; Chronos-2/encoder.block.7: 2; Chronos-2/encoder.block.8: 3; Chronos-2/encoder.block.9: 2; Chronos-Bolt/encoder.block.3: 1; Chronos-Bolt/encoder.block.5: 2; Sundial/model.layers.10: 2; Sundial/model.layers.11: 1; Sundial/model.layers.3: 1; Sundial/model.layers.4: 1; Sundial/model.layers.5: 4; Sundial/model.layers.6: 3; Sundial/model.layers.9: 4; TimesFM/stacked_xf.0: 1; TimesFM/stacked_xf.12: 1; TimesFM/stacked_xf.16: 2; TimesFM/stacked_xf.2: 2; TimesFM/stacked_xf.4: 1; TimesFM/stacked_xf.6: 1; TimesFM/stacked_xf.8: 1.
These features steer the last third of the forecast (removing them moves it), and steer the first third of the forecast (removing them moves it). Found in 4 models (Chronos-2, Chronos-Bolt, Sundial, TimesFM). Its features fire most often on real weather/ETT-derived mixtures.
internal name: strong lowers level · unusually raises mase (concept 0)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Chronos-2/encoder.block.6 | n_seasonalities (raw ρ=-0.374, resid ρ=-0.374, n=555); ar_coeff_sum (raw ρ=-0.249, resid ρ=-0.249, n=374); seasonal_amplitude_max (raw ρ=-0.209, resid ρ=-0.209, n=443) | 0.0010 | anomaly_heavy (8.04x, q=0.0000); ar_colored_noise (6.29x, q=0.0005); intermittent_bursts (4.39x, q=0.0466) | no |
| Chronos-2/encoder.block.7 | n_seasonalities (raw ρ=-0.443, resid ρ=-0.443, n=555); seasonal_amplitude_max (raw ρ=-0.336, resid ρ=-0.336, n=443); ar_coeff_sum (raw ρ=-0.267, resid ρ=-0.267, n=374) | 0.0010 | anomaly_heavy (9.19x, q=0.0000); intermittent_bursts (7.31x, q=0.0005); ar_colored_noise (6.29x, q=0.0004) | no |
| Chronos-2/encoder.block.8 | n_seasonalities (raw ρ=-0.363, resid ρ=-0.363, n=555); has_intermittency (raw ρ=0.340, resid ρ=0.340, n=555); seasonal_amplitude_max (raw ρ=-0.268, resid ρ=-0.268, n=443) | 0.0010 | anomaly_heavy (10.34x, q=0.0000); intermittent_bursts (7.31x, q=0.0007); ar_colored_noise (5.24x, q=0.0024) | no |
| TimesFM/stacked_xf.0 | n_seasonalities (raw ρ=0.267, resid ρ=0.267, n=555); n_changepoints (raw ρ=0.242, resid ρ=0.242, n=555); seasonal_period_dominant (raw ρ=0.208, resid ρ=0.208, n=443) | 0.0010 | mixture (2.50x, q=0.0002) | no |
| Model A | Model B | Shared top-k series | Expected by chance | p (BH) | Beyond archetype? | Agrees | ρ over all series (descriptive) |
|---|---|---|---|---|---|---|---|
| Chronos-2 | TimesFM | 0 | 0.41 | 1.0000 | no | no | -0.165 |
| Chronos-2 | TimesFM | 0 | 0.41 | 1.0000 | no | no | -0.179 |
| Chronos-2 | TimesFM | 0 | 0.41 | 1.0000 | no | no | -0.178 |
| Two parts agree on inputs when their top-firing series overlap more than two random sets of the same size would (exact hypergeometric test, Benjamini-Hochberg within this concept). 'Beyond archetype' asks whether the overlap also beats random sets drawn with the same mix of archetypes, i.e. whether the parts share more than a preference for one kind of series. The correlation over all series is shown for context only: it measures broad co-variation and can be high with no shared top series. | |||||||
Exemplar for Chronos-2/encoder.block.6 (series dcff4d0836b27966, anomaly_heavy).
Exemplar for Chronos-2/encoder.block.7 (series 6b2ef8df8667ca5f, intermittent_bursts).
Exemplar for Chronos-2/encoder.block.8 (series 6b2ef8df8667ca5f, intermittent_bursts).
Exemplar for TimesFM/stacked_xf.0 (series 83cd32aa19606afd, random_walk_drift).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM). L5 same causal effect on the same inputs: partial (neither same-effect nor acts-differently on shared inputs (level only: 3, no specific agreement: 7, not scorable: 66, shape only: 1)). L6: confirmed on private data (16/16 registered claim(s); by mode -- search: 16/16).
internal name: mild raises horizon_shape_near · unusually raises mase (concept 3)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| TimesFM/stacked_xf.14 | n_seasonalities (raw ρ=0.492, resid ρ=0.492, n=555); ar_coeff_sum (raw ρ=0.492, resid ρ=0.492, n=374); seasonal_period_dominant (raw ρ=-0.466, resid ρ=-0.466, n=443) | 0.0010 | parametric (5.94x, q=0.0000) | no |
| TimesFM/stacked_xf.16 | ar_coeff_sum (raw ρ=0.498, resid ρ=0.498, n=374); n_seasonalities (raw ρ=0.473, resid ρ=0.473, n=555); trend_order (raw ρ=0.422, resid ρ=0.422, n=555) | 0.0010 | parametric (4.08x, q=0.0001) | no |
| TimesFM/stacked_xf.8 | n_seasonalities (raw ρ=0.446, resid ρ=0.446, n=555); ar_order (raw ρ=0.400, resid ρ=0.400, n=555); seasonal_period_dominant (raw ρ=-0.388, resid ρ=-0.388, n=443) | 0.0010 | none survive BH | no |
No cross-model part pair to compare (single-model concept, or no scoreable part).
Exemplar for TimesFM/stacked_xf.14 (series c7c2f35cd9505889, clean_low_noise).
Exemplar for TimesFM/stacked_xf.16 (series 9721b6a6f8cbd81b, parametric).
Exemplar for TimesFM/stacked_xf.8 (series e7e084c61bf0ebc4, mixture).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial). L5 same causal effect on the same inputs: not reached (acts differently on at least one shared-input test (acts differently: 1, level only: 1, no specific agreement: 9, not scorable: 34, shape only: 1)). L6: not measured: no registered concept_transfer claim for this concept.
internal name: strong raises horizon_shape_near · unusually lowers level · unusually raises dispersion (concept 6)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Chronos-2/encoder.block.5 | has_intermittency (raw ρ=0.616, resid ρ=0.616, n=555); seasonal_amplitude_max (raw ρ=-0.194, resid ρ=-0.194, n=443); trend_scale (raw ρ=-0.175, resid ρ=-0.175, n=555) | 0.0010 | intermittent_bursts (20.47x, q=0.0000) | no |
| Sundial/model.layers.11 | seasonal_period_dominant (raw ρ=0.255, resid ρ=0.255, n=443); noise_scale (raw ρ=-0.137, resid ρ=-0.137, n=555); n_seasonalities (raw ρ=0.111, resid ρ=0.111, n=555) | 0.0010 | multi_seasonal_complex (9.65x, q=0.0000); clean_low_noise (6.03x, q=0.0037) | no |
| Sundial/model.layers.6 | seasonal_period_dominant (raw ρ=-0.622, resid ρ=-0.622, n=443); n_seasonalities (raw ρ=0.580, resid ρ=0.580, n=555); ar_coeff_sum (raw ρ=0.465, resid ρ=0.465, n=374) | 0.0010 | seasonal_dominant (23.16x, q=0.0000) | no |
| Model A | Model B | Shared top-k series | Expected by chance | p (BH) | Beyond archetype? | Agrees | ρ over all series (descriptive) |
|---|---|---|---|---|---|---|---|
| Chronos-2 | Sundial | 0 | 0.41 | 1.0000 | no | no | -0.027 |
| Chronos-2 | Sundial | 0 | 0.41 | 1.0000 | no | no | -0.037 |
| Two parts agree on inputs when their top-firing series overlap more than two random sets of the same size would (exact hypergeometric test, Benjamini-Hochberg within this concept). 'Beyond archetype' asks whether the overlap also beats random sets drawn with the same mix of archetypes, i.e. whether the parts share more than a preference for one kind of series. The correlation over all series is shown for context only: it measures broad co-variation and can be high with no shared top series. | |||||||
Exemplar for Chronos-2/encoder.block.5 (series 34bcce27204d29b6, intermittent_bursts).
Exemplar for Sundial/model.layers.11 (series de30d28d501e8d84, multi_seasonal_complex).
Exemplar for Sundial/model.layers.6 (series d00646f6d923bc78, seasonal_dominant).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM). L5 same causal effect on the same inputs: partial (neither same-effect nor acts-differently on shared inputs (level only: 2, no specific agreement: 16, not scorable: 23)). L6: not measured: no registered concept_transfer claim for this concept.
internal name: strong raises horizon_shape_near · unusually lowers level · unusually raises trend (concept 7)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Chronos-2/encoder.block.5 | n_seasonalities (raw ρ=-0.286, resid ρ=-0.286, n=555); has_intermittency (raw ρ=0.260, resid ρ=0.260, n=555); trend_order (raw ρ=-0.183, resid ρ=-0.183, n=555) | 0.0010 | intermittent_bursts (5.85x, q=0.0149); anomaly_heavy (5.74x, q=0.0094) | no |
| Chronos-2/encoder.block.8 | has_random_walk (raw ρ=0.335, resid ρ=0.335, n=555); ar_coeff_sum (raw ρ=0.158, resid ρ=0.158, n=374); seasonal_amplitude_max (raw ρ=-0.147, resid ρ=-0.147, n=443) | 0.0010 | mixture (3.33x, q=0.0000) | YES -- mixture (100%) |
No cross-model part pair to compare (single-model concept, or no scoreable part).
Exemplar for Chronos-2/encoder.block.5 (series f969d7f4e643e063, noisy_chaotic).
Exemplar for Chronos-2/encoder.block.8 (series b755375351d8f0a4, mixture).
How sure: L3 reproducible: not reached (the concept's grouping did NOT survive an independent replicate SAE). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-Bolt, Sundial, TimesFM). L5 same causal effect on the same inputs: not reached (acts differently on at least one shared-input test (acts differently: 2, level only: 4, no specific agreement: 4, not scorable: 17)). L6: not measured: no registered concept_transfer claim for this concept.
internal name: strong lowers level · unusually lowers spectral_centroid (concept 8)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Chronos-2/encoder.block.6 | has_intermittency (raw ρ=0.701, resid ρ=0.701, n=555); trend_scale (raw ρ=-0.224, resid ρ=-0.224, n=555); n_seasonalities (raw ρ=-0.211, resid ρ=-0.211, n=555) | 0.0010 | intermittent_bursts (24.86x, q=0.0000) | no |
| Chronos-2/encoder.block.9 | noise_scale (raw ρ=-0.080, resid ρ=-0.080, n=555); seasonal_period_dominant (raw ρ=0.080, resid ρ=0.080, n=443); n_changepoints (raw ρ=-0.072, resid ρ=-0.072, n=555) | 0.6054 | sequential_par (11.58x, q=0.0000) | no |
| Sundial/model.layers.4 | seasonal_period_dominant (raw ρ=-0.612, resid ρ=-0.612, n=443); n_seasonalities (raw ρ=0.590, resid ρ=0.590, n=555); ar_coeff_sum (raw ρ=0.461, resid ρ=0.461, n=374) | 0.0010 | seasonal_dominant (15.44x, q=0.0000); amplitude_modulated (4.39x, q=0.0320) | no |
| Model A | Model B | Shared top-k series | Expected by chance | p (BH) | Beyond archetype? | Agrees | ρ over all series (descriptive) |
|---|---|---|---|---|---|---|---|
| Chronos-2 | Sundial | 0 | 0.41 | 1.0000 | no | no | -0.068 |
| Chronos-2 | Sundial | 0 | 0.41 | 1.0000 | no | no | 0.058 |
| Two parts agree on inputs when their top-firing series overlap more than two random sets of the same size would (exact hypergeometric test, Benjamini-Hochberg within this concept). 'Beyond archetype' asks whether the overlap also beats random sets drawn with the same mix of archetypes, i.e. whether the parts share more than a preference for one kind of series. The correlation over all series is shown for context only: it measures broad co-variation and can be high with no shared top series. | |||||||
Exemplar for Chronos-2/encoder.block.6 (series c2dc73ec3f9aee41, intermittent_bursts).
Exemplar for Chronos-2/encoder.block.9 (series f3e083aa9a6c25c8, nonsinusoidal_seasonal).
Exemplar for Sundial/model.layers.4 (series 2b494e83341632a3, anomaly_heavy).
How sure: L3 reproducible: not reached (the concept's grouping did NOT survive an independent replicate SAE). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM). L5 same causal effect on the same inputs: partial (neither same-effect nor acts-differently on shared inputs (level only: 1, no specific agreement: 3, not scorable: 17, shape only: 1)). L6: not measured: no registered concept_transfer claim for this concept.
internal name: strong raises horizon_shape_far · unusually raises spectral_centroid (concept 9)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Chronos-2/encoder.block.6 | ar_coeff_sum (raw ρ=0.310, resid ρ=0.310, n=374); n_changepoints (raw ρ=0.270, resid ρ=0.270, n=555); trend_order (raw ρ=0.256, resid ρ=0.256, n=555) | 0.0010 | mixture (3.33x, q=0.0000) | YES -- mixture (100%) |
| Sundial/model.layers.3 | seasonal_period_dominant (raw ρ=-0.240, resid ρ=-0.240, n=443); trend_order (raw ρ=0.192, resid ρ=0.192, n=555); ar_coeff_sum (raw ρ=0.187, resid ρ=0.187, n=374) | 0.0010 | mixture (3.16x, q=0.0000) | YES -- mixture (95%) |
| Sundial/model.layers.5 | seasonal_period_dominant (raw ρ=-0.460, resid ρ=-0.460, n=443); ar_coeff_sum (raw ρ=0.432, resid ρ=0.432, n=374); trend_order (raw ρ=0.408, resid ρ=0.408, n=555) | 0.0010 | parametric (5.57x, q=0.0000) | no |
| Model A | Model B | Shared top-k series | Expected by chance | p (BH) | Beyond archetype? | Agrees | ρ over all series (descriptive) |
|---|---|---|---|---|---|---|---|
| Chronos-2 | Sundial | 7 | 0.41 | 0.0000 | yes | yes | 0.490 |
| Chronos-2 | Sundial | 0 | 0.41 | 1.0000 | no | no | 0.013 |
| Two parts agree on inputs when their top-firing series overlap more than two random sets of the same size would (exact hypergeometric test, Benjamini-Hochberg within this concept). 'Beyond archetype' asks whether the overlap also beats random sets drawn with the same mix of archetypes, i.e. whether the parts share more than a preference for one kind of series. The correlation over all series is shown for context only: it measures broad co-variation and can be high with no shared top series. | |||||||
Exemplar for Chronos-2/encoder.block.6 (series dbe5f63c1d5d63b1, mixture).
Exemplar for Sundial/model.layers.3 (series cbaf63803c12dbeb, mixture).
Exemplar for Sundial/model.layers.5 (series a985ce27879bd636, parametric).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM). L5 same causal effect on the same inputs: reached (same causal effect on shared inputs (level only: 4, no specific agreement: 27, not scorable: 24, same causal effect: 1, shape only: 5)). L6: confirmed on private data (4/4 registered claim(s); by mode -- search: 4/4).
internal name: strong lowers dispersion (concept 11)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Chronos-2/encoder.block.7 | seasonal_period_dominant (raw ρ=-0.128, resid ρ=-0.128, n=443); seasonal_amplitude_max (raw ρ=0.070, resid ρ=0.070, n=443); n_anomalies (raw ρ=0.062, resid ρ=0.062, n=555) | 0.0490 | mixture (3.33x, q=0.0000) | YES -- mixture (100%) |
| Chronos-2/encoder.block.8 | seasonal_period_dominant (raw ρ=-0.154, resid ρ=-0.154, n=443); noise_scale (raw ρ=-0.090, resid ρ=-0.090, n=555); seasonal_amplitude_max (raw ρ=0.069, resid ρ=0.069, n=443) | 0.0160 | mixture (3.33x, q=0.0000) | YES -- mixture (100%) |
| Chronos-2/encoder.block.9 | seasonal_period_dominant (raw ρ=-0.214, resid ρ=-0.214, n=443); n_changepoints (raw ρ=0.092, resid ρ=0.092, n=555); seasonal_amplitude_max (raw ρ=0.092, resid ρ=0.092, n=443) | 0.0010 | mixture (3.33x, q=0.0000) | YES -- mixture (100%) |
No cross-model part pair to compare (single-model concept, or no scoreable part).
Exemplar for Chronos-2/encoder.block.7 (series 1aa8494bfac43c6c, mixture).
Exemplar for Chronos-2/encoder.block.8 (series e7bd1a28391e112a, mixture).
Exemplar for Chronos-2/encoder.block.9 (series e7bd1a28391e112a, mixture).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-Bolt, Sundial, TimesFM). L5 same causal effect on the same inputs: not reached (acts differently on at least one shared-input test (acts differently: 5, level only: 2, no specific agreement: 27, not scorable: 12, same causal effect: 8, shape only: 12)). L6: not measured: no registered concept_transfer claim for this concept.
internal name: strong lowers level · unusually lowers seasonal (concept 13)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Chronos-2/encoder.block.7 | noise_scale (raw ρ=-0.371, resid ρ=-0.371, n=555); ar_order (raw ρ=-0.306, resid ρ=-0.306, n=555); n_changepoints (raw ρ=-0.304, resid ρ=-0.304, n=555) | 0.0010 | seasonal_dominant (27.02x, q=0.0000) | no |
| Chronos-2/encoder.block.8 | noise_scale (raw ρ=-0.343, resid ρ=-0.343, n=555); seasonal_amplitude_max (raw ρ=0.301, resid ρ=0.301, n=443); n_changepoints (raw ρ=-0.294, resid ρ=-0.294, n=555) | 0.0010 | seasonal_dominant (23.16x, q=0.0000); clean_low_noise (4.83x, q=0.0190) | no |
| Chronos-2/encoder.block.9 | n_changepoints (raw ρ=-0.353, resid ρ=-0.353, n=555); noise_scale (raw ρ=-0.319, resid ρ=-0.319, n=555); ar_order (raw ρ=-0.288, resid ρ=-0.288, n=555) | 0.0010 | seasonal_dominant (25.09x, q=0.0000) | no |
No cross-model part pair to compare (single-model concept, or no scoreable part).
Exemplar for Chronos-2/encoder.block.7 (series 001115a9c567f964, seasonal_dominant).
Exemplar for Chronos-2/encoder.block.8 (series 001115a9c567f964, seasonal_dominant).
Exemplar for Chronos-2/encoder.block.9 (series a0c3fa63d848d60b, seasonal_dominant).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-Bolt, Sundial, TimesFM). L5 same causal effect on the same inputs: not reached (acts differently on at least one shared-input test (acts differently: 6, level only: 1, no specific agreement: 12, not scorable: 17)). L6: not measured: no registered concept_transfer claim for this concept.
internal name: shifts the level (concept 26)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| TimesFM/stacked_xf.18 | ar_coeff_sum (raw ρ=0.490, resid ρ=0.490, n=374); n_seasonalities (raw ρ=0.383, resid ρ=0.383, n=555); trend_order (raw ρ=0.376, resid ρ=0.376, n=555) | 0.0010 | clean_low_noise (4.83x, q=0.0233); parametric (2.60x, q=0.0233) | no |
| TimesFM/stacked_xf.6 | noise_scale (raw ρ=0.307, resid ρ=0.307, n=555); has_intermittency (raw ρ=0.300, resid ρ=0.300, n=555); seasonal_period_dominant (raw ρ=-0.289, resid ρ=-0.289, n=443) | 0.0010 | mixture (2.99x, q=0.0000) | YES -- mixture (90%) |
No cross-model part pair to compare (single-model concept, or no scoreable part).
Exemplar for TimesFM/stacked_xf.18 (series 9721b6a6f8cbd81b, parametric).
Exemplar for TimesFM/stacked_xf.6 (series 0455fcd12e1372d6, mixture).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial). L5 same causal effect on the same inputs: not reached (acts differently on at least one shared-input test (acts differently: 7, level only: 1, no specific agreement: 4, not scorable: 24)). L6: not measured: no registered concept_transfer claim for this concept.
32 feature(s) in this family without a tight (atlas) concept of their own -- Chronos-2/encoder.block.10: 1; Chronos-2/encoder.block.5: 1; Chronos-2/encoder.block.6: 2; Chronos-2/encoder.block.9: 1; Chronos-Bolt/encoder.block.4: 1; Sundial/model.layers.10: 3; Sundial/model.layers.3: 2; Sundial/model.layers.4: 3; Sundial/model.layers.7: 1; Sundial/model.layers.8: 3; TimesFM/stacked_xf.0: 2; TimesFM/stacked_xf.10: 3; TimesFM/stacked_xf.12: 2; TimesFM/stacked_xf.16: 1; TimesFM/stacked_xf.4: 3; TimesFM/stacked_xf.6: 2; TimesFM/stacked_xf.8: 1.
These features decrease the forecast's trend slope. Found in 4 models (Chronos-2, Chronos-Bolt, Sundial, TimesFM). Its features fire most often on real weather/ETT-derived mixtures.
internal name: strong raises trend (concept 1)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Chronos-2/encoder.block.7 | has_random_walk (raw ρ=0.118, resid ρ=0.118, n=555); trend_scale (raw ρ=0.079, resid ρ=0.079, n=555); ar_order (raw ρ=-0.046, resid ρ=-0.046, n=555) | 0.1039 | mixture (3.33x, q=0.0000) | YES -- mixture (100%) |
| Chronos-2/encoder.block.8 | ar_coeff_sum (raw ρ=0.198, resid ρ=0.198, n=374); trend_order (raw ρ=0.182, resid ρ=0.182, n=555); n_changepoints (raw ρ=0.171, resid ρ=0.171, n=555) | 0.0010 | mixture (3.33x, q=0.0000) | YES -- mixture (100%) |
| Chronos-2/encoder.block.9 | ar_coeff_sum (raw ρ=0.168, resid ρ=0.168, n=374); trend_order (raw ρ=0.136, resid ρ=0.136, n=555); trend_scale (raw ρ=0.119, resid ρ=0.119, n=555) | 0.0050 | mixture (3.33x, q=0.0000) | YES -- mixture (100%) |
| TimesFM/stacked_xf.14 | has_random_walk (raw ρ=0.104, resid ρ=0.104, n=555); seasonal_amplitude_max (raw ρ=-0.081, resid ρ=-0.081, n=443); trend_scale (raw ρ=0.064, resid ρ=0.064, n=555) | 0.2737 | sequential_par (15.44x, q=0.0000) | YES -- sequential_par (80%) |
| Model A | Model B | Shared top-k series | Expected by chance | p (BH) | Beyond archetype? | Agrees | ρ over all series (descriptive) |
|---|---|---|---|---|---|---|---|
| Chronos-2 | TimesFM | 0 | 0.41 | 1.0000 | no | no | -0.011 |
| Chronos-2 | TimesFM | 0 | 0.41 | 1.0000 | no | no | -0.012 |
| Chronos-2 | TimesFM | 0 | 0.41 | 1.0000 | no | no | -0.011 |
| Two parts agree on inputs when their top-firing series overlap more than two random sets of the same size would (exact hypergeometric test, Benjamini-Hochberg within this concept). 'Beyond archetype' asks whether the overlap also beats random sets drawn with the same mix of archetypes, i.e. whether the parts share more than a preference for one kind of series. The correlation over all series is shown for context only: it measures broad co-variation and can be high with no shared top series. | |||||||
Exemplar for Chronos-2/encoder.block.7 (series 67fab51c30b778c2, mixture).
Exemplar for Chronos-2/encoder.block.8 (series 6e36767df6e007e0, mixture).
Exemplar for Chronos-2/encoder.block.9 (series 67fab51c30b778c2, mixture).
Exemplar for TimesFM/stacked_xf.14 (series fee9a16335fd7551, trend_dominant).
How sure: L3 reproducible: not reached (the concept's grouping did NOT survive an independent replicate SAE). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-Bolt, Sundial, TimesFM). L5 same causal effect on the same inputs: partial (neither same-effect nor acts-differently on shared inputs (level only: 2, no specific agreement: 4, not scorable: 59, shape only: 1)). L6: not measured: no registered concept_transfer claim for this concept.
14 feature(s) in this family without a tight (atlas) concept of their own -- Chronos-2/encoder.block.8: 2; Chronos-2/encoder.block.9: 3; Chronos-Bolt/encoder.block.4: 1; Chronos-Bolt/encoder.block.5: 2; Sundial/model.layers.10: 1; Sundial/model.layers.11: 1; Sundial/model.layers.3: 1; Sundial/model.layers.8: 2; TimesFM/stacked_xf.12: 1.
These features increase the forecast's seasonal magnitude. Found in 4 models (Chronos-2, Chronos-Bolt, Sundial, TimesFM).
17 feature(s) in this family without a tight (atlas) concept of their own -- Chronos-2/encoder.block.10: 1; Chronos-2/encoder.block.5: 2; Chronos-2/encoder.block.7: 1; Chronos-2/encoder.block.8: 1; Chronos-Bolt/encoder.block.3: 1; Sundial/model.layers.11: 1; Sundial/model.layers.3: 1; Sundial/model.layers.5: 1; Sundial/model.layers.6: 1; Sundial/model.layers.8: 1; Sundial/model.layers.9: 1; TimesFM/stacked_xf.0: 3; TimesFM/stacked_xf.12: 1; TimesFM/stacked_xf.2: 1.
These features increase the forecast's trend slope, and increase the forecast's spread. Found in 4 models (Chronos-2, Chronos-Bolt, Sundial, TimesFM).
12 feature(s) in this family without a tight (atlas) concept of their own -- Chronos-2/encoder.block.5: 1; Chronos-2/encoder.block.7: 2; Chronos-Bolt/encoder.block.3: 2; Sundial/model.layers.10: 1; Sundial/model.layers.4: 1; Sundial/model.layers.8: 2; TimesFM/stacked_xf.12: 1; TimesFM/stacked_xf.16: 1; TimesFM/stacked_xf.6: 1.
These features decrease the forecast's spread. Found in 3 models (Chronos-2, Chronos-Bolt, Sundial). Its features fire most often on resampled real weather series.
internal name: strong raises dispersion · unusually raises horizon_shape_far (concept 5)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Chronos-2/encoder.block.5 | has_intermittency (raw ρ=0.374, resid ρ=0.374, n=555); n_seasonalities (raw ρ=-0.372, resid ρ=-0.372, n=555); seasonal_amplitude_max (raw ρ=-0.222, resid ρ=-0.222, n=443) | 0.0010 | block_bootstrap (8.96x, q=0.0000); anomaly_heavy (5.74x, q=0.0018) | no |
| Chronos-2/encoder.block.8 | has_intermittency (raw ρ=0.539, resid ρ=0.539, n=555); n_seasonalities (raw ρ=-0.347, resid ρ=-0.347, n=555); seasonal_amplitude_max (raw ρ=-0.207, resid ρ=-0.207, n=443) | 0.0010 | block_bootstrap (13.10x, q=0.0000) | YES -- block_bootstrap (95%) |
No cross-model part pair to compare (single-model concept, or no scoreable part).
Exemplar for Chronos-2/encoder.block.5 (series 25933fdb1371a64c, block_bootstrap).
Exemplar for Chronos-2/encoder.block.8 (series fafdfe79ce7ac32a, block_bootstrap).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-Bolt, Sundial, TimesFM). L5 same causal effect on the same inputs: not reached (acts differently on at least one shared-input test (acts differently: 3, level only: 1, no specific agreement: 3, not scorable: 36, shape only: 1)). L6: not measured: no registered concept_transfer claim for this concept.
internal name: strong raises seasonal (concept 17)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Chronos-Bolt/encoder.block.4 | n_seasonalities (raw ρ=-0.500, resid ρ=-0.500, n=555); seasonal_amplitude_max (raw ρ=-0.423, resid ρ=-0.423, n=443); ar_coeff_sum (raw ρ=-0.331, resid ρ=-0.331, n=374) | 0.0010 | ar_colored_noise (11.54x, q=0.0000); noisy_chaotic (10.43x, q=0.0000) | no |
| Chronos-Bolt/encoder.block.5 | n_seasonalities (raw ρ=-0.586, resid ρ=-0.586, n=555); seasonal_amplitude_max (raw ρ=-0.493, resid ρ=-0.493, n=443); ar_coeff_sum (raw ρ=-0.377, resid ρ=-0.377, n=374) | 0.0010 | ar_colored_noise (10.49x, q=0.0000); noisy_chaotic (9.13x, q=0.0000) | no |
| Sundial/model.layers.10 | n_changepoints (raw ρ=0.594, resid ρ=0.594, n=555); ar_coeff_sum (raw ρ=0.583, resid ρ=0.583, n=374); trend_order (raw ρ=0.501, resid ρ=0.501, n=555) | 0.0010 | mixture (2.99x, q=0.0000) | YES -- mixture (90%) |
| Model A | Model B | Shared top-k series | Expected by chance | p (BH) | Beyond archetype? | Agrees | ρ over all series (descriptive) |
|---|---|---|---|---|---|---|---|
| Chronos-Bolt | Sundial | 0 | 0.41 | 1.0000 | no | no | -0.327 |
| Chronos-Bolt | Sundial | 0 | 0.41 | 1.0000 | no | no | -0.391 |
| Two parts agree on inputs when their top-firing series overlap more than two random sets of the same size would (exact hypergeometric test, Benjamini-Hochberg within this concept). 'Beyond archetype' asks whether the overlap also beats random sets drawn with the same mix of archetypes, i.e. whether the parts share more than a preference for one kind of series. The correlation over all series is shown for context only: it measures broad co-variation and can be high with no shared top series. | |||||||
Exemplar for Chronos-Bolt/encoder.block.4 (series 284a6df63a6f77f8, noisy_chaotic).
Exemplar for Chronos-Bolt/encoder.block.5 (series 5a8f637dcde26a0e, ar_colored_noise).
Exemplar for Sundial/model.layers.10 (series dbe5f63c1d5d63b1, mixture).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM). L5 same causal effect on the same inputs: not reached (acts differently on at least one shared-input test (acts differently: 4, level only: 1, no specific agreement: 13, not scorable: 37, shape only: 1)). L6: not measured: no registered concept_transfer claim for this concept.
internal name: strong raises dispersion · unusually raises spectral_centroid (concept 19)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Sundial/model.layers.10 | n_seasonalities (raw ρ=-0.621, resid ρ=-0.621, n=555); seasonal_amplitude_max (raw ρ=-0.464, resid ρ=-0.464, n=443); has_intermittency (raw ρ=0.338, resid ρ=0.338, n=555) | 0.0010 | block_bootstrap (11.03x, q=0.0000) | YES -- block_bootstrap (80%) |
| Sundial/model.layers.4 | has_intermittency (raw ρ=0.318, resid ρ=0.318, n=555); n_seasonalities (raw ρ=-0.226, resid ρ=-0.226, n=555); seasonal_amplitude_max (raw ρ=-0.187, resid ρ=-0.187, n=443) | 0.0010 | block_bootstrap (11.72x, q=0.0000) | YES -- block_bootstrap (85%) |
| Sundial/model.layers.6 | has_intermittency (raw ρ=0.340, resid ρ=0.340, n=555); n_seasonalities (raw ρ=-0.243, resid ρ=-0.243, n=555); n_anomalies (raw ρ=0.187, resid ρ=0.187, n=555) | 0.0010 | block_bootstrap (11.72x, q=0.0000) | YES -- block_bootstrap (85%) |
No cross-model part pair to compare (single-model concept, or no scoreable part).
Exemplar for Sundial/model.layers.10 (series c87cdfe6df1cf96f, block_bootstrap).
Exemplar for Sundial/model.layers.4 (series 9be4b438cd59dddf, block_bootstrap).
Exemplar for Sundial/model.layers.6 (series 9be4b438cd59dddf, block_bootstrap).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, TimesFM). L5 same causal effect on the same inputs: partial (neither same-effect nor acts-differently on shared inputs (no specific agreement: 2, not scorable: 56, shape only: 2)). L6: not measured: no registered concept_transfer claim for this concept.
internal name: strong raises dispersion · unusually raises seasonal (concept 25)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Sundial/model.layers.7 | n_changepoints (raw ρ=-0.215, resid ρ=-0.215, n=555); n_seasonalities (raw ρ=0.194, resid ρ=0.194, n=555); has_heteroskedastic (raw ρ=0.192, resid ρ=0.192, n=555) | 0.0010 | seasonal_dominant (23.16x, q=0.0000); anomaly_heavy (4.60x, q=0.0271) | no |
| Sundial/model.layers.8 | n_changepoints (raw ρ=-0.287, resid ρ=-0.287, n=555); n_seasonalities (raw ρ=0.266, resid ρ=0.266, n=555); ar_order (raw ρ=-0.226, resid ρ=-0.226, n=555) | 0.0010 | seasonal_dominant (21.23x, q=0.0000); anomaly_heavy (4.60x, q=0.0271) | no |
| Sundial/model.layers.9 | n_changepoints (raw ρ=-0.277, resid ρ=-0.277, n=555); ar_order (raw ρ=-0.241, resid ρ=-0.241, n=555); has_heteroskedastic (raw ρ=0.200, resid ρ=0.200, n=555) | 0.0010 | seasonal_dominant (23.16x, q=0.0000); anomaly_heavy (5.74x, q=0.0029) | no |
No cross-model part pair to compare (single-model concept, or no scoreable part).
Exemplar for Sundial/model.layers.7 (series a0c3fa63d848d60b, seasonal_dominant).
Exemplar for Sundial/model.layers.8 (series cd06d6d060abfecf, seasonal_dominant).
Exemplar for Sundial/model.layers.9 (series 653ee2385d9dc03c, seasonal_dominant).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, TimesFM). L5 same causal effect on the same inputs: not reached (acts differently on at least one shared-input test (acts differently: 18, no specific agreement: 11, not scorable: 20, shape only: 1)). L6: not measured: no registered concept_transfer claim for this concept.
35 feature(s) in this family without a tight (atlas) concept of their own -- Chronos-2/encoder.block.10: 1; Chronos-2/encoder.block.5: 1; Chronos-2/encoder.block.6: 1; Chronos-2/encoder.block.7: 1; Chronos-2/encoder.block.8: 2; Chronos-2/encoder.block.9: 1; Chronos-Bolt/encoder.block.3: 4; Chronos-Bolt/encoder.block.4: 7; Chronos-Bolt/encoder.block.5: 3; Sundial/model.layers.10: 1; Sundial/model.layers.11: 2; Sundial/model.layers.3: 3; Sundial/model.layers.4: 2; Sundial/model.layers.5: 1; Sundial/model.layers.7: 1; Sundial/model.layers.8: 2; Sundial/model.layers.9: 2.
These features increase the forecast's trend slope, and steer the last third of the forecast (removing them moves it). Found in 3 models (Chronos-2, Sundial, TimesFM).
22 feature(s) in this family without a tight (atlas) concept of their own -- Chronos-2/encoder.block.10: 1; Chronos-2/encoder.block.5: 2; Chronos-2/encoder.block.6: 3; Chronos-2/encoder.block.7: 3; Chronos-2/encoder.block.8: 2; Sundial/model.layers.10: 1; Sundial/model.layers.3: 2; Sundial/model.layers.4: 1; Sundial/model.layers.7: 3; Sundial/model.layers.8: 1; TimesFM/stacked_xf.2: 2; TimesFM/stacked_xf.4: 1.
These features steer the first third of the forecast (removing them moves it), and shift the forecast toward higher frequencies (a rougher, less smooth shape). Found in 3 models (Chronos-2, Sundial, TimesFM).
10 feature(s) in this family without a tight (atlas) concept of their own -- Sundial/model.layers.10: 1; Sundial/model.layers.11: 1; Sundial/model.layers.5: 1; Sundial/model.layers.6: 1; Sundial/model.layers.7: 2; Sundial/model.layers.8: 1; Sundial/model.layers.9: 2; TimesFM/stacked_xf.6: 1.
These features steer the last third of the forecast (removing them moves it), and increase the forecast's overall level. Found in 2 models (Chronos-2, Sundial).
internal name: strong lowers mase (concept 15)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Chronos-2/encoder.block.8 | has_random_walk (raw ρ=0.133, resid ρ=0.133, n=555); has_heteroskedastic (raw ρ=0.081, resid ρ=0.081, n=555); trend_scale (raw ρ=-0.079, resid ρ=-0.079, n=555) | 0.0420 | none survive BH | no |
| Sundial/model.layers.9 | n_seasonalities (raw ρ=0.168, resid ρ=0.168, n=555); trend_order (raw ρ=0.149, resid ρ=0.149, n=555); seasonal_amplitude_max (raw ρ=0.126, resid ρ=0.126, n=443) | 0.0050 | none survive BH | no |
| Model A | Model B | Shared top-k series | Expected by chance | p (BH) | Beyond archetype? | Agrees | ρ over all series (descriptive) |
|---|---|---|---|---|---|---|---|
| Chronos-2 | Sundial | 0 | 0.41 | 1.0000 | no | no | 0.181 |
| Two parts agree on inputs when their top-firing series overlap more than two random sets of the same size would (exact hypergeometric test, Benjamini-Hochberg within this concept). 'Beyond archetype' asks whether the overlap also beats random sets drawn with the same mix of archetypes, i.e. whether the parts share more than a preference for one kind of series. The correlation over all series is shown for context only: it measures broad co-variation and can be high with no shared top series. | |||||||
Exemplar for Chronos-2/encoder.block.8 (series 83cd32aa19606afd, random_walk_drift).
Exemplar for Sundial/model.layers.9 (series 8618a145be2ad181, seasonal_dominant).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM). L5 same causal effect on the same inputs: not reached (acts differently on at least one shared-input test (acts differently: 1, level only: 1, no specific agreement: 6, not scorable: 13, same causal effect: 1, shape only: 1)). L6: not measured: no registered concept_transfer claim for this concept.
15 feature(s) in this family without a tight (atlas) concept of their own -- Chronos-2/encoder.block.10: 1; Chronos-2/encoder.block.6: 1; Chronos-2/encoder.block.7: 1; Sundial/model.layers.10: 2; Sundial/model.layers.11: 2; Sundial/model.layers.4: 1; Sundial/model.layers.6: 2; Sundial/model.layers.7: 2; Sundial/model.layers.9: 3.
internal name: mild raises level (concept 2)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| TimesFM/stacked_xf.12 | ar_order (raw ρ=0.432, resid ρ=0.432, n=555); seasonal_period_dominant (raw ρ=-0.356, resid ρ=-0.356, n=443); n_seasonalities (raw ρ=0.352, resid ρ=0.352, n=555) | 0.0010 | noisy_chaotic (5.22x, q=0.0457); block_bootstrap (3.45x, q=0.0458) | no |
| TimesFM/stacked_xf.16 | trend_order (raw ρ=0.520, resid ρ=0.520, n=555); n_seasonalities (raw ρ=0.518, resid ρ=0.518, n=555); ar_coeff_sum (raw ρ=0.517, resid ρ=0.517, n=374) | 0.0010 | parametric (6.68x, q=0.0000) | no |
| TimesFM/stacked_xf.8 | ar_order (raw ρ=0.443, resid ρ=0.443, n=555); seasonal_period_dominant (raw ρ=-0.437, resid ρ=-0.437, n=443); ar_coeff_sum (raw ρ=0.377, resid ρ=0.377, n=374) | 0.0010 | block_bootstrap (8.27x, q=0.0000) | no |
No cross-model part pair to compare (single-model concept, or no scoreable part).
Exemplar for TimesFM/stacked_xf.12 (series 76e969cfc135b283, noisy_chaotic).
Exemplar for TimesFM/stacked_xf.16 (series 9eb788e5ff96b221, parametric).
Exemplar for TimesFM/stacked_xf.8 (series f59121696d9f590e, block_bootstrap).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial). L5 same causal effect on the same inputs: not reached (acts differently on at least one shared-input test (acts differently: 2, level only: 2, no specific agreement: 8, not scorable: 37)). L6: not measured: no registered concept_transfer claim for this concept.
Why panel for 'Level lowerers & Accuracy improvers & Near-term steerers': behavioral gap on this concept's own top-firing series vs. each other model, beside its own ablation MASE effect. why: no model is clearly better or worse than this one on these series; removing it worsens this model's MASE (1.880x the null's 95th percentile)
Absent elsewhere, or just not found? reached: other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial. Relative to the layers and dictionaries this run actually analyzed, not to every layer these models have.
internal name: mild raises horizon_shape_near · unusually raises mase (concept 3)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| TimesFM/stacked_xf.14 | n_seasonalities (raw ρ=0.492, resid ρ=0.492, n=555); ar_coeff_sum (raw ρ=0.492, resid ρ=0.492, n=374); seasonal_period_dominant (raw ρ=-0.466, resid ρ=-0.466, n=443) | 0.0010 | parametric (5.94x, q=0.0000) | no |
| TimesFM/stacked_xf.16 | ar_coeff_sum (raw ρ=0.498, resid ρ=0.498, n=374); n_seasonalities (raw ρ=0.473, resid ρ=0.473, n=555); trend_order (raw ρ=0.422, resid ρ=0.422, n=555) | 0.0010 | parametric (4.08x, q=0.0001) | no |
| TimesFM/stacked_xf.8 | n_seasonalities (raw ρ=0.446, resid ρ=0.446, n=555); ar_order (raw ρ=0.400, resid ρ=0.400, n=555); seasonal_period_dominant (raw ρ=-0.388, resid ρ=-0.388, n=443) | 0.0010 | none survive BH | no |
No cross-model part pair to compare (single-model concept, or no scoreable part).
Exemplar for TimesFM/stacked_xf.14 (series c7c2f35cd9505889, clean_low_noise).
Exemplar for TimesFM/stacked_xf.16 (series 9721b6a6f8cbd81b, parametric).
Exemplar for TimesFM/stacked_xf.8 (series e7e084c61bf0ebc4, mixture).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial). L5 same causal effect on the same inputs: not reached (acts differently on at least one shared-input test (acts differently: 1, level only: 1, no specific agreement: 9, not scorable: 34, shape only: 1)). L6: not measured: no registered concept_transfer claim for this concept.
Why panel for 'Accuracy improvers & Near-term steerers': behavioral gap on this concept's own top-firing series vs. each other model, beside its own ablation MASE effect. why: no model is clearly better or worse than this one on these series; removing it worsens this model's MASE (1.025x the null's 95th percentile)
Absent elsewhere, or just not found? reached: other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial. Relative to the layers and dictionaries this run actually analyzed, not to every layer these models have.
internal name: shifts the level (concept 26)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| TimesFM/stacked_xf.18 | ar_coeff_sum (raw ρ=0.490, resid ρ=0.490, n=374); n_seasonalities (raw ρ=0.383, resid ρ=0.383, n=555); trend_order (raw ρ=0.376, resid ρ=0.376, n=555) | 0.0010 | clean_low_noise (4.83x, q=0.0233); parametric (2.60x, q=0.0233) | no |
| TimesFM/stacked_xf.6 | noise_scale (raw ρ=0.307, resid ρ=0.307, n=555); has_intermittency (raw ρ=0.300, resid ρ=0.300, n=555); seasonal_period_dominant (raw ρ=-0.289, resid ρ=-0.289, n=443) | 0.0010 | mixture (2.99x, q=0.0000) | YES -- mixture (90%) |
No cross-model part pair to compare (single-model concept, or no scoreable part).
Exemplar for TimesFM/stacked_xf.18 (series 9721b6a6f8cbd81b, parametric).
Exemplar for TimesFM/stacked_xf.6 (series 0455fcd12e1372d6, mixture).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial). L5 same causal effect on the same inputs: not reached (acts differently on at least one shared-input test (acts differently: 7, level only: 1, no specific agreement: 4, not scorable: 24)). L6: not measured: no registered concept_transfer claim for this concept.
Why panel for 'Level shifters': behavioral gap on this concept's own top-firing series vs. each other model, beside its own ablation MASE effect. why: this model is worse than 2 model(s) on these series; removing it worsens this model's MASE (1.244x the null's 95th percentile)
Absent elsewhere, or just not found? reached: other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial. Relative to the layers and dictionaries this run actually analyzed, not to every layer these models have.
| archetype | TimesFM median MASE | next-best median MASE | coincides with a unique concept's inputs |
|---|---|---|---|
| intermittent_bursts | 1.020 | 1.024 | no |
| regime_switching | 1.905 | 1.980 | no |
| seasonal_dominant | 0.328 | 0.337 | no |
| trend_dominant | 0.744 | 0.754 | no |
Archetypes where this model has the lowest median MASE, beside whether that archetype is also an enriched input trigger of one of this model's own unique concepts above. A 'no' here is exactly as informative as a 'yes' -- it says this model's advantage on that archetype is not traced to any of its unique concepts' own input triggers.
internal name: strong raises dispersion · unusually raises horizon_shape_far (concept 5)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Chronos-2/encoder.block.5 | has_intermittency (raw ρ=0.374, resid ρ=0.374, n=555); n_seasonalities (raw ρ=-0.372, resid ρ=-0.372, n=555); seasonal_amplitude_max (raw ρ=-0.222, resid ρ=-0.222, n=443) | 0.0010 | block_bootstrap (8.96x, q=0.0000); anomaly_heavy (5.74x, q=0.0018) | no |
| Chronos-2/encoder.block.8 | has_intermittency (raw ρ=0.539, resid ρ=0.539, n=555); n_seasonalities (raw ρ=-0.347, resid ρ=-0.347, n=555); seasonal_amplitude_max (raw ρ=-0.207, resid ρ=-0.207, n=443) | 0.0010 | block_bootstrap (13.10x, q=0.0000) | YES -- block_bootstrap (95%) |
No cross-model part pair to compare (single-model concept, or no scoreable part).
Exemplar for Chronos-2/encoder.block.5 (series 25933fdb1371a64c, block_bootstrap).
Exemplar for Chronos-2/encoder.block.8 (series fafdfe79ce7ac32a, block_bootstrap).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-Bolt, Sundial, TimesFM). L5 same causal effect on the same inputs: not reached (acts differently on at least one shared-input test (acts differently: 3, level only: 1, no specific agreement: 3, not scorable: 36, shape only: 1)). L6: not measured: no registered concept_transfer claim for this concept.
Why panel for 'Volatility dampeners & Level raisers & Near-term steerers': behavioral gap on this concept's own top-firing series vs. each other model, beside its own ablation MASE effect. why: no model is clearly better or worse than this one on these series; removing it does not move this model's MASE beyond the random-direction null (0.403x)
Absent elsewhere, or just not found? reached: other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-Bolt, Sundial, TimesFM. Relative to the layers and dictionaries this run actually analyzed, not to every layer these models have.
internal name: strong lowers dispersion (concept 11)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Chronos-2/encoder.block.7 | seasonal_period_dominant (raw ρ=-0.128, resid ρ=-0.128, n=443); seasonal_amplitude_max (raw ρ=0.070, resid ρ=0.070, n=443); n_anomalies (raw ρ=0.062, resid ρ=0.062, n=555) | 0.0490 | mixture (3.33x, q=0.0000) | YES -- mixture (100%) |
| Chronos-2/encoder.block.8 | seasonal_period_dominant (raw ρ=-0.154, resid ρ=-0.154, n=443); noise_scale (raw ρ=-0.090, resid ρ=-0.090, n=555); seasonal_amplitude_max (raw ρ=0.069, resid ρ=0.069, n=443) | 0.0160 | mixture (3.33x, q=0.0000) | YES -- mixture (100%) |
| Chronos-2/encoder.block.9 | seasonal_period_dominant (raw ρ=-0.214, resid ρ=-0.214, n=443); n_changepoints (raw ρ=0.092, resid ρ=0.092, n=555); seasonal_amplitude_max (raw ρ=0.092, resid ρ=0.092, n=443) | 0.0010 | mixture (3.33x, q=0.0000) | YES -- mixture (100%) |
No cross-model part pair to compare (single-model concept, or no scoreable part).
Exemplar for Chronos-2/encoder.block.7 (series 1aa8494bfac43c6c, mixture).
Exemplar for Chronos-2/encoder.block.8 (series e7bd1a28391e112a, mixture).
Exemplar for Chronos-2/encoder.block.9 (series e7bd1a28391e112a, mixture).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-Bolt, Sundial, TimesFM). L5 same causal effect on the same inputs: not reached (acts differently on at least one shared-input test (acts differently: 5, level only: 2, no specific agreement: 27, not scorable: 12, same causal effect: 8, shape only: 12)). L6: not measured: no registered concept_transfer claim for this concept.
Why panel for 'Volatility amplifiers & Level raisers & Long-range steerers': behavioral gap on this concept's own top-firing series vs. each other model, beside its own ablation MASE effect. why: this model beats every other on these series, but removing the concept does not worsen its MASE; removing it does not move this model's MASE beyond the random-direction null (0.576x)
Absent elsewhere, or just not found? reached: other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-Bolt, Sundial, TimesFM. Relative to the layers and dictionaries this run actually analyzed, not to every layer these models have.
internal name: strong lowers level · unusually lowers seasonal (concept 13)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Chronos-2/encoder.block.7 | noise_scale (raw ρ=-0.371, resid ρ=-0.371, n=555); ar_order (raw ρ=-0.306, resid ρ=-0.306, n=555); n_changepoints (raw ρ=-0.304, resid ρ=-0.304, n=555) | 0.0010 | seasonal_dominant (27.02x, q=0.0000) | no |
| Chronos-2/encoder.block.8 | noise_scale (raw ρ=-0.343, resid ρ=-0.343, n=555); seasonal_amplitude_max (raw ρ=0.301, resid ρ=0.301, n=443); n_changepoints (raw ρ=-0.294, resid ρ=-0.294, n=555) | 0.0010 | seasonal_dominant (23.16x, q=0.0000); clean_low_noise (4.83x, q=0.0190) | no |
| Chronos-2/encoder.block.9 | n_changepoints (raw ρ=-0.353, resid ρ=-0.353, n=555); noise_scale (raw ρ=-0.319, resid ρ=-0.319, n=555); ar_order (raw ρ=-0.288, resid ρ=-0.288, n=555) | 0.0010 | seasonal_dominant (25.09x, q=0.0000) | no |
No cross-model part pair to compare (single-model concept, or no scoreable part).
Exemplar for Chronos-2/encoder.block.7 (series 001115a9c567f964, seasonal_dominant).
Exemplar for Chronos-2/encoder.block.8 (series 001115a9c567f964, seasonal_dominant).
Exemplar for Chronos-2/encoder.block.9 (series a0c3fa63d848d60b, seasonal_dominant).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-Bolt, Sundial, TimesFM). L5 same causal effect on the same inputs: not reached (acts differently on at least one shared-input test (acts differently: 6, level only: 1, no specific agreement: 12, not scorable: 17)). L6: not measured: no registered concept_transfer claim for this concept.
Why panel for 'Level raisers & Volatility amplifiers & Seasonality amplifiers': behavioral gap on this concept's own top-firing series vs. each other model, beside its own ablation MASE effect. why: no model is clearly better or worse than this one on these series; removing it worsens this model's MASE (1.378x the null's 95th percentile)
Absent elsewhere, or just not found? reached: other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-Bolt, Sundial, TimesFM. Relative to the layers and dictionaries this run actually analyzed, not to every layer these models have.
| archetype | Chronos-2 median MASE | next-best median MASE | coincides with a unique concept's inputs |
|---|---|---|---|
| amplitude_modulated | 1.817 | 1.884 | no |
| anomaly_heavy | 0.687 | 0.721 | yes |
| ar_colored_noise | 0.751 | 0.765 | no |
| clean_low_noise | 2.031 | 2.240 | no |
| multi_seasonal_complex | 0.931 | 1.063 | no |
| nonsinusoidal_seasonal | 2.743 | 3.033 | no |
| random_walk_drift | 2.068 | 2.258 | no |
Archetypes where this model has the lowest median MASE, beside whether that archetype is also an enriched input trigger of one of this model's own unique concepts above. A 'no' here is exactly as informative as a 'yes' -- it says this model's advantage on that archetype is not traced to any of its unique concepts' own input triggers.
internal name: strong raises dispersion · unusually raises spectral_centroid (concept 19)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Sundial/model.layers.10 | n_seasonalities (raw ρ=-0.621, resid ρ=-0.621, n=555); seasonal_amplitude_max (raw ρ=-0.464, resid ρ=-0.464, n=443); has_intermittency (raw ρ=0.338, resid ρ=0.338, n=555) | 0.0010 | block_bootstrap (11.03x, q=0.0000) | YES -- block_bootstrap (80%) |
| Sundial/model.layers.4 | has_intermittency (raw ρ=0.318, resid ρ=0.318, n=555); n_seasonalities (raw ρ=-0.226, resid ρ=-0.226, n=555); seasonal_amplitude_max (raw ρ=-0.187, resid ρ=-0.187, n=443) | 0.0010 | block_bootstrap (11.72x, q=0.0000) | YES -- block_bootstrap (85%) |
| Sundial/model.layers.6 | has_intermittency (raw ρ=0.340, resid ρ=0.340, n=555); n_seasonalities (raw ρ=-0.243, resid ρ=-0.243, n=555); n_anomalies (raw ρ=0.187, resid ρ=0.187, n=555) | 0.0010 | block_bootstrap (11.72x, q=0.0000) | YES -- block_bootstrap (85%) |
No cross-model part pair to compare (single-model concept, or no scoreable part).
Exemplar for Sundial/model.layers.10 (series c87cdfe6df1cf96f, block_bootstrap).
Exemplar for Sundial/model.layers.4 (series 9be4b438cd59dddf, block_bootstrap).
Exemplar for Sundial/model.layers.6 (series 9be4b438cd59dddf, block_bootstrap).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, TimesFM). L5 same causal effect on the same inputs: partial (neither same-effect nor acts-differently on shared inputs (no specific agreement: 2, not scorable: 56, shape only: 2)). L6: not measured: no registered concept_transfer claim for this concept.
Why panel for 'Volatility dampeners & Smoothing features': behavioral gap on this concept's own top-firing series vs. each other model, beside its own ablation MASE effect. why: this model is worse than 3 model(s) on these series; removing it does not move this model's MASE beyond the random-direction null (0.285x)
Absent elsewhere, or just not found? reached: other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, TimesFM. Relative to the layers and dictionaries this run actually analyzed, not to every layer these models have.
internal name: strong raises horizon_shape_far · unusually raises mase (concept 21)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Sundial/model.layers.4 | n_seasonalities (raw ρ=0.619, resid ρ=0.619, n=555); ar_coeff_sum (raw ρ=0.617, resid ρ=0.617, n=374); seasonal_period_dominant (raw ρ=-0.601, resid ρ=-0.601, n=443) | 0.0010 | mixture (2.16x, q=0.0035) | no |
| Sundial/model.layers.7 | ar_coeff_sum (raw ρ=0.410, resid ρ=0.410, n=374); n_changepoints (raw ρ=0.341, resid ρ=0.341, n=555); trend_order (raw ρ=0.337, resid ρ=0.337, n=555) | 0.0010 | mixture (3.33x, q=0.0000) | YES -- mixture (100%) |
| Sundial/model.layers.9 | ar_coeff_sum (raw ρ=0.072, resid ρ=0.072, n=374); seasonal_amplitude_max (raw ρ=0.061, resid ρ=0.061, n=443); trend_order (raw ρ=0.039, resid ρ=0.039, n=555) | 0.7343 | mixture (3.33x, q=0.0000) | YES -- mixture (100%) |
No cross-model part pair to compare (single-model concept, or no scoreable part).
Exemplar for Sundial/model.layers.4 (series a6cc538c81861ce3, mixture).
Exemplar for Sundial/model.layers.7 (series 5483841f5c4c4f0e, mixture).
Exemplar for Sundial/model.layers.9 (series 5483841f5c4c4f0e, mixture).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, TimesFM). L5 same causal effect on the same inputs: not reached (acts differently on at least one shared-input test (acts differently: 1, level only: 7, no specific agreement: 27, not scorable: 23, shape only: 1)). L6: not measured: no registered concept_transfer claim for this concept.
Why panel for 'Level lowerers & Accuracy improvers & Smoothing features': behavioral gap on this concept's own top-firing series vs. each other model, beside its own ablation MASE effect. why: this model is worse than 1 model(s) on these series; removing it does not move this model's MASE beyond the random-direction null (0.672x)
Absent elsewhere, or just not found? reached: other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, TimesFM. Relative to the layers and dictionaries this run actually analyzed, not to every layer these models have.
internal name: strong raises horizon_shape_far · unusually raises horizon_shape_near (concept 22)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Sundial/model.layers.4 | ar_coeff_sum (raw ρ=0.139, resid ρ=0.139, n=374); trend_order (raw ρ=0.133, resid ρ=0.133, n=555); n_seasonalities (raw ρ=0.131, resid ρ=0.131, n=555) | 0.0260 | mixture (2.50x, q=0.0001) | no |
| Sundial/model.layers.5 | n_seasonalities (raw ρ=-0.567, resid ρ=-0.567, n=555); has_intermittency (raw ρ=0.445, resid ρ=0.445, n=555); seasonal_amplitude_max (raw ρ=-0.423, resid ρ=-0.423, n=443) | 0.0010 | intermittent_bursts (13.16x, q=0.0000); ar_colored_noise (8.39x, q=0.0000) | no |
No cross-model part pair to compare (single-model concept, or no scoreable part).
Exemplar for Sundial/model.layers.4 (series 17329d907c46fd70, mixture).
Exemplar for Sundial/model.layers.5 (series a6c63d16b1997799, sequential_par).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, TimesFM). L5 same causal effect on the same inputs: partial (neither same-effect nor acts-differently on shared inputs (level only: 1, no specific agreement: 4, not scorable: 27)). L6: not measured: no registered concept_transfer claim for this concept.
Why panel for 'Long-range steerers': behavioral gap on this concept's own top-firing series vs. each other model, beside its own ablation MASE effect. why: this model is worse than 2 model(s) on these series; removing it improves this model's MASE (0.068x the null's 95th percentile)
Absent elsewhere, or just not found? reached: other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, TimesFM. Relative to the layers and dictionaries this run actually analyzed, not to every layer these models have.
internal name: strong raises dispersion · unusually raises seasonal (concept 25)
Each part's mean 9-channel ablation effect, in multiples of its own random-direction null (dotted lines at ±1).
| Part | Top structural field(s) | p (max |ρ|, search-corrected) | Enriched labels (BH q≤0.05) | Provenance-driven? |
|---|---|---|---|---|
| Sundial/model.layers.7 | n_changepoints (raw ρ=-0.215, resid ρ=-0.215, n=555); n_seasonalities (raw ρ=0.194, resid ρ=0.194, n=555); has_heteroskedastic (raw ρ=0.192, resid ρ=0.192, n=555) | 0.0010 | seasonal_dominant (23.16x, q=0.0000); anomaly_heavy (4.60x, q=0.0271) | no |
| Sundial/model.layers.8 | n_changepoints (raw ρ=-0.287, resid ρ=-0.287, n=555); n_seasonalities (raw ρ=0.266, resid ρ=0.266, n=555); ar_order (raw ρ=-0.226, resid ρ=-0.226, n=555) | 0.0010 | seasonal_dominant (21.23x, q=0.0000); anomaly_heavy (4.60x, q=0.0271) | no |
| Sundial/model.layers.9 | n_changepoints (raw ρ=-0.277, resid ρ=-0.277, n=555); ar_order (raw ρ=-0.241, resid ρ=-0.241, n=555); has_heteroskedastic (raw ρ=0.200, resid ρ=0.200, n=555) | 0.0010 | seasonal_dominant (23.16x, q=0.0000); anomaly_heavy (5.74x, q=0.0029) | no |
No cross-model part pair to compare (single-model concept, or no scoreable part).
Exemplar for Sundial/model.layers.7 (series a0c3fa63d848d60b, seasonal_dominant).
Exemplar for Sundial/model.layers.8 (series cd06d6d060abfecf, seasonal_dominant).
Exemplar for Sundial/model.layers.9 (series 653ee2385d9dc03c, seasonal_dominant).
How sure: L3 reproducible: reached (the concept's grouping survives an independent replicate SAE at the same target(s)). L4 other dictionaries select the same inputs: reached (other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, TimesFM). L5 same causal effect on the same inputs: not reached (acts differently on at least one shared-input test (acts differently: 18, no specific agreement: 11, not scorable: 20, shape only: 1)). L6: not measured: no registered concept_transfer claim for this concept.
Why panel for 'Volatility dampeners & Seasonality dampeners & Accuracy degraders': behavioral gap on this concept's own top-firing series vs. each other model, beside its own ablation MASE effect. why: this model is worse than 2 model(s) on these series; removing it improves this model's MASE (2.873x the null's 95th percentile)
Absent elsewhere, or just not found? reached: other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, TimesFM. Relative to the layers and dictionaries this run actually analyzed, not to every layer these models have.
| archetype | Sundial median MASE | next-best median MASE | coincides with a unique concept's inputs |
|---|---|---|---|
| noisy_chaotic | 0.827 | 0.903 | no |
Archetypes where this model has the lowest median MASE, beside whether that archetype is also an enriched input trigger of one of this model's own unique concepts above. A 'no' here is exactly as informative as a 'yes' -- it says this model's advantage on that archetype is not traced to any of its unique concepts' own input triggers.
| Concept | n models | same forecast effect | same inputs | reproducible | other dictionaries select the same inputs | same causal effect on the same inputs | confirmed on private data | Verdict | Highest rung |
|---|---|---|---|---|---|---|---|---|---|
| strong raises horizon_shape_far · unusually raises spectral_centroid | 2 | reached 2 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | reached every model in this concept agrees, pairwise, on which series drive it | reached the concept's grouping survives an independent replicate SAE at the same target(s) | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM | reached same causal effect on shared inputs (level only: 4, no specific agreement: 27, not scorable: 24, same causal effect: 1, shape only: 5) | reached confirmed on private data (4/4 registered claim(s); by mode -- search: 4/4) | shared: same effect, same inputs, reproducible | L3 |
| strong raises mase | 2 | reached 2 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | reached every model in this concept agrees, pairwise, on which series drive it | reached the concept's grouping survives an independent replicate SAE at the same target(s) | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM | reached same causal effect on shared inputs (level only: 3, no specific agreement: 6, not scorable: 48, same causal effect: 1) | not measured not measured: no registered concept_transfer claim for this concept | shared: same effect, same inputs, reproducible | L3 |
| mild raises level | 1 | reached 1 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | not applicable only one model holds this concept | reached the concept's grouping survives an independent replicate SAE at the same target(s) | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial | not reached acts differently on at least one shared-input test (acts differently: 2, level only: 2, no specific agreement: 8, not scorable: 37) | not measured not measured: no registered concept_transfer claim for this concept | model-specific, reproducible | L3 |
| mild raises horizon_shape_near · unusually raises mase | 1 | reached 1 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | not applicable only one model holds this concept | reached the concept's grouping survives an independent replicate SAE at the same target(s) | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial | not reached acts differently on at least one shared-input test (acts differently: 1, level only: 1, no specific agreement: 9, not scorable: 34, shape only: 1) | not measured not measured: no registered concept_transfer claim for this concept | model-specific, reproducible | L3 |
| strong raises dispersion · unusually raises horizon_shape_far | 1 | reached 1 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | not applicable only one model holds this concept | reached the concept's grouping survives an independent replicate SAE at the same target(s) | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-Bolt, Sundial, TimesFM | not reached acts differently on at least one shared-input test (acts differently: 3, level only: 1, no specific agreement: 3, not scorable: 36, shape only: 1) | not measured not measured: no registered concept_transfer claim for this concept | model-specific, reproducible | L3 |
| strong lowers dispersion | 1 | reached 1 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | not applicable only one model holds this concept | reached the concept's grouping survives an independent replicate SAE at the same target(s) | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-Bolt, Sundial, TimesFM | not reached acts differently on at least one shared-input test (acts differently: 5, level only: 2, no specific agreement: 27, not scorable: 12, same causal effect: 8, shape only: 12) | not measured not measured: no registered concept_transfer claim for this concept | model-specific, reproducible | L3 |
| strong lowers level · unusually lowers seasonal | 1 | reached 1 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | not applicable only one model holds this concept | reached the concept's grouping survives an independent replicate SAE at the same target(s) | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-Bolt, Sundial, TimesFM | not reached acts differently on at least one shared-input test (acts differently: 6, level only: 1, no specific agreement: 12, not scorable: 17) | not measured not measured: no registered concept_transfer claim for this concept | model-specific, reproducible | L3 |
| strong raises dispersion · unusually raises spectral_centroid | 1 | reached 1 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | not applicable only one model holds this concept | reached the concept's grouping survives an independent replicate SAE at the same target(s) | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, TimesFM | partial neither same-effect nor acts-differently on shared inputs (no specific agreement: 2, not scorable: 56, shape only: 2) | not measured not measured: no registered concept_transfer claim for this concept | model-specific, reproducible | L3 |
| strong raises horizon_shape_far · unusually raises mase | 1 | reached 1 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | not applicable only one model holds this concept | reached the concept's grouping survives an independent replicate SAE at the same target(s) | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, TimesFM | not reached acts differently on at least one shared-input test (acts differently: 1, level only: 7, no specific agreement: 27, not scorable: 23, shape only: 1) | not measured not measured: no registered concept_transfer claim for this concept | model-specific, reproducible | L3 |
| strong raises horizon_shape_far · unusually raises horizon_shape_near | 1 | reached 1 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | not applicable only one model holds this concept | reached the concept's grouping survives an independent replicate SAE at the same target(s) | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, TimesFM | partial neither same-effect nor acts-differently on shared inputs (level only: 1, no specific agreement: 4, not scorable: 27) | not measured not measured: no registered concept_transfer claim for this concept | model-specific, reproducible | L3 |
| strong raises dispersion · unusually raises seasonal | 1 | reached 1 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | not applicable only one model holds this concept | reached the concept's grouping survives an independent replicate SAE at the same target(s) | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, TimesFM | not reached acts differently on at least one shared-input test (acts differently: 18, no specific agreement: 11, not scorable: 20, shape only: 1) | not measured not measured: no registered concept_transfer claim for this concept | model-specific, reproducible | L3 |
| shifts the level | 1 | reached 1 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | not applicable only one model holds this concept | reached the concept's grouping survives an independent replicate SAE at the same target(s) | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial | not reached acts differently on at least one shared-input test (acts differently: 7, level only: 1, no specific agreement: 4, not scorable: 24) | not measured not measured: no registered concept_transfer claim for this concept | model-specific, reproducible | L3 |
| strong raises level · unusually lowers trend | 3 | reached 3 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | partial some but not every cross-model pair in this concept agrees on which series drive it | reached the concept's grouping survives an independent replicate SAE at the same target(s) | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM | not reached acts differently on at least one shared-input test (acts differently: 2, level only: 1, no specific agreement: 9, not scorable: 32) | not measured not measured: no registered concept_transfer claim for this concept | partially shared | L2 |
| strong lowers level · unusually raises mase | 2 | reached 2 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | not reached no cross-model pair in this concept agrees on which series drive it | reached the concept's grouping survives an independent replicate SAE at the same target(s) | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM | partial neither same-effect nor acts-differently on shared inputs (level only: 3, no specific agreement: 7, not scorable: 66, shape only: 1) | reached confirmed on private data (16/16 registered claim(s); by mode -- search: 16/16) | shared effect, different inputs (convergent) | L1 |
| strong raises trend | 2 | reached 2 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | not reached no cross-model pair in this concept agrees on which series drive it | not reached the concept's grouping did NOT survive an independent replicate SAE | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-Bolt, Sundial, TimesFM | partial neither same-effect nor acts-differently on shared inputs (level only: 2, no specific agreement: 4, not scorable: 59, shape only: 1) | not measured not measured: no registered concept_transfer claim for this concept | not reproducible across SAE seeds | L1 |
| strong raises horizon_shape_near · unusually lowers mase | 2 | reached 2 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | not reached no cross-model pair in this concept agrees on which series drive it | reached the concept's grouping survives an independent replicate SAE at the same target(s) | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM | not reached acts differently on at least one shared-input test (acts differently: 2, no specific agreement: 9, not scorable: 9) | not measured not measured: no registered concept_transfer claim for this concept | shared effect, different inputs (convergent) | L1 |
| strong raises horizon_shape_near · unusually lowers level · unusually raises dispersion | 2 | reached 2 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | not reached no cross-model pair in this concept agrees on which series drive it | reached the concept's grouping survives an independent replicate SAE at the same target(s) | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM | partial neither same-effect nor acts-differently on shared inputs (level only: 2, no specific agreement: 16, not scorable: 23) | not measured not measured: no registered concept_transfer claim for this concept | shared effect, different inputs (convergent) | L1 |
| strong lowers level · unusually lowers spectral_centroid | 2 | reached 2 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | not reached no cross-model pair in this concept agrees on which series drive it | not reached the concept's grouping did NOT survive an independent replicate SAE | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM | partial neither same-effect nor acts-differently on shared inputs (level only: 1, no specific agreement: 3, not scorable: 17, shape only: 1) | not measured not measured: no registered concept_transfer claim for this concept | not reproducible across SAE seeds | L1 |
| strong raises level · unusually raises dispersion | 2 | reached 2 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | not reached no cross-model pair in this concept agrees on which series drive it | reached the concept's grouping survives an independent replicate SAE at the same target(s) | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM | partial neither same-effect nor acts-differently on shared inputs (no specific agreement: 7, not scorable: 29) | not measured not measured: no registered concept_transfer claim for this concept | shared effect, different inputs (convergent) | L1 |
| dominant raises horizon_shape_near | 2 | reached 2 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | not reached no cross-model pair in this concept agrees on which series drive it | not reached the concept's grouping did NOT survive an independent replicate SAE | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM | partial neither same-effect nor acts-differently on shared inputs (no specific agreement: 2, not scorable: 15) | not measured not measured: no registered concept_transfer claim for this concept | not reproducible across SAE seeds | L1 |
| strong lowers mase | 2 | reached 2 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | not reached no cross-model pair in this concept agrees on which series drive it | reached the concept's grouping survives an independent replicate SAE at the same target(s) | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM | not reached acts differently on at least one shared-input test (acts differently: 1, level only: 1, no specific agreement: 6, not scorable: 13, same causal effect: 1, shape only: 1) | not measured not measured: no registered concept_transfer claim for this concept | shared effect, different inputs (convergent) | L1 |
| strong raises horizon_shape_near · unusually raises level | 2 | reached 2 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | not reached no cross-model pair in this concept agrees on which series drive it | reached the concept's grouping survives an independent replicate SAE at the same target(s) | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM | not reached acts differently on at least one shared-input test (acts differently: 4, level only: 2, no specific agreement: 15, not scorable: 26, shape only: 1) | not measured not measured: no registered concept_transfer claim for this concept | shared effect, different inputs (convergent) | L1 |
| strong raises seasonal | 2 | reached 2 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | not reached no cross-model pair in this concept agrees on which series drive it | reached the concept's grouping survives an independent replicate SAE at the same target(s) | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM | not reached acts differently on at least one shared-input test (acts differently: 4, level only: 1, no specific agreement: 13, not scorable: 37, shape only: 1) | not measured not measured: no registered concept_transfer claim for this concept | shared effect, different inputs (convergent) | L1 |
| mild raises dispersion | 2 | reached 2 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | not reached no cross-model pair in this concept agrees on which series drive it | reached the concept's grouping survives an independent replicate SAE at the same target(s) | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM | not reached acts differently on at least one shared-input test (acts differently: 6, level only: 2, no specific agreement: 16, not scorable: 34) | not measured not measured: no registered concept_transfer claim for this concept | shared effect, different inputs (convergent) | L1 |
| mild raises horizon_shape_near · unusually raises horizon_shape_far | 2 | reached 2 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | not reached no cross-model pair in this concept agrees on which series drive it | reached the concept's grouping survives an independent replicate SAE at the same target(s) | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM | partial neither same-effect nor acts-differently on shared inputs (level only: 9, no specific agreement: 11, not scorable: 36) | not measured not measured: no registered concept_transfer claim for this concept | shared effect, different inputs (convergent) | L1 |
| mild raises horizon_shape_near · unusually raises dispersion | 2 | reached 2 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | not reached no cross-model pair in this concept agrees on which series drive it | not reached the concept's grouping did NOT survive an independent replicate SAE | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-2, Chronos-Bolt, Sundial, TimesFM | partial neither same-effect nor acts-differently on shared inputs (level only: 1, no specific agreement: 2, not scorable: 32) | not measured not measured: no registered concept_transfer claim for this concept | not reproducible across SAE seeds | L1 |
| strong raises horizon_shape_near · unusually lowers level · unusually raises trend | 1 | reached 1 model(s) share this concept's causal effect profile (atlas membership, within-model causal) | not applicable only one model holds this concept | not reached the concept's grouping did NOT survive an independent replicate SAE | reached other model(s)' own dictionaries also select this concept's inputs under FDR: Chronos-Bolt, Sundial, TimesFM | not reached acts differently on at least one shared-input test (acts differently: 2, level only: 4, no specific agreement: 4, not scorable: 17) | not measured not measured: no registered concept_transfer claim for this concept | not reproducible across SAE seeds | L1 |
verdict = f(sharing_class, stable): sharing_class == 'shared (same effect, same inputs)' and stable is True -> 'shared: same effect, same inputs, reproducible'; that sharing_class with stable is False -> 'not reproducible across SAE seeds'; that sharing_class with stable unmeasured -> 'not measured: L3 reproducibility <reason>'; sharing_class == 'convergent (same effect, different inputs)' -> 'shared effect, different inputs (convergent)' unless stable is False; sharing_class == 'partially shared' -> 'partially shared' unless stable is False; either of those with stable is False -> 'not reproducible across SAE seeds'; sharing_class == 'single-model' and stable is True -> 'model-specific, reproducible'; that sharing_class with stable is False -> 'not reproducible across SAE seeds'; that sharing_class with stable unmeasured -> 'not measured: L3 reproducibility <reason>'.
Cross-model causal agreement, per ordered model pair, on the SAME shared series -- every FDR-surviving reciprocal atlas-transfer test's verdict.
How to read it
Each cell counts (concept, source target, destination target) tests scored 'source→destination'. A test is scored only when both sides' ablation clears its own within-model null on the shared series; otherwise it is 'not scorable'.
Limitations
Evidence class: causal WITHIN each model (each side's ablation must clear its own random-direction null on the shared series to be scorable; the agreement statistics must beat the 95th percentile of both models' activation-matched random-feature-set floors, and 'acts differently' requires falling below both floors' 5th percentile), compared ACROSS models only on the same corpus inputs -- never a transplant of one model's activation into another (invariant 5). A pair's counts are not symmetric: source and destination are the ordered roles the transfer test itself assigned.
| Model pair (source→destination) | same causal effect | level only | shape only | acts differently | no specific agreement | not scorable | Total |
|---|---|---|---|---|---|---|---|
| Chronos-2->Chronos-Bolt | 1 | 3 | 1 | 3 | 9 | 50 | 67 |
| Chronos-2->Sundial | 3 | 6 | 3 | 13 | 32 | 133 | 190 |
| Chronos-2->TimesFM | 6 | 6 | 13 | 3 | 33 | 93 | 154 |
| Chronos-Bolt->Chronos-2 | 1 | 1 | 0 | 0 | 3 | 18 | 23 |
| Chronos-Bolt->Sundial | 0 | 2 | 1 | 1 | 4 | 27 | 35 |
| Chronos-Bolt->TimesFM | 0 | 0 | 0 | 1 | 10 | 14 | 25 |
| Sundial->Chronos-2 | 0 | 4 | 4 | 6 | 43 | 102 | 159 |
| Sundial->Chronos-Bolt | 0 | 3 | 0 | 5 | 29 | 38 | 75 |
| Sundial->TimesFM | 0 | 13 | 5 | 21 | 65 | 115 | 219 |
| TimesFM->Chronos-2 | 0 | 7 | 1 | 2 | 13 | 75 | 98 |
| TimesFM->Chronos-Bolt | 0 | 4 | 0 | 3 | 2 | 35 | 44 |
| TimesFM->Sundial | 0 | 3 | 1 | 6 | 21 | 103 | 134 |
| source model | destination model | tests | uncorrected reciprocal | FDR reciprocal |
|---|---|---|---|---|
| Chronos-2 | Chronos-Bolt | 12 | 12 | 12 |
| Chronos-2 | Sundial | 36 | 34 | 34 |
| Chronos-2 | TimesFM | 40 | 34 | 33 |
| Chronos-Bolt | Chronos-2 | 12 | 12 | 12 |
| Chronos-Bolt | Sundial | 18 | 18 | 18 |
| Chronos-Bolt | TimesFM | 20 | 20 | 20 |
| Sundial | Chronos-2 | 18 | 18 | 18 |
| Sundial | Chronos-Bolt | 9 | 9 | 8 |
| Sundial | TimesFM | 30 | 26 | 26 |
For each ordered (source, destination) model pair, how many per-target concept transfer tests ran, how many cleared the raw p95 null in both directions ("uncorrected reciprocal"), and how many still clear once each leg is Benjamini-Hochberg corrected within its own (pair, leg) family at q=0.05 ("FDR reciprocal").
How to read it
A test's exact permutation p is floored at 1/201. p_method='exact' leaves floor-hitting tests AT that floor: BH then passes them only as a batch, so a lone strong transfer in a large family can be missed (see the multiplicity ledger's 'min. batch to survive' column).
Limitations
FDR reciprocal is always <= uncorrected reciprocal: BH can only remove survivors relative to the raw p95 comparison, never add them. Read this table beside the multiplicity ledger, which records each (pair, leg) as its own correction family rather than pooling them.
| source model | destination model | tests | uncorrected reciprocal | FDR reciprocal |
|---|---|---|---|---|
| Chronos-2 | Chronos-Bolt | 81 | 68 | 67 |
| Chronos-2 | Sundial | 243 | 193 | 190 |
| Chronos-2 | TimesFM | 270 | 166 | 154 |
| Chronos-Bolt | Chronos-2 | 28 | 23 | 23 |
| Chronos-Bolt | Sundial | 36 | 35 | 35 |
| Chronos-Bolt | TimesFM | 40 | 25 | 25 |
| Sundial | Chronos-2 | 196 | 162 | 159 |
| Sundial | Chronos-Bolt | 84 | 75 | 75 |
| Sundial | TimesFM | 280 | 224 | 219 |
| TimesFM | Chronos-2 | 119 | 100 | 98 |
| TimesFM | Chronos-Bolt | 51 | 45 | 44 |
| TimesFM | Sundial | 153 | 135 | 134 |
The same transfer test, over the cross-model ATLAS's own concepts instead of each target's own per-target clusters: for every atlas concept's part at one model, does another model's dictionary select the same top-firing series.
How to read it
Built from the identical draw-building and scoring path as the per-target table above (`sae/transfer.py::transfer_one`), just over a different source unit -- an atlas concept's part at one target, rather than that target's own concept.
Limitations
A concept with only one model's worth of members contributes no row here at all (there is no other model to test against); read `sae/atlas_transfer.json::concept_summary` for which concepts were skipped for that reason.
| cell | count |
|---|---|
| spans effect space, transfers (input space) | 35 |
| spans effect space, does not transfer | 1 |
| does not span effect space, transfers | 92 |
| does not span effect space, does not transfer | 4 |
For every (atlas concept, ordered model pair) cell that was actually tested: does the concept span both models in EFFECT space (both hold >=1 member of the same causal-profile concept), and does it also transfer in INPUT space (FDR-reciprocal at some tested target pair)?
How to read it
Of the 36 cell(s) that span both models in effect space, 35 also transfer in input space and 1 do not -- a concept's shared causal profile does not by itself guarantee its members were selected by similar inputs.
Limitations
Every cell here was TESTED; a (concept, pair) combination with no persisted features at one of the two models contributes to neither axis rather than counting as a measured "No" -- so these four counts do not sum to every concept times every pair, only to every pair actually examined.
| statistic | value | null mean | null p95 | p | p (more segregated) |
|---|---|---|---|---|---|
| n_families (real) | 9.000 | 14.330 | 16.000 | 1.000 | NaN |
| frac_assigned (real) | 0.983 | 0.996 | 1.000 | 0.985 | NaN |
| final-partition silhouette (real) | 0.283 | 0.375 | NaN | 1.000 | NaN |
| n_multi_model (real) | 9.000 | 9.000 | NaN | 1.000 | NaN |
| mean_purity (real) | 0.492 | 0.440 | NaN | NaN | 0.020 |
descriptive, not a significance test of separation: the final-partition silhouette is flat across the whole grid on every run measured so far (~0.31-0.34), so a real silhouette near or below the null mean does not mean the families are arbitrary -- p_n_families/p_frac_assigned are the tests that carry the 'is there more structure than chance' claim; p_silhouette only says whether the CHOSEN (coarsest, tolerance-matched) cut happens to also be tighter than chance, which it need not be by construction
28 target(s) checked; 5 misfit(s) found.
Chronos-2/encoder.block.6 concept 0, feature 3987: cosine to centroid +0.325 vs concept's own mean member-to-centroid cosine +0.663 (threshold +0.363, centroid_cosine_mean minus a gap of 0.3).
own fingerprint: mase +1.33x null
concept's fingerprint: horizon_shape_far +1.79x null; horizon_shape_near +1.40x null
Chronos-2/encoder.block.8 concept 1, feature 4005: cosine to centroid +0.122 vs concept's own mean member-to-centroid cosine +0.617 (threshold +0.317, centroid_cosine_mean minus a gap of 0.3).
own fingerprint: trend +2.18x null; dispersion -1.98x null; horizon_shape_far +1.73x null; mase -1.16x null; level +1.13x null
concept's fingerprint: horizon_shape_far +1.63x null; horizon_shape_near +1.39x null
Chronos-2/encoder.block.8 concept 1, feature 5700: cosine to centroid +0.262 vs concept's own mean member-to-centroid cosine +0.617 (threshold +0.317, centroid_cosine_mean minus a gap of 0.3).
own fingerprint: trend +1.40x null
concept's fingerprint: horizon_shape_far +1.63x null; horizon_shape_near +1.39x null
Chronos-Bolt/encoder.block.4 concept 0, feature 4479: cosine to centroid +0.282 vs concept's own mean member-to-centroid cosine +0.788 (threshold +0.488, centroid_cosine_mean minus a gap of 0.3).
own fingerprint: level -2.32x null; horizon_shape_far +2.19x null; horizon_shape_near +1.86x null; dispersion -1.58x null; mase +1.29x null
concept's fingerprint: seasonal +3.27x null; dispersion +2.36x null; horizon_shape_far +1.80x null; horizon_shape_near +1.73x null; trend +1.06x null
Sundial/model.layers.5 concept 1, feature 3355: cosine to centroid +0.128 vs concept's own mean member-to-centroid cosine +0.609 (threshold +0.309, centroid_cosine_mean minus a gap of 0.3).
own fingerprint: seasonal +1.05x null
concept's fingerprint: no channel worth naming
| bucket | n_concepts |
|---|---|
| universal | 9 |
| partial | 0 |
| model-specific | 0 |
For each source model's concepts, the fraction whose top-firing series are grouped the same way by the destination model's own SAE dictionary -- reciprocally, in both directions.
How to read it
A cell near 1.0 means that source's concepts transfer to the destination almost universally; a low cell means most concepts are specific to the source. The diagonal is blank -- a model's transfer rate against itself is not a comparison.
Limitations
Transfer is a statistical (AUC-based) test against a matched-stratum null (k_top_series=20, n_null_draws=200, stratified by archetype|family), not a causal claim -- it says the two dictionaries GROUP series alike, not that either model's forecast depends on the other's feature.
interest = 0.50×causal_strength + 0.30×transfer_informative + 0.20×(members clearing any channel / members). Grouped by universality bucket, deepest interest first within each.
These 3 features move the near horizon of the forecast (4.42 times the random-direction null), and also move the far horizon of the forecast, decrease its overall level and increase forecast error and its spread. (composed from the measurements)
strong raises horizon_shape_near · unusually raises mase — Chronos-2/encoder.block.6, concept 1
chart shows 1 representative member (feature 4571) of this concept's 3; the profile above is the AVERAGE over all of them.
n=83 member(s), 3 clearing at least one channel's own null; interest 2.53.
profile: horizon_shape_near +4.42x null (3 members); horizon_shape_far +4.28x null (3 members); level -3.21x null (3 members); mase +2.82x null (3 members); dispersion +2.04x null (2 members)
transfer: reciprocally reaches Chronos-Bolt, Sundial, TimesFM
These 8 features increase the forecast's seasonal magnitude (3.27 times the random-direction null), and also increase its spread and move the far horizon of the forecast, strongest on series with a smaller dominant seasonal period (rho 0.01, n 2). (composed from the measurements)
strong raises seasonal — Chronos-Bolt/encoder.block.4, concept 0
chart shows 1 representative member (feature 4679) of this concept's 8; the profile above is the AVERAGE over all of them.
n=88 member(s), 8 clearing at least one channel's own null; interest 1.95.
profile: seasonal +3.27x null (5 members); dispersion +2.36x null (8 members); horizon_shape_far +1.80x null (8 members); horizon_shape_near +1.73x null (7 members); trend +1.06x null (8 members)
transfer: reciprocally reaches Chronos-2, Sundial, TimesFM
These 4 features move the far horizon of the forecast (3.20 times the random-direction null), and also move the near horizon of the forecast, increase its trend slope and decrease its spread and its seasonal magnitude. (composed from the measurements)
strong raises horizon_shape_far · unusually raises trend — Chronos-2/encoder.block.8, concept 0
chart shows 1 representative member (feature 2884) of this concept's 4; the profile above is the AVERAGE over all of them.
n=84 member(s), 4 clearing at least one channel's own null; interest 1.92.
profile: horizon_shape_far +3.20x null (4 members); horizon_shape_near +3.10x null (3 members); trend +2.31x null (3 members); dispersion -1.52x null (4 members); seasonal -1.21x null (2 members)
transfer: reciprocally reaches Chronos-Bolt, Sundial, TimesFM
These 3 features move the far horizon of the forecast (3.04 times the random-direction null), and also move the near horizon of the forecast, increase its overall level and decrease its spectral centroid. (composed from the measurements)
strong raises horizon_shape_far · unusually lowers spectral_centroid — Chronos-Bolt/encoder.block.4, concept 1
chart shows 1 representative member (feature 1691) of this concept's 3; the profile above is the AVERAGE over all of them.
n=83 member(s), 3 clearing at least one channel's own null; interest 1.84.
profile: horizon_shape_far +3.04x null (3 members); horizon_shape_near +2.88x null (3 members); level +1.99x null (3 members); spectral_centroid -1.13x null (3 members)
transfer: reciprocally reaches Chronos-2, Sundial, TimesFM
These 3 features move the near horizon of the forecast (2.29 times the random-direction null), and also move the far horizon of the forecast. (composed from the measurements)
strong raises horizon_shape_near · unusually raises horizon_shape_far — Sundial/model.layers.5, concept 2
chart shows 1 representative member (feature 2033) of this concept's 3; the profile above is the AVERAGE over all of them.
n=83 member(s), 3 clearing at least one channel's own null; interest 1.46.
profile: horizon_shape_near +2.29x null (3 members); horizon_shape_far +1.53x null (3 members)
transfer: reciprocally reaches Chronos-2, Chronos-Bolt, TimesFM
These 11 features move the far horizon of the forecast (1.79 times the random-direction null), and also move the near horizon of the forecast. (composed from the measurements)
mild raises horizon_shape_far · unusually raises horizon_shape_near — Chronos-2/encoder.block.6, concept 0
chart shows 1 representative member (feature 1714) of this concept's 11; the profile above is the AVERAGE over all of them.
n=811 member(s), 11 clearing at least one channel's own null; interest 1.21.
profile: horizon_shape_far +1.79x null (8 members); horizon_shape_near +1.40x null (6 members)
transfer: reciprocally reaches Chronos-Bolt, Sundial, TimesFM
These 15 features move the far horizon of the forecast (1.63 times the random-direction null), and also move the near horizon of the forecast, strongest on series with a smaller number of seasonal components (rho 0.22, n 3). (composed from the measurements)
mild raises horizon_shape_far · unusually raises horizon_shape_near — Chronos-2/encoder.block.8, concept 1
chart shows 1 representative member (feature 3327) of this concept's 15; the profile above is the AVERAGE over all of them.
n=815 member(s), 15 clearing at least one channel's own null; interest 1.14.
profile: horizon_shape_far +1.63x null (13 members); horizon_shape_near +1.39x null (9 members)
transfer: reciprocally reaches Chronos-Bolt, Sundial, TimesFM
These 4 features move the far horizon of the forecast (1.18 times the random-direction null), and also move the near horizon of the forecast. (composed from the measurements)
mild raises horizon_shape_far · unusually raises horizon_shape_near — Sundial/model.layers.5, concept 0
chart shows 1 representative member (feature 5918) of this concept's 4; the profile above is the AVERAGE over all of them.
n=84 member(s), 4 clearing at least one channel's own null; interest 0.91.
profile: horizon_shape_far +1.18x null (3 members); horizon_shape_near +1.03x null (2 members)
transfer: reciprocally reaches Chronos-2, Chronos-Bolt, TimesFM
These 5 features were not tested for an effect on the forecast and have no structural correlate. (composed from the measurements)
moves horizon_shape_near — Sundial/model.layers.5, concept 1
chart shows 1 representative member (feature 3355) of this concept's 5; the profile above is the AVERAGE over all of them.
n=85 member(s), 5 clearing at least one channel's own null; interest 0.32.
profile: no channel cleared 1.0 null units
transfer: reciprocally reaches Chronos-2, Chronos-Bolt, TimesFM
Every SAE feature across this run's targets whose own ablation battery cleared at least one channel's null — independent of whether it landed in a concept above — ranked by the average of two percentile ranks: how far it moved the mase channel in null units, and its overall causal fingerprint magnitude across all nine channels (sae/matching.py::causal_fingerprint). This is the per-feature view the concept cards cannot give: a target whose causally-alive features never clustered into a group of three or more still has its strongest individual features shown here.
Sundial/model.layers.7, feature 4993 — not part of any formed concept
n=1fires on only 1 series in this sample — every number in this row is an n-of-1.
overall fingerprint magnitude 62.98, 7 of 9 channels clearing; mase channel +29.02x null.
top channels: horizon_shape_far +32.77x null; level -31.68x null; mase +29.02x null; horizon_shape_near +25.64x null; trend -14.02x null; spectral_centroid -13.81x null; dispersion +1.65x null
Sundial/model.layers.10, feature 5217 — not part of any formed concept
n=1fires on only 1 series in this sample — every number in this row is an n-of-1.
overall fingerprint magnitude 52.03, 8 of 9 channels clearing; mase channel -26.07x null.
top channels: mase -26.07x null; level +25.08x null; horizon_shape_near +24.14x null; spectral_centroid -20.54x null; seasonal +10.98x null; horizon_shape_far +10.17x null; dispersion +10.14x null; trend -8.17x null
Sundial/model.layers.6, feature 461 — not part of any formed concept
n=1fires on only 1 series in this sample — every number in this row is an n-of-1.
overall fingerprint magnitude 32.29, 5 of 9 channels clearing; mase channel -16.21x null.
top channels: horizon_shape_near +17.01x null; mase -16.21x null; level +15.44x null; horizon_shape_far +15.38x null; spectral_centroid +3.76x null
Sundial/model.layers.10, feature 4993 — not part of any formed concept
n=1fires on only 1 series in this sample — every number in this row is an n-of-1.
overall fingerprint magnitude 39.57, 7 of 9 channels clearing; mase channel +14.46x null.
top channels: trend -30.72x null; horizon_shape_near +15.92x null; mase +14.46x null; horizon_shape_far +11.77x null; spectral_centroid +3.15x null; dispersion -2.45x null; level +2.28x null
Chronos-2/encoder.block.7, feature 5215 — not part of any formed concept
n=1fires on only 1 series in this sample — every number in this row is an n-of-1.
overall fingerprint magnitude 46.61, 8 of 9 channels clearing; mase channel +12.00x null.
top channels: trend -32.60x null; dispersion +22.20x null; horizon_shape_far +16.00x null; level -12.38x null; mase +12.00x null; horizon_shape_near +5.65x null; spectral_centroid +4.75x null; flatness -3.00x null
Sundial/model.layers.10, feature 3132 — not part of any formed concept
n=1fires on only 1 series in this sample — every number in this row is an n-of-1.
overall fingerprint magnitude 29.67, 7 of 9 channels clearing; mase channel +15.49x null.
top channels: mase +15.49x null; horizon_shape_far +13.63x null; level -12.72x null; horizon_shape_near +11.74x null; trend -9.46x null; dispersion +7.87x null; spectral_centroid +1.99x null
Sundial/model.layers.6, feature 1888 — not part of any formed concept
n=1fires on only 1 series in this sample — every number in this row is an n-of-1.
overall fingerprint magnitude 19.96, 7 of 9 channels clearing; mase channel -7.00x null.
top channels: dispersion -9.89x null; spectral_centroid -9.17x null; horizon_shape_far +7.14x null; level -7.09x null; mase -7.00x null; horizon_shape_near +5.76x null; trend -5.76x null
Chronos-2/encoder.block.7, feature 102 — not part of any formed concept
n=5overall fingerprint magnitude 16.51, 7 of 9 channels clearing; mase channel +8.98x null.
top channels: mase +8.98x null; level +8.44x null; horizon_shape_far +7.55x null; dispersion -5.26x null; horizon_shape_near +5.11x null; trend -2.88x null; spectral_centroid -1.21x null
Sundial/model.layers.10, feature 3903 — not part of any formed concept
n=1fires on only 1 series in this sample — every number in this row is an n-of-1.
overall fingerprint magnitude 16.01, 8 of 9 channels clearing; mase channel +7.43x null.
top channels: mase +7.43x null; level -7.29x null; horizon_shape_far +6.88x null; spectral_centroid -5.02x null; trend -4.48x null; horizon_shape_near +4.45x null; dispersion +4.41x null; flatness +4.00x null
Sundial/model.layers.8, feature 1883 — not part of any formed concept
n=1fires on only 1 series in this sample — every number in this row is an n-of-1.
overall fingerprint magnitude 24.58, 7 of 9 channels clearing; mase channel -3.94x null.
top channels: horizon_shape_far +13.24x null; trend +12.01x null; horizon_shape_near +11.25x null; spectral_centroid -11.13x null; mase -3.94x null; level +3.69x null; dispersion +2.30x null
Sundial/model.layers.10, feature 1082 — not part of any formed concept
n=1fires on only 1 series in this sample — every number in this row is an n-of-1.
overall fingerprint magnitude 13.49, 6 of 9 channels clearing; mase channel +5.78x null.
top channels: level +7.58x null; horizon_shape_far +6.63x null; mase +5.78x null; dispersion +4.67x null; horizon_shape_near +3.93x null; trend +3.16x null
TimesFM/stacked_xf.0, feature 1377 — not part of any formed concept
n=8overall fingerprint magnitude 10.17, 9 of 9 channels clearing; mase channel +5.99x null.
top channels: mase +5.99x null; horizon_shape_far +4.17x null; horizon_shape_near +4.09x null; level +3.89x null; trend +3.69x null; seasonal -1.44x null; spectral_centroid -1.40x null; flatness -0.80x null; dispersion -0.02x null
Chronos-2/encoder.block.5, feature 462 — not part of any formed concept
n=1fires on only 1 series in this sample — every number in this row is an n-of-1.
overall fingerprint magnitude 19.83, 7 of 9 channels clearing; mase channel +3.53x null.
top channels: level +11.98x null; horizon_shape_near +9.84x null; dispersion +8.16x null; trend -6.01x null; horizon_shape_far +4.42x null; spectral_centroid -4.20x null; mase +3.53x null
Sundial/model.layers.9, feature 1654 — not part of any formed concept
n=1fires on only 1 series in this sample — every number in this row is an n-of-1.
overall fingerprint magnitude 11.34, 6 of 9 channels clearing; mase channel -3.88x null.
top channels: trend -7.82x null; horizon_shape_far +5.09x null; mase -3.88x null; level -3.67x null; spectral_centroid +3.00x null; horizon_shape_near +1.95x null
Sundial/model.layers.4, feature 5609 — not part of any formed concept
n=1fires on only 1 series in this sample — every number in this row is an n-of-1.
overall fingerprint magnitude 9.90, 6 of 9 channels clearing; mase channel +4.90x null.
top channels: horizon_shape_near +7.46x null; mase +4.90x null; horizon_shape_far +2.76x null; level -2.29x null; dispersion +1.78x null; trend +1.12x null
A few concrete series per family, told end to end: both forecasts, where each model's answer forms in depth, and where it looks in the context.
Question
What does an aggregate difference between models actually look like on one real series?
How
Picks a handful of concrete series per data family — specifically ones where the models' forecasts disagree the most — and shows each one's context, true continuation, both forecasts, per-layer lens curves, and pooled attention pattern side by side.
Good vs. bad result
Good: a case that makes an aggregate statistic from an earlier section tangible — you can see exactly where one model's forecast goes wrong on a concrete series. Bad: a case that reads as an ordinary, unremarkable series despite being flagged as the most divergent — worth treating skeptically rather than trusting the selection blindly.
What it cannot tell you
These series are deliberately chosen for maximal disagreement, not for being typical or representative — this stage cannot tell you how often such a disagreement happens, only that it can happen and roughly what it looks like when it does. It is illustrative evidence only, the same evidence class as a hand-picked example in a paper, not a statistical claim.
| series_id | family | archetype | TimesFM | Chronos-2 | Sundial | Chronos-Bolt | spread | gap_in_floor_units | selection |
|---|---|---|---|---|---|---|---|---|---|
| e0e62c64763accb6 | random_parametric | clean_low_noise | 5.647 | 3.043 | 10.357 | 21.057 | 18.014 | 101.912 | largest disagreement in family |
| 158f5be4cf67c4eb | random_parametric | clean_low_noise | 9.269 | 8.998 | 8.292 | 8.953 | 0.977 | 5.529 | mid-range disagreement |
| 6267d62d43bbfd46 | random_parametric | noisy_chaotic | 0.835 | 0.704 | 0.768 | 0.941 | 0.237 | 1.339 | closest agreement in family |
| b2c5b36dc464e55b | parametric | None | 5.260 | 2.872 | 6.919 | 4.244 | 4.047 | 22.895 | largest disagreement in family |
| 00133b4a9ec3cc86 | parametric | None | 2.942 | 2.744 | 2.692 | 3.754 | 1.062 | 6.008 | mid-range disagreement |
| 800da3ed9db57fd5 | parametric | None | 3.705 | 3.132 | 3.646 | 3.010 | 0.695 | 3.931 | closest agreement in family |
| 0a5ed637377ce927 | mixture | None | 8.543 | 7.109 | 11.028 | 5.572 | 5.456 | 30.865 | largest disagreement in family |
| e139a4dfcddad25a | mixture | None | 0.739 | 0.888 | 0.871 | 0.815 | 0.149 | 0.843 | mid-range disagreement |
| 9f8f3bcb3d31b714 | mixture | None | 1.082 | 1.083 | 1.164 | 1.078 | 0.086 | 0.484 | closest agreement in family |
| 8697b8960fa94656 | block_bootstrap | None | 1.398 | 1.416 | 1.762 | 3.285 | 1.886 | 10.672 | largest disagreement in family |
| 2c3cf1b55d32a21d | block_bootstrap | None | 2.050 | 1.935 | 2.075 | 1.872 | 0.203 | 1.147 | mid-range disagreement |
| 9be4b438cd59dddf | block_bootstrap | None | 0.431 | 0.425 | 0.552 | 0.430 | 0.127 | 0.719 | closest agreement in family |
| 160159a3e79b2528 | sequential_par | None | 3.646 | 5.206 | 3.270 | 3.375 | 1.936 | 10.951 | largest disagreement in family |
| 5ea6c60d50ed412f | sequential_par | None | 0.817 | 0.819 | 0.880 | 0.806 | 0.074 | 0.416 | mid-range disagreement |
| bc0edf79ff20e952 | sequential_par | None | 0.826 | 0.811 | 0.845 | 0.808 | 0.037 | 0.208 | closest agreement in family |
All 15 series this run selected as case studies, with each model's own MASE on that series, the gap between them, and how large that gap is in units of the noisiest model's own repeat-run variation.
How to read it
`selection` is derived from where each series sits in its own family's gap distribution, not assigned by hand: the family's largest and smallest absolute gaps are labelled as such and everything between them is mid-range. `gap_in_floor_units` divides the absolute gap by the largest per-model repeat-run MASE variation measured in this run (the Behavioral profile section's noise floor) -- a value near or below 1 means the two models' forecasts for that series differ by no more than the same model differs from itself between calls.
Limitations
Selection is deliberately not random: `_select_exemplars` takes each family's largest-gap series plus interior quantiles of the gap distribution, so this set over-represents disagreement by construction and cannot be used to estimate how often models disagree. The per-family tables in the Behavioral profile section are for that. `gap_in_floor_units` is absent for a run where every model is deterministic, since there is no floor to divide by.
Series e0e62c64763accb6 (random_parametric · archetype clean_low_noise): each model's forecast against what actually happened, and where in depth each model's answer for this series settles.
| model | final MASE | best skip-lens MASE | at relative depth |
|---|---|---|---|
| TimesFM | 5.647 | 4.408 | 0.421 |
| Chronos-2 | 3.043 | 3.054 | 0.000 |
| Sundial | 10.357 | 5.911 | 0.909 |
| Chronos-Bolt | 21.057 | 16.673 | 0.000 |
TimesFM, this same series: window-pooled, head-averaged attention at its L1 peak-CKA layer — which part of the context this layer reads while forming the forecast above.
Chronos-2, this same series: window-pooled, head-averaged attention at its L1 peak-CKA layer — which part of the context this layer reads while forming the forecast above.
One card per selected series: left, the raw context tail, what actually happened next, and each model's forecast; right, the same series' skip-lens MASE at every captured layer, which is where that model's forecast for this series stops changing.
How to read it
The table under each card gives that series' per-model final MASE, its best (lowest) skip-lens MASE and the relative depth where that minimum occurs, so a case where a model's forecast is already settled early is distinguishable from one where the last layers are still doing work. Where an attention map is shown it is the same series, at that model's L1 peak-CKA layer, pooled onto windows and averaged over heads.
Limitations
A single series is noisy: a feature of one card that does not appear in the aggregate curves of the Forecast lens and Attention sections is a property of this series, not of the model. Attention maps are computed only for the first series of each family, so most cards legitimately have none.
Series 158f5be4cf67c4eb (random_parametric · archetype clean_low_noise): each model's forecast against what actually happened, and where in depth each model's answer for this series settles.
| model | final MASE | best skip-lens MASE | at relative depth |
|---|---|---|---|
| TimesFM | 9.269 | 8.578 | 0.105 |
| Chronos-2 | 8.998 | 8.993 | 0.000 |
| Sundial | 8.292 | 8.147 | 0.000 |
| Chronos-Bolt | 8.953 | 8.474 | 0.000 |
Series 6267d62d43bbfd46 (random_parametric · archetype noisy_chaotic): each model's forecast against what actually happened, and where in depth each model's answer for this series settles.
| model | final MASE | best skip-lens MASE | at relative depth |
|---|---|---|---|
| TimesFM | 0.835 | 0.802 | 0.947 |
| Chronos-2 | 0.704 | 0.703 | 0.000 |
| Sundial | 0.768 | 0.749 | 1.000 |
| Chronos-Bolt | 0.941 | 0.819 | 0.182 |
Series b2c5b36dc464e55b (parametric): each model's forecast against what actually happened, and where in depth each model's answer for this series settles.
| model | final MASE | best skip-lens MASE | at relative depth |
|---|---|---|---|
| TimesFM | 5.260 | 3.734 | 0.105 |
| Chronos-2 | 2.872 | 2.854 | 0.000 |
| Sundial | 6.919 | 2.716 | 0.000 |
| Chronos-Bolt | 4.244 | 4.228 | 0.364 |
TimesFM, this same series: window-pooled, head-averaged attention at its L1 peak-CKA layer — which part of the context this layer reads while forming the forecast above.
Chronos-2, this same series: window-pooled, head-averaged attention at its L1 peak-CKA layer — which part of the context this layer reads while forming the forecast above.
Series 00133b4a9ec3cc86 (parametric): each model's forecast against what actually happened, and where in depth each model's answer for this series settles.
| model | final MASE | best skip-lens MASE | at relative depth |
|---|---|---|---|
| TimesFM | 2.942 | 2.663 | 0.842 |
| Chronos-2 | 2.744 | 2.749 | 0.000 |
| Sundial | 2.692 | 2.630 | 1.000 |
| Chronos-Bolt | 3.754 | 3.101 | 0.000 |
Series 800da3ed9db57fd5 (parametric): each model's forecast against what actually happened, and where in depth each model's answer for this series settles.
| model | final MASE | best skip-lens MASE | at relative depth |
|---|---|---|---|
| TimesFM | 3.705 | 3.300 | 0.947 |
| Chronos-2 | 3.132 | 3.131 | 0.000 |
| Sundial | 3.646 | 3.488 | 1.000 |
| Chronos-Bolt | 3.010 | 3.012 | 0.455 |
Series 0a5ed637377ce927 (mixture): each model's forecast against what actually happened, and where in depth each model's answer for this series settles.
| model | final MASE | best skip-lens MASE | at relative depth |
|---|---|---|---|
| TimesFM | 8.543 | 5.039 | 0.105 |
| Chronos-2 | 7.109 | 7.090 | 0.000 |
| Sundial | 11.028 | 3.833 | 0.182 |
| Chronos-Bolt | 5.572 | 4.691 | 0.364 |
TimesFM, this same series: window-pooled, head-averaged attention at its L1 peak-CKA layer — which part of the context this layer reads while forming the forecast above.
Chronos-2, this same series: window-pooled, head-averaged attention at its L1 peak-CKA layer — which part of the context this layer reads while forming the forecast above.
Series e139a4dfcddad25a (mixture): each model's forecast against what actually happened, and where in depth each model's answer for this series settles.
| model | final MASE | best skip-lens MASE | at relative depth |
|---|---|---|---|
| TimesFM | 0.739 | 0.509 | 0.947 |
| Chronos-2 | 0.888 | 0.889 | 0.000 |
| Sundial | 0.871 | 0.692 | 0.909 |
| Chronos-Bolt | 0.815 | 0.817 | 0.455 |
Series 9f8f3bcb3d31b714 (mixture): each model's forecast against what actually happened, and where in depth each model's answer for this series settles.
| model | final MASE | best skip-lens MASE | at relative depth |
|---|---|---|---|
| TimesFM | 1.082 | 1.093 | 0.947 |
| Chronos-2 | 1.083 | 1.083 | 0.000 |
| Sundial | 1.164 | 1.110 | 0.273 |
| Chronos-Bolt | 1.078 | 1.079 | 0.455 |
Series 8697b8960fa94656 (block_bootstrap): each model's forecast against what actually happened, and where in depth each model's answer for this series settles.
| model | final MASE | best skip-lens MASE | at relative depth |
|---|---|---|---|
| TimesFM | 1.398 | 1.538 | 0.947 |
| Chronos-2 | 1.416 | 1.416 | 0.000 |
| Sundial | 1.762 | 1.610 | 0.909 |
| Chronos-Bolt | 3.285 | 1.668 | 0.182 |
TimesFM, this same series: window-pooled, head-averaged attention at its L1 peak-CKA layer — which part of the context this layer reads while forming the forecast above.
Chronos-2, this same series: window-pooled, head-averaged attention at its L1 peak-CKA layer — which part of the context this layer reads while forming the forecast above.
Series 2c3cf1b55d32a21d (block_bootstrap): each model's forecast against what actually happened, and where in depth each model's answer for this series settles.
| model | final MASE | best skip-lens MASE | at relative depth |
|---|---|---|---|
| TimesFM | 2.050 | 2.002 | 0.947 |
| Chronos-2 | 1.935 | 1.936 | 0.000 |
| Sundial | 2.075 | 2.007 | 1.000 |
| Chronos-Bolt | 1.872 | 1.834 | 0.364 |
Series 9be4b438cd59dddf (block_bootstrap): each model's forecast against what actually happened, and where in depth each model's answer for this series settles.
| model | final MASE | best skip-lens MASE | at relative depth |
|---|---|---|---|
| TimesFM | 0.431 | 0.496 | 0.947 |
| Chronos-2 | 0.425 | 0.425 | 0.000 |
| Sundial | 0.552 | 0.546 | 1.000 |
| Chronos-Bolt | 0.430 | 0.430 | 0.273 |
Series 160159a3e79b2528 (sequential_par): each model's forecast against what actually happened, and where in depth each model's answer for this series settles.
| model | final MASE | best skip-lens MASE | at relative depth |
|---|---|---|---|
| TimesFM | 3.646 | 3.610 | 0.947 |
| Chronos-2 | 5.206 | 5.201 | 0.000 |
| Sundial | 3.270 | 3.284 | 1.000 |
| Chronos-Bolt | 3.375 | 3.373 | 0.455 |
TimesFM, this same series: window-pooled, head-averaged attention at its L1 peak-CKA layer — which part of the context this layer reads while forming the forecast above.
Chronos-2, this same series: window-pooled, head-averaged attention at its L1 peak-CKA layer — which part of the context this layer reads while forming the forecast above.
Series 5ea6c60d50ed412f (sequential_par): each model's forecast against what actually happened, and where in depth each model's answer for this series settles.
| model | final MASE | best skip-lens MASE | at relative depth |
|---|---|---|---|
| TimesFM | 0.817 | 0.807 | 0.947 |
| Chronos-2 | 0.819 | 0.819 | 0.000 |
| Sundial | 0.880 | 0.816 | 0.182 |
| Chronos-Bolt | 0.806 | 0.806 | 0.455 |
Series bc0edf79ff20e952 (sequential_par): each model's forecast against what actually happened, and where in depth each model's answer for this series settles.
| model | final MASE | best skip-lens MASE | at relative depth |
|---|---|---|---|
| TimesFM | 0.826 | 0.841 | 0.737 |
| Chronos-2 | 0.811 | 0.811 | 0.000 |
| Sundial | 0.845 | 0.873 | 0.000 |
| Chronos-Bolt | 0.808 | 0.797 | 0.364 |
Part 7 — Robustness and held-out confirmation
How much of the above depends on one analysis-knob choice, and the one-shot confirmatory test on the sealed private corpus.
↑ contentsOne-shot confirmatory tests of the dev findings on a sealed held-out corpus. This is the gold standard: exploration above, evidence here.
Question
Which of the exploratory dev-corpus findings are actually real, rather than an artifact of looking at many comparisons?
How
Re-runs exactly the pre-registered hypotheses, exactly once, on a sealed corpus that no exploratory analysis in this run has ever seen, and reports which ones hold up.
Good vs. bad result
Good: a hypothesis that replicates on the private corpus with the same direction and a confidence interval excluding zero after correction — the strongest evidence this pipeline can produce. Bad: a dev finding that fails to replicate (a real and expected outcome some of the time, since dev findings are exploratory by construction), or a hypothesis marked 'untestable' because this stage doesn't yet re-test that kind of claim on private data.
What it cannot tell you
This section is the actual evidence, but only for the specific hypotheses that were pre-registered — it says nothing about any exploratory finding that wasn't registered. It also cannot be re-run: if the private corpus is ever peeked at, this evidence is spent and a fresh held-out corpus is required. A 'not confirmed' verdict does not mean the dev finding was wrong, only that it didn't survive being tested exactly once, out of sample.
Held-out private corpus: 800 series, tested once at α=0.05 (Holm-corrected across hypotheses). Everything above this section is exploratory; this is the confirmatory evidence.
Private corpus: visibility private, epoch 0, digest aadeca94760b6136. Leakage audit: measured.
Every re-test this stage ran, by kind. Each row is an independent replication on the same held-out series, so a row that fails does not undermine the others — it narrows what this run supports. The detailed tables for each row follow below.
| what was re-tested | evidence class | held up | did not | not testable | what a failure would mean |
|---|---|---|---|---|---|
| Accuracy differences (per family) | behavioral | 1 | 0 | 0 | the accuracy gap was specific to the exploratory data, not to the models |
| Where in depth models react to corruption | causal within model | 9 | 0 | 0 | the depth agreement was a property of those particular series, not of the models |
| Strongest representational similarity | geometric | 1 | 0 | 0 | the peak similarity was a coincidence of the exploratory sample |
121 exploratory finding(s) examined → 47 hypotheses registered (31 replicable by this stage today) → 1 confirmed. The registry (hypotheses.json, sha256 18557c2e52d9) pins exactly which dev claims this stage tests, plus the exact content hash of the dev artifact each was derived from — confirm refuses to run at all if any of those hashes no longer match, which is what makes "tested exactly once" an enforced fact rather than a convention. "Exploratory findings examined" is every finding text this report generated before this section ran — a real but approximate multiplicity count, not a formal comparison tally.
Counted in the ledger above (they were real dev comparisons), but this stage does not yet re-test them on private data — a stated gap, not a silent one. Grouped by reason, since the reason belongs to the stage rather than to the individual claim.
| stage(s) | claims | why not replicated on private data |
|---|---|---|
| l2 | 12 | L2 replication (re-fitting stitching probes on private data) not yet implemented. |
| l0_archetype | 3 | archetype-level replication not yet implemented; private corpora don't guarantee the same archetype composition as dev. |
| clustering | 1 | Clustering replication (re-fitting cluster labels on private data) not yet implemented. |
| stage | claim |
|---|---|
| l0_archetype | Chronos-2 is significantly stronger than its comparison partner on archetype 'intermittent_bursts'. |
| l0_archetype | Chronos-2 is significantly stronger than its comparison partner on archetype 'mixture'. |
| l0_archetype | Chronos-2 is significantly stronger than its comparison partner on archetype 'nonsinusoidal_seasonal'. |
| l2 | L2 stitching gain over the input-feature baseline (TimesFM->Chronos-2) = 0.707. |
| l2 | L2 stitching gain over the input-feature baseline (Chronos-2->TimesFM) = 0.611. |
| l2 | L2 stitching gain over the input-feature baseline (TimesFM->Sundial) = 0.681. |
| l2 | L2 stitching gain over the input-feature baseline (Sundial->TimesFM) = 0.609. |
| l2 | L2 stitching gain over the input-feature baseline (TimesFM->Chronos-Bolt) = 0.649. |
| l2 | L2 stitching gain over the input-feature baseline (Chronos-Bolt->TimesFM) = 0.580. |
| l2 | L2 stitching gain over the input-feature baseline (Chronos-2->Sundial) = 0.891. |
| l2 | L2 stitching gain over the input-feature baseline (Sundial->Chronos-2) = 0.911. |
| l2 | L2 stitching gain over the input-feature baseline (Chronos-2->Chronos-Bolt) = 0.893. |
| l2 | L2 stitching gain over the input-feature baseline (Chronos-Bolt->Chronos-2) = 0.908. |
| l2 | L2 stitching gain over the input-feature baseline (Sundial->Chronos-Bolt) = 0.878. |
| l2 | L2 stitching gain over the input-feature baseline (Chronos-Bolt->Sundial) = 0.865. |
| clustering | Cross-model clustering AMI = 0.601. |
Of 1 registered accuracy claim, held up on mixture. A claim counts as confirmed only when its Holm-corrected p clears α and its interval excludes zero — a direction that merely repeats is not enough.
| family | dev favored | dev ratio | private ΔMASE | lo | hi | p (Holm) | verdict | private MDE |
|---|---|---|---|---|---|---|---|---|
| mixture | Chronos-2 | 1.105 | 0.307 | 0.209 | 0.413 | 0.001 | CONFIRMED | No difference detected. A true difference of >= 0.155 MASE would have been detected 80% of the time at this n. |
`private MDE`: the smallest true effect this claim's private-split sample size could have caught, computed BEFORE this test spent the private data — the pre-registration half of the power question.
How to read it
A claim marked 'not confirmed' beside a large or 'not testable' MDE was never in a position to confirm, regardless of how the test came out — the private split simply wasn't big enough (or the Holm correction across this many claims too strict) to detect an effect of that size. That is a different, weaker kind of non-confirmation than one with a small MDE.
Limitations
Computed independently of `dev ratio` — a claim can have a large dev effect and still carry a large private MDE if the private split has far fewer series in that family than dev did.
-0.15 [-0.21, -0.09] (p=0.001 (n_boot=2000, p floored at 1/n_boot=0.0005); positive favors TimesFM).
The whole corruption battery re-run on 800 private series — same corruptions at the same strengths, same fingerprint, same paired cluster bootstrap — and each registered per-corruption depth agreement between TimesFM and Chronos-2 re-tested. A dev value counts as replicated when it falls inside the private interval, the same rule the representational replication below uses.
| corruption | dev ρ | private ρ (95% CI) | verdict |
|---|---|---|---|
| noise | -0.738 | -0.74 [-0.76, -0.73] | replicates |
| detrend | +0.330 | 0.33 [0.28, 0.49] | replicates |
| deseasonalize | +0.259 | 0.26 [0.23, 0.31] | replicates |
| frequency_shift | +0.222 | 0.25 [0.10, 0.38] | replicates |
| level_shift | +0.040 | 0.05 [-0.05, 0.09] | replicates |
| spike | -0.787 | -0.78 [-0.79, -0.77] | replicates |
| smooth | -0.418 | -0.47 [-0.56, -0.38] | replicates |
| warp | -0.640 | -0.66 [-0.69, -0.62] | replicates |
| dropout | +0.498 | 0.49 [0.46, 0.52] | replicates |
Dev peak CKA 0.43 at L4 ↔ L7; private estimate 0.43 [0.42, 0.44] — dev value replicates within the private CI.
The top 20 reciprocal-FDR, seed-stable atlas-transfer tests by dev AUC margin, re-tested on private strata with the SAME saved SAE checkpoint (never retrained). Combined per-claim p = max(forward p, reverse p) (both legs must hold), Holm-corrected across the 20 registered claims (n_null=2000).
| concept | mode | src → dst | feature | dev AUC | dev margin | private AUC | p (Holm) | verdict |
|---|---|---|---|---|---|---|---|---|
| 0 | search | TimesFM L0 → Chronos-2 L11 | 509 → 662 | 0.993 | 0.286 | 0.986 | 0.010 | confirmed |
| 0 | search | TimesFM L0 → Sundial L5 | 6070 → 1610 | 0.989 | 0.281 | 0.986 | 0.010 | confirmed |
| 0 | search | TimesFM L0 → Sundial L3 | 2779 → 4936 | 0.987 | 0.279 | 0.987 | 0.010 | confirmed |
| 0 | search | TimesFM L0 → Sundial L4 | 5652 → 5825 | 0.984 | 0.277 | 0.986 | 0.010 | confirmed |
| 9 | search | Chronos-2 L6 → TimesFM L14 | 630 → 630 | 0.992 | 0.274 | 0.971 | 0.010 | confirmed |
| 0 | search | TimesFM L0 → Chronos-Bolt L5 | 6013 → 6013 | 0.996 | 0.274 | 0.993 | 0.010 | confirmed |
| 0 | search | TimesFM L0 → Chronos-Bolt L3 | 2071 → 4430 | 0.996 | 0.268 | 0.988 | 0.010 | confirmed |
| 0 | search | TimesFM L0 → Sundial L6 | 5652 → 2879 | 0.981 | 0.266 | 0.988 | 0.010 | confirmed |
| 9 | search | Chronos-2 L6 → TimesFM L16 | 2331 → 5711 | 0.977 | 0.266 | 0.986 | 0.010 | confirmed |
| 0 | search | TimesFM L0 → Chronos-2 L6 | 384 → 384 | 0.987 | 0.266 | 0.982 | 0.010 | confirmed |
| 0 | search | TimesFM L0 → Chronos-2 L9 | 2005 → 1166 | 0.985 | 0.264 | 0.980 | 0.010 | confirmed |
| 0 | search | TimesFM L0 → Chronos-2 L5 | 4706 → 384 | 0.992 | 0.264 | 0.986 | 0.010 | confirmed |
| 0 | search | TimesFM L0 → Chronos-Bolt L4 | 5278 → 6013 | 0.994 | 0.258 | 0.991 | 0.010 | confirmed |
| 0 | search | TimesFM L0 → Sundial L7 | 5652 → 2898 | 0.979 | 0.258 | 0.990 | 0.010 | confirmed |
| 0 | search | TimesFM L0 → Sundial L8 | 5652 → 5652 | 0.976 | 0.255 | 0.975 | 0.010 | confirmed |
| 9 | search | Chronos-2 L6 → TimesFM L6 | 3531 → 4728 | 0.990 | 0.253 | 0.995 | 0.010 | confirmed |
| 0 | search | TimesFM L0 → Chronos-2 L7 | 362 → 2548 | 0.976 | 0.249 | 0.971 | 0.010 | confirmed |
| 9 | search | Chronos-2 L6 → TimesFM L18 | 859 → 859 | 0.989 | 0.249 | 0.991 | 0.010 | confirmed |
| 0 | search | TimesFM L0 → Chronos-2 L8 | 5844 → 2548 | 0.965 | 0.245 | 0.985 | 0.010 | confirmed |
| 0 | search | TimesFM L0 → Sundial L10 | 1096 → 1096 | 0.972 | 0.243 | 0.975 | 0.010 | confirmed |
| family | m | n_null | alpha | min_attainable_p_holm | satisfiable | note |
|---|---|---|---|---|---|---|
| concept_transfer | 20 | 2000.000 | 0.050 | 0.010 | True | NaN |
| concept_knob | 0 | NaN | NaN | NaN | None | empty by design: the P6a found no (concept, knob) response surviving BH on dev (0/98 go/no-go, 0/151 registered retry), so no dev claim exists to freeze and no private counterfactual path is built. |
Held-out confirmation of a correlational transfer claim: does the source model's concept and the destination model's dictionary still select the SAME series on data neither the SAE nor the concept atlas ever saw.
How to read it
'Confirmed' means the two dictionaries still group the same series at a Holm-corrected significance on fresh data — it is NOT evidence the concept causes the same forecast behavior in both models (that is L5's shared-input causal agreement, an entirely separate, dev-only measurement). 'search' mode confirms only that the destination dictionary has SOME feature that selects the source concept's series (private data re-searches the whole dictionary); 'frozen' mode confirms the sharper claim that THIS SPECIFIC dev feature pair does, since it is scored with no search and no max-over-features null.
Limitations
The concept_knob family is empty: the P6a found no dev (concept, knob) response surviving BH correction, so no knob claim was registered and no private counterfactual path is built.
The findings below are a summary — each is backed by the data, tables, and figures in the sections further up this report. Expand to read them.
No learned concept clears the full bar (same effect, same inputs, reproducible) across every model in this comparison.
[exploratory — not pre-registered] Model comparison -- 0 of 27 atlas concept(s) are shared (same effect, same inputs, reproducible) by all 4 models in this run.
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
Different ways of measuring how similar two models are do NOT agree on which pair is closest.
[exploratory — not pre-registered] Model comparison -- cross-metric agreement on which pair is most similar: Kendall's W=0.2815 (p=0.0700) across 7 metric(s).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
Grouping every model's causal SAE features by what they DO to the forecast (not by which model they came from) gives 9 readable families covering nearly all of them.
[exploratory — not pre-registered] Concept families -- 9 families cover 288 of 293 causal features (98.3%); 9 of 9 span more than one model.
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
These families are a readable tiling of a continuum, not a set of naturally separated clusters -- a column-permuted control produces about as many families and as much coverage on its own.
[exploratory — not pre-registered] Concept families -- structure null: p_n_families=1.0000, p_frac_assigned=0.9851 (does not clear its own permutation null)
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
No series here is a copy of a real reference series (68 of 2000 candidates rejected): above.
[exploratory — not pre-registered] Corpus trust — No series here is a copy of a real reference series (68 of 2000 candidates rejected): 0.352 distance vs. gate threshold (dtw) (0.350 distance) — above.
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
No two series within a split are near-duplicates of each other: does not clear.
[exploratory — not pre-registered] Corpus trust — No two series within a split are near-duplicates of each other: 7 pairs vs. 0 within-split near-duplicate pairs (0 pairs) — does not clear.
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
The dev and private splits share no series: does not clear.
[exploratory — not pre-registered] Corpus trust — The dev and private splits share no series: 14 pairs vs. 0 cross-split near-duplicate pairs (0 pairs) — does not clear.
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
The private split looks like the dev split: inconclusive.
[exploratory — not pre-registered] Corpus trust — The private split looks like the dev split: not measured vs. a declared equivalence margin (not measured) — inconclusive.
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
A model cannot do well here by memorizing one shape (effective dimensionality): meets.
[exploratory — not pre-registered] Corpus trust — A model cannot do well here by memorizing one shape (effective dimensionality): 5.294 vs. benchmark_validation's default min_effective_dimensionality (gates.py) -- not read from this report's own config (2) — meets.
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
Series here vary in more than one way (7 distinct per-group dominant features of 7 groups): meets.
[exploratory — not pre-registered] Corpus trust — Series here vary in more than one way (7 distinct per-group dominant features of 7 groups): 7 vs. at least 2 distinct dominant features across groups (2) — meets.
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
The models being compared were not trained on this data: not_verifiable.
[exploratory — not pre-registered] Corpus trust — The models being compared were not trained on this data: not measured vs. a checkpoint's own training corpus (not measured) — not_verifiable.
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
TimesFM gives the exact same forecast every time you ask it twice, so any change in its accuracy elsewhere in this report is a real effect, not random noise.
[exploratory — not pre-registered] Noise floor — TimesFM is deterministic (repeat calls identical); any ΔMASE for this model is real signal, not repeat-run noise.
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
Chronos-2 gives the exact same forecast every time you ask it twice, so any change in its accuracy elsewhere in this report is a real effect, not random noise.
[exploratory — not pre-registered] Noise floor — Chronos-2 is deterministic (repeat calls identical); any ΔMASE for this model is real signal, not repeat-run noise.
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
Chronos-Bolt gives the exact same forecast every time you ask it twice, so any change in its accuracy elsewhere in this report is a real effect, not random noise.
[exploratory — not pre-registered] Noise floor — Chronos-Bolt is deterministic (repeat calls identical); any ΔMASE for this model is real signal, not repeat-run noise.
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
Sundial gives a slightly different forecast every time you ask it twice, so small accuracy changes for this model elsewhere in this report could just be that randomness, not a real difference.
[exploratory — not pre-registered] Noise floor — Sundial: repeat-run MASE varies by 0.1768 on average (p95 0.6380); ΔMASE figures for this model smaller than this are not distinguishable from repeat-run noise.
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
116 of 3860 test series were too flat or erratic to score fairly, so they were left out of the main accuracy numbers rather than distorting them.
[exploratory — not pre-registered] L0 — 116/3860 series excluded from MASE aggregates as unreliable (scale='mean_abs_diff', min_scale_frac=0.05).
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
Chronos-2 forecasts intermittent_bursts, mixture, nonsinusoidal_seasonal-style data clearly better than the other model, and this held up under a randomization check, not just eyeballing.
[exploratory — not pre-registered] L0 — Chronos-2 is significantly stronger on archetype(s): intermittent_bursts, mixture, nonsinusoidal_seasonal (paired bootstrap, Holm-corrected α=0.05).
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
TimesFM's stated confidence ranges are well calibrated — its forecast intervals cover the true value about as often as claimed. It also produces occasional self-contradictory forecast ranges.
[exploratory — not pre-registered] L0 calibration — TimesFM: max reliability-curve gap 0.016, outer-interval coverage 0.795 (nominal 0.800), quantile-crossing rate 0.000.
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
Chronos-2's stated confidence ranges are well calibrated — its forecast intervals cover the true value about as often as claimed. It also produces occasional self-contradictory forecast ranges.
[exploratory — not pre-registered] L0 calibration — Chronos-2: max reliability-curve gap 0.023, outer-interval coverage 0.772 (nominal 0.800), quantile-crossing rate 0.000.
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
Sundial's stated confidence ranges are poorly calibrated — its forecast intervals cover the true value noticeably less often than claimed (37% vs 80% nominal). Its uncertainty ranges are internally consistent.
[exploratory — not pre-registered] L0 calibration — Sundial: max reliability-curve gap 0.243, outer-interval coverage 0.369 (nominal 0.800), quantile-crossing rate 0.000.
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
Chronos-Bolt's stated confidence ranges are well calibrated — its forecast intervals cover the true value about as often as claimed. Its uncertainty ranges are internally consistent.
[exploratory — not pre-registered] L0 calibration — Chronos-Bolt: max reliability-curve gap 0.026, outer-interval coverage 0.749 (nominal 0.800), quantile-crossing rate 0.000.
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
When TimesFM reports a wider uncertainty range for a series, that series really does tend to have a bigger forecast error — its own confidence band is a useful, free signal.
[exploratory — not pre-registered] L0 reliability — TimesFM's own quantile width predicts its error at Spearman 0.842 (own-width-vs-error, equal-count deciles).
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
When Chronos-2 reports a wider uncertainty range for a series, that series really does tend to have a bigger forecast error — its own confidence band is a useful, free signal.
[exploratory — not pre-registered] L0 reliability — Chronos-2's own quantile width predicts its error at Spearman 0.818 (own-width-vs-error, equal-count deciles).
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
When Sundial reports a wider uncertainty range for a series, that series really does tend to have a bigger forecast error — its own confidence band is a useful, free signal.
[exploratory — not pre-registered] L0 reliability — Sundial's own quantile width predicts its error at Spearman 0.840 (own-width-vs-error, equal-count deciles).
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
When Chronos-Bolt reports a wider uncertainty range for a series, that series really does tend to have a bigger forecast error — its own confidence band is a useful, free signal.
[exploratory — not pre-registered] L0 reliability — Chronos-Bolt's own quantile width predicts its error at Spearman 0.794 (own-width-vs-error, equal-count deciles).
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
TimesFM's forecasts get noticeably less accurate the further ahead it predicts, which is the normal, expected pattern for a forecasting model.
[exploratory — not pre-registered] L0 horizon profile — TimesFM: MASE 0.679 at h=1 vs 1.941 at h=64 (ratio 2.86x).
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
Chronos-2's forecasts get noticeably less accurate the further ahead it predicts, which is the normal, expected pattern for a forecasting model.
[exploratory — not pre-registered] L0 horizon profile — Chronos-2: MASE 0.666 at h=1 vs 1.877 at h=64 (ratio 2.82x).
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
Sundial's forecasts get noticeably less accurate the further ahead it predicts, which is the normal, expected pattern for a forecasting model.
[exploratory — not pre-registered] L0 horizon profile — Sundial: MASE 0.694 at h=1 vs 2.406 at h=64 (ratio 3.47x).
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
Chronos-Bolt's forecasts get noticeably less accurate the further ahead it predicts, which is the normal, expected pattern for a forecasting model.
[exploratory — not pre-registered] L0 horizon profile — Chronos-Bolt: MASE 0.779 at h=1 vs 2.455 at h=64 (ratio 3.15x).
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
Chronos-2 clearly forecasts these kinds of data better than the other model: mixture.
[exploratory — not pre-registered] L0 — Chronos-2 is significantly stronger on: mixture (paired bootstrap, Holm-corrected α=0.05).
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
Averaged across the whole test set, Chronos-2 forecasts a bit better than the other model, and that gap looks like a real effect rather than chance.
[exploratory — not pre-registered] L0 — overall paired ΔMASE -0.07 [-0.11, -0.02] (positive favors the first model, p=0.002 (n_boot=2000, p floored at 1/n_boot=0.0005)).
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. No repeat-run noise floor was checked against this specific number, so it is not yet established whether it exceeds ordinary run-to-run noise. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
TimesFM clearly forecasts these kinds of data better than Sundial: random_parametric, mixture, block_bootstrap.
[exploratory — not pre-registered] L0 — TimesFM is significantly stronger than Sundial on: random_parametric, mixture, block_bootstrap (paired bootstrap, Holm-corrected across all 6 model pairs) — within the captured surface only; ~57% of TimesFM's forward computation is unobserved; ~78% of Sundial's forward computation is unobserved.
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim. Within the captured surface only (~57% of TimesFM's forward computation is unobserved; ~78% of Sundial's forward computation is unobserved) -- the coverage qualifier.
TimesFM clearly forecasts these kinds of data better than Chronos-Bolt: random_parametric.
[exploratory — not pre-registered] L0 — TimesFM is significantly stronger than Chronos-Bolt on: random_parametric (paired bootstrap, Holm-corrected across all 6 model pairs).
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
Chronos-2 clearly forecasts these kinds of data better than Chronos-Bolt: random_parametric.
[exploratory — not pre-registered] L0 — Chronos-2 is significantly stronger than Chronos-Bolt on: random_parametric (paired bootstrap, Holm-corrected across all 6 model pairs).
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
Sundial clearly forecasts these kinds of data better than Chronos-Bolt: random_parametric.
[exploratory — not pre-registered] L0 — Sundial is significantly stronger than Chronos-Bolt on: random_parametric (paired bootstrap, Holm-corrected across all 6 model pairs).
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
Chronos-Bolt clearly forecasts these kinds of data better than TimesFM: mixture.
[exploratory — not pre-registered] L0 — Chronos-Bolt is significantly stronger than TimesFM on: mixture (paired bootstrap, Holm-corrected across all 6 model pairs).
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
Chronos-Bolt clearly forecasts these kinds of data better than Sundial: mixture.
[exploratory — not pre-registered] L0 — Chronos-Bolt is significantly stronger than Sundial on: mixture (paired bootstrap, Holm-corrected across all 6 model pairs).
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
Chronos-2 clearly forecasts these kinds of data better than Sundial: block_bootstrap, mixture, parametric, random_parametric.
[exploratory — not pre-registered] L0 — Chronos-2 is significantly stronger than Sundial on: block_bootstrap, mixture, parametric, random_parametric (paired bootstrap, Holm-corrected across all 6 model pairs) — within the captured surface only; ~78% of Sundial's forward computation is unobserved (15.0M parameters (12%) lie outside the 12 blocks this run's layer regex matched; the captured forward pass performs only 23% of the FLOPs of a full forecast at this run's decode settings; the remainder (a decoder, or repeated sampled decode steps) runs unobserved).
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim. Within the captured surface only (~78% of Sundial's forward computation is unobserved (15.0M parameters (12%) lie outside the 12 blocks this run's layer regex matched; the captured forward pass performs only 23% of the FLOPs of a full forecast at this run's decode settings; the remainder (a decoder, or repeated sampled decode steps) runs unobserved)) -- the coverage qualifier.
We ran 3599 statistical comparisons in this report, and corrected for having run several at once.
[exploratory — not pre-registered] L0 — this report made 3599 corrected comparisons across 45 independent correction families (L0 per-family paired tests: 30; L0 per-archetype paired tests: 16; Confirm — pre-registered hypotheses (private corpus): 1; Transfer — Chronos-2 → Chronos-Bolt (forward leg, exact): 12; Transfer — Chronos-2 → Chronos-Bolt (reverse leg, exact): 12; Transfer — Chronos-2 → Sundial (forward leg, exact): 36; Transfer — Chronos-2 → Sundial (reverse leg, exact): 36; Transfer — Chronos-2 → TimesFM (forward leg, exact): 40; Transfer — Chronos-2 → TimesFM (reverse leg, exact): 40; Transfer — Chronos-Bolt → Chronos-2 (forward leg, exact): 12; Transfer — Chronos-Bolt → Chronos-2 (reverse leg, exact): 12; Transfer — Chronos-Bolt → Sundial (forward leg, exact): 18; Transfer — Chronos-Bolt → Sundial (reverse leg, exact): 18; Transfer — Chronos-Bolt → TimesFM (forward leg, exact): 20; Transfer — Chronos-Bolt → TimesFM (reverse leg, exact): 20; Transfer — Sundial → Chronos-2 (forward leg, exact): 18; Transfer — Sundial → Chronos-2 (reverse leg, exact): 18; Transfer — Sundial → Chronos-Bolt (forward leg, exact): 9; Transfer — Sundial → Chronos-Bolt (reverse leg, exact): 9; Transfer — Sundial → TimesFM (forward leg, exact): 30; Transfer — Sundial → TimesFM (reverse leg, exact): 30; Atlas Transfer — Chronos-2 → Chronos-Bolt (forward leg, exact): 81; Atlas Transfer — Chronos-2 → Chronos-Bolt (reverse leg, exact): 81; Atlas Transfer — Chronos-2 → Sundial (forward leg, exact): 243; Atlas Transfer — Chronos-2 → Sundial (reverse leg, exact): 243; Atlas Transfer — Chronos-2 → TimesFM (forward leg, exact): 270; Atlas Transfer — Chronos-2 → TimesFM (reverse leg, exact): 270; Atlas Transfer — Chronos-Bolt → Chronos-2 (forward leg, exact): 28; Atlas Transfer — Chronos-Bolt → Chronos-2 (reverse leg, exact): 28; Atlas Transfer — Chronos-Bolt → Sundial (forward leg, exact): 36; Atlas Transfer — Chronos-Bolt → Sundial (reverse leg, exact): 36; Atlas Transfer — Chronos-Bolt → TimesFM (forward leg, exact): 40; Atlas Transfer — Chronos-Bolt → TimesFM (reverse leg, exact): 40; Atlas Transfer — Sundial → Chronos-2 (forward leg, exact): 196; Atlas Transfer — Sundial → Chronos-2 (reverse leg, exact): 196; Atlas Transfer — Sundial → Chronos-Bolt (forward leg, exact): 84; Atlas Transfer — Sundial → Chronos-Bolt (reverse leg, exact): 84; Atlas Transfer — Sundial → TimesFM (forward leg, exact): 280; Atlas Transfer — Sundial → TimesFM (reverse leg, exact): 280; Atlas Transfer — TimesFM → Chronos-2 (forward leg, exact): 119; Atlas Transfer — TimesFM → Chronos-2 (reverse leg, exact): 119; Atlas Transfer — TimesFM → Chronos-Bolt (forward leg, exact): 51; Atlas Transfer — TimesFM → Chronos-Bolt (reverse leg, exact): 51; Atlas Transfer — TimesFM → Sundial (forward leg, exact): 153; Atlas Transfer — TimesFM → Sundial (reverse leg, exact): 153).
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
Chronos-2 is more accurate than Chronos-Bolt, but it also costs 5.4 times more compute to run — so some of that accuracy edge may simply be buying more compute, not a better model.
[exploratory — not pre-registered] Cost — Chronos-2 wins on accuracy (MASE 1.69 vs 2.15) while costing 5.4× the compute of Chronos-Bolt (8.65 GFLOPs vs 1.59 GFLOPs per series), so every cross-model comparison in this report is size-confounded in its favor.
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
TimesFM has 231 million parameters and takes about 38 milliseconds to forecast one series in this run's setup.
[exploratory — not pre-registered] Cost — TimesFM: 231.29M parameters, 7.42 GFLOPs/series forward, 38 ms median forward at batch 8.
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
Chronos-2 has 119 million parameters and takes about 21 milliseconds to forecast one series in this run's setup.
[exploratory — not pre-registered] Cost — Chronos-2: 119.48M parameters, 8.65 GFLOPs/series forward, 21 ms median forward at batch 8.
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
Sundial has 128 million parameters and takes about 7 milliseconds to forecast one series in this run's setup.
[exploratory — not pre-registered] Cost — Sundial: 128.33M parameters, 7.44 GFLOPs/series forward, 7 ms median forward at batch 8.
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
Chronos-Bolt has 48 million parameters and takes about 14 milliseconds to forecast one series in this run's setup.
[exploratory — not pre-registered] Cost — Chronos-Bolt: 47.72M parameters, 1.59 GFLOPs/series forward, 14 ms median forward at batch 8.
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
Scaling TimesFM's input up or down and unscaling the forecast back reproduces the original forecast essentially exactly (worst mismatch 2.0e-06 times the series' own typical step size, at a 0.001× scale change).
[exploratory — not pre-registered] Frontend — TimesFM's worst scale-equivariance residual across tested factors is 0.0000 context-scale units, at scale factor 0.001 (95% CI [0.0000, 0.0000]).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
Scaling Chronos-2's input up or down and unscaling the forecast back doesn't perfectly reproduce the original forecast — the worst mismatch measured was about 0.009 times the series' own typical step size, at a 0.001× scale change.
[exploratory — not pre-registered] Frontend — Chronos-2's worst scale-equivariance residual across tested factors is 0.0093 context-scale units, at scale factor 0.001 (95% CI [0.0065, 0.0123]).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
Scaling Sundial's input up or down and unscaling the forecast back doesn't perfectly reproduce the original forecast — the worst mismatch measured was about 0.033 times the series' own typical step size, at a 0.001× scale change.
[exploratory — not pre-registered] Frontend — Sundial's worst scale-equivariance residual across tested factors is 0.0332 context-scale units, at scale factor 0.001 (95% CI [0.0236, 0.0443]).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
Scaling Chronos-Bolt's input up or down and unscaling the forecast back doesn't perfectly reproduce the original forecast — the worst mismatch measured was about 0.009 times the series' own typical step size, at a 0.001× scale change.
[exploratory — not pre-registered] Frontend — Chronos-Bolt's worst scale-equivariance residual across tested factors is 0.0087 context-scale units, at scale factor 0.001 (95% CI [0.0062, 0.0112]).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
When TimesFM is missing its most recent context (a data-staleness scenario, not just a shorter history), its accuracy degrades gradually rather than the other way around.
[exploratory — not pre-registered] Frontend — TimesFM's accuracy degrades in a 'graceful' shape as the most recent context is withheld: MASE 0.963 at full context vs. 3.567 at the shortest tested available length (64 of 512 points).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
When Chronos-2 is missing its most recent context (a data-staleness scenario, not just a shorter history), its accuracy degrades gradually rather than the other way around.
[exploratory — not pre-registered] Frontend — Chronos-2's accuracy degrades in a 'graceful' shape as the most recent context is withheld: MASE 0.980 at full context vs. 3.739 at the shortest tested available length (64 of 512 points).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
When Sundial is missing its most recent context (a data-staleness scenario, not just a shorter history), its accuracy degrades gradually rather than the other way around.
[exploratory — not pre-registered] Frontend — Sundial's accuracy degrades in a 'graceful' shape as the most recent context is withheld: MASE 1.281 at full context vs. 3.770 at the shortest tested available length (64 of 512 points).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
When Chronos-Bolt is missing its most recent context (a data-staleness scenario, not just a shorter history), its accuracy degrades gradually rather than the other way around.
[exploratory — not pre-registered] Frontend — Chronos-Bolt's accuracy degrades in a 'graceful' shape as the most recent context is withheld: MASE 1.289 at full context vs. 3.952 at the shortest tested available length (64 of 512 points).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
TimesFM silently turns a missing context value into a broken (non-finite) forecast, with no error to flag it.
[exploratory — not pre-registered] Frontend — TimesFM's NaN-handling verdict is 'propagates' across 3 injection scenarios (front/middle/back of context): 0 raised an error, 3 silently produced a non-finite forecast, 0 handled it cleanly.
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
Sundial silently turns a missing context value into a broken (non-finite) forecast, with no error to flag it.
[exploratory — not pre-registered] Frontend — Sundial's NaN-handling verdict is 'propagates' across 3 injection scenarios (front/middle/back of context): 0 raised an error, 3 silently produced a non-finite forecast, 0 handled it cleanly.
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
Chronos-2 produces a normal, finite forecast even when a context value is missing.
[exploratory — not pre-registered] Frontend — Chronos-2's NaN-handling verdict is 'handled' across 3 injection scenarios (front/middle/back of context): 0 raised an error, 0 silently produced a non-finite forecast, 3 handled it cleanly.
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
Chronos-Bolt produces a normal, finite forecast even when a context value is missing.
[exploratory — not pre-registered] Frontend — Chronos-Bolt's NaN-handling verdict is 'handled' across 3 injection scenarios (front/middle/back of context): 0 raised an error, 0 silently produced a non-finite forecast, 3 handled it cleanly.
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
For TimesFM, the cheap pre-screen flagged L9, L10, L15, L18, L19 as the layer(s) most worth spending expensive analysis on.
[exploratory — not pre-registered] Layer screen — TimesFM: work_bend selected L9, L10, L15, L18, L19 of 20 screened layers — within the captured surface only; ~57% of TimesFM's forward computation is unobserved (34.6M parameters (15%) lie outside the 20 blocks this run's layer regex matched; 10 of 20 matched blocks are skipped by capture_layer_stride=2).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. Within the captured surface only (~57% of TimesFM's forward computation is unobserved (34.6M parameters (15%) lie outside the 20 blocks this run's layer regex matched; 10 of 20 matched blocks are skipped by capture_layer_stride=2)) -- the coverage qualifier.
For Chronos-2, the cheap pre-screen flagged L8, L10, L11 as the layer(s) most worth spending expensive analysis on.
[exploratory — not pre-registered] Layer screen — Chronos-2: work_bend selected L8, L10, L11 of 12 screened layers.
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models' depth axes only partially overlap (94.7% overlap) -- depth comparisons are only valid within that shared range.
For Sundial, the cheap pre-screen flagged L3, L10, L11 as the layer(s) most worth spending expensive analysis on.
[exploratory — not pre-registered] Layer screen — Sundial: work_bend selected L3, L10, L11 of 12 screened layers — within the captured surface only; ~78% of Sundial's forward computation is unobserved (15.0M parameters (12%) lie outside the 12 blocks this run's layer regex matched; the captured forward pass performs only 23% of the FLOPs of a full forecast at this run's decode settings; the remainder (a decoder, or repeated sampled decode steps) runs unobserved).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. Within the captured surface only (~78% of Sundial's forward computation is unobserved (15.0M parameters (12%) lie outside the 12 blocks this run's layer regex matched; the captured forward pass performs only 23% of the FLOPs of a full forecast at this run's decode settings; the remainder (a decoder, or repeated sampled decode steps) runs unobserved)) -- the coverage qualifier.
For Chronos-Bolt, the cheap pre-screen flagged L4, L5 as the layer(s) most worth spending expensive analysis on.
[exploratory — not pre-registered] Layer screen — Chronos-Bolt: work_bend selected L4, L5 of 6 screened layers — within the captured surface only; ~21% of Chronos-Bolt's forward computation is unobserved (28.8M parameters (60%) lie outside the 6 blocks this run's layer regex matched).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. Within the captured surface only (~21% of Chronos-Bolt's forward computation is unobserved (28.8M parameters (60%) lie outside the 6 blocks this run's layer regex matched)) -- the coverage qualifier.
Chronos-2 most clearly 'knows' what kind of data it's looking at around layer L9 of its network.
[exploratory — not pre-registered] Profile — Chronos-2: family information peaks at L9 (probe 0.96 [0.95, 0.98] vs chance 0.43, permutation-null p95 0.44 (5 reshuffles)).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
Chronos-Bolt most clearly 'knows' what kind of data it's looking at around layer L4 of its network.
[exploratory — not pre-registered] Profile — Chronos-Bolt: family information peaks at L4 (probe 0.83 [0.80, 0.86] vs chance 0.43, permutation-null p95 0.46 (5 reshuffles)).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
Sundial most clearly 'knows' what kind of data it's looking at around layer L6 of its network.
[exploratory — not pre-registered] Profile — Sundial: family information peaks at L6 (probe 0.94 [0.93, 0.96] vs chance 0.43, permutation-null p95 0.45 (5 reshuffles)).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
TimesFM most clearly 'knows' what kind of data it's looking at around layer L12 of its network.
[exploratory — not pre-registered] Profile — TimesFM: family information peaks at L12 (probe 0.94 [0.92, 0.95] vs chance 0.43, permutation-null p95 0.44 (5 reshuffles)).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
TimesFM never fully settles on its forecast early — it keeps revising it all the way through its layers.
[exploratory — not pre-registered] Lens — TimesFM: forecast crystallizes at never (within tolerance) (within 10% of final MASE 1.96) — within the captured surface only; ~57% of TimesFM's forward computation is unobserved (34.6M parameters (15%) lie outside the 20 blocks this run's layer regex matched; 10 of 20 matched blocks are skipped by capture_layer_stride=2).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. Within the captured surface only (~57% of TimesFM's forward computation is unobserved (34.6M parameters (15%) lie outside the 20 blocks this run's layer regex matched; 10 of 20 matched blocks are skipped by capture_layer_stride=2)) -- the coverage qualifier.
Sundial settles on its forecast only in its last layers (at 100% of its depth) — earlier layers do not yet carry it.
[exploratory — not pre-registered] Lens — Sundial: forecast crystallizes at 1.00 of depth (within 10% of final MASE 2.45) — within the captured surface only; ~78% of Sundial's forward computation is unobserved (15.0M parameters (12%) lie outside the 12 blocks this run's layer regex matched; the captured forward pass performs only 23% of the FLOPs of a full forecast at this run's decode settings; the remainder (a decoder, or repeated sampled decode steps) runs unobserved).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. Within the captured surface only (~78% of Sundial's forward computation is unobserved (15.0M parameters (12%) lie outside the 12 blocks this run's layer regex matched; the captured forward pass performs only 23% of the FLOPs of a full forecast at this run's decode settings; the remainder (a decoder, or repeated sampled decode steps) runs unobserved)) -- the coverage qualifier.
Chronos-Bolt has essentially settled on its forecast by 27% of the way through its layers — the rest of the network only refines it.
[exploratory — not pre-registered] Lens — Chronos-Bolt: forecast crystallizes at 0.27 of depth (within 10% of final MASE 3.17) — within the captured surface only; ~21% of Chronos-Bolt's forward computation is unobserved (28.8M parameters (60%) lie outside the 6 blocks this run's layer regex matched).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. Within the captured surface only (~21% of Chronos-Bolt's forward computation is unobserved (28.8M parameters (60%) lie outside the 6 blocks this run's layer regex matched)) -- the coverage qualifier.
Sundial commits to its near-term and far-future forecasts at about the same point in its layers.
[exploratory — not pre-registered] Lens horizon-resolved crystallization — Sundial: horizon step 1 crystallizes at 1.00 relative depth vs. 0.91 at the final step (64) — within the captured surface only; ~78% of Sundial's forward computation is unobserved (15.0M parameters (12%) lie outside the 12 blocks this run's layer regex matched; the captured forward pass performs only 23% of the FLOPs of a full forecast at this run's decode settings; the remainder (a decoder, or repeated sampled decode steps) runs unobserved).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. Within the captured surface only (~78% of Sundial's forward computation is unobserved (15.0M parameters (12%) lie outside the 12 blocks this run's layer regex matched; the captured forward pass performs only 23% of the FLOPs of a full forecast at this run's decode settings; the remainder (a decoder, or repeated sampled decode steps) runs unobserved)) -- the coverage qualifier.
Chronos-Bolt commits to its near-term and far-future forecasts at about the same point in its layers.
[exploratory — not pre-registered] Lens horizon-resolved crystallization — Chronos-Bolt: horizon step 1 crystallizes at 0.27 relative depth vs. 0.00 at the final step (64) — within the captured surface only; ~21% of Chronos-Bolt's forward computation is unobserved (28.8M parameters (60%) lie outside the 6 blocks this run's layer regex matched).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. Within the captured surface only (~21% of Chronos-Bolt's forward computation is unobserved (28.8M parameters (60%) lie outside the 6 blocks this run's layer regex matched)) -- the coverage qualifier.
At their most similar layers, TimesFM and Chronos-2 organize the data somewhat alike.
[exploratory — not pre-registered] L1 — peak similarity CKA=0.43 (95% CI [0.42, 0.44], series bootstrap) at TimesFM L4 ↔ Chronos-2 L7 (relative depths 0.21 / 0.64, block axis); shuffled-series null ≈0.04 — within the captured surface only; ~57% of TimesFM's forward computation is unobserved (34.6M parameters (15%) lie outside the 20 blocks this run's layer regex matched; 10 of 20 matched blocks are skipped by capture_layer_stride=2).
This is a geometric similarity measure between two models' representations (do they organize the data alike), not evidence that the models compute anything the same way. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. Within the captured surface only (~57% of TimesFM's forward computation is unobserved (34.6M parameters (15%) lie outside the 20 blocks this run's layer regex matched; 10 of 20 matched blocks are skipped by capture_layer_stride=2)) -- the coverage qualifier.
The two models organize 'parametric'-type data the most differently of any data type tested.
[exploratory — not pre-registered] L1 — representational agreement is weakest on family 'parametric' (best CKA 0.64 [0.61, 0.71]).
This is a geometric similarity measure between two models' representations (do they organize the data alike), not evidence that the models compute anything the same way. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
Even after squeezing each model down to a sparse, human-legible feature dictionary, TimesFM and Chronos-2 still agree on which series look alike.
[exploratory — not pre-registered] L1 (SAE feature space) — TimesFM × Chronos-2: best feature-space CKA 0.59 [0.56, 0.63] at stacked_xf.8 ↔ encoder.block.11 (n=965 series) — within the captured surface only; ~57% of TimesFM's forward computation is unobserved (34.6M parameters (15%) lie outside the 20 blocks this run's layer regex matched; 10 of 20 matched blocks are skipped by capture_layer_stride=2).
This is a geometric similarity measure between two models' representations (do they organize the data alike), not evidence that the models compute anything the same way. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. Within the captured surface only (~57% of TimesFM's forward computation is unobserved (34.6M parameters (15%) lie outside the 20 blocks this run's layer regex matched; 10 of 20 matched blocks are skipped by capture_layer_stride=2)) -- the coverage qualifier.
You can predict what Chronos-2 is doing from what TimesFM is doing better than you could from the raw input alone — real shared structure, not just both models seeing the same data.
[exploratory — not pre-registered] L2 — TimesFM→Chronos-2: best stitching gain 0.71 [0.68, 0.73] R² above the input baseline at L2→L0 (CI excludes zero).
This is a linear-translatability measure -- scored as a gain over an input-only baseline specifically so it isn't just "both models saw the same data" -- not a causal or mechanistic claim. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
You can predict what TimesFM is doing from what Chronos-2 is doing better than you could from the raw input alone — real shared structure, not just both models seeing the same data.
[exploratory — not pre-registered] L2 — Chronos-2→TimesFM: best stitching gain 0.61 [0.59, 0.63] R² above the input baseline at L1→L0 (CI excludes zero).
This is a linear-translatability measure -- scored as a gain over an input-only baseline specifically so it isn't just "both models saw the same data" -- not a causal or mechanistic claim. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
You can predict what Sundial is doing from what TimesFM is doing better than you could from the raw input alone — real shared structure, not just both models seeing the same data.
[exploratory — not pre-registered] L2 — TimesFM→Sundial: best stitching gain 0.68 [0.67, 0.70] R² above the input baseline at L4→L4 (CI excludes zero).
This is a linear-translatability measure -- scored as a gain over an input-only baseline specifically so it isn't just "both models saw the same data" -- not a causal or mechanistic claim. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
You can predict what TimesFM is doing from what Sundial is doing better than you could from the raw input alone — real shared structure, not just both models seeing the same data.
[exploratory — not pre-registered] L2 — Sundial→TimesFM: best stitching gain 0.61 [0.58, 0.64] R² above the input baseline at L10→L18 (CI excludes zero).
This is a linear-translatability measure -- scored as a gain over an input-only baseline specifically so it isn't just "both models saw the same data" -- not a causal or mechanistic claim. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
You can predict what Chronos-Bolt is doing from what TimesFM is doing better than you could from the raw input alone — real shared structure, not just both models seeing the same data.
[exploratory — not pre-registered] L2 — TimesFM→Chronos-Bolt: best stitching gain 0.65 [0.63, 0.67] R² above the input baseline at L2→L0 (CI excludes zero).
This is a linear-translatability measure -- scored as a gain over an input-only baseline specifically so it isn't just "both models saw the same data" -- not a causal or mechanistic claim. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
You can predict what TimesFM is doing from what Chronos-Bolt is doing better than you could from the raw input alone — real shared structure, not just both models seeing the same data.
[exploratory — not pre-registered] L2 — Chronos-Bolt→TimesFM: best stitching gain 0.58 [0.56, 0.60] R² above the input baseline at L2→L0 (CI excludes zero).
This is a linear-translatability measure -- scored as a gain over an input-only baseline specifically so it isn't just "both models saw the same data" -- not a causal or mechanistic claim. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
You can predict what Sundial is doing from what Chronos-2 is doing better than you could from the raw input alone — real shared structure, not just both models seeing the same data.
[exploratory — not pre-registered] L2 — Chronos-2→Sundial: best stitching gain 0.89 [0.88, 0.90] R² above the input baseline at L0→L0 (CI excludes zero).
This is a linear-translatability measure -- scored as a gain over an input-only baseline specifically so it isn't just "both models saw the same data" -- not a causal or mechanistic claim. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
You can predict what Chronos-2 is doing from what Sundial is doing better than you could from the raw input alone — real shared structure, not just both models seeing the same data.
[exploratory — not pre-registered] L2 — Sundial→Chronos-2: best stitching gain 0.91 [0.90, 0.92] R² above the input baseline at L1→L0 (CI excludes zero).
This is a linear-translatability measure -- scored as a gain over an input-only baseline specifically so it isn't just "both models saw the same data" -- not a causal or mechanistic claim. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
You can predict what Chronos-Bolt is doing from what Chronos-2 is doing better than you could from the raw input alone — real shared structure, not just both models seeing the same data.
[exploratory — not pre-registered] L2 — Chronos-2→Chronos-Bolt: best stitching gain 0.89 [0.88, 0.91] R² above the input baseline at L0→L0 (CI excludes zero).
This is a linear-translatability measure -- scored as a gain over an input-only baseline specifically so it isn't just "both models saw the same data" -- not a causal or mechanistic claim. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
You can predict what Chronos-2 is doing from what Chronos-Bolt is doing better than you could from the raw input alone — real shared structure, not just both models seeing the same data.
[exploratory — not pre-registered] L2 — Chronos-Bolt→Chronos-2: best stitching gain 0.91 [0.90, 0.92] R² above the input baseline at L1→L0 (CI excludes zero).
This is a linear-translatability measure -- scored as a gain over an input-only baseline specifically so it isn't just "both models saw the same data" -- not a causal or mechanistic claim. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
You can predict what Chronos-Bolt is doing from what Sundial is doing better than you could from the raw input alone — real shared structure, not just both models seeing the same data.
[exploratory — not pre-registered] L2 — Sundial→Chronos-Bolt: best stitching gain 0.88 [0.86, 0.89] R² above the input baseline at L1→L0 (CI excludes zero).
This is a linear-translatability measure -- scored as a gain over an input-only baseline specifically so it isn't just "both models saw the same data" -- not a causal or mechanistic claim. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
You can predict what Sundial is doing from what Chronos-Bolt is doing better than you could from the raw input alone — real shared structure, not just both models seeing the same data.
[exploratory — not pre-registered] L2 — Chronos-Bolt→Sundial: best stitching gain 0.87 [0.85, 0.88] R² above the input baseline at L0→L0 (CI excludes zero).
This is a linear-translatability measure -- scored as a gain over an input-only baseline specifically so it isn't just "both models saw the same data" -- not a causal or mechanistic claim. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
The two models group the data into largely the same clusters.
[exploratory — not pre-registered] Clusters — partition agreement AMI=0.60 [0.57, 0.63]; 1.0 means both models carve the benchmark identically, 0 means unrelated groupings.
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
Of the ways this run damaged the input, 'level_shift' moved the forecasts most and 'dropout' least — but the two also alter different amounts of the series, which the breakdown table shows alongside.
[exploratory — not pre-registered] L3 — strongest corruption by model-averaged forecast change is level_shift (Δ=11.33, altering 38% of the input); weakest is dropout (Δ=0.76, altering 8%).
This is a causal measurement made separately within each model; comparing the two models' curves is a comparison of two within-model causal results, not a causal claim that spans architectures. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
TimesFM and Chronos-2 react to data-corrupting changes at similar points in their depth overall, but they disagree most about where they notice 'spike'-style corruption.
[exploratory — not pre-registered] L3 — fingerprint agreement ρ=0.51 [0.50, 0.53]; most divergent corruption: spike (ρ=-0.79 [-0.80, -0.78]).
This is a causal measurement made separately within each model; comparing the two models' curves is a comparison of two within-model causal results, not a causal claim that spans architectures. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
TimesFM and Sundial react to data-corrupting changes at similar points in their depth overall, but they disagree most about where they notice 'spike'-style corruption.
[exploratory — not pre-registered] L3 — fingerprint agreement ρ=0.50 [0.49, 0.52]; most divergent corruption: spike (ρ=-0.97 [-0.98, -0.96]).
This is a causal measurement made separately within each model; comparing the two models' curves is a comparison of two within-model causal results, not a causal claim that spans architectures. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
TimesFM and Chronos-Bolt react to data-corrupting changes at similar points in their depth overall, but they disagree most about where they notice 'detrend'-style corruption.
[exploratory — not pre-registered] L3 — fingerprint agreement ρ=0.52 [0.50, 0.53]; most divergent corruption: detrend (ρ=-0.87 [-0.90, -0.83]).
This is a causal measurement made separately within each model; comparing the two models' curves is a comparison of two within-model causal results, not a causal claim that spans architectures. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
Chronos-2 and Sundial react to data-corrupting changes at similar points in their depth overall, but they disagree most about where they notice 'level_shift'-style corruption.
[exploratory — not pre-registered] L3 — fingerprint agreement ρ=0.81 [0.79, 0.82]; most divergent corruption: level_shift (ρ=-0.21 [-0.25, -0.17]).
This is a causal measurement made separately within each model; comparing the two models' curves is a comparison of two within-model causal results, not a causal claim that spans architectures. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
Chronos-2 and Chronos-Bolt react to data-corrupting changes at similar points in their depth overall, but they disagree most about where they notice 'noise'-style corruption.
[exploratory — not pre-registered] L3 — fingerprint agreement ρ=0.90 [0.89, 0.91]; most divergent corruption: noise (ρ=-0.85 [-0.92, -0.79]).
This is a causal measurement made separately within each model; comparing the two models' curves is a comparison of two within-model causal results, not a causal claim that spans architectures. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
Sundial and Chronos-Bolt react to data-corrupting changes at similar points in their depth overall, but they disagree most about where they notice 'noise'-style corruption.
[exploratory — not pre-registered] L3 — fingerprint agreement ρ=0.92 [0.92, 0.93]; most divergent corruption: noise (ρ=-0.55 [-0.58, -0.50]).
This is a causal measurement made separately within each model; comparing the two models' curves is a comparison of two within-model causal results, not a causal claim that spans architectures. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
TimesFM's forecasts barely change when data is corrupted with 'dropout', but change the most under 'level_shift' — though these corruptions weren't all made equally strong, so that comparison is only rough.
[exploratory — not pre-registered] L3 — TimesFM: least behaviorally-sensitive corruption is dropout (0.78), most is level_shift (11.43) — not necessarily comparable, since corruption strengths are not calibrated to match.
This is a causal measurement made separately within each model; comparing the two models' curves is a comparison of two within-model causal results, not a causal claim that spans architectures. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
Sundial's forecasts barely change when data is corrupted with 'dropout', but change the most under 'level_shift' — though these corruptions weren't all made equally strong, so that comparison is only rough.
[exploratory — not pre-registered] L3 — Sundial: least behaviorally-sensitive corruption is dropout (0.82), most is level_shift (10.76) — not necessarily comparable, since corruption strengths are not calibrated to match.
This is a causal measurement made separately within each model; comparing the two models' curves is a comparison of two within-model causal results, not a causal claim that spans architectures. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
Chronos-Bolt's forecasts barely change when data is corrupted with 'dropout', but change the most under 'level_shift' — though these corruptions weren't all made equally strong, so that comparison is only rough.
[exploratory — not pre-registered] L3 — Chronos-Bolt: least behaviorally-sensitive corruption is dropout (0.70), most is level_shift (11.52) — not necessarily comparable, since corruption strengths are not calibrated to match.
This is a causal measurement made separately within each model; comparing the two models' curves is a comparison of two within-model causal results, not a causal claim that spans architectures. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
Chronos-2's forecasts barely change when data is corrupted with 'spike', but change the most under 'level_shift' — though these corruptions weren't all made equally strong, so that comparison is only rough.
[exploratory — not pre-registered] L3 — Chronos-2: least behaviorally-sensitive corruption is spike (0.49), most is level_shift (11.59) — not necessarily comparable, since corruption strengths are not calibrated to match.
This is a causal measurement made separately within each model; comparing the two models' curves is a comparison of two within-model causal results, not a causal claim that spans architectures. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
In TimesFM, 5 of 6 corruption types are repaired by a different part of the network near-term than far-future.
[exploratory — not pre-registered] L3 horizon-resolved patching — TimesFM: the layer best restoring horizon step 1 differs from the layer best restoring the final step for: deseasonalize, dropout, level_shift, spike, warp. The remaining 1 share one depth — within the captured surface only; ~57% of TimesFM's forward computation is unobserved (34.6M parameters (15%) lie outside the 20 blocks this run's layer regex matched; 10 of 20 matched blocks are skipped by capture_layer_stride=2).
This is a causal measurement made separately within each model; comparing the two models' curves is a comparison of two within-model causal results, not a causal claim that spans architectures. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. Within the captured surface only (~57% of TimesFM's forward computation is unobserved (34.6M parameters (15%) lie outside the 20 blocks this run's layer regex matched; 10 of 20 matched blocks are skipped by capture_layer_stride=2)) -- the coverage qualifier.
In Chronos-2, 3 of 6 corruption types are repaired by a different part of the network near-term than far-future.
[exploratory — not pre-registered] L3 horizon-resolved patching — Chronos-2: the layer best restoring horizon step 1 differs from the layer best restoring the final step for: dropout, noise, warp. The remaining 3 share one depth.
This is a causal measurement made separately within each model; comparing the two models' curves is a comparison of two within-model causal results, not a causal claim that spans architectures. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models' depth axes only partially overlap (94.7% overlap) -- depth comparisons are only valid within that shared range.
In Sundial, 4 of 6 corruption types are repaired by a different part of the network near-term than far-future.
[exploratory — not pre-registered] L3 horizon-resolved patching — Sundial: the layer best restoring horizon step 1 differs from the layer best restoring the final step for: deseasonalize, dropout, noise, spike. The remaining 2 share one depth — within the captured surface only; ~78% of Sundial's forward computation is unobserved (15.0M parameters (12%) lie outside the 12 blocks this run's layer regex matched; the captured forward pass performs only 23% of the FLOPs of a full forecast at this run's decode settings; the remainder (a decoder, or repeated sampled decode steps) runs unobserved).
This is a causal measurement made separately within each model; comparing the two models' curves is a comparison of two within-model causal results, not a causal claim that spans architectures. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. Within the captured surface only (~78% of Sundial's forward computation is unobserved (15.0M parameters (12%) lie outside the 12 blocks this run's layer regex matched; the captured forward pass performs only 23% of the FLOPs of a full forecast at this run's decode settings; the remainder (a decoder, or repeated sampled decode steps) runs unobserved)) -- the coverage qualifier.
In Chronos-Bolt, 2 of 6 corruption types are repaired by a different part of the network near-term than far-future.
[exploratory — not pre-registered] L3 horizon-resolved patching — Chronos-Bolt: the layer best restoring horizon step 1 differs from the layer best restoring the final step for: deseasonalize, dropout. The remaining 4 share one depth — within the captured surface only; ~21% of Chronos-Bolt's forward computation is unobserved (28.8M parameters (60%) lie outside the 6 blocks this run's layer regex matched).
This is a causal measurement made separately within each model; comparing the two models' curves is a comparison of two within-model causal results, not a causal claim that spans architectures. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. Within the captured surface only (~21% of Chronos-Bolt's forward computation is unobserved (28.8M parameters (60%) lie outside the 6 blocks this run's layer regex matched)) -- the coverage qualifier.
TimesFM has a specific attention head that specializes in looking back exactly one season for 'block_bootstrap'-type data — a seasonality detector.
[exploratory — not pre-registered] Attention — TimesFM: strongest periodicity head L1·h8 (excess seasonal mass 0.04, family block_bootstrap) — within the captured surface only; ~57% of TimesFM's forward computation is unobserved (34.6M parameters (15%) lie outside the 20 blocks this run's layer regex matched; 10 of 20 matched blocks are skipped by capture_layer_stride=2).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. Within the captured surface only (~57% of TimesFM's forward computation is unobserved (34.6M parameters (15%) lie outside the 20 blocks this run's layer regex matched; 10 of 20 matched blocks are skipped by capture_layer_stride=2)) -- the coverage qualifier.
Chronos-2 has a specific attention head that specializes in looking back exactly one season for 'block_bootstrap'-type data — a seasonality detector.
[exploratory — not pre-registered] Attention — Chronos-2: strongest periodicity head L3·h5 (excess seasonal mass 0.41, family block_bootstrap).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models' depth axes only partially overlap (94.7% overlap) -- depth comparisons are only valid within that shared range.
TimesFM's forecast depends noticeably on one specific attention head (L0·h11) — disabling it measurably hurts accuracy.
[exploratory — not pre-registered] Attention — TimesFM: most load-bearing head L0·h11 (ΔMASE +0.198 (this model is deterministic; the delta is real signal) when ablated).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The effect exceeds this model's own repeat-run noise floor, so it is not explained by ordinary call-to-call variation alone.
Chronos-2's forecast depends noticeably on one specific attention head (L11·h7) — disabling it measurably hurts accuracy.
[exploratory — not pre-registered] Attention — Chronos-2: most load-bearing head L11·h7 (ΔMASE +0.055 (this model is deterministic; the delta is real signal) when ablated).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The effect exceeds this model's own repeat-run noise floor, so it is not explained by ordinary call-to-call variation alone.
Chronos-Bolt's forecast depends noticeably on one specific attention head (L5·h7) — disabling it measurably hurts accuracy.
[exploratory — not pre-registered] Attention — Chronos-Bolt: most load-bearing head L5·h7 (ΔMASE +0.157 (this model is deterministic; the delta is real signal) when ablated).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The effect exceeds this model's own repeat-run noise floor, so it is not explained by ordinary call-to-call variation alone.
Judged on the coarser model's own timescale, Chronos-2's most seasonal attention head is L3·h5.
[exploratory — not pre-registered] Attention — Chronos-2: at the resolution-matched 32-step lag axis, the strongest periodicity head is L3·h5 (excess seasonal mass 0.06, family block_bootstrap). This, not the native ranking, is the number a cross-model claim may cite — binning to the coarsest model's token width discards finer periodicity by construction, which is the cost of making the two comparable.
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models' depth axes only partially overlap (94.7% overlap) -- depth comparisons are only valid within that shared range.
Of 29 sparse dictionaries trained, 29 have enough live features to read from.
[exploratory — not pre-registered] SAE dictionary health: 29 of 29 targets pass their dead-feature bar; 0 of 29 fail to align to labelled properties above their own permutation null.
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
In TimesFM, learned internal features track 2 real properties of the input series: seasonal component count, dominant period.
[exploratory — not pre-registered] SAE — TimesFM: across 10 analyzed layers the strongest STRUCTURAL correlates (provenance regressed out) are n_seasonalities, seasonal_period_dominant; strongest is feature 3921 at stacked_xf.6 matching n_seasonalities (ρ=0.31, n=555) — within the captured surface only; ~57% of TimesFM's forward computation is unobserved (34.6M parameters (15%) lie outside the 20 blocks this run's layer regex matched; 10 of 20 matched blocks are skipped by capture_layer_stride=2).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. Within the captured surface only (~57% of TimesFM's forward computation is unobserved (34.6M parameters (15%) lie outside the 20 blocks this run's layer regex matched; 10 of 20 matched blocks are skipped by capture_layer_stride=2)) -- the coverage qualifier.
In Sundial, learned internal features track 2 real properties of the input series: seasonal component count, dominant period.
[exploratory — not pre-registered] SAE — Sundial: across 9 analyzed layers the strongest STRUCTURAL correlates (provenance regressed out) are n_seasonalities, seasonal_period_dominant; strongest is feature 5065 at model.layers.7 matching seasonal_period_dominant (ρ=0.38, n=443) — within the captured surface only; ~78% of Sundial's forward computation is unobserved (15.0M parameters (12%) lie outside the 12 blocks this run's layer regex matched; the captured forward pass performs only 23% of the FLOPs of a full forecast at this run's decode settings; the remainder (a decoder, or repeated sampled decode steps) runs unobserved).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. Within the captured surface only (~78% of Sundial's forward computation is unobserved (15.0M parameters (12%) lie outside the 12 blocks this run's layer regex matched; the captured forward pass performs only 23% of the FLOPs of a full forecast at this run's decode settings; the remainder (a decoder, or repeated sampled decode steps) runs unobserved)) -- the coverage qualifier.
In Chronos-2, learned internal features track 3 real properties of the input series: autocorrelation strength, seasonal component count, dominant period.
[exploratory — not pre-registered] SAE — Chronos-2: across 7 analyzed layers the strongest STRUCTURAL correlates (provenance regressed out) are ar_coeff_sum, n_seasonalities, seasonal_period_dominant; strongest is feature 561 at encoder.block.11 matching n_seasonalities (ρ=0.36, n=555).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models' depth axes only partially overlap (94.7% overlap) -- depth comparisons are only valid within that shared range.
In Chronos-Bolt, learned internal features track 2 real properties of the input series: changepoint count, dominant period.
[exploratory — not pre-registered] SAE — Chronos-Bolt: across 3 analyzed layers the strongest STRUCTURAL correlates (provenance regressed out) are n_changepoints, seasonal_period_dominant; strongest is feature 4586 at encoder.block.3 matching seasonal_period_dominant (ρ=0.29, n=443) — within the captured surface only; ~21% of Chronos-Bolt's forward computation is unobserved (28.8M parameters (60%) lie outside the 6 blocks this run's layer regex matched).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. Within the captured surface only (~21% of Chronos-Bolt's forward computation is unobserved (28.8M parameters (60%) lie outside the 6 blocks this run's layer regex matched)) -- the coverage qualifier.
44% of ablation panels show a near-flat forecast.
[exploratory — not pre-registered] Ablation panel flatness: 585 of 1326 panels (44.1%) have forecast sd < 10% of context sd. Noise-like contexts (lag-1 autocorrelation < 0.2, n=399) are flat 90.7% of the time; smooth contexts (lag-1 > 0.8, n=597) are flat 9.9% of the time. Flat panels score better on MASE (median 0.819 vs 1.625 for non-flat panels).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
All 4 models build features for the same 4 basic properties of the data, but TimesFM is alone in devoting a large share of its features to ar order.
[exploratory — not pre-registered] SAE — 4 of 10 structural properties are accounted for by all 4 models (ar_coeff_sum, n_changepoints, n_seasonalities, seasonal_period_dominant); the largest model-specific coverage is TimesFM on ar_order (10% of its matched features at TimesFM/stacked_xf.6), which no other model reaches.
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
Of 9 sparse-feature concepts found across this run's models, 9 are universal, 0 are partial, 0 are model-specific when checked against every other model's own dictionary.
[exploratory — not pre-registered] SAE concept universality: of 9 concepts across 4 analyzed target(s), 9 universal, 0 partial, 0 model-specific (checked against 3 other model(s) per target).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
In Chronos-2/encoder.block.6, a cluster of 3 sparse features named 'strong raises horizon_shape_near · unusually raises mase' causally moves the forecast beyond what random steering of the same size does.
[exploratory — not pre-registered] SAE concepts — Chronos-2/encoder.block.6 (universal): 2 concept(s) in this run's top 9 by interest; strongest is 'strong raises horizon_shape_near · unusually raises mase' (3 members), dominant profile effect 4.42x its own null.
This is a causal measurement made separately within each model; comparing the two models' curves is a comparison of two within-model causal results, not a causal claim that spans architectures. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models' depth axes only partially overlap (94.7% overlap) -- depth comparisons are only valid within that shared range.
In Chronos-2/encoder.block.8, a cluster of 4 sparse features named 'strong raises horizon_shape_far · unusually raises trend' causally moves the forecast beyond what random steering of the same size does.
[exploratory — not pre-registered] SAE concepts — Chronos-2/encoder.block.8 (universal): 2 concept(s) in this run's top 9 by interest; strongest is 'strong raises horizon_shape_far · unusually raises trend' (4 members), dominant profile effect 3.20x its own null.
This is a causal measurement made separately within each model; comparing the two models' curves is a comparison of two within-model causal results, not a causal claim that spans architectures. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The two models' depth axes only partially overlap (94.7% overlap) -- depth comparisons are only valid within that shared range.
In Chronos-Bolt/encoder.block.4, a cluster of 8 sparse features named 'strong raises seasonal' causally moves the forecast beyond what random steering of the same size does.
[exploratory — not pre-registered] SAE concepts — Chronos-Bolt/encoder.block.4 (universal): 2 concept(s) in this run's top 9 by interest; strongest is 'strong raises seasonal' (8 members), dominant profile effect 3.27x its own null — within the captured surface only; ~21% of Chronos-Bolt's forward computation is unobserved (28.8M parameters (60%) lie outside the 6 blocks this run's layer regex matched).
This is a causal measurement made separately within each model; comparing the two models' curves is a comparison of two within-model causal results, not a causal claim that spans architectures. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. Within the captured surface only (~21% of Chronos-Bolt's forward computation is unobserved (28.8M parameters (60%) lie outside the 6 blocks this run's layer regex matched)) -- the coverage qualifier.
In Sundial/model.layers.5, a cluster of 3 sparse features named 'strong raises horizon_shape_near · unusually raises horizon_shape_far' causally moves the forecast beyond what random steering of the same size does.
[exploratory — not pre-registered] SAE concepts — Sundial/model.layers.5 (universal): 3 concept(s) in this run's top 9 by interest; strongest is 'strong raises horizon_shape_near · unusually raises horizon_shape_far' (3 members), dominant profile effect 2.29x its own null — within the captured surface only; ~78% of Sundial's forward computation is unobserved (15.0M parameters (12%) lie outside the 12 blocks this run's layer regex matched; the captured forward pass performs only 23% of the FLOPs of a full forecast at this run's decode settings; the remainder (a decoder, or repeated sampled decode steps) runs unobserved).
This is a causal measurement made separately within each model; comparing the two models' curves is a comparison of two within-model causal results, not a causal claim that spans architectures. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. Within the captured surface only (~78% of Sundial's forward computation is unobserved (15.0M parameters (12%) lie outside the 12 blocks this run's layer regex matched; the captured forward pass performs only 23% of the FLOPs of a full forecast at this run's decode settings; the remainder (a decoder, or repeated sampled decode steps) runs unobserved)) -- the coverage qualifier.
Of 293 individual SAE features measured across this run, feature 4993 in Sundial/model.layers.7 moves the forecast most convincingly when ablated.
[exploratory — not pre-registered] SAE causally interesting individual features: 293 feature(s) across 9 target(s) clear at least one channel's null in the ablation battery; strongest is Sundial/model.layers.7 feature 4993 (7 of 9 channels clearing, fingerprint magnitude 62.98) — within the captured surface only; ~78% of Sundial's forward computation is unobserved (15.0M parameters (12%) lie outside the 12 blocks this run's layer regex matched; the captured forward pass performs only 23% of the FLOPs of a full forecast at this run's decode settings; the remainder (a decoder, or repeated sampled decode steps) runs unobserved).
This is a causal measurement made separately within each model; comparing the two models' curves is a comparison of two within-model causal results, not a causal claim that spans architectures. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. Within the captured surface only (~78% of Sundial's forward computation is unobserved (15.0M parameters (12%) lie outside the 12 blocks this run's layer regex matched; the captured forward pass performs only 23% of the FLOPs of a full forecast at this run's decode settings; the remainder (a decoder, or repeated sampled decode steps) runs unobserved)) -- the coverage qualifier.
This report shows 15 worked examples across 5 kinds of data, chosen to span the range from the biggest to the smallest disagreement within each kind.
[exploratory — not pre-registered] Exemplars — 15 case studies rendered across 5 families; selection spans each family's own MASE-gap distribution.
This is a single illustrative example chosen to make an aggregate pattern concrete, not a statistical claim on its own. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it.
5 of the 15 worked examples show a difference between the models no bigger than the variation one model shows against itself when run twice.
[exploratory — not pre-registered] Exemplars — 5/15 selected series have a cross-model MASE gap below one repeat-run noise floor.
This is a single illustrative example chosen to make an aggregate pattern concrete, not a statistical claim on its own. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. The effect exceeds this model's own repeat-run noise floor, so it is not explained by ordinary call-to-call variation alone.
1 of 1 accuracy differences spotted earlier in this report held up when re-tested on fresh, never-before-seen data.
CONFIRM — 1/1 dev family hypotheses confirmed on the private benchmark (paired bootstrap, Holm α=0.05).
This is a purely behavioral (input-to-output) comparison and needs no interpretability machinery to be trusted on its own terms. Pre-registered on the sealed private corpus and tested exactly once -- this is confirmatory evidence, the gold standard this report's evidence ladder builds toward. The two models are not matched in size or compute (Parameters: 1.94×; FLOPs per forward (per series): 1.17×) -- the fairness card treats parameter/FLOPs asymmetry as qualifying every quality claim.
9 of 9 claims about where in depth the two models react to a given kind of data corruption held up on fresh, never-before-seen data.
CONFIRM — L3 fingerprint agreement: 9/9 registered per-corruption values replicate on private data (overall ρ=0.51 [0.49, 0.53]).
This is a causal measurement made separately within each model; comparing the two models' curves is a comparison of two within-model causal results, not a causal claim that spans architectures. Pre-registered on the sealed private corpus and tested exactly once -- this is confirmatory evidence, the gold standard this report's evidence ladder builds toward.
The strongest similarity found earlier between the two models' internal representations held up on fresh data.
CONFIRM — peak-CKA layer pair replicates on private data (0.43 [0.42, 0.44]).
This is a geometric similarity measure between two models' representations (do they organize the data alike), not evidence that the models compute anything the same way. Pre-registered on the sealed private corpus and tested exactly once -- this is confirmatory evidence, the gold standard this report's evidence ladder builds toward. The two models' depth axes only partially overlap (94.7% overlap) -- depth comparisons are only valid within that shared range.
20 of 20 claims that two models' dictionaries select the same series for a shared concept held up on fresh, never-before-seen data.
CONFIRM — concept transfer: 20/20 registered concept_transfer claims confirmed on private data (Holm α=0.05).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Pre-registered on the sealed private corpus and tested exactly once -- this is confirmatory evidence, the gold standard this report's evidence ladder builds toward.
1 of this report's accuracy-change numbers are small enough that they could just be random noise from calling a model twice, not a real effect.
Noise floor — 1 of 4 ΔMASE values in this report fall at or below their own model's repeat-run noise floor; findings suppressed as uninterpretable: Attention head ranking (Sundial).
This is a descriptive measurement of what is present, not a claim about which model is better or why. Exploratory: found by looking at the dev corpus, where many comparisons were tried, so treat it as a hypothesis rather than an established result unless the Confirm section replicates it. This fell at or below the model's own repeat-run noise floor and should not be read as a real effect.
Each section below answers a progressively stronger question, and each one exists because of a specific limitation in the question before it. Read a number's strength according to which rung it sits on, not by how confident its chart looks:
Two terms recur in almost every chart below. A window is a pooled ~32-timestep interval (`alignment.window`), not one raw model timestep — every model's tokens are pooled onto this same axis specifically so an architecture reading one timestep per token and one reading many become comparable at all. Relative depth rescales each layer's position to 0–1 so models with different layer counts sit on a shared axis — a convention that makes comparison possible, not a claim that the same relative depth means the same computational stage in both architectures. Sign conventions (whether a positive Δ means better or worse) differ section to section and are restated locally in each chart's own note — check before comparing a ΔMASE bar to a ΔR² heatmap.
Activation patching
Writing a model's own cached clean activations back into its corrupted forward pass, one layer (and optionally one window) at a time, so that recovered forecast quality localizes where a property is causally carried; always within one model, never transplanted between models. Where it appears: Perturbation & patching's restoration curves and layer × window heatmaps.
AMI (adjusted mutual information)
How much two clusterings of the same series agree, corrected for the agreement expected by chance, used to ask whether two models carve the benchmark into similar groups without requiring their cluster labels to correspond. Where it appears: Activation clusters.
Captured FLOP fraction (coverage)
The share of a model's real per-forecast computation that the captured layers actually perform, measured rather than assumed — an encoder-only capture surface or a strided capture leaves the rest unobserved, and any depth-located claim about a model below 90% carries that qualifier automatically. Where it appears: The fairness card; Cost and capacity; auto-appended to depth-located findings.
catch22 (feature space)
The 22 (or 24, adding mean/std) general-purpose time-series features `benchmark_validation` computes per series and robustly scales (with winsorization against outlier swamping) before computing diversity, effective dimensionality, or near-collisions on them — the space every diversity number in this report is measured in, never the UMAP coordinates used only for the companion plot. Where it appears: The corpus card's diversity and feature-space-map figures.
Concept
A group of SAE features from one model's dictionary whose removal moves the forecast in the same way (the same channels, the same direction), found by clustering each feature's ablation fingerprint and admitted only when every group has at least a minimum number of members, so a dictionary whose causal features do not group is reported as non-modular rather than forced into concepts. Where it appears: The SAE section's concept cards; produced by the concepts stage.
Concept atlas
A grouping of causal SAE features pooled across every model and clustered by ablation-fingerprint similarity, so that every pair inside a group clears a minimum cosine, groups below the minimum size stay unassigned, and a group can span several models (unlike a plain 'concept', which stays within one model's dictionary). Where it appears: The SAE section's concept atlas figure and table; produced by the concepts stage.
Convergent concept
An atlas concept whose member models share the same causal EFFECT on the forecast but fire on different, unrelated INPUTS per model — a measured finding about this run's own data, not a weaker or failed version of a fully shared concept. Where it appears: Model comparison — sharing-class column and Q1's answer box.
Corruption sensitivity fingerprint
A layers × corruptions matrix of how much each layer's activations move when a specific structural property is destroyed in the input, forming a per-model signature whose *shape across depth* is what gets compared across models — never the raw magnitudes, which are not calibrated between corruptions. Where it appears: Perturbation & patching's sensitivity heatmap and cross-model agreement.
Crystallization depth
The shallowest relative depth at which the skip-lens forecast is already within a set tolerance (10% by default) of the model's final forecast quality — where the answer is essentially settled, not where computation stops. Where it appears: Forecast lens.
Dead feature
A dictionary atom in a trained sparse autoencoder that never activates on any evaluation row, so it contributes nothing and inflates any statistic computed over "all features"; the dead rate is reported because a mostly-dead dictionary can otherwise look like a healthy one. Where it appears: Sparse features (SAE) — dictionary health, next to reconstruction fidelity.
Depth axis (`index` / `block` / `compute`)
Which definition of "how deep" a figure uses: `index` counts only the layers this run captured, `block` (the default) counts every block in the whole stack including surfaces never captured, and `compute` uses cumulative measured FLOPs; an encoder-only capture surface therefore caps well below 1.0 on `block` rather than misleadingly reaching it. Where it appears: The fairness card's "Depth axis" row, and every depth-plotted figure's own note.
Diagonal-hit fraction (alignment)
The share of probe windows where injecting an impulse at window *w* perturbs aligned window *w* most, verifying empirically that the token-to-time mapping an adapter declares is true for the installed library version; below 1.0 at late layers is normal, near zero anywhere is a broken mapping. Where it appears: The Alignment & Provenance panel; run by a gate at extraction time.
Effective dimensionality
The participation ratio of a representation's PCA spectrum — roughly, how many directions actually carry variance — used as a descriptive profile of where a model expands or compresses, not as a quality score. Where it appears: Model internals' per-layer depth profile.
Epoch (corpus)
A fresh, non-overlapping seed range used to mint a brand-new private split when an existing one is suspected of having leaked, so a peeked-at private corpus is regenerated rather than reused. Where it appears: The corpus card's header line; private benchmark confirmation.
Evidence class
The rung a claim sits on — geometric, linearly-translatable, causal-within-model, descriptive, illustrative, or confirmatory — stated for every finding so that a confident-looking chart cannot be read as stronger evidence than its method supports. Where it appears: "How to read this report", and the caveat under every finding.
Evidence ladder
The six rungs a cross-model concept claim climbs, from weakest to strongest: same forecast effect, same driving inputs, reproducible across an independent SAE seed, other models' own dictionaries select the same inputs, the same causal effect measured on the same inputs, and confirmed on a sealed private corpus — a concept's verdict names the highest rung it actually reaches, and a rung nothing in this run measures renders 'not measured', never a failed rung. Where it appears: Model comparison — the verdict table; produced by `report/derived.py::concept_verdicts`.
Family and archetype
Two levels of benchmark grouping: the *family* is which generator produced a series (`parametric`, `random_parametric`, `mixture`, …) and the *archetype* is the structural recipe drawn within it (`seasonal_dominant`, `intermittent_bursts`, …); per-family statistics are the unit multiple-comparison correction is applied across. Where it appears: Behavioral profile, Representational geometry's per-family CKA, Activation clusters.
Far horizon
Shape of the late part of the forecast -- its furthest-out steps -- a higher value changes the long-range forecast's shape by a larger amount. Where it appears: Sparse features (SAE) -- the causal channel battery's evidence columns, and every channel name rendered from it.
Flatness
How close the forecast is to a constant line -- a higher value makes the forecast closer to a flat, constant line. Where it appears: Sparse features (SAE) -- the causal channel battery's evidence columns, and every channel name rendered from it.
Frequency balance
Centre of mass of the forecast's frequency spectrum -- low means the forecast is dominated by slow, smooth movement, high means by fast wiggles -- a higher value shifts the forecast toward higher-frequency, choppier movement. Where it appears: Sparse features (SAE) -- the causal channel battery's evidence columns, and every channel name rendered from it.
Ground-truth feature alignment
The correlation between a learned sparse feature's activation and a known generator parameter (a seasonal period, a trend order, an anomaly flag), which is this repo's substitute for the subjective max-activating-example judgment usual in SAE work; because each feature is matched to its *best* of many candidate fields, it is read against a label-permutation null. Where it appears: Sparse features (SAE).
Holm correction
The multiple-comparison adjustment applied across families so that testing several groups at once does not manufacture a significant result; a claimed strength needs both a corrected p below alpha and a confidence interval excluding zero. Where it appears: Behavioral profile; Private benchmark confirmation.
Input-feature baseline
A deliberately simple probe (raw window values, FFT magnitudes, summary statistics) predicting the same targets the stitching map does, whose whole job is to absorb the part of the agreement that follows from shared input rather than shared learned structure. Where it appears: Stitching probes; the quantity every reported gain is measured against.
Leakage (instance-level vs. distributional)
Two different failures a benchmark can have: instance-level leakage is the exact series having been seen in a model's training data, which the leakage gate audits directly against real reference series; distributional leakage is only *that kind* of data having been seen, which is carried by construction for every `real_derived`-tier sample and cannot be audited by this or any other check. Where it appears: The corpus card's leakage-gate figure and trust ladder.
Level
Mean value of the forecast -- its overall height -- a higher value raises the whole forecast. Where it appears: Sparse features (SAE) -- the causal channel battery's evidence columns, and every channel name rendered from it.
Linear CKA
A 0–1 similarity between two models' representations of the same series at a chosen layer pair, computed on the shared window axis and bootstrapped with the series as the resampling unit; it is correlational, and both models seeing the same input inflates it on its own. Where it appears: Representational geometry (the layer-pair heatmap and its depth curve).
MASE
Mean absolute error divided by the error of a naive same-scale baseline on the same series, so that 1.0 means "no better than naive" and series of wildly different amplitudes can be averaged together; series whose scale denominator is too small to be reliable are excluded and counted, not silently kept. Where it appears: Behavioral profile (the primary forecast-quality metric), and every ΔMASE elsewhere.
Mean ablation (head / MLP)
Replacing one attention head's or MLP's output with its average over the batch and measuring the forecast damage, which ranks components by how load-bearing they are without needing to know what they compute. Where it appears: Attention analysis' head and MLP ΔMASE rankings.
Minimal sufficient set
The smallest set of a model's own attention heads found by a greedy search whose patching restores most of a corruption's damage — sufficient because patching it works, but never proven the unique or provably smallest such set, since a greedy search only ever finds *a* small set, not *the* smallest. Where it appears: The seasonality circuit.
Near horizon
Shape of the first part of the forecast -- the steps just after the context ends -- a higher value changes the near-term forecast's shape by a larger amount. Where it appears: Sparse features (SAE) -- the causal channel battery's evidence columns, and every channel name rendered from it.
Near-collision fraction
In the catch22 feature space — never on UMAP coordinates — the fraction of series whose nearest neighbor sits closer than a fixed threshold; a distinct diversity signal from the shape-matching redundancy fraction, since the two are computed on different representations and never merged until the report. Where it appears: The corpus card's diversity figure.
Necessity
Whether ablating a candidate head set on an otherwise-clean forecast damages it toward the fully-corrupted level — the complement of sufficiency, and required alongside it because either alone is a weaker claim than both together. Where it appears: The seasonality circuit.
Noise floor
How much a model's own metric moves between two identical repeat runs (nonzero for a sampled decoder, zero for a deterministic one), measured so that a delta can be reported as a multiple of it rather than against an implied zero — a ΔMASE under about 2× its own floor is not interpretable. Where it appears: The fairness card's determinism row; every ΔMASE in ablation, patching and SAE sections.
Path patching
Decomposing one head's total causal effect into a direct part (measured with every other head in the found set frozen at its clean value) plus a part routed through each other head individually, then checking whether the parts sum back to the total — a check that can fail even for a correctly-implemented decomposition, if the heads genuinely interact nonlinearly rather than contributing independent, additive paths. Where it appears: The seasonality circuit.
Periodicity head
An attention head that puts more mass than a uniform-baseline share at multiples of a series' dominant seasonal lag — the time-series analogue of an induction head, identified by lag profile rather than by what it is named. Where it appears: Attention analysis' head taxonomy.
Probe decodability
The held-out accuracy of a simple linear classifier reading a property (family, seasonality, trend) straight off a layer's activations, which establishes that the information is linearly *present* there and nothing more — never that the model uses it. Where it appears: Model internals; the SAE section's ground-truth alignment.
Provenance-driven
Said of a concept's part when what best explains which series it fires on is a fact about how the benchmark was BUILT (which tier or generator produced a series) rather than a structural property of the time series itself, so 'fires on sequential_par series' is read as a property of the corpus, not of time series in general. Where it appears: Model comparison — every input-profile table; produced by `sae/concept_profiles.py`.
Random-direction null
The same causal channel battery re-run on directions drawn at random from the same activation space instead of a trained SAE feature's decoder direction, so a channel response is only quotable once it is compared against how large a response chance alone produces, not against zero. Where it appears: SAE causal channel testing (Component A).
Reach
Whether a patched-in intervention (a feature direction, a layer's activations) actually changes anything the forecast head reads, checked before any effect is trusted — confirmed by two controls: patching a layer into itself must move the forecast by exactly 0.0, and patching an earlier layer into a later read must move it by something nonzero; a clean, flat, entirely plausible-looking curve can still mean the intervention never reached anywhere the model reads. Where it appears: SAE causal channel testing (Component A).
Redundancy fraction
The share of all pairwise series comparisons — by cross-correlation or banded DTW shape matching, after z-normalization — that fall below a near-duplicate distance threshold; a high value can be a true finding rather than a defect, e.g. many pure-seasonal series sharing one period and differing only in noise. Where it appears: The corpus card's diversity figure, read alongside effective dimensionality.
Registered hypothesis
A dev-corpus finding written down *before* the private corpus is opened; only registered hypotheses can be confirmed, and a finding discovered afterwards cannot be rescued by the confirmation stage no matter how strong it looks. Where it appears: Private benchmark confirmation; the "[exploratory]" prefix marks everything that is not one.
Relative depth
A layer's position rescaled to 0–1 so models with different layer counts share one axis — a convention that makes the comparison drawable, not a claim that the same fraction is the same computational stage in two architectures. Where it appears: Model internals, Forecast lens, Representational geometry, Perturbation — any curve plotted against depth.
Response fingerprint
A feature's or role's vector of null-normalized responses across the causal channel battery, used as the primary signal for matching one model's roles against another's by cosine similarity — a match rate computed this way is never rendered without its own untrained-twin floor beside it, because two architecturally similar but never-jointly-trained models can already look substantially 'matched' by chance. Where it appears: Cross-model role correspondence table (Component C).
Role
A cluster of a single model's SAE features that share a similar structural signature and causal response profile, named from its dominant response channel and its best-matching ground-truth field — a description of that model's own feature space, not a claim that any other model has an equivalent role until cross-model matching (see response fingerprint) has actually checked. Where it appears: Superseded by concept clustering (2026-09-11) -- see the concept cards and concept universality table instead; the roles table/role cards this pointer named are no longer rendered.
RSA (representational similarity analysis)
The rank-correlation companion to CKA: instead of comparing representations directly it compares each model's *matrix of series-to-series distances*, so it survives any monotone rescaling CKA would not. Where it appears: Representational geometry, reported alongside CKA.
Sealed corpus (public dev / private test)
A corpus written with per-sample hashes and a manifest, split into a public dev half used for all exploration and a private test half drawn from a disjoint seed range that is opened exactly once; the private half is a consumable, and a peeked one is replaced rather than reused. Where it appears: Private benchmark confirmation; the run header's dataset line.
Seasonal strength
Energy in the forecast concentrated at the series' own dominant repeating rhythm -- a higher value makes the forecast more strongly periodic. Where it appears: Sparse features (SAE) -- the causal channel battery's evidence columns, and every channel name rendered from it.
Sharing class
Whether an atlas concept's models also agree on the INPUTS that drive it, not just its effect: 'shared' when every model in it is connected through agreeing cross-model input pairs, 'partially shared' when only some pairs agree, 'convergent' when none do, and 'single-model' when only one model holds the concept at all. Where it appears: Model comparison — the sharing map and every concept card; produced by `sae/concept_profiles.py`.
Skip lens and tuned lens
Two ways to ask what forecast a middle layer already implies: the skip lens patches that layer's states in as the final block's output and lets the model's own head decode them, while the tuned lens fits a held-out ridge probe instead, correcting the skip lens's miscalibration at early layers. Where it appears: Forecast lens.
sMAPE and pinball loss
The two companion forecast metrics: sMAPE is a symmetric percentage error (scale-free but unstable near zero), and pinball loss scores the predicted *quantiles* rather than the point forecast, which is the only one of the three sensitive to whether a model's uncertainty is honest. Where it appears: Behavioral profile's per-family metric table.
Spread
How much the forecast varies within itself (its standard deviation) -- a higher value makes the forecast swing more from step to step. Where it appears: Sparse features (SAE) -- the causal channel battery's evidence columns, and every channel name rendered from it.
Stitching gain
The extra held-out R² a ridge map from one model's layer to the other's achieves *above* a hand-crafted input-feature probe on the same targets — the gain, never the raw R², is the evidence, because the models read the same input and a raw R² is therefore partly trivial. Where it appears: Stitching probes (both directions, A→B and B→A, reported separately).
Sufficiency
Whether patching a candidate head set's clean values into an otherwise-corrupted forecast restores it toward the clean level — the complement of necessity. Where it appears: The seasonality circuit.
The series as the resampling unit
Every bootstrap and every train/test split in this repo resamples whole series, never windows, because windows within one series are strongly dependent and every model scores the same series — splitting on windows would make every interval far too narrow. Where it appears: Every confidence interval and p-value in the report.
Tier (`synthetic` / `real_derived`)
Whether a benchmark series touched real data at all: `synthetic` series are generated from scratch and carry exact ground truth with no distributional leakage, while `real_derived` series are built from real corpora and inherit their distribution even though every instance still passes the leakage audit. Where it appears: The corpus this run reads; recorded per sample in the sealed manifest.
Token width
How many timesteps one of a model's tokens covers (about 32 for a patch tokenizer, 1 for a per-timestep quantizer), which sets the finest lag that model's attention can express and is multiplied into every plotted lag axis so a lag of 300 means the same 300 timesteps for every model. Where it appears: Attention analysis' lag axes; the fairness card's finest-resolvable-lag row.
Transfer
Whether another model separates the same series a concept fires hardest on, scored as the best of that model's features against random series sets drawn with the same mix of series kinds, and called reciprocal only when that feature's own top series are in turn separated by the original concept. Where it appears: The SAE section's concept universality table; produced by the concepts stage.
Trend
Slope of the forecast -- whether it rises or falls as it continues forward -- a higher value pushes the forecast to slope upward more steeply. Where it appears: Sparse features (SAE) -- the causal channel battery's evidence columns, and every channel name rendered from it.
Untrained-twin floor
The same measurement run against a randomly-initialized copy of a model's own architecture, giving the level any two networks of that shape reach before either has learned anything; a similarity that fails to clear it is architecture, not learning. Where it appears: Null-baseline comparisons for CKA and stitching gain.
Window
A pooled fixed-length interval of real time (32 timesteps by default, `alignment.window`) that every model's own tokens are mapped onto, so an architecture reading one timestep per token and one reading thirty-two become comparable at all; it is a unit of time, never a unit of any one model's tokenization. Where it appears: Every cross-model section — the shared [series, window, dim] axis all of them operate on.
Linear CKA and RSA (L1 representational geometry) Source: tsfm_lens/analysis/l1_geometry.py's own module docstring
L1 — representational geometry.
Linear CKA between every selected layer pair, computed in feature space on
the accelerator: with column-centered X and Y, CKA = ||Y'X||_F^2 /
(||X'X||_F ||Y'Y||_F), which equals Gram-based linear CKA exactly while
never materializing an N x N matrix. Global similarity uses window-level
rows for statistical power; family-conditioned similarity uses series-level
embeddings so "on which data regimes do these models agree" gets a direct
answer. RSA (Spearman-correlated representational dissimilarity matrices)
is an optional second opinion that is invariant to linear transforms in a
different way than CKA.
CKA is correlational: it evidences shared geometry, not shared mechanism.
L2 and L3 exist to push past that limitation.
Ridge stitching (L2 cross-model probes) Source: tsfm_lens/analysis/l2_stitching.py's own module docstring
L2 — cross-model stitching probes.
For strided layer pairs and both directions, a closed-form ridge regression
maps one model's window states onto the other's, evaluated as R^2 on a
held-out series split. The critical control: both models saw the same
input, so predictability alone can reflect shared input structure rather
than shared computation. An input-feature baseline (raw window values, FFT
magnitudes, summary statistics) predicts the same targets, and only the
gain above that baseline is reported as evidence of shared learned
structure. Splits are by series, never by window, to prevent leakage
between highly correlated windows of one series.
Forecast lens -- skip lens and tuned ridge lens Source: tsfm_lens/analysis/lens.py's own module docstring
Forecast lens — the logit-lens analog for forecasting models.
Answers "where in depth does each model's forecast crystallize?", the
missing bridge between the behavioral level (L0) and every
representation-level analysis. Two complementary lenses per layer:
1. Skip lens: layer-l token states are patched in as the final block's
output and the model's own head produces a forecast from them -- "head"
meaning whatever that architecture actually uses, which for an
encoder-decoder is its entire decoder. This is the direct logit-lens translation — it uses
the model's real output pathway and needs no access to head internals,
only the existing `token_patch` primitive. Like classic logit lens it can
be miscalibrated at early layers, which is exactly what the second lens
corrects for.
2. Tuned lens: a held-out ridge probe from each layer's stored window states
to (a) the model's own final forecast and (b) the true targets. High R^2
against the final forecast at layer l means the forecast is already
linearly readable there even if the raw head cannot decode it.
Every model in a run gets both lenses, so a claim of the form "this one
front-loads then compresses, that one accumulates" becomes a testable
statement about where forecast quality appears in depth, not just where
family information does. The shapes are named from the measured curves; no
architecture is described here in advance, since this docstring is rendered
verbatim into the report's methods appendix and would otherwise assert
something about models the run may not contain. The skip
lens inherits L3 patching's constraints: one batch per call (contexts capped
at the model batch size) and a forecasting path that calls the backbone once
per prediction.
MASE / sMAPE / pinball (L0 behavioral profiling) Source: tsfm_lens/analysis/l0_behavioral.py's own module docstring
L0 — behavioral profiling.
Answers the purely behavioral questions ("is one model better on
high-frequency data?") before any internals are touched, and generates the
family-level hypotheses the mechanistic levels then try to explain. Metrics
are computed per series and aggregated per family: MASE against the naive
one-step scale of each context, sMAPE, and mean pinball loss over the
configured quantiles.
Bootstrap designs -- paired, cluster, percentile Source: tsfm_lens/analysis/stats.py's own module docstring
Shared statistical machinery for every stage.
The resampling unit is always the series. Windows within a series are
strongly dependent, both models score the same series, and corruptions are
applied to the same series — so cluster (series-level) bootstrap and paired
designs are the honest defaults throughout. Family-level comparisons are
Holm-corrected because a benchmark with a dozen families is a dozen
hypotheses. Bootstrap p-values are approximate by construction and floored
at 1/n_boot; they are decision aids, not precision instruments.
Adjusted mutual information (L4 activation clustering) Source: tsfm_lens/analysis/clustering.py's own module docstring
Activation clustering with approximate "what does this activate for" labels.
Series-level embeddings at a chosen layer (by default, each model's side of
the L1 peak-CKA pair) are clustered, and each cluster is labeled two ways:
by benchmark ground truth (majority family and purity) and by interpretable
signal statistics of its member series (dominant frequency, trend, noise
level, spectral entropy, autocorrelation) expressed as z-scores against the
corpus. The cross-model question "do these models carve the data the same
way" is answered by adjusted mutual information between the two partitions
plus a contingency matrix, which is robust to arbitrary cluster relabeling.
SAE fidelity and dead-feature rate
Reconstruction fidelity is fraction-of-variance-explained (`sae/eval.py::reconstruction_fidelity`) computed over held-out window rows at the store's own train/eval split; dead-feature rate is the fraction of dictionary atoms with zero activation above a threshold over the same rows. Neither carries a bootstrap CI in the current implementation -- both are point estimates over one already-large row sample, not a series-resampled statistic, so read them as descriptive rather than as having a stated uncertainty. The known, already-measured failure mode is severe: every SAE number recorded in this repo before the Stage 0 gate was measured on a dictionary **94.5-97.3% dead**, which the same subsystem later proved is not intrinsic -- an AuxK auxiliary loss the production `sae` stage still leaves off by default reaches 3.2% dead on the same checkpoints. A second, orthogonal failure mode: `forecast_preservation`'s original window-pooled broadcast approximation is exact for a patch-tokenizing model (TimesFM) but badly lossy for a per-timestep one (Chronos-T5), producing a ΔMASE of +3.9 that a token-granularity re-measurement of the identical trained SAE resolves to +0.25 -- **the invalidating assumption is that every captured model tokenizes at the same granularity as the pooling window**, which is false by construction for any model whose token width differs from `alignment.window`.
relative_decoder_norm (crosscoder shared/specific split)
`||dec_a[f]|| / (||dec_a[f]|| + ||dec_b[f]||)` per feature, on a **jointly** decoder-normalized crosscoder dictionary -- 0.5 reads as shared, 0 or 1 as source-specific. It is not resampled or bootstrapped in the current implementation, and its point value is provably sensitive to something orthogonal to the shared/specific question it is meant to answer: on a mostly-**dead** dictionary, dead atoms sit near a symmetric norm split by construction, which inflated the shared-fraction reading to roughly 98% before the Stage 0 gate produced a mostly-alive dictionary to measure it on properly. Even on that alive dictionary, a same-shape untrained-twin control read as *more* shared with itself than the real cross-model pair, and that control's own value proved **seed-fragile** (0.696-0.856 across 3 seeds) -- so **the invalidating assumption is that a single point estimate, or even a single-seed floor, is informative on its own**; this repo's own recorded practice is to never quote it without both an untrained-twin floor computed at multiple seeds and the dictionary's own alive-fraction stated alongside it.
Specification curve (analysis-knob robustness) Source: tsfm_lens/analysis/spec_curve.py's own module docstring
Specification curve over the analysis knobs.
Every analysis knob in this repo is individually defended, and the defences
are good -- but none is swept, and this repo's own history is evidence that
matters: the layer-screen row records selector verdicts *flipping* when the
gold ranking changed, and the L1/L2
untrained-weights null work records a verdict flipping depending on which
layer of the null run it was read against. Knob sensitivity is a demonstrated
property of this pipeline, not a hypothetical this module has to argue for.
This is **not a pipeline stage** -- a standalone reducer over one already-
completed run directory, exactly the shape of `report/meta_report.py` and
`analysis/error_fingerprint.py`. It re-derives the corpus deterministically
from the run's own `config_resolved.yaml` (contexts are not persisted in the
activation store) and reads everything else -- predictions, lens curves,
layer-screen scores, attention head tables, per-block FLOPs -- from artifacts
already on disk. **No model is loaded and no forward pass is run.**
Scope, per A2.1: only knobs that need no re-extraction. Six are swept:
alignment.depth_axis index | block | compute | functional
attention.resolution_mode native | matched
l0.scale mean_abs_diff | seasonal_naive
stats.n_boot configured value | 4x
corpus_subsample_seed 3 seeds, 80% stratified draw
layer_screen.method work_bend | coverage | factor_emergence
Four claim families, one per group of `report/findings.json` claim_ids that
actually depends on one of the six knobs above -- everything else in a run's
findings is recorded as excluded, with the specific reason, rather than
silently left out of the denominator (A2's own stated failure mode: "Silently
sweeping a subset and reporting '11 of 11 robust' is the failure this bullet
exists to prevent"):
l0_strength_set which families a model is significantly stronger on
(matches the `l0.*` "is significantly stronger on/
than" findings). Applicable: l0.scale, stats.n_boot,
corpus_subsample_seed.
lens_crystallization whether a model's forecast crystallizes within
tolerance at all (matches `lens.*`). Applicable:
alignment.depth_axis only -- the VALUE of a
crystallization depth is axis-dependent by
definition (the same layer gets a different
coordinate under `index` vs `block`), so the only
fair thing to compare across axes is the qualitative
state (crystallizes / never crystallizes within the
configured tolerance), not the raw number.
layer_screen_selection which layers a selector method picks (matches
`layer_screen.*`). Applicable: layer_screen.method
only. Recomputed against the run's own MAIN store
(already on disk), not a fresh stride-1 screening
extraction -- the premise that this
knob is "free" turned out to be wrong as literally
stated (the dedicated screening store is deleted
after selection by default, `layer_screen.keep_store:
false`); re-running `coverage`/`factor_emergence`
the way the pipeline stage does would need a second
extraction pass, which A2.1 rules out of scope. What
IS free is re-scoring the SAME three selectors
against the main store's already-captured (possibly
strided) layers -- exactly what `run_layer_screen`
itself falls back to when `require_full_capture:
false`. Every cell here is therefore marked
`fair_to_all_layers: false`, an honest, stated
deviation from the production selection's own
fairness guarantee -- see this
module's own Findings for the corrected premise.
attention_periodicity which head is the strongest periodicity head
(matches `attention.*`). Applicable:
attention.resolution_mode only. Both resolutions are
*always* computed and persisted in
`attention/meta.json`, so this
one needs no recomputation at all -- just reading
two keys that are already on disk.
A2.3: never render the best cell, only the fraction. A claim's `robust_frac`
is computed over its *applicable* cells only -- a `not_applicable` cell is
excluded from the denominator, never counted as robust (A2's own failure-mode
bullet). `evidence_class` for every claim here is `descriptive`: this module
answers "how much does the reported conclusion depend on an analysis choice",
never "is this difference real" -- reading a specification curve as a
significance test is the specific misuse A2 warns against.
An alignment check that measured its own bug, not the model
Looked like: Chronos-T5-Small's impulse-alignment check reported a minimum diagonal-hit fraction of 0.06 -- barely above the 1-in-16 chance floor -- with a non-monotonic per-layer pattern (0.50, 0.06, 0.88, 0.62, 0.44, 0.38). Read at face value this says exactly what a failed alignment check is meant to mean: the declared map is wrong, and no cross-model number built on it should be trusted.
Actually was: The probe added a fixed absolute impulse (+8.0, 8x the probe signal's own amplitude) to test which pooled window's activations changed most. Chronos's tokenizer derives its quantization bin edges from the *whole sequence's* statistics, so an impulse that large shifted those edges and re-quantized 472 of 513 tokens for every impulse position tested -- the test was measuring the tokenizer's sensitivity to outlier magnitude, not the correctness of the declared spans. Scaling the perturbation relative to the probe signal's own amplitude (0.25x, later calibrated per checkpoint/context-length) restored a perfect 1.00 diagonal-hit fraction at every layer.
Lesson: A fixed-magnitude test probe tuned against one adapter can silently fail on a structurally different one -- scale a perturbation relative to the signal it perturbs, not to an absolute constant, whenever the thing being probed can itself rescale based on input statistics.
Source:
A "flat" causal-patching curve that was an averaging artifact
Looked like: TimesFM's whole-layer-averaged activation-patching restoration curve was essentially flat across depth -- read at face value, this says TimesFM carries corruption damage everywhere and nowhere in particular: no localized causal structure to report.
Actually was: Re-measuring the identical checkpoint with PER-WINDOW patching (a layer x window restoration heatmap, rather than one number per layer averaged over every window) recovered real, depth-intensifying causal structure the coarser whole-layer average had been hiding: effects that are real and spatially localized can cancel out, in aggregate, to look like no effect at all once averaged over position.
Lesson: An aggregate statistic (a mean taken over positions, series, or windows) can manufacture "no effect" out of real, spatially-localized effects that point in different directions once pooled -- when a causal or behavioral curve looks flat, check whether the flatness survives a finer-grained slice before concluding the effect is genuinely absent.
Source: intro reconciliation note (2026-08-03, third session); Findings
A 98%-dead SAE dictionary that still had a plausible fidelity number
Looked like: Every SAE number recorded in this repo before the Stage 0 gate was measured on a dictionary 94.5-97.3% dead -- and yet it trained without error, had a reconstruction fidelity around 0.84-0.86, and had features a reader could open and look at, none of which by itself signals a problem.
Actually was: The vast majority of the dictionary's capacity was never used: any feature-level claim built on top (ground-truth alignment, shared-vs-specific splits) was drawn from a small, unrepresentative surviving fraction of atoms. A dedicated feasibility gate with an AuxK dead-atom auxiliary loss -- a knob that already existed in the codebase but was left off by default -- showed the same checkpoints reach 3.2% dead once turned on.
Lesson: A metric that looks reasonable in isolation (fidelity ~0.85) can coexist with a dictionary, model, or feature set that is almost entirely inert -- check the fraction of capacity actually in use directly, rather than inferring it from a downstream metric that can look fine while measuring only the surviving remainder.
Source:; Stage 0 Findings
The same depth-agreement figure, two different stories, from the axis alone
Looked like: Plotting TimesFM's and Chronos-T5-Base's depth-resolved curves (crystallization, CKA, fingerprint agreement) against the legacy `index/(n_captured-1)` relative-depth axis makes both curves span the same visual 0-to-1 range, inviting a reading like "these models agree most in the second half of depth."
Actually was: Recomputed on the `block` axis (counting every architectural block, including the ones outside each model's captured layer stride/regex), Chronos-T5-Base's captured surface tops out at relative depth 0.478 -- its encoder is roughly half the model, and its entire decoder is uncaptured. "Agreement in the second half of depth" on the legacy axis is actually "in the middle of Chronos's depth, near the very end of TimesFM's" once the axis is corrected -- the two curves were never sharing the same kind of coordinate.
Lesson: A shared 0-to-1 depth axis across two architecturally different models is a convention chosen for the plot, not a fact about either model -- and the convention itself can move where an agreement or disagreement in depth appears to be located.
Source: item 4; Findings
A statistically-real ΔMASE that was quieter than the model's own noise
Looked like: L0's `mixture` family gap between TimesFM and Chronos-T5-Base measured 0.010 MASE -- a real, Holm-corrected number, computed correctly, that would read as "TimesFM wins this family" if quoted on its own.
Actually was: Chronos-T5-Base's own repeat-run noise floor -- how much its OWN MASE varies run to run with nothing about the model or data changed -- is +-0.160, roughly sixteen times larger than the gap being quoted. The 0.010 gap is not a small real difference; it is not a measurement at all, since it sits far inside the model's own measurement noise.
Lesson: A small delta is not evidence of a small real difference -- it can be no measurement whatsoever, and the only way to tell the two apart is to have measured the model's own repeat-run noise floor first and compared the delta against it, not against zero.
Source: Findings; docs/worked_example.md
| Section | Status | Detail |
|---|---|---|
| At a glance — Model comparison — at a glance | rendered | |
| Fairness — The fairness card | rendered | |
| Corpus — The corpus card | rendered | |
| L0 — Behavioral profile | rendered | |
| Cost — Cost and capacity | rendered | |
| Frontend — Input front-end diagnostics | rendered | |
| Screen — Layer screening | rendered | |
| Profile — Model internals | rendered | |
| Lens — Forecast lens | rendered | |
| L1 — Representational geometry | rendered | |
| L2 — Stitching probes | rendered | |
| L4 — Activation clusters | rendered | |
| Similarity — Pair similarity across metrics | rendered | |
| L3 — Perturbation & patching | rendered | |
| Attention — Attention structure & head causality | rendered | |
| Circuit — The seasonality circuit | skipped | builder returned no content |
| SAE — Sparse feature dictionary | rendered | |
| Concepts — Cross-model concepts | rendered | |
| Exemplars — Exemplar case studies | rendered | |
| Spec curve — Analysis-knob robustness | skipped | builder returned no content |
| Confirm — Private benchmark confirmation | rendered |
family_key = auto → 5 family/families (block_bootstrap: 70, mixture: 290, parametric: 130, random_parametric: 425, sequential_par: 50).
run:
name: concept_atlas_v2
out_dir: runs
device: [redacted]
dtype: bfloat16
seed: 0
keep_models_loaded: false
data:
source: sealed
path:../../benchmark_large_v2/public_dev
context_len: 512
horizon: 64
max_series: null
family_key: auto
smoke_series_per_family: 20
models:
- name: TimesFM
adapter: timesfm
checkpoint: google/timesfm-2.5-200m-pytorch
layer_regex: ''
batch_size: 32
capture_layer_stride: 2
kwargs: {}
random_init: false
- name: Chronos-2
adapter: chronos2
checkpoint: amazon/chronos-2
layer_regex: ''
batch_size: 24
capture_layer_stride: 1
kwargs: {}
random_init: false
- name: Sundial
adapter: sundial
checkpoint: thuml/sundial-base-128m
layer_regex: ''
batch_size: 16
capture_layer_stride: 1
kwargs: {}
random_init: false
- name: Chronos-Bolt
adapter: chronos_bolt
checkpoint: amazon/chronos-bolt-small
layer_regex: ''
batch_size: 32
capture_layer_stride: 1
kwargs: {}
random_init: false
alignment:
window: 32
sanity_check: true
min_diagonal_frac: 0.5
on_failure: warn
calibrate_amplitude: true
depth_axis: block
extraction:
enabled: true
store_dtype: float16
l0:
enabled: true
quantiles:
- 0.1
- 0.5
- 0.9
scale: mean_abs_diff
min_scale_frac: 0.05
noise_floor_repeats: 3
noise_floor_series: 16
calibration: true
horizon_resolved: true
l1:
enabled: true
layer_stride: 1
max_rows: 20000
family_conditioned: true
min_family_series: 15
rsa: true
rsa_max_series: 800
l2:
enabled: true
layer_stride: 1
lambdas:
- 0.001
- 0.01
- 0.1
- 1.0
val_frac: 0.25
max_rows: 40000
input_baseline: true
l3:
enabled: true
corruptions:
noise:
snr_db: 0.0
detrend: {}
deseasonalize:
top_k: 2
frequency_shift:
factor: 2.0
level_shift:
position_frac: 0.6
scale: 3.0
spike:
count: 8
scale: 10.0
smooth:
kernel: 9
warp:
strength: 0.15
dropout:
frac: 0.15
n_blocks: 3
max_series: 800
patching:
enabled: true
layer_stride: 2
corruptions:
- deseasonalize
- noise
- level_shift
- spike
- warp
- dropout
max_series: 16
num_samples: 8
per_window: true
window_stride: 1
horizon_resolved: true
calibrate: none
lens:
enabled: true
layer_stride: 1
max_series: 16
tuned: true
tuned_max_series: 800
val_frac: 0.25
lambdas:
- 0.001
- 0.01
- 0.1
- 1.0
crystallization_tol: 0.1
horizon_resolved: true
attention:
enabled: true
patterns: true
max_series: 400
batch_series: 16
max_lag_tokens: 128
ablation: true
ablation_max_series: 16
head_layer_stride: 1
top_k: 5
resolution_mode: matched
exemplars:
enabled: true
per_family: 3
max_families: 5
stats:
enabled: true
n_boot: 2000
n_boot_heavy: 200
ci: 0.95
alpha: 0.05
min_series: 8
internals:
enabled: true
layer_stride: 1
max_rows: 40000
probe_pca_dim: 50
probe_permutation_repeats: 5
probe_max_iter: 2000
confirm:
enabled: true
source: sealed
path:../../benchmark_large_v2/private_test
max_series: 800
require_seal: true
alpha: 0.05
concept_transfer_n_null: 2000
clustering:
enabled: true
layer: auto
k: auto
pca_dim: 50
max_series: 800
use_umap: true
layer_screen:
enabled: true
method: work_bend
budget_frac: 0.25
min_budget: 2
max_series: 100000
use_curvature: true
min_gap: 1
seed: null
stride: 1
require_full_capture: true
keep_store: false
budget:
enabled: true
batch: 8
repeats: 5
warmup: 2
measure_predict: true
predict_repeats: 3
frontend:
enabled: true
max_series: 64
quantization_resolution: true
scale_equivariance: true
scale_factors:
- 1000.0
- 0.001
context_truncation: true
context_truncation_n_points: 5
context_truncation_min_frac: 0.125
nan_handling: true
nan_frac: 0.05
nan_series: 8
sae:
enabled: true
checkpoints: {}
targets: []
dict_size_mult: 8
k: 32
lr: 0.001
epochs: 60
batch_size: 4096
resample_dead_every_epochs: 5
aux_k: 64
aux_coef: 0.03125
aux_dead_steps: 20
min_train_steps: 720
aux_dead_steps_frac: 0.028
dict_size_policy: search
dict_size_ladder:
- 192
- 384
- 768
- 1536
- 3072
- 6144
max_dead_rate: 0.3
min_fidelity: 0.5
dict_size_search_seeds: 2
dict_size_search_margin: 0.03
n_seeds: 3
holdout_frac: 0.2
min_fidelity_gate: 0.85
max_abs_delta_mase: 0.25
layer_substitution_attempts: 2
forecast_preservation_max_series: 16
ground_truth_max_series: 2000
ground_truth_permutation_repeats: 3
ground_truth_permutation_max_features: 2000
real_data_enabled: true
real_data_source: Monash-University/monash_tsf
real_data_n_windows: 4000
real_data_pool_limit: 500
feature_ablation_enabled: false
feature_ablation_top_k: 8
feature_ablation_max_series: 64
feature_steering_enabled: false
feature_steering_top_k: 8
feature_steering_max_series: 64
feature_steering_strength_sigma: 2.0
persist_features: true
role_k: auto
role_min_silhouette: 0.1
role_matching_untrained_twin_runs: {}
role_matching_cosine_threshold: 0.5
role_matching_depth_tolerance: 0.15
describe_from_exemplars: true
concepts_enabled: true
concept_causal_only: true
concept_k: auto
concept_min_silhouette: 0.1
concept_min_members: 3
concept_misfit_cosine_gap: 0.3
concept_cards_max: 24
transfer_enabled: true
transfer_top_k: 20
transfer_n_null: 200
transfer_seed: 0
interest_weights:
- 0.5
- 0.3
- 0.2
report:
enabled: true
title: "Concept Atlas \u2014 TimesFM 2.5, Chronos-2, Sundial, Chronos-Bolt"
verbose: true
verbose_series: 2
allow_partial: false
corpus:
enabled: true
validation_report:../../validation_large/validation_report.json
concepts:
enabled: true
top_k_series: 8
n_null_directions: 16
max_series: 64
keep_forecasts: 3
n_features_per_rule: 12
describe: true
describe_top_features: 8
atlas_enabled: true
atlas_min_cosine: 0.9
atlas_min_members: 3
atlas_n_null: 200
atlas_family_min_members: 5
atlas_family_assign_min: 0.5
atlas_family_sil_tol: 0.02
n_sae_seeds: 3
transfer_p_method: exact
transfer_fdr_q: 0.05
transfer_max_redraw: 5000
profiles_enabled: true
profile_n_perm: 1000
min_relative_reach: 0.001
level_share_threshold: 0.9
shared_input_enabled: true
shared_input_n_null: 50
cf_enabled: false
cf_max_series: 64
cf_doses:
- 0.0
- 0.5
- 1.0
- 1.5
- 2.0
cf_n_null: 2000
cf_encode_min_spearman: 0.98
n_registered: 20
transfer_claim_mode: search