Skip to main content
Technical Documentation

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

Active

30%

Market & Social

5-factor demand model

Active

20%

Reliability

Availability & consistency

Active

The 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.

SourceESPN Site API (public, no authentication)
CoverageAll D1 basketball — 362 men's teams, 361 women's teams
GranularityPer-player box scores for every game
Stats capturedPTS, REB, AST, STL, BLK, FGM/FGA, FTM/FTA, 3PM/3PA, TO, PF, MIN
Update frequencyDaily during season, weekly during offseason
Historical depthFull 2025-26 season (November through March)

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:

MetricGuardsForwardsCenters
Points per 3625%20%15%
Rebounds per 365%18%22%
Assists per 3615%8%5%
Steals per 365%5%3%
Blocks per 362%8%15%
True Shooting %18%15%15%
AST/TO Ratio12%6%5%
Stock Rate5%7%8%
Off Rating Proxy13%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.

TierScore RangeCurrent %Players
elite90 – 1000.1%3
high75 – 899.3%285
rising60 – 7436.2%1,111
mid40 – 5948.3%1,484
base0 – 396.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

DimensionWhat it measures
Score ProximityHow close the two players' composite scores are
Conference TierWhether they play in a similar competitive environment
Statistical ProfilePlay style similarity — captures style, not just overall ability
Market ProximityHow similar their market demand signals are
Class YearAcademic year proximity
Transfer StatusWhether 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

LevelCriteria
High5+ comps with known valuations, regression and comp estimates within 20%
Medium3-4 comps with valuations, or estimates diverge by 20-40%
LowFewer 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 Progress

News 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

Future

Cross-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.