Behind the scenes

Deep dive: how the numbers are made

Where every number comes from, how the model rates teams, where AI is (and isn't) used, and how it all stays up to date. Plain English first, with the formulas for anyone who wants them.

12 seasonsof games, 2015–2026
ESPN + open datascores, stats, weather & prices
15 minscores & lines refresh
Nightlyfull sync & retest
On this pageJump to a section
The idea

Betting lines are set by markets that see a lot of information, so they are hard to beat. What a fan can do is see the data clearly: who covered, how lines moved, how strong each team really is once you account for its schedule, and whether any pattern has actually held up over years of games.

That is what this site does. It collects public data, rates every team with a simple and fully disclosed model, tests every idea on past seasons before using it, and publishes the results, including the parts that don't work.

Rule we follow: a pattern is only called an edge if it beat the 52.4% break-even rate over at least 40 bets with statistical confidence. No model lean has cleared the proven-edge bar yet, and the site says so. One of the 23 trend signals on game cards has cleared the bar; only it shows green.
How it fits together
1. Collect
Scores, lines, box scores, injury reports, play-by-play and weather from ESPN, nflverse, CollegeFootballData (and its cfbfastR-data mirror) and Open-Meteo.
2. Store
Everything is saved by season. Finished seasons are kept for good; only the current season is refreshed.
3. Build features
Efficiency points from yards, turnovers and EPA; usual starting QB; kickoff wind; ratings implied by the lines.
4. Rate & predict
Power ratings for every team, then a projected score, line, total and win probability for every game. An XGBoost layer can refine them against the closing line.
5. Publish
Game cards, team and week pages, Ask answers and the public track record.
Where the data comes from
All public sources. No paid feeds, no scraped sportsbooks.
DataSourceWhat we use it forHistory
Schedules, scores, venuesESPNResults, records, standings and the base of the ratings2015–now
Opening and closing spreads and totalsESPN odds feed; for college also a multi-book consensus (cfbfastR-data)Cover and over/under results, line movement, the market part of the prior and win probability; the track record and backtest prefer the college consensus line where one is saved, while finished game cards and team pages grade on ESPN's single-book close2015–now; ESPN openers only from 2024 (earlier ones copy the close)
Box scores: yards, plays, turnovers, passersESPN game summariesEfficiency points, each team's usual starting QB, matchup stats2015–now
NFL injury report, liveESPNThe injury card and the backup-QB adjustment for upcoming gamesLive only
NFL final injury reportsnflverse (open data)The usual starting quarterback as listed before kickoff, in every backtest and finished-game card2015–now
NFL play-by-play: EPA, success ratenflverse (open data)Matchup stats and XGBoost inputs; tested in the power ratings but not adopted there2015–now
NFL quarterback EPAnflverse (weekly player stats)Starter quality: the gap between the two starters' EPA per play moves the margin2015–now
College advanced stats: PPA, success rateCollegeFootballData.comHalf of the college efficiency points, matchup stats (garbage time excluded)2015–now
Kickoff weather: wind, gusts, temperature, rainOpen-Meteo (CC BY 4.0)Wind adjustment to totals, game conditions card2015–now; forecasts within 15 days
HeadlinesESPN, Google NewsNews & sentiment on game cards (on request)Live only
Quarter scores and 1st-half linesESPN scoreboards and oddsHalftime pages: 1st-half results, 1st-half spreads and totals (real NFL lines from 2025; estimated otherwise)2015–now
How it stays up to date
Times are Pacific
Scores, schedules and current linesEvery 15 min
Pages, power ratings and predictions rebuiltEvery 10 min
NFL injury reportEvery 20 min
Kickoff weather forecasts (games within 15 days)Every 3 hours
Play-by-play efficiency, current seasonEvery 12 hours
Halftime scores and NFL 1st-half linesEvery 6 hours
Full data sync, model retest and track recordNightly, ~midnight
Finished seasonsStored for good
The nightly job
1
Sync the current season
New scores, closing lines, box scores, weather and play-by-play for games played since the last run.
2
Retrain and retest the models
XGBoost is retrained each night on the finished games in its data (games without a closing line are not fitted), then tested again season by season, each season predicted by a model that never saw it. The power-rating model's backtest runs again too, so the published records always include last weekend.
3
Refresh the signal records
Trend signals are re-scored against the market, which decides whether a signal shows green (it beat the market) or yellow on game cards.
4
Retest the 1st-half model
New halftime scores and 1st-half lines, then the separate 1st-half backtest behind the Halftime pages.
5
Fail safe
If any step fails, yesterday's records are kept and the site keeps running; nothing half-written goes live.
The model, step by step
A transparent statistical model: every input and weight is listed below
1
Score every past game fairly
Final scores are noisy, so each game's score is blended with efficiency points (50% of the training score in the NFL, 50% in college): the points a team "should" have scored given its yards, turnovers and (in college) play-by-play efficiency. NFL margins are capped at 21 so one blowout can't dominate; college margins count in full, because the cap turned out to squeeze the ratings.
2
Solve the power ratings
An iterative least-squares fit, like the Simple Rating System. Every team gets a rating, an offense and a defense number: points better or worse than an average team on a neutral field. Schedule strength is built in, because beating a good team moves your rating more than beating a weak one.
3
Start from a sensible prior
Early in a season there is little data, so each team starts from last season's rating (keeping 50% in the NFL, 75% in college) blended with what this season's betting lines imply about it. The prior counts as 9 games (NFL) or 3 (college), so real results take over within a few weeks.
4
Project the game
Rating difference plus home field gives the margin; offense against the opposing defense gives each team's points. Wind lowers the total (0.4 points per mph above 5). In the NFL a missing starting quarterback costs his team 3 points, and the gap between the two starters' EPA per play moves the margin (15 points per 1.0). Time zones crossed (and, in college, altitude) add small travel terms.
5
Turn it into odds, and stay humble
Win probability mixes the model with the market line (90% market in the NFL, 80% in college), because the line is the best single public predictor. Leans against the spread or total are shown as "context only" unless they have proven an edge.
The formulas
// 1. efficiency points (box score) effPts = a + y × yards + 0.35 × t × (takeaways − giveaways) // college: 50% of effPts comes from play-by-play pbpPts = a + e × EPA + s × successful plays + p × plays train = 50% × points + 50% × effPts // 2. ratings (least squares over every game) margin ≈ R(home) − R(away) + HFA homePts ≈ μ + O(home) − D(away) + HFA / 2 // 3. prior prior = mix(last season × regress, line-implied rating) + 3 × talent z-score (college, 247 composite) // 4. projection margin = km × (R(home) − R(away)) + HFA ± 3 (backup QB, NFL) + 15 × (home QB EPA − away QB EPA) (NFL) + travel homePts = μ + kt × (O(home) − D(away)) + HFA / 2 total = homePts + awayPts − 0.4 × max(0, wind − 5 mph) // km = 1.1 college (fitted gaps ran narrow), 1 NFL // kt = 0.9 NFL, 0.9 college // 5. win probability (Φ = normal curve) blend = w × market spread + (1 − w) × margin P(home) = Φ(blend / σ) σ = 11 NFL, 14 college
Fitted coefficients: NFL a = −2.98, y = 0.075 pts/yard, t = 2.14 pts/turnover; college a = −8.81, y = 0.094, t = 2.18. Fitted by least squares on 2015–26 box scores. HFA = 1.75 (NFL), 2.5 (college).
Variables we consider
What goes into the rating model, what also feeds XGBoost, what is only shown for context, and how much weight each gets
VariableWhat it capturesNFLCollegeStatus
Final score marginWho won and by how much; NFL margins are capped, college margins count in full (the cap had squeezed the ratings)cap 21cap noneIn model
Opponent strengthSchedule difficulty, solved jointly for all teamsbuilt inbuilt inIn model
Yards and turnoversSteadier than points; turnovers kept at 35% because they barely repeat50% of score50% of scoreIn model XGBoost
EPA / PPA and success rateValue added per play. In the NFL ratings it made totals worse; only XGBoost and the cards use it theretested50% of efficiencyCollege XGBoost
Home fieldPoints for playing at home; zero at neutral sites1.75 pts2.5 ptsIn model
Last season's ratingCarry-over of team strengthkeep 50%keep 75%In model
Line-implied ratingsWhat this season's closing lines say about each team50% of prior75% of priorIn model
Roster talentThe 247 team-talent composite shifts each FBS team's preseason starting point, sharpening the first weeks until results take over—3 pts per 1 sd of talentCollege
Lines of games already playedEach finished game of the season is also scored the way its closing line implied, as a second, lighter training game ⓘ—margin 1 (fades), points 1College
FCS opponentsEvery FCS team gets its own rating instead of one shared one, so an FBS team's early-season games against them count for what that opponent is worth—per teamCollege
Starting quarterbackUsual starter (most starts in last 4 games) out or doubtful on the injury report, plus the starters' EPA per play−3 pts backup; 15 pts per 1.0 EPA gapno injury dataNFL XGBoost
Wind at kickoffStrong wind lowers scoring; indoor games skipped−0.4 / mph over 5−0.4 / mph over 5In model XGBoost
Time zones and altitudePoints added to the home margin per extra time zone (and, in college, per km of altitude) the visitors cross or climb; the NFL sign is negative because road teams did better than the model expected. XGBoost also sees travel distance−0.5 / zone0.6 / zone; 1.9 / kmIn model XGBoost
Market spreadShare of the line in the win probability90%80%In model XGBoost
Pace (plays per game)Tempo; already reflected in offense and defense ratingstestedtestedShown XGBoost
Rest days, byes, short weeksDays since each team's last gametestedtestedShown XGBoost
Line movement, ATS and O/U trendsWhere the market moved; team cover and total history. XGBoost uses only average cover margin——Shown XGBoost
Temperature and rainKickoff conditions. XGBoost uses temperature, not rain——Shown XGBoost
Recency weighting, indoor bonus, season-specific home fieldIdeas that sounded right but didn't improve accuracy enough to adopttestedtestedNot used
Power ratings: who's moving
Today's ratings against where they stood before a recent week. Ratings only move when games are played, so you can look back up to 4 weeks, or to the preseason.
Loading ratings…
Machine-learning layer: XGBoost
A second model built on top of the power ratings, tested head-to-head on the same games. Live now: NFL Power-rating model, college Power-rating model
1
What it is
XGBoost (gradient-boosted decision trees) adds up hundreds of small if-then trees, each one correcting the mistakes of the trees before it. It is classic machine learning, not a chatbot: the same inputs always give the same answer.
2
What it predicts
Not the score from scratch. It learns how far the final margin and total usually land from the closing line, so it starts at the market and only moves away when its inputs have earned it in past seasons. That keeps it from making wild calls.
3
What it looks at (54 inputs in the NFL, 52 in college)
The closing spread and total; the power-rating model's margin, total, win probability and its gap to the line; both teams' rating, offense and defense; season-to-date points for and against, yards per play (gained and allowed), EPA/PPA per play, success rate, turnover margin, pace and average cover margin; games played, rest days, neutral site, conference game, week, postseason, a backup QB (NFL), wind, temperature and indoor games; travel distance, time zones crossed and altitude climbed. The backup-QB inputs are NFL-only, which is why college has fewer. Two kinds of input are deliberately switched off: injury load, which isn't known on the live site until late in the week, and how far the lines moved since the open, which exists only for recent seasons. A model that leaned on them in testing would behave differently live.
4
How it's tested
Walk-forward by season: every season from 2019 on is predicted by a model trained only on earlier seasons (at least three), and each game's inputs use only what was known before kickoff: games played before its week, and the usual starting quarterback as listed on the final injury report (never the one who actually played). The exception is kickoff weather, which for past games is the observed value, not a forecast. Finished games on the site show those out-of-sample predictions; upcoming games use a model trained on every finished game that has a closing line.
5
When it leans
Against the spread when it differs from the closing line by 1.5–7 pts (NFL) or 2–10 pts (college); over/under at 2+ pts (NFL) or 3+ pts (college). Because only a share of the predicted miss is kept, a lean past these cut-offs is rare. These cut-offs were set before looking at the results, and leans stay context only until they prove an edge.
The formulas
// what it learns: the miss vs the market target = actual margin − closing spread actual total − closing total // 300 trees, depth 3, learning rate 0.03 f(x) = base + tree₁(x) + tree₂(x) + … + tree₃₀₀(x) // prediction: only a share k of the predicted miss is kept (fitted at each retrain // on the out-of-sample seasons; roughly a tenth to a fifth, since most of the miss is noise) margin = closing spread + kmargin × fmargin(x) total = closing total + ktotal × ftotal(x) P(home) = Φ(margin / σ) σ = 11 NFL, 14 college
Trained with the open-source XGBoost library and retrained every night after the data refresh; the site evaluates the saved trees directly. Latest retrain: NFL Oct 23, 2,855 finished games in its data (no new games); college Oct 23, 7,955 finished games in its data (+1 new). Games without a closing line are not fitted.
Same games, 2019–26NFL ratingsNFL XGBoostCollege ratingsCollege XGBoost
Games2,0545,647
Model Favorite won66.2%66.2%73.4%73.5%
Brier (lower is better)0.21290.21230.17440.1744
Average miss: margin10.08 pts9.83 pts12.47 pts12.14 pts
Average miss: total10.62 pts10.41 pts12.76 pts12.67 pts
ATS leans322-301 (51.7%) · -8.3u43-34 (55.8%) · +5.1u951-977 (49.3%) · -112.5u2-3 (40%) · -1.2u
O/U leans76-59 (56.3%) · +10.1u5-9 (35.7%) · -4.5u338-290 (53.8%) · +17.3u1-1 (50%) · -0.1u
Verdict on ATS leansNo edgeNot proven yetNo edgeNo edge
XGBoost numbers are out-of-sample. Both models are graded on exactly the same games: every game scored in 2019–26, with or without a closing line. The record under “How we test it” is the live model’s own (NFL Power-rating model, college Power-rating model). Units are profit at -110 odds, 1 unit per lean.
Against the closing line itself
NFL · 1,971 gamesLineRatingsXGBoost
Miss: margin9.7410.009.75
Miss: total10.4110.6210.41
Gap: margin+0.26 ±0.06+0.01 ±0.01
Gap: total+0.21 ±0.06+0.00 ±0.01
College · 5,619 gamesLineRatingsXGBoost
Miss: margin12.1212.4612.13
Miss: total12.6712.7612.67
Gap: margin+0.34 ±0.05+0.01 ±0.00
Gap: total+0.10 ±0.04+0.00 ±0.01
Neither engine beats the closing line on average miss, in either league. A gap counts only when it is more than twice its ± (the standard error of the difference); on that rule the line is clearly ahead of NFL ratings (margin, total) and College ratings (margin, total). Since 2023 it is clearly ahead of NFL ratings (margin, total) and College ratings (margin); NFL XGBoost and College XGBoost are within noise of it. Miss = average points between the prediction and the final result. Gap = an engine's miss minus the line's on the same games (positive means the line is closer); ± is its standard error. This table counts only games with both a closing spread and total (NFL 1,971 of 2,054, college 5,619 of 5,647 scored games), so its misses differ slightly from the table above, which scores every game. Every number here is out of sample and uses only what was known before kickoff (kickoff weather is the observed value).
Against the spread, by how far each model disagreed with the line
EdgeNFL ratingsNFL XGBoostCollege ratingsCollege XGBoost
1+ pts52.2% (1375)51.6% (279)49.8% (4131)44.1% (93)
2+ pts51.5% (853)62.5% (16)49.3% (2960)40% (5)
3+ pts51.3% (532)0% (1)49.2% (1998)—
4+ pts51.6% (308)—50.4% (1250)—
5+ pts52.6% (173)—50.3% (758)—
Win rate (picks) of every lean at least that far from the closing spread; green = the better of the two models. 52.4% breaks even at -110. No row clears the proven-edge bar.
Over/under, by how far each model disagreed with the total
EdgeNFL ratingsNFL XGBoostCollege ratingsCollege XGBoost
1+ pts49.9% (1380)47.7% (88)53.3% (4129)50% (238)
2+ pts50.1% (851)35.7% (14)53.1% (2827)56% (25)
3+ pts50.3% (493)—54% (1799)50% (2)
5+ pts56.3% (135)—53.8% (628)—
7+ pts51.7% (29)—52% (196)—
Win rate (picks) of every lean at least that far from the closing total; green = the better of the two models. 52.4% breaks even at -110. No row clears the proven-edge bar.
NFL, season by season
SeasonGamesMiss: ratingsMiss: XGBoostATS: ratingsATS: XGBoost
201926710.3610.2250% (94)59.5% (37)
202026910.009.7954% (87)50% (8)
202128510.7710.6952.9% (104)63.2% (19)
20222848.858.8352.6% (78)42.9% (7)
202328510.3610.1054.9% (51)33.3% (3)
202428510.029.7757% (86)0% (1)
202528510.309.6145.6% (90)50% (2)
2026949.779.2242.4% (33)—
College, season by season
SeasonGamesMiss: ratingsMiss: XGBoostATS: ratingsATS: XGBoost
201977412.4012.1950% (256)40% (5)
202053413.1212.8052.1% (219)—
202177012.8812.5548.5% (233)—
202277612.4212.0346% (239)—
202379212.4412.1347.7% (279)—
202479812.5412.1051.6% (281)—
202580812.0811.8250.5% (281)—
202639511.7711.3547.1% (140)—
Miss = average points between the predicted and final margin (lower is better). A model that wins most seasons is more trustworthy than one with a single big year.
What NFL XGBoost leans on most (margin)
Week of the season2.8%
Away average cover margin2.5%
Away EPA per play2.5%
Power-rating total2.4%
Away success rate2.4%
Home average cover margin2.4%
Away yards per play2.4%
Home pace2.3%
What college XGBoost leans on most (margin)
Wind2.5%
Ratings win probability2.4%
Away games played2.4%
Home pace2.4%
Power-rating margin2.4%
Away pace2.4%
Closing spread2.3%
Away altitude climb2.3%
Share of the model's total gain: how much each input helped its trees cut the error. No single input dominates, which is expected when it starts from the market line.
Nightly retrains: what changed this week
XGBoost is retrained each night on the finished games in its data. Pick any two runs from the last 7 days to see how much the model moved.
This week's runs
Run (PT)Games in dataWinnerATS
Tap or click a run to compare it with the one before. Winner and ATS are the out-of-sample backtest after that run.
How we use AI

Ask SportsAnalysis

Uses AI
OpenAI's GPT-4o mini turns your question into a structured query (league, season, team, filters, sort) using a strict schema with randomness turned off. Our server checks that query and computes every number from our own data. The AI never writes the answer, so it can't invent a statistic.

Predictions

Machine learning
Power ratings are classic statistics: least squares and a normal curve. The optional XGBoost layer is machine learning (decision trees), trained on past games and tested only on seasons it never saw. Neither uses a language model, so every prediction is repeatable.

News tone

No AI
The sentiment on game cards is a keyword count over recent ESPN and Google News headlines, with injury and suspension words flagged. It describes coverage; it doesn't feed the model.

The code

AI-assisted
The code is written with help from an AI coding assistant. Every model change still has to pass the full walk-forward backtest before it goes live, and the results are published whether they help or not.
Ask is limited to 10 questions an hour per visitor. Questions are stored anonymously (no accounts) so answers can be improved.
How we test it
Walk-forward backtest of the live model (Power-rating model for NFL, Power-rating model for college), 2016–26, updated nightly

For every week of every season, the model is rebuilt using only games played before that week, then asked to predict that week's games. Those predictions are compared with the real results and the closing lines. Nothing from the future leaks in, except that kickoff weather for past games is the observed value, not a forecast. The quarterback is the usual starter as listed on the final injury report, never the one who actually played, and opening lines count only where they are real: ESPN's from 2024, the first season with real ones, and for college a multi-book consensus opener where one is saved. XGBoost is also retrained season by season, so each season is predicted by a model that never saw it. The closing line is the benchmark: see its comparison with both engines above.

NFLCollege
Games scored2,8447,955
Model Favorite won66.2%73.7%
Win-probability error (Brier, lower is better)0.21210.1732
Against-the-spread leans458-426 (51.8%)1278-1338 (48.9%)
Over/under leans115-92 (55.6%)510-447 (53.3%)
Leans the line later moved toward57%66%
Verdict on leansNo edgeNo edge
Season-by-season tables, and the comparison with the closing line, are in the engine comparison above.
Reading the scorecard
Why 52.4% matters
At standard −110 odds you risk $110 to win $100, so you need to win 52.4% of bets just to break even. 51% is a losing record.
What counts as a proven edge
At least 40 decisions and a win rate far enough above 52.4% that luck is unlikely (one-sided z-score of 1.64 or more). Signals on game cards only turn green when they clear this bar.
Closing-line value
When the line moves toward the model's side after the open, the model saw something the market later agreed with. It's an early sign of skill, but not proof of profit.
Where the model helps
Picking winners, projecting scores and calibrated win probabilities. Beating the spread consistently is a much harder problem, and our record shows it.
1st-half (halftime) analysis
A separate model for 1st-half spreads and totals; it doesn't change any full-game prediction
1
Halftime scores
1st-quarter plus 2nd-quarter points from ESPN's quarter scores, for every game since 2015.
2
1st-half lines: real where they exist
ESPN publishes real 1st-half spreads and totals for NFL games from 2025 on (opening and closing), and none for college. Every other game gets an estimated line from its full-game closing line, rounded to the half point. Each line on the Halftime pages is tagged real or est.
3
Project the 1st half
The full-game model's margin and total, scaled to the 1st half. We also built ratings from 1st-half scores alone; in the walk-forward backtest they added little, so they supply 25% of the NFL margin and none in college.
4
Leans, graded the same way
An ATS lean when the projection beats the 1st-half line by 1.5–5 points (NFL) or 2–6 (college); an over/under lean at 2.5+ (NFL) or 3+ points (college). Same 52.4% break-even rule as the full game, so they are context only for now.
// estimated 1st-half lines, from the full-game close NFL spread × 0.555 total × 0.50 college spread × 0.59 total × 0.52 // NFL: real 1H lines; college: share before halftime // projection (ratio = the numbers above) 1H margin = ratio × model margin college = 0.75 × that + 0.25 × 1H ratings NFL 1H total = ratio × model total
Walk-forward 2016–26NFLCollege
Games2,8557,953
Halftime leader picked61.9%69.7%
1st-half ATS leans479-476 (50.2%)1117-1157 (49.1%)
1st-half O/U leans101-106 (48.8%)313-299 (51.1%)
ATS vs real lines only60-72 (45.5%)none exist
Average miss: margin / total8.17 / 7.01 pts9.58 / 8.89 pts
Verdict on leansNo edgeNo edge
Grades against estimated lines are a guide only: no book offered exactly those numbers.
Line watch: Lines to watch and Line toward model
Two views of how lines move between the open and kickoff, with what we found when we tested them. Lines to watch covers 2025–2026; Line toward model covers 2024–2026
1
Lines to watch
The power-rating model's line set against the opening line. A game is listed when they differ by 2+ points (NFL) or 3+ (college). Each row shows the team the ratings favor, the open and current line, the gap, and where the line has gone since: Not moved yet Moving toward model Moved away Already at the model
2
Line toward model
The live model's pick (the power-rating model for NFL, the power-rating model for college) where the line has already moved its way since the open: ↗ Line toward model for the spread and ↗ Total toward model for the over/under. It's a filter on the games page.
3
How it was tested
Walk-forward, like everything else here: each week's ratings use only earlier games. "Moved toward" compares the closing line with the opener. Covers are graded at the opening line for Lines to watch (the number you'd have seen first) and at the closing line for Line toward model (the move is only known later).
What we found
  • The ratings predict where the line goes. With a 2+ point gap, NFL lines moved toward the ratings in 60.5% of the 124 NFL games where the line moved (160 at that gap); college lines (3+ points) in 70% of the 390 college games where the line moved (444 at that gap). The bigger the gap, the more often it happens.
  • They don't predict who covers. Graded at the opening line, those same teams covered 46.3% (74-86) in the NFL and 52.2% (229-210) in college. NFL is below the 52.4% break-even; college is below the 52.4% break-even. The market moves toward the ratings, then the game is close to a coin flip again.
  • A line moving toward the pick adds little. At the closing line, spread picks the line moved toward went 12-12 (50%) in the NFL and 85-92 (48%) in college, no clear improvement on picks it moved away from. Graded at the opening line those picks look far better, but nobody can know the move in advance, so that number isn't one you could get.
Lines to watch: ratings vs the opening line
GapNFLCollege
GamesMovedCoveredGamesMovedCovered
1+ pts24755.6%44.5%90564.2%54%
2+ pts16060.5%46.3%66167.7%52.2%
3+ pts8663.8%39.5%44470%52.2%
4+ pts4467.6%27.3%29574.6%53.1%
5+ pts19777.9%55.4%
6+ pts13379.2%56.9%
7+ pts8081.3%59%
8+ pts5382%68.6%
Moved: of the games whose line moved at all, the share that moved toward the ratings by kickoff (games that did not move are in Games, not in this rate). Covered: against the opening line; 52.4% is break-even. Bold numbers are the gaps used on the games pages; gaps with fewer than 30 past games are left out.
Line toward model: the live pick at the closing line
Since the open, the line movedNFLCollege
Spread: toward the pick12-12 (50%)85-92 (48%)
Spread: away from the pick72-66 (52.2%)233-219 (51.5%)
Spread: didn't move20-27 (42.6%)35-38 (47.9%)
Total: toward the pick1-1 (50%)18-18 (50%)
Total: away from the pick12-12 (50%)58-40 (59.2%)
Total: didn't move4-1 (80%)5-6 (45.5%)
Records of the live model's picks, 2024–2026, graded at the closing line. Updated with each market rebuild.
Similar games: how matches are found
On every game card with a point spread: the recent games that looked most like it before kickoff, and how they turned out
1
Describe the game the same way as history
Today’s game gets the same 58 pre-game inputs stored for every past game; matching uses the ones in the table on the right (ratings as of kickoff, season-to-date stats, rest, weather, lines). Everything is then turned around so the favorite comes first.
2
Score every recent game in seven groups
Each game from the past three seasons, plus this season so far, gets a closeness score per group (team strength, spread & move, total, season form, situation, home/away, rest). The groups are then combined with the weights on the right. Each input is divided by how far apart two games can be and still count as close, so a point of spread and a point of EPA aren’t compared directly.
3
Let you decide what matters
Compare by reweights the groups: Overall (all seven), Betting line (spread, total and their moves) or Team matchup (team strength and season form). Customize filters removes games outright: same venue (on by default), spread within 1.5 points (college 3), total within 3 (5), power-rating gap within 4 (6), same rest, same point in the season, same season ATS form. It also sets how many games to keep: 10, 20 or 50 (10 by default).
4
Keep the closest and summarise
Only games more than 50% similar are kept, so an unusual game may show fewer, or none. The card says how often the favorite won, covered and went over, each next to how usually favorites at about the same spread do. Each game is labelled very close (80%+ similar), close (65%+) or loose, with the groups it matched best. On finished games, a line compares the actual result with the similar games.
5
Check against chance
Each rate sits on a bar with a shaded normal range: where that many games land 95% of the time by chance around the usual rate (with 20 games, about ±22 points). Only a rate outside it is called above or below normal. Finished games only use games played before them, so a recap never peeks at later results.
What counts as similar
GroupInputs (favorite and underdog)Weight
Team strengthPower-rating edge, offense and defense ratings, net EPA per play25%
Spread & moveFavorite’s closing spread, line move from the open20%
TotalClosing total, total move from the open15%
Season formSeason-to-date point differential and average cover margin15%
SituationConference game, season period, wind, indoors, backup QB (NFL)10%
Home / awayHome favorite, road favorite or neutral site10%
RestDays since each team’s last game5%
“Close” (NFL / college): spread 1.5 / 3 pts, total 3 / 5, ratings 2.5 / 4, line move 1.5 / 2, EPA 0.08 / 0.12 per play, point differential and cover margin 6 / 9, wind 8 mph, rest 3 days. A past game missing an input counts as two steps apart on it. Not in the data yet: moneyline (it follows the spread), primetime, revenge spots and public betting splits; season-to-date form stands in for last 3/5 games. Stored but not used for matching: travel distance, time zones and altitude.
// per group, then weighted across groups d²(group) = mean of ((today − past) / close)² d² = Σ weight × d²(group) / Σ weight similar % = 100 × e−d² / 2 // coin-flip range for n decided games (95%) noise = ±1.96 × √(0.25 / n) × 100
The weights are set by judgement, not learned: tuning them to past results would just fit noise, because none of the versions below predicted results better than chance.
Does matching better predict the result? We tested it

For every NFL game from 2022 to 2025 we found its 50 closest games from earlier seasons only, then checked whether their cover and over rates called that game’s result. Each idea people suggest for “better” similarity was tried:

How similarity was measuredATS rightO/U right
Earlier version (spread, total, ratings edge, line move, team styles, week)50.4%49.8%
+ pace, EPA gap, success-rate gap, wind, conference game50.2%51.2%
A separate totals profile (total, pace, EPA, wind)51.8%52.2%
Mahalanobis distance (allows for traits that move together)51.3%49.8%
XGBoost leaf proximity (games landing in the same tree leaves), model trained on earlier seasons only52.7%51.0%
All are within chance of 50% on about 1,100 games, and none clears the 52.4% break-even with confidence. Games that look alike before kickoff don’t share results beyond luck, because the closing line already prices those traits in. One trap worth knowing: XGBoost leaves first looked much better (55–56%), but only because the live model had been trained on the very games being tested. Retrained on earlier seasons only, the edge disappeared.
Research log
What we tested recently, and what came of it. Nothing marked "Tested, not live" changes a number on this site.
Methods from the published researchIn the modelOct 22, 2026
Do the rating systems, efficiency metrics, machine-learning models and market studies published for NFL and college football predict better than our model, and which of their mechanics help ours?
None of them beats the closing line, and the published systems that come closest are blends with the line itself; our rating model is already level with the best public pure ratings in the NFL. Tested on our own data, week by week, with every setting chosen on 2016 to 2022 and checked on 2023 onward: Elo, a state-space (Kalman) rating, soft margin caps, median-type fitting, conference pooling and probability recalibration add nothing. What does help, in college only, is scale and priors: the model's rating gaps are about a quarter too narrow (favourites win by more than it says, worst in weeks 1 to 4), FCS opponents deserve their own ratings instead of one shared one, and the season's closing lines so far improve the total when they enter the ratings as implied scores. Together these cut the college average margin miss by about 0.3 points and the total miss by 0.12, most of it in the first four weeks, and close almost half of the gap to the closing line; after the market blend the displayed spread moves a little, the total more. In the NFL only the total moves (a stronger season prior, left for later), and the XGBoost engine's residual against the line is mostly noise: shrinking it brings that engine level with the closing line in both leagues. Adopted: the college scale fix, per-team FCS ratings and the pseudo-games in the rating model, and the residual shrink in both leagues' XGBoost engine.
Only what was known before kickoffFix appliedOct 19, 2026
Do the records change when every game is predicted from what was known before it kicked off (kickoff weather aside)?
Yes. The old backtest let a game's own box score tell the model whether a backup quarterback played, and treated ESPN's opening lines before 2024 as real openers (they were copies of the close). Both are fixed everywhere on this site: the track record, the game cards and this page use the same pre-kickoff inputs and the same rules for which lines count (retrain runs recorded before the fix are labelled as such). Three differences stay by design. Kickoff weather for past games is the observed value, not a forecast. For college games the track record prices the multi-book consensus close and opener where one is saved, while finished game cards show ESPN's close and, from 2024, ESPN's opener. The NFL record is lower than it used to look, and the closing line is ahead of both engines on average miss.
Can any model reach 60%?Not usedOct 19, 2026
Is there a filter, edge size or model that hits 60% against the spread or on totals?
Not reliably. Hit rate does not rise with edge size, and filtered "60% systems" fell back to about 50% on new seasons. No model lean has cleared the proven-edge bar yet, and the site says so. One of the 23 trend signals on game cards has cleared the bar; only it shows green. A trend signal that clears the bar does so on a short sample and is one of many tested, so it is context, not a 60% system. With this many games the data could hide an edge of about 2.5 to 3.5 points above break-even, not 60%. Better accuracy shows up as a smaller average miss, not as a bigger win rate.
College: player-level talentIn the modelOct 19, 2026
Do the high-school ratings of a college roster, or player age, tell us who is stronger before the season starts?
Yes for college margins. A preseason prior built from recruiting stars of the last six signing classes cuts the average margin miss by 0.24 points in the years used to choose it and 0.32 in 2023 and later (paired change against the model of the time), and by about a point in weeks 1 to 4. Class year, position-specific talent, returning production and transfer-portal moves add nothing once talent is in; most of the gain is available from team-talent data already stored, at a larger weight than first tried. Re-tested on Oct 23 on top of the rebuilt college model, which had already taken part of the gain: the team-talent prior is still worth 0.08 points over a season and about a third of a point in weeks 1 to 4, with 2023 onward agreeing, so it is now in the model. NFL player age: no measurable gain.
Learning from the model's missesNot usedOct 19, 2026
If the model misses a team badly, should its next games count more?
No. Weighting misses more made NFL predictions worse and did nothing useful in college. What the misses did show: college favourites win by about 1.2 times the projected margin, which a simple recalibration fixes, and a gentle recency decay trims the totals error slightly in testing but is not adopted. Neither beats the closing line.
NFL: injuries, matchups and fatigueNot usedOct 19, 2026
Can the size or direction of a game's surprise be anticipated from unit-level injuries, depth charts, pass and rush matchups, workload, travel and rest?
No. Five groups of inputs (134 columns together) did no better than random inputs, for the projection or for how uncertain it is: the injury report and the starting quarterback are already priced by the line. Play-by-play does show defences giving up more on a drive after a long stretch of snaps, but that goes with game flow (the trailing team's defence stays on the field); the across-game version a pre-game input could use is near zero.
College: matchup and depth inputsTested, not liveOct 19, 2026
Do opponent-adjusted offence and defence efficiency and position-group depth improve the college projection?
They sharpen margins in every test season, mostly in weeks 1 to 4, but largely by making up for the missing preseason talent prior above; the efficiency inputs add little beyond it. Totals improve slightly. No input beats the closing line, so none is switched on.
College roster turnoverNot usedOct 2026
Should last season's rating carry over less for teams that lost most of their production?
Returning production and transfer-portal moves did not improve the ratings. Roster talent did sharpen early-season margins (see player-level talent above) but pulls the ratings toward the market.
XGBoost: fewer inputs per treeNot usedOct 2026
Do shallower or sparser trees pick up smaller effects?
Letting each tree see 60% of the inputs instead of 80% made differences smaller than the run-to-run noise, and over/under leans were a little worse. Depth 2, depth 4 and 400 trees did no better either.
What didn't make the cut
Every idea below was backtested on every finished season the data covers. They sounded right but made predictions no better, or worse, so they stay switched off in the power ratings. XGBoost is given some of the same raw inputs (rest, pace, temperature, travel, EPA) and learns for itself how much they matter.
  • Recent games counting more (recency decay): no gain on margins; a gentle decay trims the totals error slightly, not enough to adopt (see the Research log).
  • Bye-week and short-week bonuses: no measurable effect once ratings are set (XGBoost still sees rest days).
  • Indoor scoring bonus: totals didn't improve.
  • Pace-based totals: offense and defense ratings already carry each team's tempo (XGBoost still sees pace).
  • Home field re-estimated every season: a fixed, lower NFL value did better.
  • NFL play-by-play EPA in the ratings: totals got worse; it's shown on cards and given to XGBoost instead.
  • Backup-QB adjustment in college: no injury reports to drive it.
  • Ratings built only from 1st-half scores: the scaled full-game projection did as well, so they get a small NFL share.
  • A QB adjustment sized by the backup's quality (points added per dropback, NFL): win probability barely moved and margins didn't improve; the flat 3 points for a missing starter stays.
  • 3rd-down, red-zone and explosive-play rates as XGBoost inputs: the NFL model got worse and college didn't change; EPA and success rate already carry it.
  • Travel distance, temperature and rain in the ratings: no accuracy gain (time zones and, in college, altitude are in the ratings; XGBoost sees distance and temperature too).
  • Key numbers (3, 7, 10) in win probability: a margin curve that keeps them scored slightly worse than the smooth one.
  • Roster turnover in the college prior (returning production, transfer portal): no gain; the roster talent composite, tested alongside, did sharpen early-season margins and is in the college prior now (see Variables). Details
  • Weighting the model's misses more: worse in the NFL, no use in college. Details
  • NFL unit-level injuries, matchups and fatigue as inputs: no better than random inputs. Details
  • XGBoost trees seeing fewer inputs (60% instead of 80%): differences within run-to-run noise. Details
  • Only leaning when the line has moved our way: no better record than leaning regardless.
  • Predicting line movement: the ratings do see where lines will move (with a big enough gap, a line that moved went toward them 60.5% of the time in the NFL and 70% in college), but betting the opening line hasn't cleared break-even over enough games yet. Real ESPN opening lines only exist from 2024, so this keeps being retested.
  • Filtered "60% systems": subsets that hit 60% in one span fell back to about 50% on new seasons.
Limits worth knowing
Public data only. No injury reports for college, no depth charts, no weather beyond the forecast, no betting splits. Markets know more.
Early-season uncertainty. In the first weeks ratings lean on last season and the lines, so surprises are common.
Data can be wrong. Feeds occasionally miss or correct a score or line; fixes flow in on the next sync.
Keep it fun. If gambling stops being fun, call 1-800-GAMBLER.

See it in action

Open any game card for the model breakdown, matchup stats and game conditions, or ask a question and get a table built from every game played.