Ranking college football teams is a major challenge. The official system, the BCS, has resulted in many controversies and much debate. The difficulty arises due to the relatively small number of opponents any given team plays. There are 120 FBS teams, and each team only plays 12 opponents, only around 10% of all possible combinations.
Many have tried to solve this problem with computers by naturally extending a human’s ranking approach by taking into account as much information as possible. These models tend to have biases, even if it is inadvertent, as there are usually parts of the model that require combining independent variables with human chosen weights.
I set out to try to create a ranking algorithm that used all the teams wins and losses only, and no other information. The basic idea is that winning or losing a game should be worth a particular amount, based on how good the opposing team is. There are four extreme cases to look at: winning or losing against the best or worst ranked teams. Winning against the best ranked team, or losing to the worst ranked team should have the largest possible effect on the team’s rank. Winning against the worst ranked team, or losing to the best ranked team should have the minimum possible effect.
With that premise in mind, here is the algorithm I settled on:
- Set every team to a rating of 1.
- Create a temporary list of teams, setting all teams to have a rating of 0.
- For each team, and for each game played by that team:
- If it was a win, add the rating of the opponent to the team’s rating in the temporary list or,
- if it was a loss, subtract one minus the rating of the opponent.
- Normalize the ratings in the temporary list to the maximum rating of 1.
- Replace the team list with the temporary team list.
- Go to step 2.
The algorithm is iterative to allow teams records to influence even only distantly related teams (by games with common opponents). After a number of iterations, the resulting ratings will converge to a solution (running another iteration will not change the values significantly). In my observation this happened after around 5 iterations, which was far fewer iterations than I expected.
Here are the results for the top 10 after one iteration after the end of the 2010 regular season:
Rk Team W L Rating -- -- -- -- -- 1 Auburn 13 0 1.000 1 Oregon 12 0 1.000 1 TCU 12 0 1.000 4 Boise St. 11 1 0.924 4 Nevada 12 1 0.924 4 Ohio St. 11 1 0.924 7 Michigan St. 11 1 0.917 7 Stanford 11 1 0.917 7 Wisconsin 11 1 0.917 10 Oklahoma 11 2 0.859
This is not very interesting, as it is just a simple ranking by overall wins/losses. However, the second iteration becomes more interesting:
Rk Team W L Rating -- -- -- -- -- 1 Auburn 13 0 1.000 2 TCU 12 0 0.897 3 Oregon 12 0 0.892 4 Oklahoma 11 2 0.860 5 Michigan St. 11 1 0.859 6 Ohio St. 11 1 0.846 7 Arkansas 10 2 0.845 8 LSU 10 2 0.843 9 Boise St. 11 1 0.843 10 Missouri 10 2 0.836
Here is an example of what the rating calculation looks like. This is Stanford after the second iteration:
Game Opp Rk Delta -- -- -- W Notre Dame 23 0.677 W Southern California 36 0.582 W Arizona 46 0.559 W Washington 56 0.520 W Oregon St. 61 0.493 W Arizona St. 65 0.456 W California 73 0.414 W UCLA 84 0.348 W Wake Forest 102 0.249 W Washington St. 108 0.185 L Oregon 3 -0.108 W Sacramento St. 120 0.000
Stanford’s rating on the third iteration will be equal to the sum of the deltas in the above table. The games are sorted by their influence on the team’s rating (the delta). As you can see, the loss to Oregon did not matter much, because Oregon’s rating is so high. Sacramento St. is not a FBS team, so it is given a rating of 0. Beating a non-FBS team does not matter, but losing to a non-FBS team would be a huge blow to the rating.
Here is the top 25 after the algorithm has converged:
Rk Team W L Rating -- -- -- -- -- 1 Auburn 13 0 1.000 2 Oregon 12 0 0.931 3 TCU 12 0 0.906 4 Oklahoma 11 2 0.895 5 Stanford 11 1 0.880 6 Arkansas 10 2 0.864 7 Missouri 10 2 0.863 8 LSU 10 2 0.858 9 Michigan St. 11 1 0.857 10 Ohio St. 11 1 0.841 11 Wisconsin 11 1 0.839 12 Boise St. 11 1 0.833 13 Oklahoma St. 10 2 0.830 14 Texas A&M 9 3 0.815 15 Nevada 12 1 0.802 16 Nebraska 10 3 0.780 17 Alabama 9 3 0.780 18 Virginia Tech 11 2 0.776 19 Utah 10 2 0.757 20 South Carolina 9 4 0.750 21 Florida St. 9 4 0.708 22 Hawaii 10 3 0.689 23 West Virginia 9 3 0.682 24 Mississippi St. 8 4 0.681 25 Notre Dame 7 5 0.661
Looks a lot more sane than many voters in human polls!
This algorithm is somewhat similar to Google’s PageRank algorithm. Here is a paper that describes PageRank well, and also implements PageRank for ranking NFL teams.
If you want to play around with this algorithm, or just want a starting point for your own ranking algorithm, here is the C# project. The project is designed to parse the CSV files published by the NCAA.

Pretty nice post. I just stumbled upon your blog and wished to say that I have truly loved surfing around your blog
posts. In any case I’ll be subscribing in your feed and I am hoping you write once more soon!