File size: 11,082 Bytes
c388baa 2385fd7 c388baa 22bd16c 2385fd7 832d082 2385fd7 425fa71 2385fd7 425fa71 2385fd7 425fa71 2385fd7 425fa71 2385fd7 425fa71 2385fd7 425fa71 832d082 2385fd7 832d082 2385fd7 425fa71 2385fd7 832d082 2385fd7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 | ---
license: mit
library_name: pytorch
pipeline_tag: time-series-forecasting
tags:
- tropical-cyclone
- weather-forecasting
- pytorch
- ibtracs
- causal-inference
---
# Trackformer1.1
Trackformer1.1 is a research model for causal tropical-cyclone track,
pressure, intensity, and wind-structure inference over the western Pacific.
It is not an operational warning system and must not be used for evacuation,
aviation, maritime, emergency-management, or other safety-critical decisions.
## Release names
- **Current public release:** `Trackformer1.1`
- **Historical public releases:** `Trackformer1.0.x`, where `x` identifies the
historical patch or experiment in that family.
The current public package and model card use `Trackformer1.1` only. Historical
experiments are described as `Trackformer1.0.x` so old internal experiment
labels are not presented as current models.
## Demo and forecast grids
Open the interactive demonstration on the project GitHub Pages site:
**[Trackformer1.1 live demo](https://yu314-coder.github.io/typhoon-tracks.html)**
The repository also contains the forecast maps, pressure maps, and intensity
plots used for the two public case snapshots:
- [Dolphin world map](https://github.com/yu314-coder/typhoon-predict/blob/main/paper/dolphin_trackformer_1_1_pacific_domain_world_map.html)
- [Dolphin pressure map](https://github.com/yu314-coder/typhoon-predict/raw/refs/heads/main/paper/dolphin_trackformer_1_1_pacific_pressure_forecast.png)
- [Dolphin intensity and structure plot](https://github.com/yu314-coder/typhoon-predict/raw/refs/heads/main/paper/dolphin_trackformer_1_1_intensity_structure.png)
- [Tip world map](https://github.com/yu314-coder/typhoon-predict/blob/main/paper/tip_trackformer_1_1_pacific_domain_world_map.html)
- [Tip pressure map](https://github.com/yu314-coder/typhoon-predict/raw/refs/heads/main/paper/tip_trackformer_1_1_pacific_pressure_forecast.png)
- [Tip intensity and structure plot](https://github.com/yu314-coder/typhoon-predict/raw/refs/heads/main/paper/tip_trackformer_1_1_intensity_structure.png)
These tables are compact forecast grids from the checked-in case artifacts.
They are examples for inspecting the output, not a skill score and not a
replacement for an official forecast. Wind is maximum 1-minute wind in knots;
pressure is central pressure in hPa; radius is the radius of maximum wind in
kilometres.
### Dolphin, issue time 2026-07-31 15:00 UTC
| Lead | Latitude | Longitude | Max wind (kt) | Pressure (hPa) | RMW (km) |
|---:|---:|---:|---:|---:|---:|
| +6 h | 19.856 | 158.902 | 124.8 | 924.5 | 25.1 |
| +24 h | 20.723 | 156.159 | 118.3 | 931.5 | 22.0 |
| +48 h | 21.335 | 152.621 | 106.0 | 949.4 | 21.6 |
| +72 h | 22.093 | 149.456 | 95.6 | 963.9 | 22.8 |
| +96 h | 23.162 | 146.200 | 88.1 | 973.5 | 23.4 |
| +120 h | 24.242 | 142.811 | 80.1 | 980.5 | 25.1 |
### Tip, issue time 1979-10-12 00:00 UTC
| Lead | Latitude | Longitude | Max wind (kt) | Pressure (hPa) | RMW (km) |
|---:|---:|---:|---:|---:|---:|
| +6 h | 16.860 | 137.717 | 161.1 | 892.6 | 19.0 |
| +24 h | 18.005 | 135.849 | 152.1 | 898.8 | 17.8 |
| +48 h | 18.794 | 133.396 | 135.7 | 913.8 | 16.9 |
| +72 h | 19.569 | 131.390 | 118.6 | 931.5 | 18.1 |
| +96 h | 20.614 | 129.499 | 108.2 | 942.7 | 18.7 |
| +120 h | 21.668 | 127.791 | 97.8 | 952.6 | 21.6 |
## Data used and how to get it
Trackformer1.1 uses observed or analyzed weather available at the forecast
issue time and earlier. The model does not use another agency's predicted
track or positive-lead weather forecast as an input.
| Data | Role in Trackformer1.1 | How to obtain it |
|---|---|---|
| IBTrACS | Observed storm track history, intensity history, training labels, and post-run verification | [NOAA/NCEI IBTrACS](https://www.ncei.noaa.gov/products/international-best-track-archive) |
| Historical atmospheric analysis | Current, -12 h, and -24 h pressure, height, and wind states for causal hindcasts | [NOAA Climate Forecast System data and documentation](https://www.ncei.noaa.gov/products/weather-climate-models/climate-forecast-system) |
| Current atmospheric analysis | The latest available pressure and multi-level wind state for a live-style run | [NOAA NOMADS](https://nomads.ncep.noaa.gov/) using an analysis/`f000` product whose valid time is no later than the issue time |
| Derived arrays and case artifacts | Compact tensors, manifests, maps, and plots consumed by the public inference bundle | Build from the repository scripts locally or in GitHub Actions; raw archives are intentionally not stored in this model repository |
For historical coverage, CFSR and CFSv2 are different sources: CFSR does not
cover the full modern period, so later cases must use the matching CFSv2/CDAS
analysis product when that is the source selected for the run. The source and
valid time must be recorded in the preprocessing manifest.
The public GitHub Pages site serves generated JSON, PNG, HTML, and model-demo
assets. It should not hold private credentials or try to download large raw
archives in a browser. A GitHub Actions job can fetch public analysis files,
reject files newer than the issue time, build compact derived arrays, and
publish the resulting artifacts for the [live demo](https://yu314-coder.github.io/typhoon-tracks.html).
### Causal data boundary
At inference time, the model uses:
- the observed storm track and intensity history up to the issue time;
- current, 12-hour-old, and 24-hour-old analysis fields;
- the full western-Pacific domain covering China, Japan, Taiwan, the
Philippines, and the surrounding Pacific;
- derived pressure minima, pressure deficit, wind flow, steering layers, and
nearby-system context computed from those analysis fields.
It does **not** use JMA or JTWC forecast tracks, any official forecast track,
positive-lead GFS/GEFS/CFS forecast fields, or observations that became
available after the issue time. Later data may be used only to score the
forecast.
## Model structure
1. A causal regional state module extrapolates pressure, 500 hPa height, and
850/500/200 hPa wind from three analysis snapshots.
2. A weighted steering ensemble samples inner, deep-layer, ridge, trough, and
jet views across the full western-Pacific domain and integrates the route.
3. Three primary neural experts predict maximum wind, central pressure, RMW,
and directional 34/50/64 kt radii from a nine-step track window and the
current four-channel analysis patch.
4. Three structure experts provide a validation-selected secondary blend.
5. Three temporal experts read only same-storm 12-hour and 24-hour analysis
patches. Their residual branch is enabled only for the validated wind
adjustment; pressure remains on the calibrated primary path.
6. The final intensity output is coupled to the causal pressure-map minimum,
pressure deficit, 850 hPa wind, and quadrant anomaly extent. Radius outputs
remain ordered as `R34 >= R50 >= R64`.
The public bundle contains frozen inference checkpoints and calibration state;
it does not include raw weather archives or a training service.
## Intensity upgrade plan using the same data
The current intensity head is the weakest part of the public model. The next
improvement should keep the existing causal data boundary and change only the
target formulation, feature extraction, and calibration:
1. Build a lead-wise feature vector from data already available to Trackformer1.1:
current wind and pressure, 6/12/24-hour observed tendencies, pressure-map
minimum and deficit, 850/500/200 hPa flow, vertical-shear proxies, latitude,
and the pressure-anomaly area around the storm.
2. Predict changes from the current observed intensity (`delta wind`, `delta
pressure`, and `delta radius`) rather than predicting every future absolute
value from scratch. Use separate short-, medium-, and long-lead heads so a
120-hour estimate cannot dominate the 6-hour behavior.
3. Fit the calibration and regime gate only on the existing storm-held-out
training/validation arrays. Keep complete storms in one split, and keep the
test storms untouched until the final comparison against persistence and
the current Trackformer1.1 head.
4. Add physical consistency constraints: pressure deepening must agree with
wind strengthening, weakening must not create an implausible pressure fall,
radii must be non-negative and ordered, and changes must be bounded by the
observed analysis tendency and map confidence.
5. Report wind MAE, pressure MAE, RMW/radius MAE, bias by lead, and uncertainty
coverage for every split. Publish new checkpoints only if the same-data
model improves both all-lead and 120-hour test metrics without degrading
track error.
The current calibration reference is 16.40 kt test wind MAE across leads and
14.52 hPa test pressure MAE at 120 hours. Those numbers are a baseline for the
next experiment, not a guarantee of operational accuracy. No new intensity
weights are claimed by this README update.
## Files
- `trackformer_1_1.py` - public loader and route API.
- `trackformer_1_1_route.py` - whole-domain causal pressure-state route.
- `trackformer_1_1_intensity.py` - intensity and wind-structure inference.
- `trackformer_1_1_temporal.py` - inference-only temporal expert architecture.
- `models/trackformer_1_1/` - three expert groups, calibration, and manifest.
- `track_build/` - checked-in Dolphin and Tip forecast-grid source artifacts.
- `paper/` - map, pressure-map, and intensity/structure visualizations.
## Quick start
```bash
python -m pip install -r requirements.txt
python - <<'PY'
import numpy as np
from trackformer_1_1 import load_intensity
model = load_intensity(device="cpu")
track = np.zeros((9, 54), dtype="float32")
field = np.zeros((4, 17, 17), dtype="float32")
current_structure = np.full(13, np.nan, dtype="float32")
rows, metadata = model.predict(
track,
field,
current_wind=65.0,
current_pressure=980.0,
previous_wind=60.0,
previous_pressure=985.0,
current_structure=current_structure,
)
print(rows[0])
print(metadata["model"])
PY
```
The intensity contract is `track=(9,54)`, `field=(4,17,17)`, and optional
`history_field=(8,17,17)` for the 12-hour and 24-hour analysis patches. The
route contract is `fields=(3,7,latitude,longitude)` and
`pressure=(3,latitude,longitude)`, ordered current, 12 hours before, and 24
hours before. See `models/trackformer_1_1/manifest.json` for the complete
contract.
## Requirements and limits
CPU inference works with Python 3.10+, NumPy, PyTorch, and SciPy. A modern
Mac with 8 GB RAM is a practical minimum; 16 GB RAM is preferable when
decoding large analysis grids. The checkpoints are native PyTorch files.
GGUF is not an appropriate format for this CNN/Transformer weather model;
keep the native PyTorch weights or convert to another format only after
numerical parity testing.
The model is experimental. Track and intensity errors vary by storm, basin,
analysis source, and data quality. Use official meteorological agencies for
real-world forecasts and warnings.
|