How Team Ratings Are Computed
The Team Rankings come from the
debate-rankings pipeline (src/main.py), which fits a ballot-level
Bradley-Terry model to every decided round of the season at once. The
results are written to output/<prefix>full_rankings.csv and
output/<prefix>field_statistics.csv, which the site reads through
debate-rankings-adapter.
Fitting the whole season together means the order rounds were debated in does not matter: a round in September counts the same as one in February, and a team's rating reflects everyone it has beaten and lost to, weighted by how strong those opponents turned out to be.
The model
Each team (or LD debater) gets a skill θ on the logit scale. The
probability that the aff wins a ballot is
\[
P(\text{aff wins}) = \frac{1}{1 + e^{-(\theta_{\text{aff}} - \theta_{\text{neg}} + \beta)}}
\]where β is one shared side term that soaks up any field-wide
aff or neg advantage, so a team isn't credited for drawing the favored side.
Side balancing, prelims and elims apart
One side term isn't enough on its own, because side bias differs by round type: prelim sides are assigned, while in elims a coin-flip winner or the higher seed picks the side, so the aff can win well over half of elims in a field whose prelims are close to even. Before the fit, every ballot is weighted so that aff and neg each carry exactly half the ballot weight, separately in prelims and in elims:
\[
w_{\text{aff}} = \frac{A + N}{2A}, \qquad w_{\text{neg}} = \frac{A + N}{2N}
\]where A and N are the aff and neg ballots of that round type. The
favored side's ballots weigh less than 1 and the other side's more, and the
round type's total weight is unchanged — so a team that won a run of elims on
the favored side isn't over-credited, and one that won on the disfavored side
gets its due. β then absorbs whatever side effect is left. If a round type
has no ballots on one side, its weights stay 1.
What counts as data
- Ballots, not just rounds. When a round lists panel votes, each ballot is its own comparison — a 3–0 is stronger evidence than a 2–1. Rounds without votes count as one ballot for the winner.
- Majors count double. Ballots at the tournaments marked as majors have a likelihood weight of 2, on top of the side weight above.
- Byes, forfeits and undecided rounds are skipped for the rating, though they still count toward the raw win rates.
The prior
The fit adds a ridge penalty of 1.0 on every skill — equivalent to a
N(0, 1) prior. Teams with only a few ballots are pulled toward
the field average, and an unbeaten team still gets a finite rating instead of
running off to infinity. A team with no decided rounds sits exactly at the
prior: field average, standard error 1.
From skill to the CSV columns
Skills are reported on the familiar Elo scale, where 1500 is the field average and 400 points is 10:1 odds:
| Column | Formula |
|---|---|
| Rating | 1500 + (400 / ln 10) × θ |
| Deviation | (400 / ln 10) × SE(θ) — the skill's standard error in rating points |
| Adjusted Rating | Rating − 2 × Deviation — what the rank is sorted on |
| Matches | Decided rounds debated (aff + neg) |
| Aff Rating Advantage | (400 / ln 10) × β — rating points the aff side is still worth, field-wide, after side balancing |
| Aff / Neg Side Weight | w_aff, w_neg for prelim ballots |
| Aff / Neg Elim Side Weight | w_aff, w_neg for elim ballots |
Adjusted Rating is a conservative estimate: a lightly tested team with a high point estimate can't outrank a similarly rated, well-established one.
The win probability between two entries, ignoring side, is
\[
P(A \text{ beats } B) = \frac{1}{1 + 10^{(R_B - R_A)/400}}
\]On this site
The site shows every rating 1000 points lower and divided by 8, then clamped
to 0–109 (RATING_OFFSET, RATING_DIVISOR, RATING_MIN and RATING_MAX in
debate-rankings-adapter). That puts the top handful of teams in each event
around 100 and the weakest teams at or near 0. The shift and scale keep ranks
and win probabilities unchanged; the clamp only ties the few teams past either
end. The aff rating advantage, being a difference, is only divided by 8.
Ratings are shown with at least two digits (07, not 7). The leading
digits, 0 through 10, are the team's tier and are shaded from gold at the
top tier down to gray at the bottom, so the tier boundaries stand out as you
scroll down the table.
