Data-Driven Sailing Home Engineering ICSA ISSA Notes
May 21, 2026 · updated with data through October 4, 2026 · All notes

How team race forecasts work

Add up three boats' ratings, a school term and a home edge, then take the logistic of the difference. Held out on two spring seasons the forecast calls 78.8% of matches, and the stated chances match what happened.

A team race forecast adds up what three boats bring, then asks how often that beats what the other three bring. Fleet ratings do most of the work; the school does the rest. Held out on two spring seasons, the forecast calls 78.8% of matches and its probabilities are honest.

The model

Every ICSA team race match since 2013 with a full line-up: 31,338 matches, 6,452 sailors, 130 schools. A side's strength is the sum over its three boats of the skipper's fleet rating (scaled by a fitted 0.72), a small per-sailor team race offset for the skipper and the crew, the school's team race term, and a home-water edge when the school hosts. The probability that side A beats side B is the logistic of the difference. Offsets are shrunk toward zero so a sailor with ten matches cannot acquire a large one; the fit uses a two-year half-life so old matches count less.

P(A beats B) = σ( strength(A) − strength(B) ),   strength = Σ3 boats [ 0.72·rating + skipper offset + crew offset ] + school + home

What each piece is worth

0.000.190.380.560.750.69Coin flip0.56School only0.45Ratings only0.45Ratings + school0.44Site modellog-loss, 6,335 held-out matcheslog-loss (lower is better)
Held out: fit before every regatta date in spring 2025 and 2026 with fleet ratings frozen at the week before, then score the 6,335 matches. A coin flip scores 0.693.

Knowing only which schools are racing gets to 0.562 and 70.4% of matches called. The three skippers' fleet ratings, nothing else, get to 0.454 and 77.9%. Adding the school term, the sailor offsets and the home edge brings it to 0.438 and 78.8%. The sailor offsets themselves are tiny: their fitted spread is 0.030 for skippers and 0.026 for crews, against a school spread of 0.22. Individual team race skill beyond the fleet rating is barely identifiable from results; what persists is the programme.

The school term

SchoolTeam race termMatchesWin share
Miami+0.56 ± 0.1652045%
St Mary's+0.48 ± 0.121,86059%
Stanford+0.46 ± 0.121,90978%
Roger Williams+0.45 ± 0.082,99461%
Charleston+0.45 ± 0.102,01465%
Dartmouth+0.41 ± 0.101,77355%
Boston College+0.36 ± 0.102,38164%
Tufts+0.36 ± 0.083,04051%

Schools with at least 500 matches, top of 35. The term is what the school adds to the sum of its three boats, in the same units as a rating: St. Mary's, Stanford, Roger Williams and Charleston win more team races than their fleet ratings alone would predict, season after season. A per-season version of the term overfits and hurts the forecast, so the site uses one persistent number per school.

Are the probabilities honest?

Stated chance for the favouriteMatchesMean statedFavourite won
50–60%95454.9%53.6%
60–70%1,01765.2%65.3%
70–80%1,08675.1%73.5%
80–90%1,28285.3%86.2%
90–100%1,99695.8%95.9%

Held-out matches grouped by the stated chance. The best temperature rescaling is 1.00: the numbers can be read as they are.

What did not help

On the site: every team race regatta page has a Ratings & Forecast tab with the pre-event boat values, the forecast for each match and who beat it; sailor pages show a team race rating and a regatta-by-regatta surprisal; the power rankings have a Team Race selector.

Every number on this page is produced by analysis/team_race/model.py, evaluate.py and fit.py; numbers via analysis/blog/team_race_post_data.py in the project repository, from the same database that powers the rest of the site. Corrections welcome: quinnbrighton2005@gmail.com.