Level 3 · our own model
NF-Learn
Every upstream read is persisted on our side — raw payload, distilled series, feed health. NF-Learn learns from that accumulating ledger. It is not another weather model: it learns the residual the physical families leave behind, and the fragility that precedes their failure. Where the ledger is too thin, it abstains rather than inventing a number.
Observations kept
171,819
typed, deduplicated series
Raw snapshots
21,713
every upstream payload, verbatim
Receipts issued
32,338
18,035 still open
Receipts scored
14,303
outcome became available
Head A — residual learner
One weight set per channel, shared across every entity in it. A new city inherits everything the channel has learned.
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +72h | v75 | 24,184 | -0.11 | — | ×0.50 | 2026-09-09 12:05 |
| +6h | v75 | 51,904 | 0.01 | 97% | ×0.50 | 2026-09-09 12:05 |
| +24h | v75 | 44,334 | -0.06 | 97% | ×0.50 | 2026-09-09 12:05 |
learned weights, +72h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v75 | 51,936 | -0.01 | 90% | ×1.02 | 2026-09-09 12:05 |
| +24h | v75 | 44,376 | 0.22 | 89% | ×1.13 | 2026-09-09 12:05 |
| +72h | v75 | 24,169 | 0.62 | — | ×1.12 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v124 | 406,490 | 0.12 | 90% | ×1.04 | 2026-09-09 12:05 |
| +24h | v99 | 371,024 | -0.13 | 90% | ×1.00 | 2026-09-09 12:05 |
| +72h | v91 | 299,171 | -0.10 | 90% | ×0.99 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +24h | v99 | 370,977 | 0.23 | 90% | ×0.95 | 2026-09-09 12:05 |
| +72h | v91 | 299,094 | 0.25 | 90% | ×0.92 | 2026-09-09 12:05 |
| +6h | v124 | 406,427 | 0.14 | 90% | ×0.98 | 2026-09-09 12:05 |
learned weights, +24h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v125 | 526,280 | -0.04 | 90% | ×0.94 | 2026-09-09 12:05 |
| +24h | v100 | 504,275 | -0.03 | 90% | ×1.03 | 2026-09-09 12:05 |
| +72h | v91 | 462,313 | 0.12 | 90% | ×1.03 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v12 | 432 | 0.73 | — | ×1.00 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v75 | 31,648 | 0.04 | — | ×0.90 | 2026-09-09 12:05 |
| +24h | v75 | 24,138 | 0.35 | — | ×0.60 | 2026-09-09 12:05 |
| +72h | v36 | 6,307 | 0.32 | — | ×1.10 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v75 | 31,636 | 0.33 | — | ×1.01 | 2026-09-09 12:05 |
| +24h | v75 | 24,136 | 0.33 | — | ×1.06 | 2026-09-09 12:05 |
| +72h | v35 | 6,286 | 0.04 | — | ×0.93 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v125 | 526,559 | 0.35 | 90% | ×1.04 | 2026-09-09 12:05 |
| +24h | v100 | 504,537 | -0.10 | 90% | ×1.09 | 2026-09-09 12:05 |
| +72h | v91 | 462,589 | 0.10 | 90% | ×1.06 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v125 | 526,415 | -0.03 | 90% | ×0.98 | 2026-09-09 12:05 |
| +24h | v100 | 504,377 | 0.15 | 90% | ×1.00 | 2026-09-09 12:05 |
| +72h | v91 | 462,441 | 0.25 | 90% | ×1.00 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v89 | 35,595 | 0.00 | 81% | ×0.74 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v89 | 35,591 | 0.00 | 84% | ×0.56 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v89 | 35,594 | -0.01 | 95% | ×0.50 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v12 | 608 | 0.43 | — | ×1.03 | 2026-09-09 12:05 |
| +24h | v1 | 19 | 0.14 | — | ×0.95 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +72h | v75 | 21,200 | 0.27 | — | ×0.80 | 2026-09-09 12:05 |
| +6h | v75 | 48,571 | -0.28 | 94% | ×0.50 | 2026-09-09 12:05 |
| +24h | v75 | 41,019 | 0.15 | — | ×0.55 | 2026-09-09 12:05 |
learned weights, +72h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v12 | 608 | 0.77 | — | ×0.95 | 2026-09-09 12:05 |
| +24h | v1 | 19 | 0.18 | — | ×1.05 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v124 | 375,145 | -0.72 | 90% | ×0.98 | 2026-09-09 12:05 |
| +24h | v99 | 340,561 | -0.05 | 91% | ×0.82 | 2026-09-09 12:05 |
| +72h | v91 | 273,231 | -0.58 | 90% | ×0.88 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +24h | v1 | 19 | 0.32 | — | ×1.05 | 2026-09-09 12:05 |
| +6h | v12 | 608 | 0.12 | — | ×1.28 | 2026-09-09 12:05 |
learned weights, +24h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +24h | v1 | 19 | 0.49 | — | ×0.95 | 2026-09-09 12:05 |
| +6h | v12 | 608 | -0.02 | — | ×1.00 | 2026-09-09 12:05 |
learned weights, +24h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v12 | 608 | 0.61 | — | ×1.11 | 2026-09-09 12:05 |
| +24h | v1 | 19 | 0.10 | — | ×1.05 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v12 | 608 | 0.51 | — | ×0.99 | 2026-09-09 12:05 |
| +24h | v1 | 19 | 0.60 | — | ×1.15 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +24h | v75 | 40,989 | 0.32 | — | ×0.93 | 2026-09-09 12:05 |
| +72h | v75 | 21,205 | 0.38 | — | ×1.10 | 2026-09-09 12:05 |
| +6h | v75 | 48,522 | -0.05 | 90% | ×1.00 | 2026-09-09 12:05 |
learned weights, +24h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v12 | 608 | 0.42 | — | ×1.05 | 2026-09-09 12:05 |
| +24h | v1 | 19 | 0.41 | — | ×1.05 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v12 | 608 | 0.14 | — | ×1.07 | 2026-09-09 12:05 |
| +24h | v1 | 19 | 0.33 | — | ×1.15 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v12 | 608 | 0.35 | — | ×0.94 | 2026-09-09 12:05 |
| +24h | v1 | 19 | 0.72 | — | ×1.05 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v91 | 374,073 | -0.13 | 90% | ×0.98 | 2026-09-09 12:05 |
| +24h | v99 | 340,547 | -0.05 | 90% | ×0.98 | 2026-09-09 12:05 |
| +72h | v91 | 273,252 | 0.28 | 90% | ×0.95 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v124 | 375,848 | 0.10 | 90% | ×0.95 | 2026-09-09 12:05 |
| +24h | v99 | 340,635 | 0.03 | 90% | ×1.04 | 2026-09-09 12:05 |
| +72h | v91 | 273,258 | 0.35 | 91% | ×0.85 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v12 | 608 | 0.06 | — | ×1.08 | 2026-09-09 12:05 |
| +24h | v1 | 19 | -0.07 | — | ×1.05 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v124 | 375,257 | 0.12 | 90% | ×0.99 | 2026-09-09 12:05 |
| +24h | v99 | 340,623 | 0.29 | 90% | ×1.04 | 2026-09-09 12:05 |
| +72h | v91 | 273,280 | 0.29 | 90% | ×1.03 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v12 | 608 | 0.34 | — | ×1.09 | 2026-09-09 12:05 |
| +24h | v1 | 19 | -0.32 | — | ×0.95 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v12 | 608 | 0.34 | — | ×1.10 | 2026-09-09 12:05 |
| +24h | v1 | 19 | 0.05 | — | ×0.95 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v125 | 461,743 | 0.11 | 90% | ×0.91 | 2026-09-09 12:05 |
| +24h | v99 | 432,011 | -0.04 | 90% | ×0.95 | 2026-09-09 12:05 |
| +72h | v91 | 369,306 | 0.28 | 90% | ×0.91 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +24h | v75 | 35,623 | -1.41 | — | ×0.66 | 2026-09-09 12:05 |
| +72h | v75 | 16,515 | -0.07 | — | ×1.24 | 2026-09-09 12:05 |
| +6h | v75 | 43,127 | -0.73 | — | ×0.57 | 2026-09-09 12:05 |
learned weights, +24h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +72h | v75 | 16,519 | 0.76 | — | ×1.03 | 2026-09-09 12:05 |
| +6h | v75 | 43,162 | 0.13 | — | ×1.16 | 2026-09-09 12:05 |
| +24h | v75 | 35,665 | 0.27 | — | ×1.08 | 2026-09-09 12:05 |
learned weights, +72h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v91 | 460,501 | 0.09 | 90% | ×0.98 | 2026-09-09 12:05 |
| +24h | v99 | 431,962 | -0.02 | 90% | ×0.98 | 2026-09-09 12:05 |
| +72h | v91 | 369,300 | 0.05 | 90% | ×1.03 | 2026-09-09 12:05 |
learned weights, +6h
| horizon | version | samples seen | skill vs persistence | empirical coverage | interval scale | updated |
|---|---|---|---|---|---|---|
| +6h | v125 | 461,776 | 0.10 | 90% | ×1.01 | 2026-09-09 12:05 |
| +24h | v99 | 432,061 | 0.11 | 90% | ×1.02 | 2026-09-09 12:05 |
| +72h | v91 | 369,312 | 0.26 | 90% | ×1.02 | 2026-09-09 12:05 |
learned weights, +6h
Head B — fragility
P(validity breach within 72h), trained on our own scored receipts. Features are observable before the breach, never after.
Brier skill
-0.14
vs base rate
Base rate
0.63
observed breach frequency
Samples seen
355
v1
Scoreboard
NF-Learn's own receipts, scored against what actually happened.
| model | n | MAE | coverage |
|---|---|---|---|
| nf-learn:sea:wind_wave_direction | 77 | 40.12 | 62% |
| nf-learn:sea:swell_height | 77 | 0.09 | 88% |
| nf-learn:sea:ocean_current_speed | 77 | 0.52 | 40% |
| nf-learn:sea:swell_period | 77 | 0.93 | 75% |
| nf-learn:sea:wave_period | 77 | 0.53 | 38% |
| nf-learn:sea:wind_wave_height | 77 | 0.16 | 30% |
| nf-learn:sea:secondary_swell_height_m | 77 | 0.09 | 38% |
| nf-learn:sea:swell_direction | 77 | 18.86 | 62% |
| nf-learn:sea:wave_height | 77 | 0.08 | 62% |
| nf-learn:sea:sst | 77 | 0.58 | 4% |
| nf-learn:sea:storm_surge_m | 77 | 0.02 | 27% |
| nf-learn:sea:sea_level_m | 77 | 0.41 | 68% |
| nf-learn:sea:secondary_swell_direction | 76 | 43.60 | 71% |
Learning cycles
Ingest → train → issue → score. Idempotent: a repeated cycle re-reads the same window without duplicating a single row.
| started | trigger | observations | issued | scored | train samples |
|---|---|---|---|---|---|
| 2026-09-09 12:05 | scheduler | 638 | 882 | 1,248 | 181,525 |
| 2026-09-09 11:05 | scheduler | 539 | 666 | 0 | 181,145 |
| 2026-09-09 10:17 | open-meteo | 6,720 | 28,011 | 192 | 0 |
| 2026-09-09 10:05 | scheduler | 640 | 737 | 0 | 181,078 |
| 2026-09-09 09:17 | open-meteo | 6,720 | 28,011 | 612 | 0 |
| 2026-09-09 09:05 | scheduler | 641 | 737 | 0 | 180,848 |
| 2026-09-09 08:17 | open-meteo | 6,720 | 28,011 | 517 | 0 |
| 2026-09-09 08:05 | scheduler | 642 | 666 | 240 | 180,794 |
| 2026-09-09 07:17 | open-meteo | 6,720 | 28,011 | 1,488 | 0 |
| 2026-09-09 07:05 | scheduler | 643 | 666 | 0 | 180,902 |
| 2026-09-09 06:17 | open-meteo | 6,720 | 28,011 | 1,380 | 0 |
| 2026-09-09 06:05 | scheduler | 644 | 666 | 0 | 180,845 |
Ledger opened 2026-06-13 00:00. Discrete events — earthquakes above all — are stored as events and never resampled into a continuous series, so no head can learn from a curve that does not exist. Scheduler endpoint: /api/public/engine-cycle.