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/}
}
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Dataset used to train thanatchon36/reading-a-planet