Rankings Explanation

The new algorithm is basically four components. The first is SWIM, or “Snitch When It Matters.” The second is Unicorn — a mixture of performance. The third component is Strength of Schedule, which modifies the first two. The fourth is modifiers, or minimum requirements to be met or else penalizations take place. I’ll explain each in a little more depth.


SWIM is a team’s average point differential (margin of victory), with a couple adjustments. The first is that the catching the Snitch is worth less when it doesn’t determine the outcome of a game; that is, when it is a suicide snatch, or when a team is already ahead by a ton. The other adjustment takes into account blowouts: a victory by 120 isn’t that much different from a victory by 250, as one team was clearly superior in either case.


Unicorn is a comprehensive statistic evaluating team performance. It includes 3 components. First is Quaffle Points Scored Per Game. Next is Quaffle Points Against Per Game (obviously, this is weighted so that giving up fewer points is better). Next is Winning %, a representation of a team’s record; this stat is weighted more heavily than the others. All of these components are averaged to give one final number.

Strength of Schedule

Strength of Schedule is 2/3 your opponents’ winning percentage, and 1/3 your opponents’ opponents’ winning percentage. This equation is similar to RPI, a statistic used in other sports.


Certain minimum guidelines have to be met to receive your full score. If they are not met, penalties are imposed on your rank score. There are three guidelines:

  1. 5 Game minimum. At least 5 games must be played by a team in a single season. The fewer games played, the harsher the penalty
  2. 3 Different opponents. A team must play at least 3 unique opponents in a single season. The penalty assessed is inversely correlated with the amount of unique opponents faced (less people = harsher penalty)
  3. 2 Event minimum. A team may not play all of their required games for the season in one single tournament. All games played per tournament count as 1 event, games outside of tournaments are 1 event each. Possible ways to meet this requirement:
    • Two head-to-head matches (played at any time outside of a tournament)
    • One tournament, one head-to-head (must be a different occasion than the tournament)
    • Two different tournaments

After this modification has been made, all of the teams are compared and the rankings are compiled.

A mathematical explanation can be found .

Update (3/19/12) — changed standardized(SoS) to SoS when multiplying by standardized(SWIM) to avoid double-negatives become a positive number. See commit for exact changes
Update (5/18/12) — changed standardized(SWIM) to scale up to a positive number in performance calculation. Previously, this could be a negative number, and when multiplied by a poor SoS, this would result in a number closer to 0, therefore being beneficial to teams with low SWIM and low SoS. See commit for exact changes
Update (5/21/12) — SWIM is now calculated the same way for each team per game. SWIM is calculated using the same methods as previously, except from the perspective of the winner each time, and the loser simply receives that score, negated. Therefore for every game SWIMs will be of the same magnitude. E.g. if the winner has a SWIM of 40, the loser’s is -40. If the winner’s SWIM was 10, the loser’s is -10. The only change to the process of calculating SWIM was the removal of absolute value signs, since we are only calculating from the winner’s perspective now. This solved coming-from-behind snatch victories and resulting higher SWIMs from the losing team. See commit for exact changes.
Update (8/26/12) — expanded on penalty explanation. These have NOT changed, the explanation is simply longer.
Update (8/26/12) — CStat has changed:

  • Points for/against are now QUAFFLE points for/against.
  • Strength of Schedule no longer includes a teams’ own win%, but only those of their opponents (2/3) and opponents’ opponents(1/3).
  • Win% is now its own metric in CStat
  • Snitch% in CStat now only counts games where the points pre-snatch were within range of either team winning.

Update (10/23/12) — Two bugs in the rankings system were fixed. First, that SoS was incorrectly calculating games against yourself. Second, that having no relevant snatches or SoS in CStat (early in the season, these might have no data yet, but not be 0) was treated as a 0 value. Now they are ignored when you don’t have any data for the field. See commit for exact changes
Update (12/16/12) — See commit for exact changes.

  1. CStat is now called “Unicorn”
  2. Snitch% and SoS are removed from CStat/Unicorn completely
  3. Win% is now weighted more heavily (multiplied by two) in Unicorn
  4. Performance now multiplies both Unicorn and SWIM by SoS, instead of just SWIM