Hatch Mathematical College Football Rankings - Version 3.9
(System Last Updated February 9, 2026)
Only three factors are germane to ranking teams:
(1) Who did you play?
(2) Where did you play?
(3) What was the score?
(1) Who did you play?
(2) Where did you play?
(3) What was the score?
The system is iterative. Each game produces a game-level Performance Rating for both teams. A team's season rating is the average of those game-level ratings, converted to the published display scale. Teams are then reranked, and those new ranks are used as inputs for the next iteration.
1. Definitions
Rank (RK): The published position of a team when all rated teams are sorted by Output Rating in descending order. The highest Output Rating has RK = 1.
Rank Factor (RF): A rank-normalized value on a 150-point scale:
RF = (RK / (N + 1)) * 150
where N is the number of rated teams, excluding the Placeholder.
Points Value (PT): A value derived from the opponent's Rank Factor:
PT = 151 - RF
Initial Ranking (IR): The ranking set used to begin an iteration. In the first pass, teams begin from seeded starting ranks. Each later pass begins from the ranking produced by the previous iteration.
Output Rating: The season average of a team's game-level Performance Ratings in a given iteration, transformed to the display scale.
Output Ranking: The ranking produced by sorting teams by Output Rating in descending order.
Stable Ranking Set: Reached when one full iteration reproduces the same published rank numbers as the iteration before it.
Final Ranking: The Output Ranking produced by the last iteration used by the engine.
Placeholder: A synthetic fallback opponent used when a game references a non-rated or missing team. It is fixed at last place, is never displayed as a ranked team, and is never allowed to move.
Rank Factor (RF): A rank-normalized value on a 150-point scale:
RF = (RK / (N + 1)) * 150
where N is the number of rated teams, excluding the Placeholder.
Points Value (PT): A value derived from the opponent's Rank Factor:
PT = 151 - RF
Initial Ranking (IR): The ranking set used to begin an iteration. In the first pass, teams begin from seeded starting ranks. Each later pass begins from the ranking produced by the previous iteration.
Output Rating: The season average of a team's game-level Performance Ratings in a given iteration, transformed to the display scale.
Output Ranking: The ranking produced by sorting teams by Output Rating in descending order.
Stable Ranking Set: Reached when one full iteration reproduces the same published rank numbers as the iteration before it.
Final Ranking: The Output Ranking produced by the last iteration used by the engine.
Placeholder: A synthetic fallback opponent used when a game references a non-rated or missing team. It is fixed at last place, is never displayed as a ranked team, and is never allowed to move.
2. Calculation of the Performance Rating
Each game generates a Performance Rating for both participating teams. The average of a team's game-level Performance Ratings across the season becomes that team's Output Rating for the current iteration.
Part One. Margin of Victory
For a non-tie game in which Team A defeats Team B by a margin of M:
Let:
The winner's preliminary rating is:
The loser's preliminary rating is:
This means that margin helps, but only up to a cap. The winner's margin bonus stops increasing after 24 points, while the loser's margin penalty continues to rise through 34 points before capping.
For a non-tie game in which Team A defeats Team B by a margin of M:
Let:
- RF[A] = Team A's Rank Factor
- RF[B] = Team B's Rank Factor
- PT[B] = 151 - RF[B]
The winner's preliminary rating is:
- where M <= 24:
IPR[A] = (PT[B] * 1.3) * (1 + 0.0025 * M) - where 25 <= M <= 34:
IPR[A] = (PT[B] * 1.3) * 1.0625 - where M >= 35:
IPR[A] = (PT[B] * 1.3) * 1.0625
The loser's preliminary rating is:
- where M <= 24:
IPR[B] = -1.1 * (RF[A] + 50) * (1 + 0.0025 * M) - where 25 <= M <= 34:
IPR[B] = -1.1 * (RF[A] + 50) * (1 + 0.0025 * M) - where M >= 35:
IPR[B] = -1.1 * (RF[A] + 50) * 1.0875
This means that margin helps, but only up to a cap. The winner's margin bonus stops increasing after 24 points, while the loser's margin penalty continues to rise through 34 points before capping.
Part Two. Preliminary Modifications
After the initial values are calculated, additional modifiers are applied.
Then:
IPR[B] = IPR[B] * (1 + 0.5 * (1 - exp(-0.01 * RF[A])))
Together, these modifications give a larger reward for defeating a highly ranked opponent than for defeating a lower-ranked one, and make heavy defeats more damaging, while also making losses to strong teams less punitive than losses to weak teams.
After the initial values are calculated, additional modifiers are applied.
- For the winning team:
IPR[A] = IPR[A] * (exp(-0.01 * RF[B]) + 1) - For the losing team:
Define the piecewise function pf(M) as:
- if M < 25:
pf(M) = 1 + 1 / (1 + exp(-0.3 * (M - 12)))
- otherwise:
pf(M) = 2
Then apply:
Then:
IPR[B] = IPR[B] * (1 + 0.5 * (1 - exp(-0.01 * RF[A])))
Together, these modifications give a larger reward for defeating a highly ranked opponent than for defeating a lower-ranked one, and make heavy defeats more damaging, while also making losses to strong teams less punitive than losses to weak teams.
Part Three. Site Based Modifications:
After the preliminary values are established, site adjustments are applied.
Neutral-site games:
Bowl games:
Road wins:
Home wins:
After the preliminary values are established, site adjustments are applied.
Neutral-site games:
- PR[A] = IPR[A] * 1.2
- PR[B] = IPR[B] * 1.1
Bowl games:
- PR[A] = IPR[A] * (1.6 * exp(-0.01 * RF[B]))- PR[B] = IPR[B] * 1.2
Road wins:
- PR[A] = IPR[A] * 1.2
- PR[B] = IPR[B] * 1.2
Home wins:
- PR[A] = IPR[A] * 1.0
- PR[B] = IPR[B] * 1.0
3. Ties
Ties are handled separately from non-tie games.
Instead of using a standalone tie formula, the system treats a tie as a weighted blend of two hypothetical one-point outcomes:
1. a one-point away win, and
2. a one-point home win.
After that, a tie-site multiplier is applied:
This treatment places a tie slightly closer to a narrow loss than to a narrow win for each team.
Instead of using a standalone tie formula, the system treats a tie as a weighted blend of two hypothetical one-point outcomes:
1. a one-point away win, and
2. a one-point home win.
- For the away team:
- For the home team:
Tie PR[home] = 0.45 * PR[home as 1-point winner] + 0.55 * PR[home as 1-point loser]
After that, a tie-site multiplier is applied:
- bowl tie: multiply both teams by 1.2
- neutral-site tie: multiply both teams by 1.2
- standard home-and-away tie: multiply both teams by 1.1
This treatment places a tie slightly closer to a narrow loss than to a narrow win for each team.
4. Synthesizing Game Performance Ratings Into an Output Rating
For each team:
raw output = average(PR[Game 1], PR[Game 2], ..., PR[Final Game])
The published display value is then:
OUTPUT RATING = (raw output + 150) / 450
Teams are ranked by Output Rating from highest to lowest.
raw output = average(PR[Game 1], PR[Game 2], ..., PR[Final Game])
The published display value is then:
OUTPUT RATING = (raw output + 150) / 450
Teams are ranked by Output Rating from highest to lowest.
5. Iteration and Convergence Rules
Once every team has an Output Rating for the current pass, the teams are reranked and the new ranking becomes the input for the next iteration.
The system stops when no team's published rank number changes from one iteration to the next.
That is not the same thing as requiring every underlying numeric rating to become perfectly stationary. In some seasons, the published rank order can stop changing even though small rating movements still remain underneath the surface. The stopping rule is based on rank stability, not total numerical immobility.
If the engine reaches its iteration cap (100 iterations) before the rank order stabilizes, it does not declare full convergence. Instead, for any team still moving, it averages the current Output Rating with the previous iteration's Output Rating and then publishes the final table from that adjusted result.
The system stops when no team's published rank number changes from one iteration to the next.
That is not the same thing as requiring every underlying numeric rating to become perfectly stationary. In some seasons, the published rank order can stop changing even though small rating movements still remain underneath the surface. The stopping rule is based on rank stability, not total numerical immobility.
If the engine reaches its iteration cap (100 iterations) before the rank order stabilizes, it does not declare full convergence. Instead, for any team still moving, it averages the current Output Rating with the previous iteration's Output Rating and then publishes the final table from that adjusted result.
6. Ranking Teams Based on Output Rating & Miscellaneous Rules
- The Placeholder is always fixed below all rated teams and is never allowed to move.
- Published ranks are assigned from Output Rating in descending order.
- Teams with the same displayed rating to four decimal places share the same published rank number.
- Teams will be included if they were part of the University Division after 1950 until 1972, or Division I from 1973 until 1977, or Division I-A, or I-FBS, since 1978. Prior to 1950, teams were included based on a centrality analysis, if they played a number of games within 1 standard deviation of the mean number of games played by a team against other ranked teams in the given season.
7. Determination of the National Champion
The team with the highest Final Ranking after all scheduled games within one season have been played will be declared the National Champion.