Vantage V5RC · Override 2026-27

Vantage Points

Last updated 29 August 2026

A team's VP estimates the points they personally add to an alliance score. Everyone starts at the average single-team share of an alliance score, and the number moves after every match. Everything needed to check your own is on this page.

The rule

After a match, each team's rating moves by

Δμt = w·r(n) · SA SA^ |A|

where the score we expected that alliance to put up is

SA^ = L·|A| + uA (μub) vB δv
μt
this team's VP — points they add to an alliance score
δv
defence: points an opponent takes OFF your score
SA
what alliance A actually scored
L
the scoring level of this event, from its earlier matches only
b
the season's starting VP
w
1 for qualification, ⅓ for elimination
r(n)
learning rate after n matches

Both alliances are observations of the same match. Whoever beat their expected score gains μ; whoever failed to stop them loses δ. Defence counts here — holding an opponent below what they should have scored raises your rating, and facing a weaker opponent does not inflate it, because their δ is already in the expectation.

A real match

2566C and 1677Y, at a Beijing event this season. 2566C was rated 57.7 and its partner −3.5 — well below the season's starting value of 31.6, so the alliance was not expected to put up much. The event was scoring at 59.9 a team, and the two opponents carried 8.9 of defence between them.

expected  = 59.9×2  +  (57.7 − 31.6)  +  (−3.5 − 31.6)  −  8.9   =  102
actual    = 148
surprise  = (148 − 102) / 2                                         =  +23 each
change    = 23 × 0.20  (their learning rate after 8+ matches)        =  +4.6

2566C: 57.7  →  62.3

The partner is why the credit is large. Two average teams here would have been expected to score about 111; this pair was expected to manage 102 because one of them had been contributing almost nothing all season. Beating that by 46 points is evidence about 2566C, and the rating says so. That is the whole idea — a raw alliance-score average would have split the 148 evenly and called them both excellent.

Why an event level, and why only half of one

μ and δ are not separately identifiable from scores alone: add a constant to every μ and every δ and every prediction is unchanged. The V5RC schedule graph is nearly block-diagonal — regions barely play each other — so nothing pins the split inside a region, and δ would drift into absorbing the region's scoring level instead of anybody's defence. Regional level tracks partner quality, so an unanchored split shows up directly as unfairness. The event level is the anchor.

Subtracting the whole event level over-corrects the other way, because an event scores high partly because its teams are genuinely strong, and removing all of it throws that away. Half is what ships, and the surface is flat: anything between 0.3 and 0.7 performs about the same.

What the board shows

A rating is displayed — and ranked — shrunk toward the starting value by how much of the field has actually tested the team:

shown=b+ (μb) · nn+100

n
distinct opponents faced in qualification

A team with 22 qualification matches in one region has not met the field a world board claims to rank it against, and this says so rather than pretending otherwise. It is display only — it never enters a prediction, so it cannot buy or cost accuracy. Early in a season everyone sits near the starting value, which is the honest picture when nobody has played anybody yet.

How it tested

Walk-forward across every V5RC match of the completed 2025–26 season: 1,790 events, 108,175 usable matches, 12,431 teams. Each match predicted using only matches that started before it. Every model — ours and all three competitors — is fitted on the first 60% of the season and graded on the last 40%, which it never saw.

ModelBrierPartner luckFinals won by top 20
Vantage Points0.15594.5%151
Elo0.158514.6%188
Average alliance score0.161132.7%139
TrueSkill0.163014.0%210

VP predicts best and is the least contaminated by partner luck — and it does not have the best top twenty. TrueSkill's top twenty won 210 finals against our 161. That column comes from tournament results rather than from anybody's rating, which is exactly why it is here, and it does not flatter us.

There is a reason it might favour TrueSkill by construction — its published figure is a confidence-discounted one, so it rewards teams that have played a great many matches, and deep bracket runs are a great many matches. We are not going to lean on that to explain the number away. It is measured, it is published, and you can regenerate it.

Every model, and what it was given — parameters, and who fitted what
ModelParametersFitted?
Average alliance scoredivisor 8fitted
Elok 48, kelim 24, scale 300fitted
TrueSkillβ 6.25, τ 1/3, draw 10%fitted (β, τ)
Vantage Pointsfast 0.50, slow 0.20, ramp 8, elim 1/3, spread 16, clip 2.5, warmup 200, defence 0.15, defence decay 0.97, level 0.5, level min 8, shrink 100fitted

The defence rate is fitted on early-season data, on purpose. The value that is best on a completed season is measurably worse on a young one, and a young season is what a scout is looking at for most of the year. Fitting on the finished season would optimise for a regime nobody is actually in.

How we know it is not an artifact — placebo, bootstrap, sensitivity

Adding a term to a model almost always improves its fit to the data it was built on. These are the checks that distinguish a real gain from that:

TestResult
Does defence measure defence?After both alliances’ offence is accounted for, a defending alliance’s rating still explains how far the score fell short: +0.019 of R², coefficient −1.43. The same figures shuffled between teams add 0.00005 at best over twenty draws
Bootstrap over events, 2,000 resamples95% CI on the margin over Elo [+0.0004, +0.0048]; 22 of 2,000 resamples showed no gain. Real, and narrow
Parameter sensitivity, 3×5 grid0.1515–0.1598 around the fitted values — no knife-edge, but not flat either
Season maturityfitted on early-season data, not on the completed season it reports
Lookaheada match is provably not folded into the event level used to judge it

Reproducing this

node backtest/fetch.mjs 197             # crawl the season
node backtest/published-table.mjs 197   # the table above, from the shipped code
node backtest/fairness.mjs 197          # partner luck
node backtest/opponent-luck.mjs 197     # the measurement that started this
node test/rating.test.js                # including the backward-compatibility guarantee

What VP cannot see