Ratings Information


My Power Rating Interests


I have always been interested in power ratings for football. I remember as a kid I had notebooks where I would enter high school scores and NFL scores and rank the teams. Armed with just a calculator, I came up with some crude methods for obtaining power ratings. I wish I still had those notebooks. In the last five years I have been doing NFL rankings using an Excel spreadsheet. I would rate teams based on their scoring average, opponents scoring average, rushing yards per game, opponents rushing yards per game, passing yards per game, opponents passing yards per game, and turnover margin. I also began tracking the NCAA Division 1-A schools on an Excel spreadsheet as well. This year, I decided that I wasn't going to use Excel anymore. There were a couple of reasons for this. 1) I got tired of typing in the scores for each team, 2) I no longer use Microsoft Windows, and 3) I am trying to become proficient in C. Therefore, I have written my first C application.

How my system works


When I decided to write my ratings system in C, I knew I needed to revamp how I did my ratings. My old way was based on how each team performed against their opponents compared to how their opponents' opponents fared. I decided that my new system would be based on each game rather than a seasonal average.

Game Ratio

I spent several weeks trying to come up with a formula for rating a game. I looked at several different systems as well. I decided to use a formula I remembered reading from the Bill James Baseball Abstract several years back. His formula was called the Pythagorean Theorem. This theorem predicts the expected winning pct. for a team by using this formula: win pct = (runs^2)/((runs^2)+(runs allowed^2))

I have modified the formula to produce this: game_ratio = ((PtsScored/6)^2+1)/(((PtsScored/6)^2)+((PtsAllowed/6)^2)+2)

I added a 1 to the numerator and a 2 to the denominator to take into account if the score ended 0-0 that the game ratio would be .5000 just like any other tie. Why do I divide by 6? I divide by 6 because 6 is the most points that a team can score at one time. If I were doing basketball ratings, I would divide by 3. Using this formula, the following table shows three games, all 7 point victories. But notice the different game ratios:

Score Game Ratio
7-0 .7025
14-7 .7319
21-14 .6728
49-42 .5752

If you notice, the second game, 14-7, had the highest game ratio while the last game, 49-42, had the lowest game ratio. I feel this is significant because a 14-7 score indicates a defensive struggle and a 7 point margin of victory more significant than the 7 point victory in the 49-42 game. It would be easier to overcome a 7 point deficit when the score is 49-42 than when the score is 14-7. Therefore my game ratio will reward teams that play good defense.

The following table shows four games, all blowouts.

Score Game Ratio
56-21 .8693
21-0 .9298
7-0 .7025
72-0 .9932

Looking at these scores, you will notice that in the first game, 56-21, the game ratio was .8693. The second game, 21-0, had a game ratio of .9298. This is much higher than the game ratio of the previous game. How can this be? The first game had a margin of victory of 35 points while the second game had a margin of victory of 21 points. This comes back to the fact that defense is more important.

It comes down to this simple fact. A team who plays great defense and doesn't allow many points will do well in my power ratings. And a team who doesn't score many points won't do well. Therefore a team who has a good offense and a good defense will do well in my ratings. A team with a great offense and poor defense will not do as well as a team with a great defense and poor offense.

How is a team's rating calculated?

All games are stored in a file and read by the program. Each time I run the program, each team's rating is initialized to 50.0. This is the rating of an "average" football team. An expected game ratio is determined by this team rating. The expected game ratio is compared to the actual game ratio and the difference is stored in a field called difference. Go figure. Each team has this field. This is done for each game read in. The difference is a running sum for each team throughout the reading in of scores. After all scores are read and the differences have been computed, each team's rating is adjusted based on their difference sum. If the teams difference is positive, the team's rating increases. If the teams difference is negative, the team's rating decreases. After every team's rating has been adjusted, we set the difference for each team back to 0 and read in the scores again, although this time the team's ratings are the calculated ratings. This process continues until a criteria is met that shows the overall sum of the differences is not changing. I have found that my system actually runs through and calculates scores and adjusts the team ratings over 1000 times before it determines that the ratings have normalized.

Back to Football Home Page