tinychaseAll kiosks

LAB EXPERIMENT: an analysis from the lab, not a tinychase data product. The findings here are the experiment's own, and where a model is used the output is the model's, not a measurement.

Lab · tinygrad on the cyclone record

The Tiny Forecaster

Is there signal in the track record, and can a framework the size of tinygrad find it? The test: from what a storm looks like right now, predict whether it gains 30 knots or more in the next 24 hours. Train on storms before 2015, tune on 2015 to 2019, score on 2020 onward, which the models never saw. Three contenders: the base rate, a logistic regression, and a two-layer network, the last two written in tinygrad.

Scores on the unseen years

Every fix from 2020 on with the data to make a forecast. Higher is better except Brier and log loss.

Ranking the risk

The ROC curve: for every threshold, the share of true rapid intensifiers caught against the share of quiet storm-days falsely flagged. The diagonal is guessing.

Two-layer networkLogistic regressionChance

Does it mean what it says?

Reliability: forecasts binned into ten equal groups by predicted probability, the average forecast against what actually happened. A calibrated model sits on the diagonal.

NetworkLogistic

Where the signal lives

Retrain the logistic model without a group of inputs and see what the ranking loses. Almost all of it is the recent trend: how the wind and pressure moved over the last day.

By basin

Network AUC on the unseen years, basin by basin.

Learning curves

Validation log loss by epoch. The network is essentially done after ten passes over 118,594 rows; the logistic model needs the full run.

NetworkLogistic

The framework

The transformer

Error by horizon

Mean absolute error of the forecast wind, test years, against doing nothing. The transformer's edge grows with the horizon.

PersistenceTransformer

Same rows, same question

What the transformer reads

No numbers. Every six-hourly step is six integer tokens from fixed vocabularies, summed as embeddings, with a learned position for each of the sixteen steps in the window. Bin edges are set in advance, so the tokeniser cannot learn the split.

By basin, 24 hours

Error in knots and the rapid-intensification ranking, transformer on the test years.

Data: TerraPulse tc dex, storms from 1980 with wind and pressure, 173,636 forecast points from 4,159 storms, built 2026-09-12. A forecast point is a fix that has a fix exactly 24 hours later (the label) and, where available, fixes 6, 12 and 24 hours earlier (the trend inputs; missing trends are zero). Inputs: wind, pressure, absolute latitude, longitude, translation speed, hours since genesis, wind change over 6, 12 and 24 hours, pressure change over 24 hours, day of year as sine and cosine, hemisphere, basin. Inputs are standardised on the training years. Label: wind 24 hours later is at least 30 kt higher, the NHC threshold. Split by storm year: training before 2015, validation 2015 to 2019 (early stopping), test 2020 to 2026. Test points from one storm are correlated, so the scores overstate the effective sample. This is the SHIPS-RII problem stripped to what the track alone knows: no satellite, no ocean heat content, no wind shear, which is where the operational models get the rest of their skill. The transformer section uses the same storms tokenised on a 6-hourly grid (lab/tokens2.py): wind in 5 kt bins, motion, latitude band, month, basin and pressure in 10 mb bins, windows of 16 steps, every real step scored once at the last four positions of one window; two pre-norm blocks of width 64, four heads, dropout 0.1, AdamW, four horizon heads trained together, best validation epoch kept. Matched rows are the test steps present in both tables, keyed by storm and time.