---
license: apache-2.0
library_name: transformers
pipeline_tag: feature-extraction
tags:
- surprise
- regime-change
- model-monitoring
- calibrated-uncertainty
- abstention
- time-series
- multi-domain
---
# Zeno Divergent
**A learned representation of *model-relative surprise* — the probability that
an observable departure happens next, calibrated, with an explicit option to
abstain.**
[](https://huggingface.co/mbarbosa1/zeno-divergent-v1/tree/v0.9.0)
[](https://huggingface.co/mbarbosa1/zeno-divergent-v1/tree/v0.9.0)
[](#architecture)
[](#results)
[](#the-promotion-gate)
[](https://zenodivergent.dev)
---
## What is published here
| revision | model | corpus | promoted domains | loader |
| --- | --- | --- | --- | --- |
| **`main` / `v0.9.0`** | multi-domain, 1,877,849 params — **latest and recommended** | 8 real corpora + synthetic control | **climate, seismic** | explicit revision (safetensors + config) |
| `v0.7.0` | multi-domain, 1,874,220 params | 8 real corpora | hydrology, climate | explicit revision (safetensors + config) |
| `v0.6.0` | multi-domain, 1,874,220 params | 8 real corpora | hydrology, markets, climate — with named seismic/spaceweather regressions | explicit revision |
| `v0.5.0` | multi-domain, 1,677,870 params | 8 real corpora | seismic, hydrology, markets, spaceweather | explicit revision |
| `v0.3.1` | single-domain, 30,859 params | seismic only | seismic | `transformers`-native, `trust_remote_code=False` |
**v0.9.0 is the first release where promoted domains beat a frozen logistic
regression on the same features.** It adds focal rare-event training, per-entity
resampling, held-out affine/PAVA calibration, a declared abstention operating
point, availability-aware (`available_at`) leakage-safe splits, and a paired
promotion gate that refuses any domain that does not beat the reference
baseline with a bootstrap interval excluding zero.
Six of eight real domains did **not** clear that gate and ship as labelled
candidates. That is the gate working, not the release failing: the numbers are
published so they can be checked.
Revisions are immutable: nothing published is ever overwritten in place.
---
## Why this matters
Every deployed forecaster carries an invisible assumption: *tomorrow looks
enough like the data I was fitted on*. When that assumption dies, the model does
not raise its hand. Accuracy degrades, uncertainty stays flat, and the failure
is only discovered downstream.
The usual answers are partial:
| Approach | What it tells you | What it misses |
| --- | --- | --- |
| Predictive uncertainty (`σ`, ensembles) | how noisy *this* prediction is | stays low right up to a regime break |
| Drift / OOD detectors | the inputs moved | fires on harmless movement, silent on harmful stable-looking shifts |
| Change-point detection | something changed **already** | it is a post-mortem, not a lead time |
| **Zeno Divergent** | **the calibrated probability that an observable departure happens in the next window, with an option to abstain** | it is not a hazard forecast — see [limits](#limits) |
**The falsifiable claim this model exists to test:**
> A learned representation of model-relative surprise contains information about
> future regime change and model failure that is **not** captured by predictive
> uncertainty or rule baselines alone — and that representation is **shared
> across domains**.
The harness is built to *reject* that claim. v0.9.0 is the first release where
any domain survives the full test — climate and seismic. Everywhere else the
harness still says no, and the site says so.
---
## How it works
```
observations ──▶ schema contract ──▶ past-only features ──▶ per-domain adapter
│
▼
shared dilated causal trunk
│
▼
surprise state z^S
│
┌──────────────────────────────────────┼───────────────┐
▼ ▼ ▼
calibrated p_k(t+Δ) uncertainty σ_k abstain gate
```
1. **Declare a schema.** Categories, numeric channels, targets, horizon. The
schema is a contract, not a guess — it is hashed into the config.
2. **Build past-only features with availability timestamps.** Row `i` is a
function of observations `0..i` *as they were available at the time* —
leakage is re-derived from the raw stream, not asserted.
3. **Adapt, then share.** A small per-domain adapter maps each schema into one
**shared** dilated causal trunk. 1,351,209 of the 1,877,849 parameters (72%)
are shared across all domains — that sharing is the claim under test.
4. **Encode the surprise state `z^S`.** A representation of *how* expectation is
failing, common to every head.
5. **Predict observable departures.** One head per target: regime transitions,
cadence shifts, extreme events, compound stress.
6. **Calibrate, then gate.** Probabilities are fitted on a held-out calibration
split; low-evidence rows are marked `abstained` rather than scored.
### What comes back
| Field | How to read it |
| --- | --- |
| `probabilities` | calibrated probability of each observable transition inside the horizon |
| `uncertainty` | heteroscedastic spread — large means *poorly determined*, not *safe* |
| `abstained` | admission control. **"Not enough evidence", never "nothing to see"** |
| `surprise_index` | max over targets — a ranking, not a probability of harm |
| `latent` | `z^S` itself, for probing and transfer studies |
---
## Results
Held-out chronological test split with a horizon buffer, entity-level bootstrap
CIs, availability-aware leakage tests.
### v0.9.0 — latest and recommended
**Promoted (cleared the pre-declared gate: beat the frozen logistic baseline,
calibrated, selective-accuracy gain under abstention)**
| domain | corpus | entities | rows | target | AUROC (95% CI) | ECE | lift vs baseline |
| --- | --- | --- | --- | --- | --- | --- | --- |
| **Climate** | NOAA GHCN-Daily | 182 | 731,497 | `cold_extreme_ahead` | **0.890** [0.868, 0.909] | 0.002 | **+0.088** |
| | | | | `heat_extreme_ahead` | 0.855 | 0.022 | −0.008 |
| | | | | `compound_climate_stress` | 0.829 | 0.008 | +0.003 |
| | | | | `weather_regime_transition` | 0.824 | 0.008 | +0.007 |
| | | | | `anomaly_regime_shift` | 0.783 | 0.013 | −0.004 |
| **Seismic** | USGS FDSN + QuakePulse Earth | 397 | 116,768 | `significant_event_ahead` | **0.948** | 0.028 | +0.005 |
| | | | | `compound_seismic_stress` | 0.911 | 0.028 | +0.017 |
| | | | | `event_regime_transition` | 0.901 | 0.013 | +0.009 |
| | | | | `cadence_shift` | 0.710 | 0.088 | −0.015 |
**The honest headline:** only `cold_extreme_ahead` (+0.088) is a decisive win
over the frozen uncertainty baseline. The seismic heads post the strongest raw
AUROCs (0.90–0.95) and recovered the head that collapsed in v0.8.0, but their
lift over the baseline is small. Climate coverage is 79% with a selective-accuracy
gain under abstention; seismic coverage is 60% — the model abstains on two of
five situations rather than guess.
**Not promoted — published with the blocking reason, not hidden**
| domain | entities | best AUROC | why it did not promote |
| --- | --- | --- | --- |
| Hydrology (USGS Water) | 320 | 0.802 | good discrimination, **negative lift** vs the logistic baseline (−0.025) |
| Markets (Coinbase) | 357 | 0.682 | best head lifts +0.078 but AUROC stays under the floor |
| Space weather (NOAA SWPC) | 300 | 0.732 | negative lift across heads (−0.053 best) |
| Macro (FRED, 198 series) | 198 | 0.829 | no lift over the baseline (−0.002) |
| On-chain (Celo) | 240 | 0.829 | small positive lift, thin test set |
| Wildfire (NASA FIRMS + AntiFogo) | 528 | 0.754 | marginal lift (+0.005); AntiFogo history is still accumulating |
| Chaos (synthetic control) | 240 | ~1.0 | **synthetic corpus.** Proves the pipeline runs. Never evidence about real data. |
### Cross-domain and external transfer
Leave-one-domain-out: seismic clears the gate trained on the other seven
domains — the shared representation is not domain-specific bookkeeping. External
frozen-trunk transfer is reported on LOTSA, GiftEval and the four partner
corpora (air quality, agriculture, marine, urban) — **reported, never
required**: an external corpus cannot qualify a release.
### The promotion gate
Declared before the run, applied without discretion:
```
real corpus required · ≥ 2 targets significant vs phase-0 rules
paired lift vs logistic baseline > 0 · bootstrap CI on the lift excludes zero
worst-target ECE ≤ 0.10 · declared abstention operating point
≥ 100 entities · leakage tests must pass
≥ 2 real-corpus domains must clear, or nothing ships as promoted
```
**Verdict for v0.9.0: `promoted`** — two of eight real domains cleared, six are
published as refused candidates. Full run report in `report.json`, digests in
`SHA256SUMS`. If those digests do not match your rebuild, you are not looking at
the same artifact.
---
## Quick start
**The multi-domain model** — `main` serves v0.9.0:
```python
from huggingface_hub import snapshot_download
path = snapshot_download("mbarbosa1/zeno-divergent-v1", revision="v0.9.0")
# path/model.safetensors + path/config.json — per-domain adapters, shared trunk,
# per-target calibrated heads. Promoted domains: climate, seismic.
# Other domains remain loadable at the last revision that promoted them.
```
Score your own stream in the browser — no install, no upload leaves your machine:
[zenodivergent.dev/app](https://zenodivergent.dev/app) runs the promoted v0.9.0
ONNX graphs for climate and seismic (v0.7.0 heads elsewhere, because the export
is gated by the same run report).
---
## Architecture
| | |
| --- | --- |
| architecture | per-domain input adapters → shared dilated causal trunk → shared surprise latent `z^S` → per-domain calibrated heads |
| parameters | **1,877,849** total, **1,351,209 shared** (72%) across domains |
| features | multi-scale windows + calendar/context features, robust median/IQR normalisation, availability-aware (`available_at`) splits |
| training | 12 epochs, single NVIDIA L4; focal loss + per-entity resampling on rare targets; held-out affine/PAVA calibration |
| auxiliary objectives | counter-expectation head, domain-adversarial head, contrastive surprise objective, residual-vs-baseline objective |
| precision | float32, safetensors; promoted domains also exported to ONNX |
| runtime | CPU, sub-millisecond per row |
---
## Training data
Public, credential-free sources. No personal data, no identity, no intent, no
ownership fields — the input contract rejects them.
| domain | source |
| --- | --- |
| seismic | USGS FDSN event web service + QuakePulse Earth corpus |
| hydrology | USGS Water Services daily values |
| markets | Coinbase Exchange public market data API |
| spaceweather | NOAA SWPC indices |
| climate | NOAA GHCN-Daily station access files |
| macro | FRED (Federal Reserve Bank of St. Louis), 198 series |
| wildfire | NASA FIRMS active fire detections (VIIRS) + AntiFogo (antifogo.pt) mainland-Portugal corpus |
| on-chain | Celo public chain activity |
| chaos | in-repo Lorenz-96 / Kuramoto integrator (deterministic control) |
Splits are chronological with a horizon buffer, keyed on `available_at`
(publication time), not event time.
---
## Intended use
**In scope**
- Research on model-validity forecasting and surprise representations
- Advisory decision support with a named human owner
- Prioritising which observation to collect next
- Benchmarking change-point and surprise detectors against a locked protocol
- Reproducing — or falsifying — the claim above on your own corpus
**Out of scope**
- Automated or safety-critical actuation
- Reading the output as the probability of a *physical* event (it predicts model failure, not hazard)
- A single cross-domain risk number
- Scoring people. Entities are models, sensors, regions, instruments, processes — never individuals.
---
## Limits
- **Two domains are promoted in v0.9.0, not eight.** The other six are published
as candidates with their blocking reasons.
- **Most promoted heads beat chance, not the baseline.** Only
`cold_extreme_ahead` is a decisive lift win (+0.088). Treat the rest as
calibrated monitors, not oracles.
- Seismic coverage is 60%: the model abstains on a large share of situations.
That refusal is the product — hiding it turns "not observed" into "not at
risk".
- Probabilities are calibrated on the held-out calibration split; recalibrate
before using them as decision thresholds in a new deployment.
- The wildfire corpus depends on AntiFogo history that is still accumulating;
the wildfire gate cannot move until it does.
- The model predicts *observable* transitions in a public descriptive stream. It
makes no claim about identity, intent, ownership or causation.
---
## Citation
```bibtex
@software{zeno_divergent_0_9_0,
title = {Zeno Divergent: a shared representation of model-relative surprise},
author = {Barbosa, M.},
year = {2026},
url = {https://huggingface.co/mbarbosa1/zeno-divergent-v1},
version = {v0.9.0}
}
```
**[zenodivergent.dev](https://zenodivergent.dev)** — live workspace, interactive benchmarks, full documentation.