About the CFB Algorithm

It is notoriously difficult to compare teams in college football. This is because each of the 130 FBS teams only play 12 regular season games, leaving thousands of missing links to directly compare teams. Furthermore, teams only play their opponents once, often casting doubt as to whether a rematch would yield a different result.

I initially attempted to write an algorithm to rank college football teams in the summer of 2018. While I created the initial foundation for the rankings before the start of the 2018 season, I continued to work and refine the algorithm as the season progressed, using the 2017 and 2016 seasons test data for my work. By the end of the season, I had a ranking that generated reasonable results.

However, a fundamental flaw in my former algorithm was the number of somewhat arbitrarily chosen, user defined constants. Things like how much the strength of a team’s schedule should impact the final rating, or how to define the relationship between FBS and FCS. I was not happy with the algorithm not because of its performance, but because of how it arrived at the result.

After the season concluded in January, I set out to update the algorithm to be more objective. I tried many approaches, but each had some major flaw in the result that, to me, was too big to overlook. The currently published ratings are (somewhere around) my 30th attempt at a seamless rating system. The overall metric—looking at how a team performs compared to their opponent’s average opponent—is the same as it was, however, the pipeline is much more streamlined and the only user defined constant is 1, to which everything is normalized.

A team is rewarded for the following actions:

  • Winning a game
  • Scoring more points than the average defensive points per game of their opponent
  • Holding their opponent to fewer points than they score on average

These values are updated after each game is played. A team that once earned points for their performance early in the season can lose those points as stat lines are updated (and vice versa).

For posterity, I am keeping the description of my former football algorithm online. I worked hard on that algorithm as well, and I don’t want to delete all record of it. You can read that here.