# College football offense/defense Elo

The dashboard uses Joshua Patrick's original offense/defense engine and tuned parameters. Higher offense means stronger scoring; higher defense means stronger scoring prevention. Overall Elo is `(offense + defense) / 2`, a display ordering, not a separately fitted model.

## Prediction and updates

Expected home points are `max(0, league average + (home offense + 0.8 × home boost - away defense) / 28)`. Expected away points are `max(0, league average + (away offense - home defense - 0.2 × home boost) / 28)`. Neutral games use zero boost. The league average pools both teams' scores over the preceding five seasons.

For each team, offense gains `3 × clamp(actual points - expected points, -27, 27)`. The opposing defense loses `4 ×` that same capped residual. These changes apply only after a game is marked completed and has valid final scores.

The home boost starts at 50 Elo and adds a team-specific deviation capped at ±41. It uses the preceding season's home/away wins above opponent-adjusted expectation (log5), shrunk by `home games / (home games + 40)`. The original home-field conversion divisor is 300.

At a season boundary, offense retains 65% and defense retains 60% of its difference from its new conference's prior-season mean. Independents use the division baseline: 1500 FBS, 1300 FCS. New teams use their conference reset target. Conference/division membership comes from the scheduled season, as in the original engine's membership aggregation.

## Probability and timing

`P(home wins) = 1 / (1 + exp(-(intercept + slope × expected margin)))`; away probability is its complement. For the included 2026 release, the calibration is fitted to decisive games in 1986–2025, with intercept 0.11006584605492536 and slope 0.1200287662964665. The update reuses the same historical calibration throughout the season. Ties are excluded from calibration; the historical calibration game count in the dashboard reports all completed historical games.

Historical pregame ratings are reconstructed chronologically, ordered by kickoff and game ID. A completed game's probabilities never use subsequent current-season results. Future games use every team's current rating at the time of the data update, without simulating intervening games. Postseason week 1 is kept distinct from regular-season week 1, and January bowls belong to their football season.

Parameters were tuned on historical data, so these are not claims of out-of-sample performance on the tuning years. Changing historical inputs or parameters can revise reconstructed forecasts. The project retains the original full mathematical specification locally at `model/original_methodology.md`.

## Data coverage

The season selector covers 1986 onward. Every historical season uses a separate probability calibration fitted on preceding seasons only. For the first season (1986), probabilities are unavailable because there are no prior games; its original Elo ratings and results remain available. Historical parameters still come from the original tuning, so older views are retrospective analyses rather than out-of-sample validation.

The top-25 charts show Elo after completed games before the next listed week's first kickoff. Weekly changes use the start of the same window; season-to-date changes subtract the post-reset preseason rating. The change lists show up to 10 gains beside up to 10 losses, separately for offense and defense. Future weeks keep the latest completed-game ratings and have zero weekly changes until games finish. The full-season view uses the latest ratings and the latest week containing a completed game. Game cards always retain their own actual pregame/postgame values.

Source: [CollegeFootballData](https://collegefootballdata.com/) through [cfbfastR](https://cfbfastr.sportsdataverse.org/). Both participants must be classified FBS or FCS. The FBS filter includes any covered matchup with an FBS participant, including FCS opponents; FCS works similarly. Records count covered games only. The provider may add bowl/playoff pairings or correct scores and dates later. Unplayed games whose kickoff has passed are labeled “Awaiting final.”
