Should the best sailor sail A?
A sensitivity analysis. Add your two skippers' ratings and compare the total with the field's average. Above it, the better skipper belongs in A. Below it, in B. Teams below the line still start the better skipper in A 85% of the time.
This is a sensitivity question, and it has a one-line answer: add the two skippers' ratings and compare the total with the field. Above the line, the better skipper belongs in A. Below it, in B.
Almost nobody follows the second half. Across 766 clear cases at 87 events, teams below the line still started their better skipper in A 85% of the time, where the model wanted that in 9%. They gave up 3.3 points on average against their best arrangement, and up to 18. The rest of this note derives the line, shows it on a map, and tests it.
Points are a curve in your rating
Score in a division is places, so a boat's expected points per race are a function of its rating r and of the rivals it races. With the Plackett–Luce model, the chance of beating rival j is pj(r) = 1 / (1 + erj − r) in rating units, and
E(r) = 1 + Σj (1 − pj(r))
one point for yourself, plus one for every rival who beats you. E falls as rating rises, and it falls fastest where many rivals sit close to you. Here are the A-division and B-division fields at the Open Fleet Race National Championship (18 teams, 28 races), with Jacksonville's two skippers (4.29 and 3.30) marked on each.
Sensitivity, and the area under it
The derivative is the sensitivity: g(r) = −dE/dr = Σj pj(1 − pj). Each rival contributes a bell centered on its own rating, so g is a smoothed density of the field. It is large where many rivals are within a rating point or two of you, and near zero for a boat far above or far below everyone. That is what fleet skill means here: where the field is packed.
Integrating, upgrading a division from the weaker skipper w to the stronger s saves S = ∫ws g(r) dr = E(w) − E(s) places per race. Here that is 3.63 boats in the A field and 3.83 in the B field. A team's total is EA + EB, so with the stronger skipper in A, swapping the two changes the predicted total by races × (SA − SB). For Jacksonville that is -2.8 points over 14 races. The sum is maximized by putting the stronger skipper in the division with the larger area, and the areas depend only on where the two fields are packed.
A map of every pairing
Do that for every pair of ratings. Each cell below is a hypothetical team with an A skipper rated as on the horizontal axis and a B skipper as on the vertical axis, in this one fleet. Color is the change in predicted points if the two swap: green helps, red hurts. The map is antisymmetric across the dashed diagonal (swapping twice returns you), so it is zero on the diagonal. Below the diagonal the stronger skipper is in A, as usual; circles are the teams that sailed.
Inside this field's rating range, with the stronger skipper in A, a swap lowers the predicted total by more than half a point in 47% of pairings and raises it in 18%. The best case gains 2.8 points and the worst costs 1.5. The green zone is a strong A skipper over a B skipper well below the rest of the B field, where the B field is dense and a better boat passes many. The red zone is two strong skippers, where there are few boats left to pass. The green and red regions are separated by bands that run along lines of constant rating sum.
Why it comes down to a sum
Let H(r) = EA(r) − EB(r), the places a skipper gives up per race by sailing A instead of B. The swap change is exactly races × (H(w) − H(s)), so the stronger skipper belongs in A when A duty costs them less than it costs the weaker one. Differentiate: H′(r) = −(gA(r) − gB(r)). The A field is packed higher in the ratings than the B field, so gB is larger on the left and gA on the right, and they cross at a rating m. H rises until m and falls after it.
Below m, being the stronger skipper is worth more in B. Above it, more in A. If H is roughly symmetric about m, then H(w) > H(s) just means w is closer to m than s is, and (s − w)(s + w − 2m) > 0 gives the rule:
stronger skipper in A ⇔ rA + rB > c with c ≈ 2m set by the fleet
The two skippers' ratings enter only through their sum, because the areas on each side of m trade off one for one. The fleet decides where the line sits. At the Open Nationals, a deep field, the line is a total of 7.6; at the Women's Western Semifinals it is 4.9. The same pair of skippers can belong in A in one fleet and B in another, which is why comparing teams by "better skipper in A or B" without the fleet mixes cells of the map that point in opposite directions.
Does the line hold?
H is not perfectly symmetric, so I did not take c = 2m on faith. For each of 87 events (the ICSA championships since fall 2024 and this fall's regattas) I computed every team's swap change from pre-event ratings, and found the one threshold on the sum that best separates the entries where the model wants A from those where it wants B. I counted only entries where the two skippers are at least a quarter of a rating point apart and the swap matters by at least half a point.
One cut on the sum is enough. With a threshold fitted to each event, the sum rule matches the full model's verdict in 99.9% of 766 clear cases. The threshold is fitted, so this shows the sum is the right statistic, not that the line is known in advance. Using the field's average A+B total as the line, with no fitting, it matches 92%.
| Your two ratings vs the field's average | Entries | Model wants the better skipper in A | Teams put the better skipper in A |
|---|---|---|---|
| more than 1.5 below | 192 | 1% | 82% |
| 0.75 to 1.5 below | 94 | 7% | 87% |
| up to 0.75 below | 87 | 30% | 89% |
| up to 0.75 above | 110 | 81% | 85% |
| 0.75 to 1.5 above | 118 | 97% | 96% |
| more than 1.5 above | 165 | 99% | 88% |
The model's column swings from 1% to 99% across the line. The teams' column stays between 82% and 96%. Teams respond to rating gaps, not to where those ratings sit in the fleet, which is the whole point of a sensitivity analysis.
Are the curves right?
The map is only as good as E(r). I tested it on real races at the fall 2026 regattas (572 races, 6,740 boat-races at 35 events), conditioning on the fleet: for each race I computed every boat's expected place from its pre-event rating against the other boats in that race, and compared with the place it earned.
Regressing earned place on expected place within each race gives a slope of 1.01 in A (95% interval 0.94 to 1.08) and 1.02 in B (0.95 to 1.08); 1 means the curve is as steep as reality. Grouped by rating relative to the field, the gap between earned and expected place is small everywhere, and every interval includes zero:
| Rating vs the field | A boats | Earned minus expected place (95% interval) | B boats | Earned minus expected place (95% interval) |
|---|---|---|---|---|
| far below the field | 238 | +0.25 (-0.22 to +0.67) | 226 | +0.07 (-0.34 to +0.47) |
| below | 635 | +0.14 (-0.06 to +0.40) | 555 | +0.24 (-0.14 to +0.63) |
| near the field mean | 1,658 | -0.04 (-0.16 to +0.09) | 1,172 | +0.06 (-0.16 to +0.28) |
| above | 878 | -0.04 (-0.30 to +0.21) | 883 | -0.02 (-0.29 to +0.26) |
| far above | 272 | +0.20 (-0.17 to +0.65) | 223 | +0.07 (-0.26 to +0.35) |
A direct before-and-after test is not possible: teams almost never move a skipper between divisions within a regatta, and comparing teams that put their better skipper in B with those that did not pools cells of the map that point in opposite directions. Testing the two ingredients, the curve's steepness and the same curve in A and B, is what the evidence can support.
Caveats
- The effect is a few points over a regatta, against typical misses of about 30, so it matters in a close finish.
- Ratings are estimates, and a gap of half a point is within their error. The model ignores conditions, crews, and coaches developing sailors.
- Skippers rotate; for team entries I used each division's most frequent skipper.
- The real-races check covers fall 2026 only, where pre-event ratings exist for every race.
Every number on this page is produced by analysis/blog/swap_map.py, nationals_swap.py, swap_threshold.py and division_effect.py in the project repository, from the same database that powers the rest of the site. Corrections welcome: quinnbrighton2005@gmail.com.