RTP — Rugby Tournament Predictor
A rating engine, a simulator and a web application that forecasts rugby tournaments and publishes how well it has actually done. Ratings are Glicko-2, computed from every match on 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
Anyone can publish a percentage. Far fewer publish how often their percentages have been right, what the model can't see, or what changed between yesterday's number and today's.
RTP was built the other way round. Every figure it shows traces back to a measurement, and the measurements sit on the site beside the forecasts rather than in a footnote nobody reaches.
02
How it works
Match results are ingested from a public feed into a database holding every senior men's international on record, 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 — the United Rugby Championship, the Premiership, the Top 14 and the two European cups, back to 2015. The two scales have no bridge between them, because the populations have never played each other, and a club rating is meaningless held against an international one.
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 actually happened. The simulation's own runs supply the margin distributions, the qualification odds and the what-if scenarios, which is why no two numbers on the site can contradict one another.
03
What it measures about itself
The model 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. That's the figure the site publishes, and it's always reported with the period it covers.
- Winner called correctly
- 71.6%
- Margin error
- 16.8 pts RMSE
- Recent form
- 72.4%
- Features in the blend
- 28
3,680 matches, 1871 to 2026 — the full international record
same period; modern fixtures score better
90-day half-life, an effective sample of 59 matches
rating gap, venue, rest, competition, form
04
The engineering that matters
No server does arithmetic. Every endpoint reads a file that a pipeline step wrote, so a forecast, the ratings behind it and the accuracy quoted beside it all describe one state of the database rather than three taken at different moments.
The pipeline records its own failures. When a run aborts, the site says so and names the step, because a silent failure and a quiet day look identical to a reader and only one of them is fine.