Methodology
Two layers: a points-based power rating that predicts games, and a WAB résumé that ranks teams on what they have won. No polls, no preseason opinion. Beside them, a separate ML engine forecasts games from play-by-play stats; it never touches the ranking.
Power
Power is a ridge regression on this season's scoring margins, each capped at 28 points (overtime games count as a draw on margin). Every team starts at 0, an average FBS team, and is pulled back toward it until its games say otherwise. It is in points: +10 means 10 points better than an average FBS team on a neutral field. Home field is a league-wide constant, +2.16 pts: the average home edge in conference games, 2014–2025, where schedules are balanced. (Fitted week by week it ran hot — +4.2 in 2026 through week 7 — because the ridge pulls lopsided early-season home games toward even and the home-field term soaked up the difference.) All FCS teams are one pooled opponent (−22.0). Power rates every opponent inside WAB, makes the model's pick on the Picks page and is graded on the Scoreboard. Game forecasts elsewhere (playoff odds, Scenarios, Compare, the Matchup Predictor) come from the ML engine; Picks shows both.
WAB: the ranking
WAB (wins above bubble) asks: how many more wins does this team have than a bubble team (the #12 team by power, now Ole Miss, +10.5) would be expected to have against the same schedule, at the same sites? Each game is scored by how likely the bubble team would have been to win it. The chance uses the same uncertainty as the picks: game noise plus the uncertainty in the opponent's power. A win is worth 1 minus that chance; a loss costs that chance. Beating a top team on the road is worth nearly a full win; beating an FCS team is worth almost nothing; losing to one costs almost a full win. A team's own margins never enter its WAB: its opponents are rated by a fit that leaves out every one of its games, so winning big can't lower an opponent and getting blown out can't inflate one.
Head-to-head
If one team beat another (won more of their meetings) and the loser leads by no more than 0.25 WAB, the loser ranks just below the winner. Results are applied closest-gap first. One that would close a loop (A beat B, B beat C, C beat A) is skipped, and so is one that, together with those already applied, would push any team below a team it leads by more than 0.25 WAB — chains of results can't stack. The window was chosen by backtest: it removes about 36% of top-25 head-to-head inversions (23.8% → 15.3%), at a cost of 0.16 points in how well the ranking picks games (68.8% → 68.7%, weeks 7–13). Wider windows cost more.
| Window (WAB) | Ranking picks | Change, pts (95% CI) | Top-25 inversions |
|---|---|---|---|
| off | 68.8% | — | 23.8% |
| 0.25 | 68.7% | −0.16 [−0.23, −0.09] | 15.3% |
| 0.50 | 68.5% | −0.39 [−0.58, −0.16] | 10.4% |
| 1.00 | 68.3% | −0.53 [−0.95, +0.02] | 5.1% |
| always | 67.3% | −1.57 [−2.20, −0.84] | 3.3% |
ML engine
A separate model that answers a different question: not what a team has earned, but how good it is and who would win next. It reads CollegeFootballData's pregame team stats (opponent-adjusted EPA, success rate, explosiveness, line yards, havoc, points per scoring chance, field position), plus Elo and roster talent. Each input is the gap between the two teams in one stat, worth a fixed number of points, plus home field: a linear model, fitted on 4,777 FBS games from 2016–2025 (2020 left out, regular season from week 5). Every stat may only push the way you'd expect, so a better offense never lowers a team's odds; the margin becomes a win probability through a normal curve fitted on the same games. A gradient-boosted tree model (CatBoost) was tried and did worse; with a few thousand games, the simpler model wins.
Tested on 4,468 games (weeks 5–13), each season predicted by a model that never saw it, it misses the final margin by 12.59 points on average, against 13.11 for power and 12.26 for the Vegas closing line (used only as a yardstick, never as an input). On 2025, held out until the end: 12.01 vs 12.43. Its live record this season is on the Scoreboard.
Its rating is a team's expected margin against an average FBS team on a neutral field; the ML ranking orders teams by it. Because Elo and talent carry over from earlier seasons, it keeps some memory of last year, which the résumé deliberately does not. The stats arrive Sunday nights from week 6; a team on a bye keeps its previous week's numbers.
Playoff odds
Each simulated season plays every remaining game from the ML engine's win probability (games against FCS teams, and any week before the engine has data, use power instead). Power's uncertainty still rides along, so a team that is better than its numbers tends to win several of its games together rather than each one independently. The simulation then refits power and re-scores every résumé the same way the ranking does, and picks a 12-team field (five highest-ranked conference champions plus seven at-large) by WAB. Head-to-head isn't applied inside simulated seasons.
Backtest
2014–2025 regular seasons (11 seasons; 2020 excluded), completed FBS-vs-FBS games, weeks 2–13. One protocol for every model, the same one the Models page uses: each week is predicted, and each ranking built, from earlier weeks only; anything fitted — the two-layer settings and home field, the classic and Elo win-probability curves — is fitted on the other seasons. Log-loss: lower is better; a change whose interval (seasons resampled) crosses 0 is noise.
| Every FBS game | weeks 2-6 | weeks 7+ | all weeks |
|---|---|---|---|
| Games | 2,865 | 4,333 | 7,198 |
| Accuracy · Two-layer | 69.3% | 71.5% | 70.6% |
| Accuracy · Two-layer (v1) | 68.5% | 71.8% | 70.5% |
| Accuracy · Classic | 64.4% | 66.4% | 65.6% |
| Accuracy · Elo | 67.3% | 70.7% | 69.4% |
| Log-loss · Two-layer | 0.5802 | 0.5472 | 0.5603 |
| Log-loss · Two-layer (v1) | 0.5928 | 0.5472 | 0.5653 |
| Log-loss · Classic | 0.6319 | 0.6106 | 0.6191 |
| Log-loss · Elo | 0.6052 | 0.5622 | 0.5793 |
| Log-loss change vs v1, 95% CI | −0.013 [−0.018, −0.007] | −0.000 [−0.002, +0.001] | −0.005 [−0.007, −0.003] |
| Log-loss change vs classic, 95% CI | −0.052 [−0.062, −0.042] | −0.063 [−0.077, −0.052] | −0.059 [−0.067, −0.051] |
| The ranking as a picker (higher rank wins) | weeks 2-6 | weeks 7+ | all weeks |
|---|---|---|---|
| Two-layer | 64.2% | 68.7% | 66.9% |
| Two-layer (v1) | 62.9% | 68.6% | 66.3% |
| Classic | 64.6% | 66.4% | 65.7% |
| Change vs v1, pts, 95% CI | +1.33 [+0.64, +2.01] | +0.09 [−0.11, +0.30] | +0.58 [+0.33, +0.87] |
| Ranked-team games (AP has a pick) | weeks 2-6 | weeks 7+ | all weeks |
|---|---|---|---|
| Games | 980 | 1,411 | 2,391 |
| AP poll | 78.4% | 75.8% | 76.8% |
| Two-layer ranking | 71.2% | 75.3% | 73.7% |
| Classic ranking | 71.0% | 74.1% | 72.8% |
| Two-layer power (+ home field) | 74.9% | 77.5% | 76.4% |
| Games with a betting line | weeks 2-6 | weeks 7+ | all weeks |
|---|---|---|---|
| Games | 2,863 | 4,321 | 7,184 |
| Betting favourite | 75.9% | 73.3% | 74.3% |
| Two-layer power | 69.3% | 71.7% | 70.7% |
| Margin error · market | 12.0 pts | 12.4 pts | 12.3 pts |
| Margin error · two-layer | 14.8 pts | 13.1 pts | 13.8 pts |
Margin error is the average gap, in points, between a predicted margin and the actual final margin (the market's prediction is its consensus spread). In weeks 2–6 the market misses by 12.0 points and power by 14.8. That early gap is the deliberate price of using no priors: every team starts the season at average, so the first weeks are spent learning what the market assumes on day one.
Calibration
When power makes a team the favourite at a given probability, how often does it win? Predicted → actual, games in brackets.
| Favourite's chance | weeks 2-6 | weeks 7+ |
|---|---|---|
| 50–55% | 52.5% → 51.1% (440) | 52.5% → 50.9% (515) |
| 55–60% | 57.4% → 60.6% (436) | 57.5% → 60.0% (530) |
| 60–65% | 62.4% → 62.3% (398) | 62.4% → 63.6% (508) |
| 65–70% | 67.3% → 71.6% (370) | 67.4% → 63.5% (485) |
| 70–75% | 72.4% → 72.0% (332) | 72.5% → 69.8% (437) |
| 75–80% | 77.5% → 78.9% (275) | 77.4% → 75.9% (457) |
| 80–85% | 82.4% → 77.8% (248) | 82.5% → 81.3% (423) |
| 85–90% | 87.4% → 89.6% (183) | 87.5% → 87.6% (403) |
| 90–95% | 92.2% → 92.3% (143) | 92.6% → 91.8% (340) |
| 95–100% | 96.7% → 95.0% (40) | 97.1% → 96.6% (235) |
Fitted settings: ridge λ = 1.50, game noise σ = 10.9 pts, home field +2.16 pts, margin cap 28, bubble = #12 by power.
Changelog
2026-11-10 · Playoff field rule fixed; bracket and weekly notes. The playoff field now gives automatic bids to the five highest-ranked conference champions from any FBS conference, as this page already described. Before, the code reserved four bids for Power-conference champions and one for the best Group of 5 champion, and it didn't count the rebuilt Pac-12, so Boise State couldn't earn a champion's bid. This changes some playoff odds; the ranking itself is unchanged. New: the bracket if the season ended today (mine and the committee's) and weekly notes.
2026-11-10 · ML engine added; new address. A separate ML engine now forecasts games from play-by-play team stats. It adds the ML column to the rankings, the vs ML page, the Matchup Predictor, an ML pick on Picks and an ML line on the Scoreboard, and it now plays the remaining games in the playoff odds, Scenarios and Compare. The ranking itself (WAB) is unchanged. The site moved to cfbresume.com; the old address forwards here.
2026-10-18 · Methodology fixes, applied retroactively. Recomputed every 2026 week and the 2000–2025 History under the fixes below; the previous outputs are archived (git tag published-2026-10-18-pre-baseline-a, data/archive/2026-10-18-pre-baseline-a/).
- Opponents rated without you. A team's opponents are now rated by a fit that leaves out all of that team's games. Before, winning by more lowered the loser's power and so the value of the win, and getting blown out made the loss cheaper.
- Home field held at the conference-game average (+2.16 pts) instead of fitted each week, which inflated it early in the season (+4.2 in 2026).
- WAB uses the same uncertainty as the picks: game noise plus the uncertainty in the opponent's power. It used game noise alone, which was overconfident early.
- Head-to-head moves can't stack: a chain of results may no longer push a team below one it leads by more than the window.
2026-10-18 · Two-layer model adopted. Replaced the classic resume-points model, which is still computed on the Classic page.
The retired resume-points model is still computed each week on the Classic page for comparison.