NO BLACK BOX.
A résumé ranking, not a prediction. The question is simple: who has earned the strongest ranking from what has happened on the field?
CURRENT FORMULA: v1.0.001 / WHAT GOES IN.
Completed games from the current season. Wins, losses, opponent results, location and scoring margin. Every FBS team is scored. No preseason poll, recruiting class, program prestige, betting line, AP ranking or previous-season result enters the model. All calculations restart from the season’s game data each week.
02 / THE SEVEN COMPONENTS.
COMPUTER_SCORE =
0.25 × RESULTS + 0.20 × QUALITY_WINS + 0.20 × SOS
+ 0.15 × STRENGTH_OF_RECORD + 0.08 × ROAD
+ 0.07 × DOMINANCE + 0.05 × LOSS_QUALITY
Components range from 0–100. We preserve full floating-point precision for calculation and ties; displayed totals are rounded to two decimals.
Results / 25%
RESULTS = wins / gamesPlayed × 100
An undefeated team receives 100. We do not invent a ceiling for undefeated teams.
Strength of schedule / 20%
For each opponent, remove every game against the team being evaluated from the opponent’s record. Aggregate the remaining wins and games across opponents, rather than averaging their percentages.
OWP = Σ adjusted opponent wins / Σ adjusted opponent games
OOWP = arithmetic mean of opponents’ OWP
SOS_RAW = 0.70 × OWP + 0.30 × OOWP
SOS_SCORE = percentile(SOS_RAW)
An FCS opponent supplies zero wins and one game to the OWP aggregate, and zero to OOWP. This keeps FCS-only records from inflating schedule strength. An FBS opponent with no other games supplies a neutral 0.5 wins / 1 game observation. This is an explicit missing-data convention, not a team rating or preseason prior. Repeated opponents are counted once per scheduled game.
Quality wins / 20%
OPPONENT_QUALITY =
0.70 × adjusted opponent win percentage
+ 0.30 × opponent OOWP
WIN_VALUE = 1 + 1.25 × OPPONENT_QUALITY
+ LOCATION_BONUS + min(margin, 21) / 21 × 0.20
Home: +0.00 · Neutral: +0.10 · Road: +0.20
QUALITY_WINS = percentile(Σ WIN_VALUE / gamesPlayed)
For an FCS win, opponent quality is zero and the location bonus is omitted. The maximum is exactly 1.20 résumé units. FCS wins still count in the official record. We apply no separate arbitrary scheduling penalty.
Strength of record / 15%
How unlikely is it for an average FBS team to match or exceed this number of wins against this schedule? This is a deterministic approximation, not a betting forecast.
p = clamp(0.50 + 0.40 × (0.50 − opponentQuality)
+ locationAdjustment, 0.05, 0.95)
Home: +0.08 · Neutral: 0.00 · Road: −0.08
P₀(0) = 1
Pᵢ(k) = Pᵢ₋₁(k) × (1−pᵢ) + Pᵢ₋₁(k−1) × pᵢ
SOR_RAW = 1 − Σ Pₙ(k), for k ≥ actualWins
SOR_SCORE = percentile(SOR_RAW)
We compute the exact Poisson-binomial tail by dynamic programming. Game outcomes are modeled as independent Bernoulli trials for this approximation. No simulation, randomness or LLM is involved.
Road / neutral performance / 8%
ROAD_RESULT = (roadWins + 0.5 × neutralWins)
/ max(1, roadGames + neutralGames)
ROAD_RAW = 0.70 × ROAD_RESULT
+ 0.30 × min(roadWins + neutralWins, 4) / 4
ROAD_SCORE = percentile(ROAD_RAW)
The neutral-site half weight follows the ROAD_RESULT definition in the v1 specification. Quantity credit treats road and neutral wins equally.
Capped dominance / 7%
AVG_MARGIN = mean(clamp(signedMargin, −21, 21))
DOMINANCE_RAW = AVG_MARGIN + (SOS_RAW − FBS_AVG_SOS) × 10
DOMINANCE_SCORE = percentile(DOMINANCE_RAW)
The schedule scaling constant is fixed at 10 in v1.0.0. A 42-point win receives the same margin credit as a 21-point win in every component.
Loss quality / 5%
LOSS_PENALTY = 1 + (1 − opponentQuality) × 0.75
+ locationPenalty + min(lossMargin,21) / 21 × 0.25
Home: +0.20 · Neutral: +0.10 · Road: +0.00
LOSS_RAW = 1 / (1 + Σ LOSS_PENALTY)
LOSS_SCORE = percentile(LOSS_RAW)
Undefeated teams receive 100 for loss quality. FCS opponent quality is zero for losses as well as wins.
03 / TIES WITHOUT OPINIONS.
Any score difference greater than 1.0 point takes precedence. Within 1.0 point, a head-to-head winner receives priority. Split series cancel each other. Remaining ordering uses strength of record, quality wins, SOS, road score, fewer losses, capped dominance, then stable alphabetical order and team ID.
Head-to-head comparisons can form cycles. We build a precedence graph rather than use a non-transitive sorting comparator. Cycles are resolved using the secondary criteria while retaining score precedence for differences greater than 1.0. This is deterministic, including when input order changes.
04 / PERCENTILES & EARLY DATA.
percentile(x) = 100 × (count(values < x)
+ (count(values = x) − 1) / 2) / (N − 1)
Ties share the midpoint of their occupied ranks. A singleton or all-equal cohort receives 50. Percentiles use FBS teams with completed games. Teams with no completed games receive zero components and appear after teams with results.
Weeks 0–2 are labeled Early Data. Computer rankings become more meaningful as schedules become interconnected. Week 5 adds opponent information, but is not a statistical confidence guarantee. We do not introduce preseason information to smooth early volatility.
05 / REPRODUCE THE POLL.
Each weekly snapshot stores the algorithm version, original team roster, factual game inputs, component scores, per-game values and a SHA-256 fingerprint. Published snapshots cannot be updated or deleted. Later game corrections apply to future snapshots.
The public API includes all FBS teams and the inputs needed to reproduce the result. AP data is overlaid for comparison after calculation and cannot affect a computer score.
AP comparison conventions
AP difference = AP rank − computer rank. Positive means the computer ranks a team higher. AP-unranked teams display NR and have no exact numerical difference. Mean absolute difference uses AP-ranked teams only; overlap metrics compare membership in each poll.
Changelog
v1.0.0 — Initial implementation. Seven weighted components, exact SOR, 21-point cap, midrank percentiles, zero-information and FCS conventions, and deterministic cyclic head-to-head handling. Historical backtesting for 2023–2025 is a required launch check; the current implementation is not presented as historically validated until those runs are completed.
Back to the rankings →