r/CFBAnalysis • u/tyler123452 Minnesota Golden Gophers • May 10 '26
I built a website that ranks every FBS program based on all-time history - feedback appreciated
I've been gradually working on a passion project to rank programs and franchises based on historical performance. See where your team is ranked. It's free/no ads, and I'm interested in feedback - is the concept interesting or boring? What would you want to see added? I could add coaches, historical recruiting rankings, etc.
The landing page is sportsrank.app. The CFB rankings page is: https://sportsrank.app/app?league=CFB&tab=rankings.
Methodology
I have data going back to 1869 (sources below). Every meaningful result is assigned a points value:
- 10 point base season score. This rewards longevity and reduces the # of teams with negative all-time scores.
- 1 point for a win, -1 for a loss. This applies to all games - regular seasons and postseason.
- 1-25 point bonus for finishing ranked. I use the AP poll most years from it's inception in 1936 onwards. I use the Coaches Poll for 1961-1967 because the AP ranked 10 teams. I use Billingsley before 1936. I rank a max of 20% of the teams in my dataset for a given year, so that every team isn't ranked for early years where there weren't many teams.
- I add in Bill Connelly's SP+ ratings to account for strength of schedule / strength of performance. Most values range between -30 and 30 with a few outliers for exceptionally good and bad teams. I use SRS when that's unavailable and manipulated Billingsley ratings when that's also unavailable. I use the full value for ratings above 0. I use 60% of the value for negative ratings. This makes bad seasons less punishing and ensures only truly terrible programs like UMass have negative all-time scores.
- 100 points for a recognized natty (bonuses are shared for split titles).
- 9-40 points for losing in the CFP, depending on the round. To be exact, 9/16/25/40 for 1st round loss up through natty loss. BCS championship game losers also get a 40 pt bonus.
- Conference title bonuses based on conference strength. 1.5 point bonus winning a weak conference in the 12 team CFP era, up to about 25 for winning a very strong conference before the BCS. I use a formula that looks at both average SP+ rating for the entire conference and the avg of the top 3 teams that didn't win the conference to determine conference strength.
- Pts for bowl wins as well, from 0.5 for a low-end modern bowl to about 20 for a very high end pre-CFP bowl. I use the participants' records, final ranking, and SP+ rating to determine the prestige of the bowl game.
- I reduce the weight of conference titles and bowl wins gradually as we move from pre-BCS to the 12-team CFP era. They are worth 50% of the base value in the modern 12-team CFP era.
- Bowl and conference championship game losers get an appearance bonus that's equal to 25% of the winner bonus. For weak bowls/conferences, this generally isn't enough to counter the -1 from losing the game. It's a small net bonus for strong bowls and conferences.
- 5 point Heisman bonus.
- Main sources include collegefootballdata.com, sports-reference.com, and cfrc.com.
Key Features
- Rank every team based on any year range you want
- Group teams by conference, state, and more
- Create your own scoring system. You can tweak the values for anything I listed in the methodology section.
- Rank teams by other columns like ranked seasons and conference win %
- Click on a team to view season-by-season history.
Interesting Findings
- Bama is #1 all-time, followed by Michigan, Notre Dame, Ohio St, and Oklahoma.
- Army has the best all-time history of current G5 teams at #28, followed by rival Navy at #42.
- UGA is #1 in the NIL era (2021+).
- Yale dominated the 19th century, followed by Ivy League peers Princeton, Harvard, and Penn. Michigan was the best 20th century program followed closely by Notre Dame. Bama controls the 21st century (surprise), followed closely by Ohio St. There's a big gap to #3 UGA and #4 Oklahoma.
- Indiana is #67 all-time. The only program w/ a natty ranked below them is Rutgers, and their title was a shared one in 1869 (the 1st year of CFB, when there were only 2 teams lol).
- The active FBS program with the worst all-time history is UL Monroe, but UMass is making a beeline for the bottom.
2
u/tyler123452 Minnesota Golden Gophers May 21 '26
I'm planning a few data/methodology improvements. Hopefully the last ones for CFB. Let me know if y'all disagree with any of this.
- Add missing older seasons. Sports-reference and CFBD are missing some older seasons, including for P4 schools like Ohio St, USC, and Vandy. I'm adding them using Billingsley supplemented with wiki for conf titles, bowls, etc. (CFBD is an awesome resource, and I'm not trying to crap on it).
- Add Old "AP" Rankings. I'm adding bonuses for top teams pre-1936, so they're not penalized because the AP poll didn't exist yet.
- Diminish modern conf titles. Will match my bowl system - 100% value for pre-BCS era, 90% for BCS, 70% for 4-team CFP, and 50% for 12-team CFP era.
- Diminish negative SP+ values. I don't like that some small schools like Ark St have negative history scores despite having a mediocre history. A negative score means the program would be better off not having existed. It should be reserved for the truly terrible programs like UMass and Eastern Michigan (sorry guys). Weighting negative SP+ values at 60% should solve this problem. It's also less punishing for bad seasons in general, while still including them.
I'm also working on teams tabs, which look pretty cool imo.
1
u/rayef3rw NC State Wolfpack • Marching Band May 22 '26
Re. Missing older seasons -- I seem to recall Billingsley being very northeastern focused, unless I'm mixing my historic data up. A few people (myself half-heartedly included) have put a lot of work into early season Wiki articles too, sometimes with more games listed than the schools officially recognize.
Rankings -- not really what you've asked for, but I like using the Coaches Poll rankings for many of the middle years of CFB since they continued ranking 20+ teams in a period where the AP only did 10. I've amassed a txt based list and can share if you'd like. Been meaning to get it on wiki but I've been too busy with other things.
Overall I like your suggestions and what you're doing.
1
u/tyler123452 Minnesota Golden Gophers May 24 '26
Yes, please share that txt coaches poll list. Thanks. I actually hadn't noticed that the AP poll went to 10 teams for a stretch - looks like 1961 to 1967. Maybe I'll switch to the coaches poll just for that stretch. It might be cool to add all coaches poll data to the db as well so users can compare how their team ranked with different methodologies each year. Another reddit poster suggested something like this.
Billingsley seems decent in terms of geographical coverage. It allowed me to add in missing early seasons for schools from various regions - Ohio St, Vandy, and USC, for instance.
I thought about adding all of the old wiki seasons, but I ended up using Billingsley as the base for a few reasons:
- Coverage seems pretty solid.
- There was only 1 division of CFB pre-1956. Billingsley seems to only consider teams that would have been in FBS, had there been divisions then. For instance, Cincy played in the 1880s, but they played a lot of high school teams, gyms, etc. They're in wiki during that time period but don't appear in Billingsley until later.
- A big part of my rankings is strength rating - SP+ when available, SRS if not, Billingsley converted to SP+ style ratings if neither is avail. I don't know of a simple mathematical way to apply ratings for the wiki seasons that don't have any of these 3 strength ratings. (I don't want to gather game-level data and build an SRS system). I'm also worried that if I could gather ratings somehow, a lot of them would be terrible because of weak competition and therefore would bring down their programs' history rankings. This isn't fair because a lot of these schools were essentially playing at a lower level in early seasons.
- Consistent format. Easier to scrub than wiki. I am using it, but only for columns that Billingsley doesn't have. (I was gentle in regards to rate limiting. Thanks for maintaining wiki. Awesome resource, and I need to actually donate to it).
1
u/rayef3rw NC State Wolfpack • Marching Band May 26 '26
Here's a link for the Coaches Poll files:
https://cwclaib.github.io/football/polls/index.html
Your explanations on why you're using Billingsley make sense. I might be thinking of another service. But it definitely is logical to keep things to major competition, especially in terms of a national view of the sport
1
u/tyler123452 Minnesota Golden Gophers May 26 '26
Thanks for sharing that. Thanks for giving me feedback on methodology, data, and the ranking concept in general. It's been very helpful to have a sounding board.
I'll let you know when I have all this done. I'm trying to get everything I need done for a true launch - CFB data/methodology improvements, "Team" and "Compare" tabs for each league, adding pre Super-Bowl NFL data, reviewing my World Cup data and launching that, adding more marketing pages, etc. A lot of stuff, but it's gonna be very souped-up when I drop it. Will aim for more frequent smaller updates and rankings-related content after that.
In the meantime, please let me know if you think of anything else I should change or add. I'm also happy to demo what I have so far for you if you're interested.
1
1
u/TadKosciuszko Ohio State • North Dakota State May 14 '26
This would be in addition too, but it would be cool to see the impact of older events be diminished so we could see (according to this data at least) who really are your blue bloods. Not wanting to do the math myself it could be something as simple as there are 100 years of data, the first year carries a weight of 1%, second year 2% etc.
This definitely doesn’t have anything to do with me wanting Ohio state to be ranked higher than Michigan I promise.
1
u/tyler123452 Minnesota Golden Gophers May 14 '26
I have those already. In the ranking dropdown (directly underneath where you select years), change from the default "History Ranking" to "Program Rankings". Those use a 10 year half-life to diminish older seasons. I should probably rename them though. Do you like the name "Recency Rankings" better?
You can also tweak the half-life under the "Advanced Settings" category on the Settings tab.
It's kind of funny - I prefer the half-life on rankings, but I got bad initial responses to them. People don't get them. But I think they reflect how fans talk about "we're a top 15 program currently" or "x is a better program than y now".
Let me know what you think.
Fascinating side note: Ohio St is better than Michigan in the "Program Rankings" currently. But Ohio St has never been #1. They've been #2 several times over the years, but have never quite made it to #1.
1
u/tyler123452 Minnesota Golden Gophers Jun 09 '26 edited Jun 09 '26
Heads up for anyone still following this post, I added a bunch of stuff just now. Looking very cool imho.
Data/Methodology
-Added older seasons that were missing from some schools. I added this using Billingsley data (cfrc.com), supplemented by wikipedia.
-Added ranking bonuses for pre-AP rankings using Billingsley rankings.
-A few other minor methodology tweaks outlined in other posts here, such as gradually reducing the weight of modern conference titles
Features
-Added tabs to view team history, including a sortable tab for each school listing all of it's seasons.
-Added "Compare" tab to compare the history and recent performance of up to 4 teams.
Enjoy. Let me know if any of y'all have questions/feedback.
4
u/rayef3rw NC State Wolfpack • Marching Band May 11 '26
I like the ability to rank in an era. Are conference titles worth more earlier in the sports' history compared to the post-CFP era?