How 9Ware Generated the AUDL Net SPI Rankings

[See Rankings Here]

The purpose of this project was to establish the first ever Statistical Power Index (SPI) ranking for all teams in the history of the American Ultimate Disc League (the AUDL). This was accomplished by compiling and analyzing final-score results from every AUDL game ever played. In all, 1284 games have been played since the league launched in 2012.

It is important to note that this project was about determining an Historical Ranking, where we've treated every game equally rather than putting more weight on recent games and seasons. This differs significantly from other power rankings in sports, which use either statistical or subjective analysis to determine team rankings based on current form (but we may do that next!).

Validate Gaussian Approximations for Historical Score Distributions

We doubled up all postseason games to make them twice as important as regular season games, and then we determined the statistical pattern of the "Average AUDL Home Team" and "Average AUDL Away Team" and inspected those results to confirm that it's reasonable to use a Gaussian/normal approximation for these distributions. In other words,

$$\left[X \sim \mathcal{N}(\mu,\,\sigma^{2})\right] \quad \longrightarrow \quad f(x) = \frac{1}{\sigma\sqrt{2\pi}} \exp\left\{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^{\!2}\,\right\}$$

where the mean $\mu$ and standard deviation $\sigma$ are determined by the spread of final scores in each data set. This is a fairly common and straightforward statistical approach to approximate a data set as long as the data itself, in histogram form, compares favorably to the approximation.

And it turns out that yes, the "Average" home and away teams' scoring results across all 1284 matches closely resemble normal distributions...

Simulate Games Using Monte Carlo Method & Poisson Probability Distribution

We then proceeded to generate the same approximation for each team individually based on its own historical home and away results, and performed 10000-game Monte Carlo simulations for each team vs the Average AUDL teams (5000 home and 5000 away).

At this point, the typical approach for each simulated game would be to randomly select a number from each competing normal (gaussian) distribution and determine a win or loss. But we took our analysis one step further by feeding each of the sample 'final scores' into a bivariate Poisson distribution analysis. Here's how we set up the Poisson:

$$\begin{aligned} &\text{Let } Po_h(\lambda_h) = \frac{\lambda_h^k e^{-\lambda_h}}{k!}, \quad Po_a(\lambda_a) = \frac{\lambda_a^k e^{-\lambda_a}}{k!} \\ &\lambda_h= \text{homeScore}, \quad \lambda_a= \text{awayScore} \\ \\ \end{aligned} $$

The result is a bivariate distribution, as described here and shown in the middle figure below:

Joint Multivariate Distributions graphic

For each of the 10000 simulated games per team, we used a joint bivariate Poisson distribution to determine the probabilities of every possible outcome between 0-50 and 50-0 based on the scoring rate determined by the expected 'final' score over a 48 minute game.

$$\begin{aligned} &P(home\_win)=\sum_{i=0}^{50} \sum_{j=0}^{i-1} \frac{\lambda_h^i e^{-\lambda_h}}{i!} \cdot \frac{\lambda_a^j e^{-\lambda_a}}{j!} \\ &P(tie)=\sum_{i=0}^{50} \frac{\lambda_h^i e^{-\lambda_h}}{i!} \cdot \frac{\lambda_a^i e^{-\lambda_a}}{i!} \\ &P(home\_loss) = 1-P(home\_win)-P(tie) \\ \\ \end{aligned}$$

The concept of using bivariate Poisson analysis arises from the approach that Nate Silver's FiveThirtyEight website uses for their soccer predictions: FiveThirtyEight.com -- How Our Club Soccer Predictions Work

FiveThirtyEight Poisson match result prediction

But instead of using this Poisson analysis to predict future outcomes, we've incorporated it into our Monte Carlo process to more accurately compare relative strengths of teams -- by determining the probability of winning each simulated game based on expected final score rather than counting, for instance, a simulated 10-goal victory the same "1 win" as a 1-goal victory.

For example, here's how an expected final score of 24-20 of turns out to be a 70.12% chance of victory for the home team:

9Ware Poisson probability distribution from expected final score

So then, we summed up $p_k = 1.0*p_{win} + 0.5*p_{tie}$ (e.g. $p_{win}=0.7012, p_{tie}=0.0504$ in the image above) for all 10000 simulated games for each team by applying the following formula to generate an unadjusted Statistical Power Index between 0 and 100...

$$SPI_{team} = 100 \cdot \frac{\sum_{k=1}^{10000} p_k}{10000}$$

Now, there was only one thing left to do... consider relative strength of divisions.

Divisional Strength

Divisional strength is a typical factor in sport league team rankings, and it is particularly important for AUDL teams because the vast majority of their regular season games are within their divisions. So for instance, if a team has won 45% of its games in an extremely competitive division, it might well be historically better than a team with a 60% winning percentage in an historically weak division.

Fortunately, there have been enough cross-divisional games over the years based on the current divisional alignment to establish relative strength among the four divisions. In all, 122 games (after duplicating the postseason games) have been played between teams that are not currently in the same division. So we used these 122 cross-divisional games to run the same simulation for each division that we did for each team against "AUDL Average" home and away teams to determine the Divisional SPI scores shown here...

Division Win_Pct Div_SPI
0 East 59.268 59.114
1 South 50.581 53.049
2 West 41.517 45.977
3 Midwest 19.662 29.393

And there it is... 9Ware's process to generate our AUDL Historical Team Rankings!

___________________________________

 

Reference: Historical Records of All AUDL Teams (2012-2021)

Sorted by total games played. Six forfeits (all in 2012) were not included.

team div hw hl ht htot home aw al at atot away w l t tot overall
1 Indianapolis Alleycats Midwest 38 27 0 65 0.585 32 35 0 67 0.478 70 62 0 132 0.530
2 NY Empire East 51 12 0 63 0.810 34 29 0 63 0.540 85 41 0 126 0.675
3 Madison Radicals Midwest 56 10 0 66 0.848 43 16 0 59 0.729 99 26 0 125 0.792
4 Detroit Mechanix Midwest 11 52 0 63 0.175 4 58 0 62 0.065 15 110 0 125 0.120
5 Toronto Rush East 56 8 0 64 0.875 41 17 0 58 0.707 97 25 0 122 0.795
6 DC Breeze East 41 18 0 59 0.695 27 31 1 59 0.466 68 49 1 118 0.581
7 Chicago Union Midwest 36 22 0 58 0.621 25 32 1 58 0.440 61 54 1 116 0.530
8 Minnesota Windchill Midwest 36 19 1 56 0.652 26 32 0 58 0.448 62 51 1 114 0.548
9 Philadelphia Phoenix East 18 36 1 55 0.336 10 46 0 56 0.179 28 82 1 111 0.257
10 Oakland Spiders West 35 18 0 53 0.660 20 29 0 49 0.408 55 47 0 102 0.539
11 Seattle Cascades West 23 24 0 47 0.489 18 35 0 53 0.340 41 59 0 100 0.410
12 Montréal Royal East 25 22 0 47 0.532 22 24 0 46 0.478 47 46 0 93 0.505
13 Carolina Flyers South 36 8 0 44 0.818 30 16 0 46 0.652 66 24 0 90 0.733
14 Pittsburgh Thunderbirds Midwest 28 15 0 43 0.651 20 25 0 45 0.444 48 40 0 88 0.545
15 LA Aviators West 28 15 0 43 0.651 23 21 0 44 0.523 51 36 0 87 0.586
16 San Diego Growlers West 24 19 0 43 0.558 21 21 0 42 0.500 45 40 0 85 0.529
17 Atlanta Hustle South 24 16 0 40 0.600 20 23 0 43 0.465 44 39 0 83 0.530
18 Tampa Bay Cannons South 23 17 0 40 0.575 12 30 0 42 0.286 35 47 0 82 0.427
19 Dallas Legion South 36 4 0 40 0.900 27 12 0 39 0.692 63 16 0 79 0.797
20 SF Flamethrowers* West 26 12 0 38 0.684 22 16 0 38 0.579 48 28 0 76 0.632
21 Ottawa Outlaws East 16 22 0 38 0.421 9 29 0 38 0.237 25 51 0 76 0.329
22 Cincinnati Revolution* Midwest 11 24 0 35 0.314 6 32 0 38 0.158 17 56 0 73 0.233
23 Austin Sol South 16 18 0 34 0.471 10 23 0 33 0.303 26 41 0 67 0.388
24 Rochester Dragons* East 7 22 0 29 0.241 3 26 0 29 0.103 10 48 0 58 0.172
25 Vancouver Riptide* West 13 15 0 28 0.464 6 22 0 28 0.214 19 37 0 56 0.339
26 Nashville Nightwatch* South 7 21 0 28 0.250 1 27 0 28 0.036 8 48 0 56 0.143
↓ Teams with fewer than 50 games played (not included in the SPI analysis) ↓
27 Charlotte Express* South 4 10 0 14 0.286 2 12 0 14 0.143 6 22 0 28 0.214
28 Philadelphia Spinners* East 9 1 0 10 0.900 6 1 0 7 0.857 15 2 0 17 0.882
29 NJ Hammerheads* East 2 6 0 8 0.250 0 8 0 8 0.000 2 14 0 16 0.125
30 Rhode Island Rampage* East 3 3 0 6 0.500 3 6 0 9 0.333 6 9 0 15 0.400
31 Columbus Cranes* Midwest 6 1 0 7 0.857 1 6 0 7 0.143 7 7 0 14 0.500
32 Salt Lake City Lions* West 0 7 0 7 0.000 0 7 0 7 0.000 0 14 0 14 0.000
33 Connecticut Constitution* East 5 2 0 7 0.714 3 2 0 5 0.600 8 4 0 12 0.667
34 Boston Glory East 2 4 0 6 0.333 3 3 0 6 0.500 5 7 0 12 0.417
35 Colorado Summit West 0 0 0 0 0.000 0 0 0 0 0.000 0 0 0 0 0.000
36 Portland Nitro West 0 0 0 0 0.000 0 0 0 0 0.000 0 0 0 0 0.000
37 Salt Lake Shred West 0 0 0 0 0.000 0 0 0 0 0.000 0 0 0 0 0.000
*Teams listed in RED are no longer active
Published: 20 Jan 2022 by Don Grage
Based on all AUDL game results through the 2021 season