Rating Definitions
2025–26 men’s Division I. 365 teams; 5,737 accepted games through 2026-04-06.
- ORtg
- 100 × total points scored ÷ total estimated possessions. Higher is better.
- DRtg
- 100 × total points allowed ÷ total estimated possessions. Lower is better.
- Net
- ORtg − DRtg. Default ranking is descending net efficiency.
- Tempo
- 40 × total estimated possessions ÷ game minutes, including overtime.
- Possessions
- FGA − offensive rebounds + turnovers + 0.475 × FTA, averaged between both teams for each game.
- D-I W–L
- Record in accepted games against teams in the official NCAA Division I season directory.
Season ratings use sums of points and possessions, rather than an unweighted average of game ratings. Display rounds to one decimal place; ranking uses full precision.
These are raw efficiencies. No adjustment for opponent strength, venue, recency, or preseason expectations has been applied. They are not KenPom ratings.
Possession formula reference ↗Experimental model estimates
The home-page rankings table includes independent cutoff estimates for all 365 teams. The default row order remains raw net efficiency. These estimates have not passed every predictive calibration, subgroup and uncertainty gate; they are not KenPom or official NCAA metrics.
- AdjO / AdjD
- Possession-weighted additive offense and defensive allowance, adjusted for opponents and explicit home/away/neutral designation. Ridge regularization shrinks sparse team effects. Both are centered on the fitted Division I baseline; lower AdjD is better.
- AdjNet
- AdjO − AdjD. Model-view ranks use this full-precision value.
- AdjT
- Opponent-adjusted possessions per 40 minutes. An additive pace model weights games by minutes, includes overtime and centers team effects. Faster is a style, not inherently better.
- SOS
- Mean opponent cutoff AdjNet minus twice the fitted efficiency home effect times own venue sign (+1 home, −1 away, 0 neutral). All accepted Division I games are included; higher means harder. This is our transparent schedule-strength definition.
- NCSOS
- The same formula applied only to games explicitly designated regular-season nonconference in the corroborated frozen ESPN schedule. Conference tournaments and national postseason are excluded. It is not inferred from team names or the current conference.
- Expected wins
- Sum of cutoff matchup probabilities against the completed schedule. This is retrospective expected record, not a record of pregame predictions. Shown on team pages.
- RR
- Actual accepted wins minus cutoff expected wins. Positive residual is not proof of luck; it is a descriptive difference under this model.
- Model WAB
- Actual accepted wins minus expected wins for a fixed cutoff benchmark against the same schedule at the same venues. The benchmark is the 45th team by this model’s adjusted net: Villanova. This independent model WAB does not reproduce official NCAA NET-45 WAB.
Cutoff probability calibration uses the four prior seasons, with a development-selected blend of raw and adjusted matchup strength that gives raw information greater weight in smaller samples. All pregame historical comparisons exclude target-date results. The current model uses completed-season ratings for schedule summaries; it must not be mistaken for a contemporaneous forecast. Undefined venue-sensitive totals stay unavailable rather than treating missing venues as neutral. 5,736 of 5,737 venues are reconciled. Penn–Villanova has conflicting institutional designations, so both teams’ complete schedule-derived totals are withheld.
Team page definitions
- Min%
- A player’s logged minutes divided by the team’s game minutes (40 per game plus five per overtime). A player on court for every minute reads 100%; the five slots sum to 500%.
- Effective rotation size
- Derived, not published. Each player’s share of all logged minutes is squared and summed; the effective size is one divided by that sum. Ten players with equal minutes read 10; one player with all minutes reads 1.
- Top three and bench share
- Derived from the same shares. Top three is the share of logged minutes played by the three players with the most minutes. Bench is the share played by everyone outside the five players with the most minutes. No positions are assigned.
- Sample flags
- Descriptive thresholds, not model output. Few games: under 10 logged games. Under 100 minutes: under 100 logged minutes. A dagger marks a rate on under 100 field-goal attempts (2P%, eFG%, TS%, FTA/FGA), under 50 three-point attempts (3P%) or under 25 free-throw attempts (FT%).
- Last five
- The team’s five most recent games. The small figure beside a last-five value is its difference from the season value, shown only when at least one of those games has a player log.
- Rank mark
- A small mark beside each national scouting rank. Its horizontal position repeats the printed rank on a scale of 365 teams, with the best rank at the right. It supplements the printed rank and the cell shading.
- Player value by season
- The player page lists every season in which the model produced a value with a range, newest first. Each row prints net, offense, defense, a range (10th to 90th percentile of 200 whole-game resampling draws, not a calibrated interval), an evidence label (sufficient: 600 or more on-court possessions; limited: 300 to 599), the split role of the season, and wins above replacement where it was computed (2023 onward). Split role: training and development seasons were used to fit or select the model, evaluation seasons were examined post hoc, and the descriptive season was not used in fit or gates. Each season is a separate retrospective fit, so no change or trend is shown, and the table is ordered by season only, never by value. Seasons before 2018 have a point value in the model files but no range, so no number is shown; a season the player played with no published value is listed as its own row with its split role and the reason. Flags printed beside a season: season-2021 marks the 2020-21 season, shortened by COVID-19 cancellations and kept in the model fit; unbound-teammates-share marks a player for whom more than 5% of on-court possessions included at least one of the other nine players on court (teammate or opponent) not matched to the player registry; prior-from-box-only marks a prior built from the box-score line without a prior-season value.
- Team totals
- Season sums of the team box score and of the opposing teams’ boxes in the same games. Observed arithmetic, not a model value, unadjusted for opponent or pace. Steals and personal fouls have no team figure in the source, so only the sum of player lines exists. Offensive and defensive rebounds exist for the team only, because player lines carry combined rebounds. Team minutes are derived (five players times game minutes), not observed.
- Per game, per 40 and totals
- Per game is the total divided by games played. Per 40 is the total times 40 divided by game minutes (40 per game plus 5 per overtime period). Totals are season sums. The basis chosen above the roster table also sets the basis of the team totals table.
- Residual, tolerance and status
- Residual is the team total in games with player logs minus the sum of player lines in those games. It is always shown; it is never dropped for being large. Tolerances were declared before the data were built and were not changed afterwards: counting statistics reconcile within 2 or 0.5% of the logged total, turnovers within 5 or 3%, rebounds within 10 or 8% (whichever is larger). Status: reconciled is within tolerance, residual shown is outside it, players exceed team means player lines add to more than the team total (a data problem), no team figure and no player split mean the comparison cannot be made. Team rebounds and team turnovers are credited to the team and not to a player, so most teams show a residual for those two statistics. A check declared in docs/team-residual-check-criteria.json found every team’s residual for them at zero or above, with medians of 3.4 rebounds and 0.6 turnovers per logged game, which is consistent with that explanation and does not prove it.
- Team aggregate of player values
- Experimental and model-implied. It combines the season’s player values with their share of on-court time, counting players under 300 possessions at the replacement level. The headline is the average over the five on-court slots; the five-slot sum is shown too, and a sum such as +70 is an artifact of adding five slots on the player-value scale, not a team margin. Its range comes from joint resampling draws, so it is not the sum of the players’ separate ranges. The wins figure applies the win conversion to each player separately, so it can exceed games played. It is not comparable to AdjNet or the record, and no list ranks or orders teams by it. Every value in it is a 2026 value, so one split role describes it (descriptive: not used in fit or gates).
- Player value strip
- Shows the published model-implied net value and its range for each player, in possession-share order. The graphic uses a shared axis with a line at zero. Open circle: limited evidence. Filled circle: sufficient evidence. Nothing is drawn when evidence is insufficient. It is not sortable, and no list ranks players by value. The model is experimental and not promoted; see the NIL section below for failed gates and the post-hoc disclosure.
NIL model-implied value (experimental)β
Not Promoted. Failed gates: L2, P4. Promotion Gates
Model nil-value-v3. Dollar status: suppressed: Elasticity cross-check failed: the wins-to-revenue elasticity prior and the cross-section implied elasticity differ by more than the declared factor, and no gate validates the prior. Frozen manifests: experiment 13921361a27d, hyperparameters 2abb3c68d90f, sources 75fc12664784. NIL overview
The 2023 to 2025 evaluation seasons were examined before this model version was built. The model changed after the promotion gates failed, so its evaluation results are post-hoc. Gates are unchanged and failed gates stay reported as failed. Tuning values were selected on development seasons 2019 to 2022. Adding shrinkage was motivated by the examined seasons, so a passing gate is weaker evidence than a clean test.
Gates and results
| Gate | Requirement | Threshold | Observed | Scope | Result |
|---|---|---|---|---|---|
| L1 | accepted_game_share | >= 0.6 | 0.693 | 2023 | Pass |
| L1 | accepted_game_share | >= 0.6 | 0.721 | 2024 | Pass |
| L1 | accepted_game_share | >= 0.6 | 0.748 | 2025 | Pass |
| L3 | bound_possession_share | >= 0.85 | 1.000 | 2023 | Pass |
| L3 | bound_possession_share | >= 0.85 | 1.000 | 2024 | Pass |
| L3 | bound_possession_share | >= 0.85 | 1.000 | 2025 | Pass |
| L4 | minutes_within_2_share | >= 0.95 | 1.000 | 2023 | Pass |
| L4 | minutes_within_2_share | >= 0.95 | 1.000 | 2024 | Pass |
| L4 | minutes_within_2_share | >= 0.95 | 1.000 | 2025 | Pass |
| L2 | conference_accepted_share (minimum over conferences) | >= 0.4 | 0.385 | 2023 | Fail |
| L2 | conference_accepted_share (minimum over conferences) | >= 0.4 | 0.289 | 2024 | Fail |
| L2 | conference_accepted_share (minimum over conferences) | >= 0.4 | 0.360 | 2025 | Fail |
| P1 | rmse_gain_vs_box | >= 0.02 | 0.077 | 2023 | Pass |
| P1 | rmse_gain_vs_box | >= 0.02 | 0.066 | 2024 | Pass |
| P1 | rmse_gain_vs_box | >= 0.02 | 0.052 | 2025 | Pass |
| P1 | pooled school-cluster bootstrap lower bound of gain vs box | > 0 | 0.044 | pooled | Pass |
| P2 | seasons with incremental gain vs prior rating >= minimum (of 3) | >= 2 | 3.000 | pooled | Pass |
| P2 | pooled bootstrap lower bound of incremental gain | > 0 | 0.031 | pooled | Pass |
| P3 | interval_coverage_80 within [min, max] | within 0.7 | 0.785 | 2023 | Pass |
| P3 | interval_coverage_80 within [min, max] | within 0.7 | 0.778 | 2024 | Pass |
| P3 | interval_coverage_80 within [min, max] | within 0.7 | 0.810 | 2025 | Pass |
| P4 | worst slice RMSE of the model relative to box baseline | <= 0.05 | 0.053 | pooled | Fail |
| R1 | crosswalk coverage (min of school-data rows and registry teams) | >= 0.9 | 0.981 | primary | Pass |
| R2 | conference-blocked CV rmse gain; coefficient positive; interval lower bound above 0; sensitivity same sign | >= 0.02 | 0.257 | primary | Pass |
| R3 | implied per-win elasticity versus prior (report only) | report 0 | 0.095 | primary | report-only |
| R4 | temporal hold-out gain on multi-year EADA | >= 0.02 | — | not-run | Not run |
| S1 | rest effect points per rest-day unit (evaluation-pooled) | >= 0.3 | 0.857 | evaluation | Pass |
Sources
| Source | Verified | Design | Use | Limits | Retrieved |
|---|---|---|---|---|---|
| Sill (2010), Improved NBA adjusted +/- using regularization and out-of-sample testing (MIT Sloan) | Verified | NBA ridge adjusted plus-minus, out-of-sample test | Ridge over unregularized fits; prior scale context | Conference paper, one short window, NBA data; scale context only | 2026-10-04 |
| Rosenbaum (2004), Measuring how NBA players help their teams win (82games) | Verified | Unregularized adjusted plus-minus | Never show a point value without a range | Standard errors of 2.1 to 6.3 per 100 possessions; not peer reviewed | 2026-10-04 |
| Basketball-Reference, Box Plus/Minus 2.0 | Verified | Box-score regression to adjusted plus-minus with a Bayesian prior | Structure of the box-score prior and the replacement-level concept | NBA scaled; no published fit statistics | 2026-10-04 |
| Deshpande and Jensen (2016), Estimating an NBA player's impact on his team's chances of winning (JQAS) | Verified | Bayesian posterior draws for player impact | Draw-based range language; retrospective contribution wording | Authors call estimates unsuitable for forecasting | 2026-10-04 |
| PLOS ONE analysis of ESPN real plus-minus | Verified | Fixed-effects analysis of teammate leakage | Values are labelled retrospective contribution, context-dependent, never ability | NBA data | 2026-10-04 |
| Dummy terms for low-minute players in regularized adjusted plus-minus (arXiv:2608.19454, preprint) | Verified | Held-out margin RMSE with pooled dummy terms | Pooled terms for low-minute and unbound players | Preprint; NBA data | 2026-10-04 |
| Lineup-level regularized adjusted plus-minus (arXiv:2601.15000, preprint) | Verified | Shrinkage toward summed player estimates | Supports structured priors for sparse samples | Preprint; NBA data | 2026-10-04 |
| Brown (2008), In-season prediction of batting averages (Annals of Applied Statistics) | Verified | Empirical-Bayes shrinkage | Group-mean prior for unlinked players | Baseball | 2026-10-04 |
| Nguyen and Matthews, performance-dependent dropout and aging curves (arXiv:2210.02383) | Verified | Survivorship in observed aging curves | Survivorship caveat for the descriptive development diagnostic | Baseball offense | 2026-10-04 |
| Chung (2017), Management Science 63(2): value of a win in college athletics (HBS summary) | Verified | Revenue response to wins | Prior for the per-win revenue elasticity; not validated here | Secondary summary only; paper not opened; revenue not split by source | 2026-10-04 |
| Borghesi (2018), Journal of Sports Economics abstract | Verified | Marginal revenue of recruits | Sanity comparison only; never a parameter | Abstract level; proprietary ratings underlie it | 2026-10-04 |
| NCAA 2024 Division I Revenue Distribution Plan | Verified | Primary NCAA document | Context for why the school share of tournament units is unknown | Sharing within conferences is encouraged, not specified | 2026-10-04 |
| EADA 2024 User's Guide | Verified | Primary U.S. Department of Education document | Caveat on every revenue number | Revenue is any money used to pay expenses; self-reported, no external review | 2026-10-04 |
| College Sports Commission revenue-sharing pages and NIL Go data report | Verified | Primary regulator pages | Dated context figures only; not used in any calculation | School-wide; no sport, school or player breakdown; settlement agreement not retrieved | 2026-10-04 |
| Steenland and Deddens (1997), Effect of travel and rest on performance of professional basketball players (Sleep) | Verified | NBA rest and travel | Rest capped at three days; order of magnitude only | Abstract level; 1990s NBA | 2026-10-04 |
| Eastward jet lag and NBA performance (PMC9245584) | Verified | NBA travel and direction | Shows distance claims cannot be assumed; travel distance is not modeled | Results conflict across NBA studies | 2026-10-04 |
| The Sport Journal, evaluating the two-game road trip in college sports | Verified | Sun Belt men's road trips, 48 trips | College effects may be null; a null is reported as a null | Small sample; one conference | 2026-10-04 |
Features excluded and why
- Player-level pay data and commercial NIL valuations: not used; those sources are proprietary or self-reported, and no figure here is observed pay or a market price.
- Position, class, age, height, weight and hometown: not performance measures and not used.
- Injuries, travel distance, time zones and attendance: no data in the repository.
- Portal event studies, synthetic controls and a minutes-allocation optimizer: out of scope for this version.
- Multi-year EADA data: blocked until a person reads the terms of use in a browser and confirms the fiscal-year mapping, so the temporal revenue gate is not run.
- The tournament-unit revenue component: disabled until the unit-earning rule is confirmed from an NCAA primary document.
- League-wide player rankings, dollar leaderboards and any comparison of an individual with the House cap: not provided by design.
Game exclusions
- 2023: lineup-coverage, 1181 games
- 2023: minutes-mismatch, 1 games
- 2023: no-independent-minutes, 109 games
- 2023: no-pbp, 362 games
- 2023: not-in-audited-table, 914 games
- 2023: score-decrease, 2 games
- 2023: score-mismatch, 86 games
- 2024: lineup-coverage, 1036 games
- 2024: no-independent-minutes, 118 games
- 2024: no-pbp, 353 games
- 2024: not-in-audited-table, 922 games
- 2024: score-mismatch, 75 games
- 2025: lineup-coverage, 890 games
- 2025: minutes-mismatch, 1 games
- 2025: no-independent-minutes, 145 games
- 2025: no-pbp, 353 games
- 2025: not-in-audited-table, 938 games
- 2025: score-mismatch, 52 games
- 2026: lineup-coverage, 146 games
- 2026: minutes-mismatch, 1 games
- 2026: no-independent-minutes, 6 games
- 2026: no-pbp, 468 games
- 2026: not-in-audited-table, 1028 games
- 2026: score-decrease, 1 games
- 2026: score-mismatch, 55 games
- 2026: unknown-venue, 1 games
Limitations
- Evaluation seasons 2023-2025 were examined under nil-value-v2, where gates L2, P1 and P4 failed. The nil-value-v3 model changes (own box prior for low-minute returners, shrinkage toward the box prior) were made after those failures. Selection used development seasons 2019-2022 only, but v3 evaluation results are not pristine: they are a re-look at examined data. Gates that still fail are reported as failed.
- Companion diagnostic beside the frozen P4 gate (never in place of it): the median maximum relative RMSE over slices of the same sizes drawn at random is +0.050, against the frozen threshold of 0.05. This companion is computed from the examined evaluation-season predictions, so it is a post-hoc diagnostic and not a basis for any pass. The median chance maximum is at or just below 0.05, which is knife-edge, and the 5th to 95th percentile range is wide; it does not soften the P4 result. P4 is a failed gate as the gate computes it.
- Shrinkage disclosure: the P1 and P4 gates of record are computed on a predictor blended toward the box prior (weight 0.5 on the player-value model), a design choice made after the v2 gates failed and after the evaluation seasons were examined. At weight 0.5 the development worst slice was +0.008 but the examined evaluation worst slice is +0.053, so tuning on development was optimistic about evaluation. Without shrinkage the evaluation worst slice is +0.094, which also fails P4. The P1 pass does not depend on the blend: without it the evaluation gains are +9.0%, +6.6%, +5.8%.
- The decision to add shrinkage was motivated by evaluation-season evidence that had already been examined (amendment A7 withdraws the claim that it was chosen on development alone). Only the weight within the grid was selected on development seasons 2019 to 2022, the grid was written after the P4 failure, and the dummy ratio sits at the edge of its grid.
- L2 is capped by source data (missing play-by-play player ids, play-by-play and independent minutes). No rule was loosened, and L2 is reported as the gate computes it.
- Retrospective contribution is context-dependent: an association within the fitted lineups, not the effect of adding a player and not ability.
- Ranges are diagnostic whole-game resampling ranges, not calibrated intervals.
- Evaluation seasons were examined during earlier team-rating work, so they are historical evidence rather than untouched tests.
- Dollar figures, when shown, are model-implied allocations of a program-level estimate. They are never observed pay and never a market price.
- EADA revenue is self-reported by schools with no external review, and for most programs revenue equals expenses.
- The EADA 2024-25 label is paired to repo season 2025 (primary) or 2026 (alternate); the fiscal-year mapping is unconfirmed.
- P1, P2 and P4 weight prior-season player values by minutes players actually played in the evaluated season (known rosters); the prior-rating baseline has no roster information. This is a known-roster test, not a forecast. Players who left have no minutes and drop out.
- P3 coverage is conditional on players with enough possessions in both seasons, uses a method-of-moments variance that assumes independent season errors, and is not a test of the ranges shown to users.
- L3 counts lineup players that resolve to a registry player id, the loosest reading of bound, and it is measured after the minutes-agreement filter, which rejects games with an unbound player. It cannot discriminate. The strictly athlete-linked possession share and the pre-filter shares are reported in binding_diagnostics and in each lineup season summary.
- Association, not a causal effect: rest is not randomized and depends on scheduling choices and, in postseason play, on advancing.
- Rest is linear and capped, and is measured from Division I games only, so exhibition and non-Division I games make rest look longer.
- The AdjNet control is a stale weekly rating, so strength changes within a season are not controlled.
- Per-season coefficients vary widely and the evaluation estimate exceeds the development and descriptive estimates.
- The team-cluster bootstrap resamples the first-listed team only and ignores opponent dependence, so the range is too narrow.
- Dollar ranges are driven by a literature elasticity prior that no gate validates; their spread reflects the prior sd and win-draw variance only, and the cross-section can disagree with the prior.
- EADA revenue equals expenses for most rows; displayed lower bound is 0 for those programs.
- Cross-sectional slope cannot separate revenue response from rich programs buying wins, so e comes from the prior.
- No NIL, collective or House revenue-sharing line exists in the EADA data.
Ranges are the 10th to 90th percentile of whole-game resampling draws. They are not calibrated intervals. Model-implied allocation of a program-level estimate. Not observed pay or a market price.
Speculative compensation (experimental)β
Amendment A10, owner decision: the product publishes per-player compensation as a best-guess, speculative, unvalidated estimate. The dollar chain changed from suppressed to published as speculative; the value model is unchanged and stays promoted: false (gates L2 and P4 fail). Nothing here is a promotion argument.
Each figure is a best guess of a player's share of the school's own revenue-sharing budget, with an 80% range. No pay data exists to check it. It is not observed pay, an offer or a market price.
- Estimand: a school’s own House-settlement revenue-sharing money for men’s basketball in 2025–26. No such budget existed in earlier seasons, so earlier seasons carry no figure.
- Point best guess is the median of 4,000 joint draws of budget and player value; the range is the 10th to 90th percentile. Within every draw the players’ figures sum to the team pool exactly. The ranges are mixtures of assumptions, not calibrated intervals.
- The disagreement between the literature elasticity and the cross-section elasticity (a factor of about 2.7) is carried as four pool scenarios and shown as spread, never resolved silently.
- Not included: third-party and collective NIL deals, non-cash benefits, bonuses and incentive terms, and anything outside the school’s own revenue-sharing channel.
- No comparison with actual pay (none is held), no league-wide ordering by dollars; rosters stay in possession-share order. Opt-out schools have a pool of exactly zero.
Loading assumptions and anchors.
NIL value methodology · manifest loading
Expected performance (experimental)β
Status: failed-development. Model nil-projection-v1, promoted: false. Development failed, so no per-player projection is published and no player page shows an expected-performance figure; this page publishes the criteria table only. The net-value projection failed development (E1) and is not published. Selection used development seasons 2019 to 2022 only, with criteria declared before any 2023 to 2025 result was looked at. Seasons 2023 to 2025 had been examined before this method existed, so they are reported once as previously examined evidence and were never used to choose anything; only the 2026 to 2027 forward test is clean.
2019-2022, fit on 2012-2018 targets: RMSE 1.410 for the method, 1.536 for persistence of the input-season published net (M0) and 1.812 for the input-season league mean (M1); mean 80% range width 3.61 against 4.68 for a constant-width Gaussian around M1 and 3.91 around M0; 6031 pairs. 2023-2025, refit on 2012-2022 targets, previously examined: RMSE 1.474 for the method, 1.634 for persistence of the input-season published net (M0) and 1.936 for the input-season league mean (M1); mean 80% range width 3.60 against 4.64 for a constant-width Gaussian around M1 and 3.90 around M0; 5456 pairs.
Net projection, development criteria
| Gate | Requirement | Threshold | Observed | Scope | Result |
|---|---|---|---|---|---|
| E1 | RMSE gain against persistence of the input-season published net is at least 0.08 in each season and the pooled interval lower bound is above 0 | >= 0.08 | 0.082 | development 2019-2022 | Fail |
| E2 | RMSE gain against the league mean of the input season is at least 0.05 in each season and the pooled interval lower bound is above 0 | >= 0.05 | 0.222 | development 2019-2022 | Pass |
| E3 | Pooled CRPS gain against a constant-width Gaussian around the input-season league mean is at least 0.05 | >= 0.05 | 0.217 | development 2019-2022 | Pass |
| C1 | 80 percent interval coverage within [0.76, 0.84] pooled and [0.72, 0.88] in each season | in range 0.76 | 0.803 | development 2019-2022 | Pass |
| C2 | 50 percent interval coverage within [0.45, 0.55] pooled | in range 0.45 | 0.499 | development 2019-2022 | Pass |
| C3 | Calibration slope of outcome on predicted median within [0.85, 1.15] pooled | in range 0.85 | 0.980 | development 2019-2022 | Pass |
| C4 | 80 percent coverage within [0.72, 0.88] in each evidence tier (by_season holds the tiers) | in range 0.72 | 0.770 | development 2019-2022 | Pass |
| C5 | Each of 10 PIT bins holds between 0.5 and 1.5 times its expected count (by_season holds the ratios) | in range 0.5 | 0.889 | development 2019-2022 | Pass |
| N1 | Shuffled-target control: after refitting on shuffled training targets, the E2 and E3 gains have pooled intervals that include 0 | includes 0 0 | 0.012 | development 2019-2022 | Pass |
| R1 | Pooled possession-share RMSE gain against persistence is at least 0.05 with interval lower bound above 0 | >= 0.05 | 0.148 | development 2019-2022 | Pass |
| R2 | Possession-share 80 percent coverage within [0.76, 0.84] pooled | in range 0.76 | 0.796 | development 2019-2022 | Pass |
Net projection, previously examined seasons
| Gate | Requirement | Threshold | Observed | Scope | Result |
|---|---|---|---|---|---|
| E1 | RMSE gain against persistence of the input-season published net is at least 0.08 in each season and the pooled interval lower bound is above 0 | >= 0.08 | 0.098 | evaluation 2023-2025, previously examined, not a clean test | Pass |
| E2 | RMSE gain against the league mean of the input season is at least 0.05 in each season and the pooled interval lower bound is above 0 | >= 0.05 | 0.238 | evaluation 2023-2025, previously examined, not a clean test | Pass |
| E3 | Pooled CRPS gain against a constant-width Gaussian around the input-season league mean is at least 0.05 | >= 0.05 | 0.234 | evaluation 2023-2025, previously examined, not a clean test | Pass |
| C1 | 80 percent interval coverage within [0.76, 0.84] pooled and [0.72, 0.88] in each season | in range 0.76 | 0.784 | evaluation 2023-2025, previously examined, not a clean test | Pass |
| C2 | 50 percent interval coverage within [0.45, 0.55] pooled | in range 0.45 | 0.482 | evaluation 2023-2025, previously examined, not a clean test | Pass |
| C3 | Calibration slope of outcome on predicted median within [0.85, 1.15] pooled | in range 0.85 | 0.981 | evaluation 2023-2025, previously examined, not a clean test | Pass |
| C4 | 80 percent coverage within [0.72, 0.88] in each evidence tier (by_season holds the tiers) | in range 0.72 | 0.766 | evaluation 2023-2025, previously examined, not a clean test | Pass |
| C5 | Each of 10 PIT bins holds between 0.5 and 1.5 times its expected count (by_season holds the ratios) | in range 0.5 | 0.922 | evaluation 2023-2025, previously examined, not a clean test | Pass |
| R1 | Pooled possession-share RMSE gain against persistence is at least 0.05 with interval lower bound above 0 | >= 0.05 | 0.169 | evaluation 2023-2025, previously examined, not a clean test | Pass |
| R2 | Possession-share 80 percent coverage within [0.76, 0.84] pooled | in range 0.76 | 0.756 | evaluation 2023-2025, previously examined, not a clean test | Fail |
Shooting expectations (not published per player)
| Gate | Requirement | Threshold | Observed | Scope | Result |
|---|---|---|---|---|---|
| free_throw:S1 | attempts-weighted RMSE gain against the raw prior-season percentage in every development season | >= 0.03 | 0.133 | development 2019-2022 | Pass |
| free_throw:S2 | attempts-weighted calibration slope of realised on predicted percentage, pooled development | in range 0.8 | 1.105 | development 2019-2022 | Pass |
| free_throw:S3 | predictive 80 percent beta-binomial coverage, pooled development | in range 0.7 | 0.760 | development 2019-2022 | Pass |
| free_throw:S4 | targets shuffled within season, k re-picked on shuffled development data; attempts-weighted RMSE gain against the input-season league rate has a pooled confidence interval that includes 0 | includes 0 0 | -0.000 | development 2019-2022 | Pass |
| free_throw:E-gain | pooled evaluation RMSE gain against the raw percentage above 0 with confidence interval lower bound above 0 | > 0 | 0.101 | evaluation 2023-2025, previously examined, not a clean test | Pass |
| free_throw:E-coverage | pooled evaluation coverage within [0.65, 0.95] | in range 0.65 | 0.751 | evaluation 2023-2025, previously examined, not a clean test | Pass |
| free_throw:E-slope | pooled evaluation calibration slope within [0.75, 1.25] | in range 0.75 | 1.171 | evaluation 2023-2025, previously examined, not a clean test | Pass |
| three_point:S1 | attempts-weighted RMSE gain against the raw prior-season percentage in every development season | >= 0.03 | 0.301 | development 2019-2022 | Pass |
| three_point:S2 | attempts-weighted calibration slope of realised on predicted percentage, pooled development | in range 0.8 | 0.690 | development 2019-2022 | Fail |
| three_point:S3 | predictive 80 percent beta-binomial coverage, pooled development | in range 0.7 | 0.842 | development 2019-2022 | Pass |
| three_point:S4 | targets shuffled within season, k re-picked on shuffled development data; attempts-weighted RMSE gain against the input-season league rate has a pooled confidence interval that includes 0 | includes 0 0 | 0.000 | development 2019-2022 | Pass |
| three_point:E-gain | pooled evaluation RMSE gain against the raw percentage above 0 with confidence interval lower bound above 0 | > 0 | 0.271 | evaluation 2023-2025, previously examined, not a clean test | Pass |
| three_point:E-coverage | pooled evaluation coverage within [0.65, 0.95] | in range 0.65 | 0.814 | evaluation 2023-2025, previously examined, not a clean test | Pass |
| three_point:E-slope | pooled evaluation calibration slope within [0.75, 1.25] | in range 0.75 | 0.956 | evaluation 2023-2025, previously examined, not a clean test | Pass |
Limitations
- 2023-2025 were examined before this method was written (amendments A6 and A7 of the NIL record) and the input values for 2019-2022 come from a model whose hyperparameters were chosen on 2019-2022. Evaluation results are reported once as previously examined evidence and were never used to choose anything. Only the 2026-to-2027 forward test is clean.
- The hashed gates file (docs/nil-projection-gates.json) declares one development decision and one on-fail clause, with no per-statistic exception: if development fails, no per-player projection object is published, the methodology object publishes the failed table, and the page shows only a link to it. This object is that table.
- Development E1 fail: RMSE gain against persistence of the input-season published net is at least 0.08 in each season and the pooled interval lower bound is above 0. Observed 0.0823 (by key: 2019 0.0839, 2020 0.0877, 2021 0.0795, 2022 0.0792), threshold 0.08.
- Development failed on criterion E1 (RMSE gain against persistence of the input-season published net, at least 0.08 in each season). The earlier release of free-throw percentage projections rested on a per-statistic reading that the gates file does not state, and on a wider calibration band than the one used for net; amendment A9 withdraws it. No per-player projection of any statistic is published, and none is planned unless the owner reverses A9.
- Rows for free-throw and three-point percentage are shown as the frozen run reported them. They decide nothing: only the criteria listed in the development decision do, and E1 failed.
- Evaluation seasons 2023-2025 were examined before this method was written, so the evaluation rows are previously examined evidence, not a clean test. They were never used to choose a parameter.
Criteria hash 14a485539e68 · manifest e407af3f305f. NIL value methodology
Team identities and color
Conference membership belongs to each team season and follows the Kaggle historical conference records. Missing membership stays unavailable. Team swatches use frozen NCAA.com colors, supplemented by ESPN and documented school brand sources. Historical pages use current palettes, not reconstructed historical colors. Wins are green and losses red. Ranked metrics use a relative scale from green at the best rank through yellow at the median to red at the worst rank. Rankings already account for whether higher or lower values are better. W/L and numeric ranks remain visible.
Team scouting and player reports
Scouting values use summed accepted team boxes. Effective FG% = 100 × (FGM + 0.5 × 3PM) / FGA; turnover rate = 100 × turnovers / estimated possessions; offensive rebound % = 100 × ORB / (ORB + opponent DRB); free-throw attempt rate = 100 × FTA / FGA. Two-point shooting subtracts threes from total field goals. Assist rate uses FGM; block rate uses opponent two-point attempts. Point distribution divides points from each shot type by total points.
Defense columns describe opponents’ corresponding statistics. Division I averages pool both participants in all accepted games, using sums rather than averaging percentages. National ranks use full precision and competition ranking (ties share a rank); lower offense turnover rates and lower defensive shooting/rebounding/efficiency values rank better. Defensive turnover rates rank higher values first. These remain unadjusted statistics.
Team player tables aggregate only appearances for that team. Minute share divides logged player minutes by all team game minutes, including overtime. Per-game values use the player’s logged appearances. The last-five rotation uses the latest five accepted team games, not the player’s five most recent appearances. Missing records are not treated as zero-performance games.
Lineups come from SportsDataverse’s reconstructed on-court player IDs, linked through existing season identities. Accepted intervals require five distinct linked players, clean source status, monotonically increasing elapsed clocks, at most 30 unobserved final seconds, and agreement with player box minutes within 90 seconds per player. Unobserved final seconds are excluded from coverage and lineup minutes. Lineup shares divide observed group minutes by all last-five game minutes. Groups are unordered and positions are not inferred. Native NCAA play-only repairs do not supply reconstructed lineup fields.
Schedule venue labels use uniquely matched Kaggle historical participants with the same linked team identities, date, and both scores; an unmatched venue remains unavailable. Designated home/away score sides alone do not determine venue.
Data Sources
Source Catalog and Captured Artifacts
Team identities come from the direct NCAA 2026 Division I directory. Full-season team statistics are reconstructed in the secondary NCAA-derived SportsDataverse archive. The 160 direct NCAA sample finals all agree with their published season game scores.
Individual player statistics are published across accepted season games when player identities, shooting arithmetic, and summed scoring reconcile to team finals. Play-by-play publication covers 5,716 games and 2,782,378 events whose teams, dates, clocks, and final scores pass validation. Two additional rated games have invalid clocks and are withheld.
Historical team results and raw efficiencies are available in History. Validated NCAA-derived player statistics and play-by-play cover available games from 2010–2025; native ESPN player boxes supplement accepted games from 2004–2009. Linked career pages track corroborated seasons and team associations. Cross-provider player links require repeated matched games, team agreement and exact individual statistics; names alone never establish identity.
Player performance aggregates sum accepted appearances. Per-game rates use logged games; per-40 rates use logged minutes. Shooting percentages use summed makes and attempts. Estimated true shooting uses points ÷ (2 × (FGA + 0.44 × FTA)). Missing games are excluded, and zero-denominator rates are unavailable. Career rates are recomputed from combined counts, rather than averaged across seasons.
Team archive ↗ · Play-by-play archive ↗
Historical Collections · 203,027 games across 42 seasons. Historical efficiency uses available detailed games only.