Methodology
How NovaModel Works
Every rating, ranking and prediction on this site is computed. There is no panel, no ballot and no weekly editorial pass that moves a team up because it looked good on television. This page explains what the numbers are built from, which model produced which number, and where each one stops being reliable.
Nothing here is voted on
A human poll is a summary of what informed people believe. It has real advantages: a voter can see that a team lost its starting quarterback in the first quarter, or that a 30-point win came against a team already eliminated and playing its backups. A model sees none of that.
What a model has instead is consistency. It applies the same arithmetic to the team you follow and the team you have never watched, in week two and in week fourteen, and it does not get tired of a story or fall in love with a brand. When NovaModel disagrees with the AP Poll, that disagreement is a statement about schedules and results rather than a difference of opinion, and it can be traced back to the specific games that caused it.
Both things are true at once, which is why this site shows the polls next to the model rather than instead of it.
The one idea underneath all of it
Raw statistics describe two things at once: how good a team is, and who it happened to play. A defense that allows 14 points a game while facing the three worst offenses in its conference has not told you much. Opponent adjustment is the work of separating those two signals.
The mechanics are simple to state. For every game, the model asks what the average team would have done in that specific spot - against that opponent, on the road or at home - and credits the difference. Thirty-one points against a defense that typically gives up 34 is a below-average offensive performance. Seventeen against a defense that typically gives up 10 is an above-average one. What gets rated is the gap, not the box score.
The same idea drives the player models. A quarterback's 280 yards are worth more against a secondary that has been suffocating everyone else, and worth less against one that has been giving up 320 a week to the entire schedule.
Why it has to be solved in a loop
There is a circularity hiding in that description. To judge a performance against an opponent, you need to know how good the opponent is. But the opponent's rating depends on the teams it played, which depends on the teams they played, and so on until the whole sport is tangled together.
The team models resolve this by iteration. Every team starts at a neutral baseline - the model begins by assuming nobody is better than anybody. It then re-scores every game using the ratings it currently holds, which produces a new set of ratings, which it uses to re-score every game again. Each pass is a better estimate than the last, and after enough passes the numbers stop moving meaningfully. That settled state is the rating.
This is why strength of schedule is not a separate column anywhere on this site. It is not an adjustment applied at the end; it is the entire mechanism. A team's rating already contains its schedule, because the schedule is what the rating was computed against.
Reading the number
Team and player ratings are published on the same scale: 50 is the average, and the spread around it is set from how far apart the underlying scores actually are. In practice that puts most rated teams in the 40s and 50s, makes anything in the mid 70s genuinely exceptional, and makes the difference between 61.4 and 61.1 noise rather than a finding.
The scale is cosmetic. It is applied at the very end, after the ordering is already decided, so it never changes who is ahead of whom - it exists so that a number is readable on its own instead of arriving as a standard score somewhere around zero. A rating is only meaningful relative to the other ratings in the same table: it is a position in a distribution, not a quantity of anything.
Player ratings are scaled within a position, against the other players ranked at that position. A 62 for a quarterback and a 62 for a linebacker both mean “well above average for this position”, and nothing stronger than that - the two numbers come out of different models reading different statistics, and nothing on this site ranks a quarterback against a linebacker.
The models, and what each one is for
NovaModel is not one model. It is a family of them, each doing a job the others are bad at, and the site is explicit about which one produced any given number.
Team ratings drive the rankings pages, team pages, movement and history. Each sport has its own, because the box score does not mean the same thing in each: college football rates scoring and yardage margins, college basketball rates points, rebounds, assists and turnovers, and the NFL ranks teams mainly on their record. College football and the NFL both weigh win-loss record and the quality of each win, which basketball currently does not. The team ratings page covers all of this in detail.
Player ratings are separate models, one per position group, because the stats that describe a good tight end have nothing in common with the stats that describe a good safety. Each one aggregates a player's per-game production, adjusts it against what each opponent typically allows, and combines the adjusted rates into a single number. Every position ranking page carries a live explainer strip naming exactly which statistics its model reads, which of them count against the rating, and which are deliberately left unadjusted - that text is generated from the model that produced the table underneath it, so it cannot describe a version that is no longer running.
Preseason ratings exist because the iterative solve needs games, and in August there are none. A preseason number is a prior built from prior seasons and roster continuity, not a measurement, and it is labelled as its own model rather than presented as an early version of the in-season rating.
Score predictions are a fourth thing again: a forecast of a specific game, using team ratings as inputs. Predictions are published before kickoff and shown next to the actual result afterwards, which is the only honest way to present a forecast.
Deep dives for the player, preseason and prediction models are being written and will be linked here as they land. Until then, the live explainer on each position ranking page is the authoritative description of that position's model.
Two college football rankings, on purpose
The most consequential choice on this site is that college football runs two team models at once, and they disagree.
The ranking you see is resume-first. It weighs record and the quality of each win heavily, because that is what a ranking is being asked to do - it is a claim about what a team has earned, and it should be recognisable next to how the playoff committee and the human polls evaluate a season. The model behind the score predictions is tuned differently, for one measurable thing: forecasting margins accurately, tested against closing betting lines.
These two goals genuinely conflict. A model that predicts games best does not care much whether a team is 10-2 or 9-3; it cares how the team plays. Raising the weight on record makes the ranking read better and makes the predictions measurably worse. Rather than pick one and quietly compromise both, the site runs each model for the job it is good at, and says which is which.
The practical consequence is worth stating plainly: the prediction for a game will sometimes favour the team ranked lower. That is not a bug, and neither number is being corrected toward the other.
What is published, and what is not
These pages publish the mechanism - what each model reads, how it combines it, which direction each input pushes, and where the model is known to be weak. They do not publish the specific weights each input carries.
That is a deliberate line rather than an oversight. The weights are the part that is actively tuned: they get moved when a case check shows the model is wrong, and a page reciting a table of current values would go stale the first time one changed - silently, since nothing breaks, the page just starts being untrue. Everything on these pages is either structural or stable across every model here, which is why it can be trusted to stay accurate.
What these models do not measure
Every one of these is a real limitation, not a disclaimer.
Injuries and availability. No model here knows who played. A team that lost its quarterback in September carries its September results at full weight, and a team getting one back in November gets no credit for it until the results arrive.
Anything below the box score. These models read final team and player statistics, not play-by-play. There is no drive-level or expected-points accounting, no field position, no situational splits.
When a game happened. Games are currently weighted equally across a season. A team that was bad in September and is excellent in November rates as the average of both, which understates it. The machinery for recency-weighting exists in the code and is switched off, because turning it on without testing it properly would trade a known limitation for an unknown one.
Roster change between seasons. In-season ratings contain no talent or recruiting prior. They describe what has happened, which is the right behaviour for a ranking and the wrong behaviour for the first week of a season - hence a separate preseason model.
Confidence. A rating is a point estimate with no error bar attached. Early in a season, when a team has played twice, its rating is a guess wearing a decimal point, and the model handles that by pulling thin records toward average rather than by publishing an uncertainty range.
Equal validation across sports. The college football settings have been checked against real results repeatedly over several seasons. The college basketball model uses the same machinery with settings that are reasoned starting points rather than validated ones, and the NFL ranking's balance between record and points is a judgement, not a measurement. Those rankings are honest arithmetic on real data; they have simply not been put through the same testing, and they are labelled that way on the team ratings page.
Checking our work
A methodology page is easy to write and hard to verify, so the site is built so you do not have to take it on faith. Score predictions are published before games and displayed next to the final result. The rankings page shows the model next to the AP and Coaches polls, so the disagreements are visible rather than asserted. Every team page shows the schedule the rating was computed from, and every position ranking page names the statistics its model read.
There are also analytics pages that turn the model on itself - measuring how large home advantage actually is in the data, whether the human polls systematically favour particular conferences, and how offensive and defensive ratings are distributed. Those are findings, not settings, and they are published whether or not they are flattering.
Read further
Shorter answers to common questions are on the FAQ, and the reasoning behind building any of this is on the About page.