Offensive Power Rankings for 2008

Inspired by a post by sw293 in one of my long-past stats threads from 2006, I re-implemented his/her Offensive Power Rankings algorithm. Essentially, it tries to determine approximately how much each team, on average, contributed to their alliance.

You can see the math behind it detailed here: Offense/Defense rankings for 1043 teams - #19 by sw293 - General Forum - Chief Delphi.

In essence, it looks at a team’s accumulated score over the course of a weekend as a sum of the offensive power ratings of all the other teams, multiplied by the number of times that team was paired with each team.

Example: 1565’s first match at GTR was with 2198 and 1870, and they played 8 matches total. The ‘…’ would be all their other alliance partners through qualifying, multiplied each time by how many times they were allied with them.

TotalScore(1565) = OPR(1565)*8 + OPR(2198)*1 + OPR(1870)*1 + …

Once you arrange the scores of all the teams from a regional in this way, then you end up with N equations (one big sum of scores per team) and N unknowns (the offensive power ratings). This can be solved to find out the OPRs.

Without further ado, here they are for GTR. I’ll be doing other regionals in the very near future.

gtr_opr_sorted.txt (909 Bytes)

gtr_opr_sorted.txt (909 Bytes)

These power rankings were a great help in 2006. (very accurate and very predictive) Of course they did not predict the exact outcome of matches, but it certainly let a team know what they were up against and who they were partnered with. It was a big part of our Championship scouting routine in 2006.

Thanks for offering to do this!

The penalties are such a huge factor this year, unless you find a way to account for them, this formula won’t accurately reflect a teams offensive ability.

Exactly correct. These shouldn’t be used as the be-all end-all of scouting, but perhaps as pointers to find gems in the rough. There are many things that can happen in this game (and in other years) that aren’t encapsulated in a simple number.

This is actually better then a team’s offensive ability. It shows a teams point contribution. If a team is consistently penalized, they will have a lower OPR then a team that scores the same points per match but does so without penalties. You would obviously want the latter on your alliance.

Another interesting thing is that a team that constantly gets in the way of it’s alliance parters would have a lower OPR then one that scores the same number of points but allows it’s alliance partners to live to their full potential.

are thier going to be ones for every regional? or would that be an endeavour of the individual teams to do?

Just finished the complete list. This includes every single 2nd-week and later regional. The first-week regionals have slightly different formatting for match results, and I couldn’t include them easily. At least based on this analysis, we finally have an answer for the question: “Is anyone CLOSE to 1114?”. The answer: no.

The top 50:

1114	79.0239
2056	52.583
987	51.736
40	50.8061
233	50.1563
330	48.7413
494	47.7625
525	47.3403
217	47.1941
1625	46.0802
1024	45.6433
25	45.2803
103	45.2493
33	45.1412
39	44.6339
175	44.0685
1731	42.2656
1124	42.2552
67	42.1626
368	39.0168
20	37.4932
1718	37.472
191	37.3548
1086	37.3254
16	36.6151
126	36.0601
1251	35.7449
968	35.0079
1574	34.6153
100	34.5714
141	34.3271
1218	34.3093
836	34.1721
381	34.1544
1126	34.0365
383	33.3622
69	33.1613
79	33.0133
469	33.0073
1717	32.3547
254	31.4165
501	31.3563
365	31.2399
111	30.847
1098	30.7075
997	30.6114
1507	30.6009
1156	30.5231
1153	30.4529
47	30.3471

See the attachment for the rest.

all_opr_sorted.txt (17.1 KB)

all_opr_sorted.txt (17.1 KB)

I don’t see entries for any teams I remember from Microsoft-Seattle Regional (Week 4). :confused:

A team can have a great scoring record and have few penalties but can still have their rating ruined by being on alliances that have scored penalties.

If you can’t factor out alliance penalties then there is way too much “luck of the draw” possible in this chart.

It had funny formatting, but upon thinking about it some more, I don’t think it should badly affect my program’s ability to read it. I’ll put it in and re-do them.

In fact, I can think of a way I should be able to get the week 1 regionals working as well.

Check this thread again in 10 minutes, I should have an updated one up.

If you let me know a precise format you want, I can give you a huge CSV dump into the formatting you want from The Blue Alliance’s database.

I would also like to see standings of all teams ranked based on their record at the attended official events (Win-Loss-Tie). :slight_smile:

“Red1 <tab> Red2 <tab> red3 <tab> blue1 <tab> blue2 <tab> blue3 <tab> redscore <tab> bluescore <line feed or carriage return or end of line or whatever>” is all I need. That’d be great. CSV is good too, I’m not particular about the delimiter.

So including week 1, the top 50 now looks like:

1114	68.5388
2056	53.7198
987	51.0249
233	50.3309
330	48.6782
39	44.2954
103	43.4295
1731	42.7127
1124	42.087
67	42.0777
525	41.482
175	40.3134
25	40.2684
217	40.0997
1024	39.8043
1718	38.6849
1086	37.4098
191	37.0664
20	36.9179
40	36.6407
1251	36.1213
368	35.623
121	35.5714
1625	35.182
968	35.1251
494	35.0843
1218	35.0123
1574	34.6153
383	34.1952
141	34.1791
1126	33.9523
79	33.8184
469	33.2445
1717	32.6876
69	32.3057
254	32.2835
126	32.1564
33	32.0724
365	31.1953
1507	30.8839
47	30.8582
1156	30.7724
16	30.6096
1065	30.3857
836	30.1605
381	30.1114
93	29.8324
195	29.8271
1512	29.78

```<br><br><a class='attachment' href='/uploads/default/original/3X/0/c/0c0e40572b31d587f2a207e6bd170079cc6ef5d4.txt'>all_opr_sorted.txt</a> (19.3 KB)<br><br><br><a class='attachment' href='/uploads/default/original/3X/0/c/0c0e40572b31d587f2a207e6bd170079cc6ef5d4.txt'>all_opr_sorted.txt</a> (19.3 KB)<br>

The CSV is too big to attach. Find it here:

Let me know if that works for you :slight_smile:

Okay I somewhat understand how this is all calculated but I am guessing that somebody has already made an excel file to calculate all this? I tried to download one from '06 but the link was broken so can somebody please upload a new one? Thanks.

Could you help me make sure I understand the linear algebra involved?

I understand that p is what we’re looking to find, or the average number of points a team contributes per match. s and M we can calculate from the results coming from each regional. Since Mp = s, we can conclude that p = (M-1)s (where M-1 denotes M inverse). It seems to me from thinking about it that M is symmetric, and as such M = M-1. Is that actually the case?

I’ll probably try to write a program to take a csv dump and spit out rankings if I understand the math.

M is indeed symmetric. M*[j] indicates how many matches team i played with team j. Therefore, it makes sense that M*[j] = M[j]*.

I don’t think the inverse of a symmetric matrix is necessarily symmetric. The transpose of a symmetric matrix M would be equal to its non-transpose, but I don’t think that carries for symmetry. To prove that M-1 is not necessarily equal to M for a symmetric matrix, just think of the symmetric matrix 2I, where I is the identity matrix.

If (M)-1 = (M) for symmetric matrices like you are proposing, and we know MM-1 = I for any matrix and its inverse, then (2I)(2I) must equal I, but this is not the case.

I didn’t have to write the matrix solver myself, I used a library I found online. If there are any tricks it used, I’m not aware of them.***

You’re right. For some reason, I was thinking of the transpose rather than the inverse. I’ll see how I handle the inversion of the matrix when I get there. In the meantime, I’m working through the easy stuff: reading the csv and making and populating s and M.

M is symmetric, but that doesn’t mean M = M inverse.

Symmetry means that M = M transpose (flipped along the identity axis), which is different than M inverse.

It’s easy to confuse the two (I remember doing that plenty of times, thank Ms. Martin).

Here’s an example where M = M inverse, and you quickly see that M is definitely not symmetric:

|   9   5 | |   9   5 | - |   1   0 |
| -16  -9 | | -16  -9 | - |   0   1 | 

Just an FYI…all of the match data is NOT included from the Peachtree regional. The scoring system failed so all of the elimination matches and many of the qualifying matches from Saturday are not included. As an example…team 343 finished 12-4 at that regional. We are still shown as 5-3 on the Blue Alliance. That means there are eight matches not accounted for on us alone. That would/could be the same for many of the other teams who attended Peachtree.

Is there anybody that has that manual data? Can it be manually entered into the Blue Alliance?

Mike Carron
Team 343