RTP — Rugby Tournament Predictor
A rating engine, a simulator and a web application that forecasts rugby tournaments and publishes how well it has done. Ratings are Glicko-2, computed from the match record. Tournaments are simulated five thousand times. The whole pipeline runs unattended each morning and records what each run changed.
- Python
- Glicko-2
- XGBoost
- SQLite
- Next.js
- TypeScript
- Vercel
01
The problem with a published forecast
A forecast percentage says little without a record behind it: how often past percentages were right, what the model can't see, and what changed between yesterday's number and today's.
RTP publishes that record. Its figures trace back to measurements, and the measurements sit on the site beside the forecasts.
02
How it works
Match results are ingested from public feeds into a database of senior men's internationals going back to 1871. Glicko-2 ratings are computed from that history point-in-time, so a rating never sees a result that hadn't yet happened.
Club rugby is rated the same way from its own record, back to 2015. That record holds three populations that never meet, and none of them plays the internationals, so each sits on a scale of its own and a rating on one is meaningless held against another.
A tournament is then simulated five thousand times. Fixtures already played are locked at their real scores in every run, so a forecast made mid-tournament is conditional on what has happened. The simulation's own runs supply the margin distributions, the qualification odds and the what-if scenarios, so those figures can't disagree with the forecast.
03
What it measures about itself
The rating engine is scored by walk-forward backtest: re-rate the whole history one match at a time, and predict each fixture using only what was known before it was played.
The forecast the site publishes blends those ratings with an XGBoost model, so it's scored separately on a forward holdout: trained on the matches before a cutoff, then scored on the ones it never saw. Both are reported with the period they cover.
- Forecast: winner called
- 77.1%
- Forecast: margin error
- 21.2 pts RMSE
- Rating engine: winner called
- 73.5%
- Rating engine: margin error
- 21.5 pts RMSE
- Rating engine: recent form
- 80.4%
- Features in the blend
- 28
1,395 matches since 2018, held out of training
same holdout
9,297 matches, 1871 to 2026, by walk-forward backtest; mostly tier-two fixtures
same backtest
90-day half-life, an effective sample of 132 matches
ratings, form, opponent strength, head-to-head, rest days, hemisphere
04
How it runs
No server does arithmetic. Endpoints read files that pipeline steps wrote, so a forecast, the ratings behind it and the accuracy quoted beside it all describe the same state of the database.
The pipeline records its own failures. When a run aborts, the site says so and names the step, so a reader can tell a failed run from a quiet day.