How it works
Raw points per game mislead: fast teams score more, and so do teams with soft schedules. Everything here is tempo-free (per 100 possessions), and team ratings are also adjusted for who you played and where.
How the ratings are fit
Each Division I game produces two data points, one per offense. Every team's offense and defense are solved for at once with ridge regression, along with a home-court edge (+2.7 points per 100 possessions) and the league average (105.8). Early in the season, ratings are pulled toward a preseason projection built from last season's ratings, the share of minutes each roster brings back, and the quality of incoming transfers. That projection fades as real games pile up.
Is it any good?
Settings are chosen by cross-validation: predicting games the model hasn't seen. Typical miss: 11.86 points (RMSE). Each prediction is made using only games played before it. Across 600 Division I games this season, the favorite in our forecast won 79% of the time, with a typical miss of 9.7 points on the margin. In the 551 games that also had a betting line, the line missed by 8.9 points on average and we missed by 9.6.
Players
Player stats are per game and per possession from every Division I box score. Plus-minus, on/off and adjusted plus-minus (RAPM) come from rebuilding every lineup out of the play-by-play substitutions.
Data
Box scores come from ESPN's public site: 814 final games through Nov 14, 2026, 365 teams and 4,585 players. Download the team ratings or player stats as CSV.
Who built this
College Hoops Lab was built with assistance from Claude, an AI model made by Anthropic. Claude wrote much of the code, the data pipeline and the plain-English explanations, working from a human's ideas and direction.