The KRACH Method
The formal definition of KRACH, how it is solved, and exactly how StatsCentral implements it. For a plain-language tour of all four of our ratings, see How Our Ratings Work.
Vij is the number of times team i has beaten team j, with a tie counting as
half a win and half a loss. Nij = Vij + Vji is the number of times they
have played. Vi = ∑j Vij is team i's total wins and
Ni = ∑j Nij its total games. Ki is team
i's KRACH rating.
1. The definition
KRACH applies the Bradley–Terry model to hockey. Ratings are multiplicative: the ratio of
two teams' ratings gives the expected odds of each winning a game between them, so team i beats team
j with probability Ki / (Ki + Kj).
The ratings are chosen so that every team's expected win total, given its actual schedule, equals its actual win total. That single condition defines KRACH implicitly:
Vi = ∑j Nij · Ki / (Ki + Kj)There is no separate schedule adjustment bolted on afterward. Strength of schedule is not an input to KRACH — it falls out of this one equation, because a team's rating is defined in terms of its opponents' ratings, which are defined in terms of their opponents' ratings, and so on through the whole division.
2. Record × Strength of Schedule
An equivalent way of writing the same definition — less fundamental, but far more useful for understanding what a rating is actually made of — splits KRACH into a record term and a schedule term:
Ki = [ Vi / (Ni − Vi) ] × [ ∑j fij · Kj ]The first bracket is simply wins divided by losses. The second is Strength of Schedule: a weighted average of your opponents' KRACH ratings, where the weighting factor is
fij = [ Nij / (Ki + Kj) ] / [ ∑k Nik / (Ki + Kk) ]In words: the number of games against each opponent, divided by the sum of your rating and that opponent's rating — then normalized so the weights sum to 1.
1/(Ki+Kj) term
matters. Because the weights sum to 1, if all of your opponents have the same rating, your Strength of Schedule
equals exactly that rating — a sanity property a plain games-weighted average does not have. More
importantly, only this weighting makes KRACH = (wins/losses) × SOS hold exactly. A simple
average of opponent ratings produces a number that does not reconcile with the rating beside it.
3. Solving and verifying
Both forms define KRACH recursively, so neither can be evaluated directly. To compute the ratings, the definition is rearranged:
Ki = Vi / [ ∑j Nij / (Ki + Kj) ]and solved by iteration: start from any guess, feed it into the right-hand side, take what comes out, feed that back in, and repeat. The ratings converge when the numbers coming out are indistinguishable from the numbers going in. StatsCentral iterates until the total change across all teams falls below 0.00001, or for 200 passes, whichever comes first.
Checking a set of ratings is much easier than computing them. Given any candidate ratings, compute
each team's expected wins with Vi = ∑j Nij · Ki / (Ki + Kj)
and confirm it matches their actual win total. We compute this on every run as an internal check: the difference
between expected and actual wins should be zero to within rounding, and a non-zero difference means the solver did
not converge.
4. RRWP
Round-Robin Winning PercentageRRWP is the winning percentage a team would be expected to accumulate if it played every other team in the division an equal number of times:
RRWPi = average over all j ≠ i of Ki / (Ki + Kj)It carries the same ordering as KRACH but lands on a familiar 0–1 scale, which makes it far easier to read than a four-digit rating — a .750 RRWP means you would be expected to win three of every four games against a balanced division schedule. Unlike KRACH itself, it is directly comparable between divisions. It is also the figure KRACH falls back on for ranking when ratings cannot be compared directly (see section 6).
RRWP is calculated on every ratings run but is not yet shown on the standings page.
5. What the numbers are scaled to
The definition above fixes the ratios between ratings, but not their absolute size — multiply every team's rating by the same number and the definition is still satisfied. Some scale has to be chosen.
Published college hockey KRACH resolves this by defining 100 to correspond to an RRWP of .500: a team rated 100 would be expected to split its games against a full round-robin schedule.
6. Undefeated and winless teams
The method breaks down when a team has won all of its games. An actual winning percentage of 1.000 can only equal an expected winning percentage if that team's rating is infinite relative to its opponents'. The same happens in reverse for a winless team, and in more tangled forms — two teams that have only lost to each other need ratings that are infinite compared to everyone else but finite compared to each other.
Current college hockey KRACH handles this by testing whether the division is connected: if you can trace a chain of wins and ties from any team to any other and back, every rating is finite and no intervention is needed. Where that fails, teams are split into groups, rated within their group, and ranked across groups by RRWP.
Sources
KRACH is Ken Butler's application of the Bradley–Terry model to college hockey. The definition, the record × strength-of-schedule decomposition, RRWP, and the connectivity handling described above follow the reference implementation maintained by Joe Schlobotnik.
- The Bradley–Terry model
- KRACH ratings and explanation of the table — Joe Schlobotnik, elynah.com
- KRACH primer — College Hockey News
The formulas on this page are reproduced from those public definitions; the explanatory text and the notes on our own implementation are our own. Ratings are recalculated whenever new scores are imported and include only games played through the current week's cutoff date.