Scoring Methodology
A complete technical description of how the NILmetrics Score is computed. This document covers the data pipeline, statistical methods, normalization approach, and tier classification system.
Current version: v0.5 · Performance + Market + Comparable Players + Dollar Projections · Last updated April 2026
Overview
What the score represents.
The NILmetrics Score is a composite 0-100 rating that quantifies a college athlete's NIL (Name, Image, Likeness) value. The eventual composite is built from three pillars:
50%
Performance
On-court production
Active30%
Market & Social
5-factor demand model
Active20%
Reliability
Availability & consistency
ActiveThe composite score is built from three pillars: Performance, Market & Social, and Reliability.
Composite Score
score = performance × 0.50 + market/social × 0.30 + reliability × 0.20
This document describes how all three pillar scores are computed.
Step 1
Data pipeline.
Game-by-game box score statistics are ingested from ESPN's public API for every NCAA Division I men's and women's basketball game. The pipeline runs on a configurable schedule.
All data is stored per-game (not pre-aggregated) to enable flexible windowing, recency decay, and historical trend analysis.
Step 2
Per-36-minute normalization.
Raw counting statistics are converted to per-36-minute rates before any comparison. This eliminates distortion from varying playing time — a player scoring 10 points in 15 minutes is producing at a 24-point-per-36 rate.
Per-36 Rate
stat_per36 = (raw_stat / minutes_played) × 36
Games are aggregated using minutes-weighted averages — games where the player played 35 minutes count more heavily than 8-minute garbage time appearances.
Minimum threshold: Players averaging fewer than 15 minutes per game are excluded from scoring. This filters out bench players and garbage-time-only appearances.
Step 3
Efficiency metrics.
Beyond counting stats, the algorithm computes four efficiency metrics that capture impact rather than just volume.
True Shooting % (TS%)
The most comprehensive single measure of shooting efficiency. Accounts for 2-point FGs, 3-point FGs, and free throws in a single number.
True Shooting %
TS% = PTS / (2 × (FGA + 0.44 × FTA)) × 100
Requires minimum 3 FGA per game to be included. Players below the threshold have TS% excluded from their score (weight redistributed).
Assist-to-Turnover Ratio (AST/TO)
Measures decision-making quality. Higher values indicate a player creates opportunities for teammates without giving the ball away.
AST/TO Ratio
AST_TO = total_assists / total_turnovers
Players with zero turnovers receive a bonus ratio of AST × 2.
Stock Rate
Defensive activity per minute of play. Combines steals and blocks into a single rate stat.
Stock Rate
stock_rate = (STL + BLK) / MIN × 36
Offensive Rating Proxy
Approximates points generated per possession-ending event. Rewards efficient scoring and playmaking, penalizes missed shots and turnovers.
Offensive Rating Proxy
off_rating = (PTS + AST × 1.5) / (FGA + TO + 0.44 × FTA) × 100
Step 4
Position-specific normalization.
A center averaging 12 rebounds is performing at a different level than a guard averaging 12 rebounds. All stats are converted to z-scores within position group — measuring how far above or below the positional average a player is, in standard deviations.
Z-Score
z = (player_value − position_mean) / position_stddev
Z-scores are then combined using position-specific weights that reflect what matters most for each role:
| Metric | Guards | Forwards | Centers |
|---|---|---|---|
| Points per 36 | 25% | 20% | 15% |
| Rebounds per 36 | 5% | 18% | 22% |
| Assists per 36 | 15% | 8% | 5% |
| Steals per 36 | 5% | 5% | 3% |
| Blocks per 36 | 2% | 8% | 15% |
| True Shooting % | 18% | 15% | 15% |
| AST/TO Ratio | 12% | 6% | 5% |
| Stock Rate | 5% | 7% | 8% |
| Off Rating Proxy | 13% | 13% | 12% |
Weights reflect positional expectations. Guards are weighted heavily on scoring and playmaking; centers on rebounding and shot-blocking. The composite z-score is:
Composite Z-Score
composite_z = Σ (z_stat × weight_stat) for each stat
Step 5
Conference strength adjustment.
A 20 PPG guard in the SEC is not the same as a 20 PPG guard in the Patriot League. After computing the composite z-score, we apply a conference strength multiplier that scales the z-score based on the quality of competition.
Conference Multiplier
multiplier = 1.0 + ((conf_avg − grand_avg) / grand_avg) × 0.5
Conference multipliers are auto-computed from the data each time scores are recalculated. Players in stronger conferences receive a proportional boost, while players in weaker conferences receive a proportional reduction — ensuring competition quality is reflected in the score.
All D1 conferences are calibrated. Conferences with insufficient data receive a neutral multiplier.
Step 6
Recency decay.
More recent games are weighted more heavily than older games. This rewards current form — a player peaking in March is valued higher than a player who was hot in November but has since cooled off.
Recent games are weighted exponentially more than older games using an exponential decay function. This ensures the score reflects current form, not historical averages.
Recency decay is applied during the game aggregation step — it multiplies with minutes played to produce the final weight for each game.
Step 7
Confidence regression.
Players with few games have unstable scores — one great performance can produce an inflated rating. To counter this, we apply regression toward the meanthat's inversely proportional to sample size.
Confidence
confidence = min(games_played / 5, 1.0)
Adjusted Score
adjusted = confidence × raw_score + (1 − confidence) × 50
A player with 1 game has confidence 0.2 — their score is 80% pulled toward 50 (the mean). A player with 5+ games has confidence 1.0 — their raw score is used directly.
This ensures that sustained performers always outrank one-game wonders. The confidence value is displayed in the UI so users can assess how reliable a score is.
Step 8
Score mapping.
The composite z-score is mapped to the 0-100 scale using a sigmoid function that compresses extreme values while providing high resolution in the middle of the distribution.
This ensures:
- Scores are always bounded between 0 and 100
- The middle of the distribution has high resolution for differentiating average players
- Extreme outliers (Elite and Base) are naturally separated from the pack
- The distribution is symmetric around 50
Classification
Tier system.
The final score is classified into five tiers. Tier boundaries are fixed; the percentage of players in each tier emerges naturally from the distribution.
| Tier | Score Range | Current % | Players |
|---|---|---|---|
| elite | 90 – 100 | 0.1% | 3 |
| high | 75 – 89 | 9.3% | 285 |
| rising | 60 – 74 | 36.2% | 1,111 |
| mid | 40 – 59 | 48.3% | 1,484 |
| base | 0 – 39 | 6.1% | 188 |
Current distribution from 3,071 scored men's D1 basketball players (3-pillar composite: performance + market + reliability, 2025-26 season).
Market Demand
5-factor market value model.
The Market Value pillar captures demand-side signals that performance alone cannot measure. A Power 4 starter on a top-ranked team commands more NIL value than an equivalent performer at a mid-major — even with identical stats. The market model quantifies this through five independently computed factors.
Market Score
market = platform × 0.30 + trajectory × 0.25 + scarcity × 0.20 + visibility × 0.15 + transfer × 0.10
Platform Context
30%Where you play determines your exposure ceiling. Conference prestige, team success, and postseason qualification all amplify or dampen market value.
Conference tiers: Weighted by competitive level (Power 4 highest)
Success multiplier: Scales with team win percentage
Postseason bonus: Tournament teams receive an additional boost
Performance Trajectory
25%Trending players command premium valuations. This factor measures the 30-day performance delta — are they improving or declining?
Trajectory Factor
trajectory = 50 + (recent_perf − older_perf) × 2, clamped [0, 100]
A 10-point performance gain over the last month maps to a trajectory score of 70. Flat performance = 50 (neutral). A 15-point decline = 20.
Position Scarcity
20%Supply and demand at the player's position. If few players at the same position have a comparable performance score, the player is scarcer — and therefore more valuable.
Scarcity Factor
scarcity = (1 − comparables / total_at_position) × 100
Comparables are defined as same-position players within ±5 performance score points. 3 comparables out of 500 = high scarcity (99.4). 200 comparables out of 500 = low scarcity (60.0).
Visibility Index
15%Market value requires exposure. Players who play more games, log more minutes, are on winning teams, and receive media coverage have more visibility to scouts, fans, and sponsors.
Visibility Factor (with news data)
visibility = (games × 0.25 + minutes × 0.30 + wins × 0.25 + news × 0.20) × 100
Visibility Factor (without news data)
visibility = (games × 0.30 + minutes × 0.40 + wins × 0.30) × 100
games_pct: games_played / max_games_any_player
minutes_factor: min(avg_minutes / 36, 1.0)
win_factor: team_win_percentage, default 0.5 if unknown
news_pct: news_articles_30d / max_news_any_player (from Google News + Bing News RSS discovery)
Transfer Signal
10%Transfer portal activity signals real market demand — teams bidding for a player validates their value. Currently set to a neutral baseline while transfer portal data integration is in development.
v0.3: All players receive a transfer score of 40 (neutral). When portal data is available, this will reflect active interest from programs and predicted transfer likelihood.
All five factors produce scores on a 0-100 scale. The weighted market composite is combined with the performance score using a proprietary blending formula to produce the final NILmetrics Score.
Comparable Players
Multi-dimensional similarity engine.
For every scored athlete, NILmetrics identifies the most comparable players using a 6-dimension weighted similarity model. Comps are the foundation of how NIL deals are negotiated — agents use them to anchor valuations, and programs use them to justify budgets.
Hard Filters
Candidates must match on gender and positional group (Guards: PG/SG, Wings: SF, Bigs: PF/C). A center is never compared to a point guard.
Similarity Dimensions
| Dimension | What it measures |
|---|---|
| Score Proximity | How close the two players' composite scores are |
| Conference Tier | Whether they play in a similar competitive environment |
| Statistical Profile | Play style similarity — captures style, not just overall ability |
| Market Proximity | How similar their market demand signals are |
| Class Year | Academic year proximity |
| Transfer Status | Whether both players share transfer status |
Statistical Profile Similarity
Two players can have the same composite score but play completely differently — a scoring guard vs. a defensive guard. The similarity engine compares their z-score vectors (10 statistical dimensions) using cosine similarity.
Cosine Similarity
cos(A, B) = (A · B) / (||A|| × ||B||)
Z-score vectors include: points, rebounds, assists, steals, blocks (all per-36), true shooting %, AST/TO ratio, stock rate, offensive rating proxy, and usage rate — all position-normalized.
Similarity Score
similarity = Σ (dimension_score × weight) × 100
The top 8 most similar players are returned for each athlete, along with a human-readable explanation of why they match (e.g., "Same conference tier, similar statistical profile, composite within 3 points").
Dollar Projections
Score-to-dollar regression model.
The NILmetrics Score is the engine; the projected dollar value is the product. We translate the 0-100 score into a dollar estimate using a two-track approach: statistical regression and comparable player evidence.
Track 1: Log-Linear Regression
A multi-variate model trained on matched pairs of NILmetrics scores and real On3 NIL valuations. The relationship is exponential — elite athletes' values grow nonlinearly.
Regression Model
ln(valuation) = a + b₁ × score + b₂ × conf_tier + b₃ × class_year
The model automatically falls back to score-only regression when features have insufficient variance. Retrained on every scoring run as new On3 data is collected.
Track 2: Comp-Weighted Estimate
Uses the comparable players identified by the similarity engine. Each comp's known valuation is weighted by their similarity score, producing a market-evidence estimate.
Comp-Weighted Estimate
estimate = Σ(comp_valuation × similarity) / Σ(similarity)
Requires 3+ comparable players with known valuations to activate. When unavailable, falls back to regression-only with wider confidence bands.
Blended Projection
The final projected value blends both tracks. The regression generalizes well across the full population; the comp estimate anchors to real market evidence.
The two estimates are blended using a proprietary weighting that favors the more confident signal.
Confidence Levels
| Level | Criteria |
|---|---|
| High | 5+ comps with known valuations, regression and comp estimates within 20% |
| Medium | 3-4 comps with valuations, or estimates diverge by 20-40% |
| Low | Fewer than 3 comps with valuations — regression-only with wider range |
Projected values are recomputed on every scoring run. Valuation data is sourced from On3 NIL rankings, with weekly updates. As the matched dataset grows, the regression model improves and more players achieve high-confidence projections.
Roadmap
Visibility & Social Influence pillar.
The Social Influence pillar is the remaining component needed to complete the full three-pillar composite. We are building this in phases, starting with publicly available visibility signals before adding social platform data.
Phase 2A: Visibility Index
In ProgressNews article discovery is live. Articles about athletes and teams are discovered from Google News and Bing News RSS feeds, validated with AI for relevance, and classified by sentiment (positive/negative/neutral/controversial) and category (game recap, injury, transfer, NIL deal, off-field, award, draft).
Active signals: News article count (30-day window) is already factored into the Visibility sub-factor of Market Value. Risk flags highlight negative off-field coverage.
Planned signals: Google search volume, media mention frequency, and derived exposure metrics (games started, conference tier, March Madness appearances).
Phase 2B: Social Platform Data
FutureCross-platform audience reach, engagement quality, audience demographics, and brand alignment potential.
Planned sources: Phyllo aggregation (Instagram, TikTok, X, YouTube) for top athletes, with athlete self-service profile claiming.
Normalization: By school size and conference visibility — UConn basketball players inherently have more followers than mid-major players due to program exposure.
When the full Social Influence pillar is active, the composite formula shifts to its final form: score = performance × 0.40 + social × 0.30 + market × 0.30. All sub-scores operate on the same 0-100 scale.
Questions about our methodology?
This scoring system is designed to be transparent and auditable. If you have questions about specific components, want to discuss calibration approaches, or are interested in contributing domain expertise to the scoring model, reach out.
