reading-a-planet: best-track-only rapid-intensification models
Calibrated logistic-regression models that give the probability that a tropical cyclone intensifies by at least
30 kt in the next 24 h (RI30), from the best track alone. They are the models of the paper Rapid Intensification
Before Landfall Around the World, 1980–2024: How Often It Strikes, Where, and How Far the Best Track Can Predict
It by Thanatchon Chongmankhong (read online ·
PDF ·
DOI 10.5281/zenodo.24216355). Code:
https://github.com/thanatchon36/reading-a-planet. Data:
thanatchon36/reading-a-planet (dataset).
The weights are stored as plain JSON (coefficients, standardisation, isotonic calibration curves), with a
dependency-light predict.py; no pickle files. They were fitted on seasons ≤ 2018, calibrated and selected on
2019–2021, and scored once on the sealed seasons 2022–2024 under pre-registered plans. predict.py reproduces
the stored test predictions to within 10⁻⁹ (max_abs_diff_vs_stored_test_predictions in models.json).
Independent personal research. Does not represent the views of any employer or institution. Not an operational forecast.
Models
key in models.json |
stage | basin | model |
|---|---|---|---|
part1_M1c_WP |
I, development | western North Pacific | L2 logistic regression, C = 10, isotonic calibration |
part2_M1c_{NA,EP,WP,NI,SI,SP} |
II, confirmation | one per basin | same design fitted in each basin, C chosen on the basin's validation Brier score |
part2_MGc_pooled |
II | all six | one pooled logistic regression with basin indicators, absolute latitude, poleward motion and a hemisphere-shifted season phase; isotonic calibration per basin |
Predictors (all known at forecast time): current intensity and its square, 6-h and 12-h intensity change, position, translation speed and direction, storm age, lifetime maximum so far and the gap to it, 1981–2010 climatological SST, distance to land and season phase, with missing-value indicators for new storms. Part I's gradient-boosting model is not exported: it did not beat logistic regression (hypothesis H2, not supported).
Test-season skill (2022–2024, scored once)
Brier skill score against the basin's training climatology, with 95% storm-bootstrap intervals.
| basin | storms | RI events | M1c BSS |
MGc BSS |
M1c ROC-AUC |
|---|---|---|---|---|---|
| WP (development, Part I) | 58 | 122 | 0.167 (0.041 to 0.249) | – | 0.81 |
| EP | 48 | 76 | 0.285 (0.136 to 0.404) | 0.249 (0.107 to 0.358) | 0.88 |
| SI | 43 | 88 | 0.114 (0.012 to 0.205) | 0.130 (0.025 to 0.232) | 0.82 |
| NA | 45 | 49 | 0.028 (−0.191 to 0.157) | 0.073 (−0.115 to 0.179) | 0.79 |
| NI | 16 | 21 | 0.096 (−1.166 to 0.506) | 0.143 (−1.095 to 0.527) | 0.77 |
| SP | 25 | 35 | 0.045 (−0.051 to 0.153) | 0.160 (0.043 to 0.278) | 0.85 |
Bold: skill confirmed (interval excludes zero; for the five confirmation basins, after Benjamini–Hochberg
adjustment). On the five confirmation basins pooled, MGc exceeded M1c by 0.022 BSS (−0.012 to 0.055), so the
pre-registered claim that pooling helps (H5) was not supported. Full results are in the
dataset.
Use
import pandas as pd
from huggingface_hub import hf_hub_download
import importlib.util
repo = "thanatchon36/reading-a-planet"
spec = importlib.util.spec_from_file_location("predict", hf_hub_download(repo, "predict.py"))
rp = importlib.util.module_from_spec(spec); spec.loader.exec_module(rp)
models = rp.load(hf_hub_download(repo, "models.json"))
fixes = pd.read_csv(hf_hub_download(repo, "data/global/points.csv.gz", repo_type="dataset"),
keep_default_na=False, na_values=[""]) # keeps the basin code "NA" as text
ep = fixes[(fixes.basin == "EP") & (fixes.eligible == True) & (fixes.split == "test")]
ep = ep.assign(p_RI30=rp.predict(models["part2_M1c_EP"], ep))
print(ep[["track_id", "time", "V", "dV24", "RI30", "p_RI30"]].head())
Your own fixes need the columns listed under each model's features; the dataset card documents how each
is computed, and src/prepare_global.py in the code repository computes them from an IBTrACS file.
Limitations
- Best-track predictors only: no satellite imagery, reanalysis or ocean heat content. These models are the baselines that such models must beat, not a substitute for them.
- Inputs are the final best track, available only after the season; in real time the operational track is noisier.
- Three test seasons give wide intervals in the small basins (NI, SP).
- Trained on 1980–2018; calibration may drift with observing practice and climate.
Citation
@misc{chongmankhong2026rapid,
author = {Chongmankhong, Thanatchon},
title = {Rapid Intensification Before Landfall Around the World, 1980--2024: How Often It Strikes, Where, and How Far the Best Track Can Predict It},
year = {2026},
note = {Preprint},
doi = {10.5281/zenodo.24216355},
url = {https://thanatchon36.github.io/reading-a-planet/paper/}
}