# College basketball offense/defense Elo

The dashboard uses Joshua Patrick's offense/defense engine and tuned parameters, ported from the college football version. 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.6 × home boost - away defense) / 37)`. Expected away points are `max(0, league average + (away offense - home defense - 0.4 × home boost) / 37)`. Neutral games use zero boost. The league average pools both teams' scores over the preceding nine seasons.

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

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

At a season boundary, offense retains 45% and defense retains 75% of its difference from its new conference's prior-season mean. Teams with no conference match (or a newly-added team) use the league baseline of 1500. Conference membership comes from the scheduled season's ESPN conference id, 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 release, the calibration is fitted to decisive games in 2002-2025. The update reuses the same historical calibration throughout the season. There are no ties in basketball, so every decisive game contributes to calibration.

Historical pregame ratings are reconstructed chronologically, ordered by tip-off 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 (conference tournaments and the NCAA tournament) week numbers restart at 1, separate from the regular season's week count.

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.

## Data coverage

The season selector covers 2002 onward -- hoopR's earliest available men's Division I schedule data. Every historical season uses a separate probability calibration fitted on preceding seasons only. For the first season (2002), probabilities are unavailable because there are no prior games; its original Elo ratings and results remain available.

The top-25 charts show Elo after completed games before the next listed week's first tip-off. 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: [hoopR](https://hoopR.sportsdataverse.org/), which mirrors ESPN's NCAA Division I men's basketball schedule and score data. Exhibition games are excluded. Records count covered games only. The provider may add tournament pairings or correct scores and dates later. Unplayed games whose tip-off has passed are labeled "Awaiting final."
