NBA Matchup Card — Complete Data Spec

Purpose: Every metric the analyst briefing will contain for each game, how it's calculated, and where the data comes from.


SECTION A: Ported From Old Script (already proven, upgrade to league-anchored)

All deltas upgraded from TeamA - TeamB to league-average anchored:

delta = LeagueAvg + (TeamA_value - LeagueAvg) + (TeamB_value - LeagueAvg)

A1. Efficiency Deltas

Metric Old Calculation New Calculation Source
ortg_matchup Team ORtg - Opp DRtg LeagueAvg + (Team ORtg - Avg) + (Opp DRtg - Avg) nba_advanced_stats
drtg_matchup Team DRtg - Opp ORtg LeagueAvg + (Team DRtg - Avg) + (Opp ORtg - Avg) nba_advanced_stats
net_rtg_delta not computed Team NetRtg - Opp NetRtg nba_advanced_stats
mov_delta Team MOV - Opp MOV same nbastuffer_stats
consistency_delta Team Cons - Opp Cons same (no league anchor needed, relative metric) nbastuffer_stats
a4f_delta Team A4F - Opp A4F same nbastuffer_stats

A2. Four Factors Deltas (Offense vs Opponent Defense)

Metric Calculation Source
efg_delta Team eFG% - Opp defensive eFG% nba_advanced_stats
orb_delta Team OREB% - Opp DREB% nba_advanced_stats
tov_delta Team TOV% - Opp forced TOV% nba_advanced_stats
ftr_delta Team FTA rate - Opp FTA rate allowed nba_advanced_stats
three_rate_delta Team 3PT rate - Opp 3PT rate allowed nba_shooting_stats

A3. Defensive Deltas

Metric Calculation Source
def_efg_delta Team defensive eFG% - Opp offensive eFG% nba_advanced_stats
drb_delta Team DREB% - Opp OREB% nba_advanced_stats

A4. Trend Deltas (momentum)

Metric Calculation Source
sag_trend Sagarin Strong Recent - Sagarin Overall (per team) sagarin_ratings
sag_trend_delta Team sag_trend - Opp sag_trend sagarin_ratings
dr_trend DRatings Inference - DRatings Overall (per team) dratings_ratings
dr_trend_delta Team dr_trend - Opp dr_trend dratings_ratings
sag_vs_opp Team Strong Recent - Opp Strong Recent sagarin_ratings
inf_vs_opp Team Inference - Opp Inference dratings_ratings

A5. Sharp Action (analysts DON'T see — Opus/edge scanner only)

Metric Calculation Source
rlm Reverse line movement detected (Y/N) pregame_sharp_data
steam Steam move detected (Y/N) pregame_sharp_data
cash_ticket_div Cash% - Ticket% divergence pregame_sharp_data

A6. No-Vig Calculations (analysts DON'T see — edge scanner only)

Metric Calculation Source
novig_ml De-vigged ML from Pinnacle pinnacle odds
novig_spread De-vigged spread probability pinnacle odds
implied_score Derived from spread + total computed

A7. Referee Data

Metric Calculation Source
ref_crew CC, Referee, Umpire names ref_assignments
crew_ppg Crew average total points per game computed from historical
crew_home_win_pct Home team win% under this crew computed
crew_fouls_per_game Average fouls called computed
crew_ou_lean Crew PPG - league average PPG (point adjustment for totals) computed
crew_home_lean Crew home win% - league avg home win% computed

SECTION B: New Panel-Recommended Metrics

B1. Pace Matchup (unanimous recommendation)

Metric Calculation Source
pace_delta Team Pace - Opp Pace nba_advanced_stats
projected_game_pace (Team Pace + Opp Pace) / 2 * 0.88 nba_advanced_stats (0.88 = pace regression factor, slower team controls)
projected_possessions projected_game_pace * 48/60 computed
pace_imposition avg(actual_game_pace - opp_avg_pace) over last 15 games — does team speed up or slow down opponents nba_game_quarters + schedule

B2. Projected Score / Total / Spread (5/5 panel votes)

Metric Calculation Source
projected_away_pts (Away ORtg_adj + Home DRtg_adj) / 200 * projected_possessions computed
projected_home_pts (Home ORtg_adj + Away DRtg_adj) / 200 * projected_possessions computed
projected_total projected_away_pts + projected_home_pts computed
projected_spread projected_home_pts - projected_away_pts + team_hca computed
Where ORtg_adj = LeagueAvg + (Team ORtg - LeagueAvg) + (Opp DRtg - LeagueAvg)

B3. Injury-Adjusted Ratings (5/5 panel votes — biggest edge potential)

Metric Calculation Source
missing_players List of OUT/DOUBTFUL players with stats injury reports
missing_vorp Sum of injured players' VORP nba_player_advanced_stats
missing_minutes Sum of injured players' avg minutes nba_player_advanced_stats
on_off_delta Team NetRtg WITH player - Team NetRtg WITHOUT player NEW: NBA.com on/off endpoint
injury_adjusted_ortg Team ORtg + (off_court_ortg - on_court_ortg) * (player_min / 48) computed from on/off
injury_adjusted_drtg Same for defense computed from on/off
injury_point_impact Estimated spread adjustment from missing player(s) computed

B4. True Home Court Advantage (4/5 panel votes)

Metric Calculation Source
team_hca_points (Home NetRtg - Away NetRtg) / 2 per team NEW: NBA.com home/away splits
home_ortg Team ORtg at home specifically NEW: NBA.com Location=Home
away_ortg Team ORtg on road specifically NEW: NBA.com Location=Road
home_drtg Team DRtg at home NEW
away_drtg Team DRtg on road NEW

B5. Rest-Adjusted Efficiency (4/5 panel votes)

Metric Calculation Source
rest_adjusted_ortg Team ORtg + team_rest_aed - opp_rest_aed nba_rest_stats + nba_fatigue_metrics
rest_advantage_points Fatigue composite differential as point value nba_fatigue_metrics
fatigue_composite Already exists — single score nba_fatigue_metrics

B6. Decay-Weighted Recent Form (4/5 panel votes)

Metric Calculation Source
ewma_ortg Exponentially weighted ORtg, lambda=0.85 computed from game logs
ewma_drtg Same for defense computed from game logs
ewma_net_rtg ewma_ortg - ewma_drtg computed
form_trajectory ewma_net_rtg - season_net_rtg (positive = trending up) computed

B7. Strength of Schedule (4/5 panel votes)

Metric Calculation Source
sos_last10 Average opponent NetRtg over last 10 games nba_advanced_stats + schedule
sos_adjusted_net_rtg Team NetRtg adjusted for schedule difficulty computed
sos_context "Easy schedule — rating likely inflated" or "Hard schedule — rating understated" computed flag

B8. Ref-Adjusted Total (4/5 panel votes)

Metric Calculation Source
ref_total_adjustment crew_ppg - league_avg_ppg (point value to add to projected total) computed from ref history
ref_adjusted_total projected_total + ref_total_adjustment computed
ref_foul_rate_z Crew foul rate as z-score from league average computed
ref_pace_impact Does this crew speed up or slow down games computed

B9. Team Variance / Blowout Profile (already in DB)

Metric Calculation Source
margin_std_dev Standard deviation of margin of victory nba_team_variance
skewness Skew of margin distribution nba_team_variance
kurtosis Fat tails (blowout tendency) nba_team_variance
pct_blowout_win % of games won by 15+ nba_team_variance
pct_blowout_loss % of games lost by 15+ nba_team_variance
variance_flag "High variance team" or "Consistent team" computed

B10. Shot Quality / Location (4/5 panel votes — NEW data source needed)

Metric Calculation Source
rim_fg_pct FG% at the rim NEW: NBA.com shot dashboard
midrange_fg_pct Mid-range FG% NEW
corner_3_pct Corner 3 FG% NEW
above_break_3_pct Above-the-break 3 FG% NEW
opp_rim_fg_pct_allowed What defense allows at rim NEW
shot_quality_margin Team eFG% vs expected eFG% by location NEW
style_mismatch Offense shot profile vs defense shot location weakness computed

B11. Clutch Performance (4/5 panel votes — NEW data source needed)

Metric Calculation Source
clutch_net_rtg NetRtg in last 5 min, margin <= 5 pts NEW: NBA.com clutch filter
clutch_diff clutch_net_rtg - overall_net_rtg computed
clutch_flag "Strong closer" or "Collapses in close games" computed

B12. Quarter Scoring Context (already in DB, reformat)

Metric Calculation Source
q4_vs_q1_delta Q4 scoring avg - Q1 scoring avg nba_quarter_scoring
late_game_flag "Strong finisher (+X pts Q4 vs avg)" or "Slow starter" computed from q4_vs_q1_delta

SECTION C: Metrics Analysts DO NOT See

These exist in the system but are hidden from blind analysts per the panel ruling:

Category Metrics Used By
Market prices Pinnacle lines, Kalshi prices, SBR multi-book Edge scanner, Opus verdict
Sharp money RLM, steam, cash/ticket divergence Opus verdict
Model predictions Sagarin spread/total, DRatings, Dimers, ESPN BPI, GameSim, Prediction Tracker Long-term correlation tracking
No-vig calculations De-vigged ML/spread probabilities Edge scanner
Edge calculations Raw/net edge vs Kalshi, CLV Edge scanner, Opus verdict
Model vs market deltas AVG_VS_PIN_SPRD, AVG_VS_KAL_SPRD, STR_REC_VS_KAL Edge scanner

SECTION D: Matchup Card Format

Each game presented as one block with all pre-computed deltas:

=== PHI @ BOS — 2026-03-30 7:30 PM ET ===

PROJECTED OUTCOME
  Spread: BOS -6.8  |  Total: 221.4  |  BOS win prob: 68%
  (injury-adj: BOS -8.2 if Embiid OUT)

EFFICIENCY MATCHUP (league-anchored)
  BOS offense vs PHI defense: Expected ORtg 117.2 (+2.2 above avg)
  PHI offense vs BOS defense: Expected ORtg 112.8 (-2.2 below avg)
  Net matchup advantage: BOS +4.4

FOUR FACTORS DELTAS (offense vs opponent defense)
  eFG: BOS +2.1%  |  OREB: BOS +1.8%  |  TOV: PHI +0.9%  |  FTR: BOS +1.4%  |  3PT rate: BOS +3.2%

PACE & TOTAL
  BOS pace: 101.2  |  PHI pace: 97.1  |  Projected game pace: 87.1 poss
  Pace imposition: PHI controls (-1.4 slower than opponents avg)
  Ref-adjusted total: 221.4 + 2.1 (Foster crew) = 223.5

SITUATIONAL
  BOS: 1 rest day, road game 3/4, fatigue score 0.72
  PHI: 2 rest days, home, fatigue score 0.31
  Rest advantage: PHI +1.8 pts  |  HCA: PHI +2.1 pts (team-specific)

FORM (EWMA decay-weighted)
  BOS: NetRtg +8.2 (season +6.5, trending UP +1.7)
  PHI: NetRtg +2.8 (season +3.1, trending DOWN -0.3)
  SOS last 10: BOS faced avg opp NetRtg -1.4 (easy) | PHI faced +2.8 (hard)

INJURIES
  PHI: Joel Embiid — OUT (33 PPG, 29% usage, on/off delta: -9.0 NetRtg)
       Impact: PHI ORtg drops ~4.2 pts, spread adjusts ~3.5 pts toward BOS
  BOS: Kristaps Porzingis — PROBABLE (19 PPG, limited minutes expected)

VARIANCE PROFILE
  BOS: std dev 12.1, high blowout rate (22%), consistent team
  PHI: std dev 14.8, high variance, collapses without Embiid

REFS: Scott Foster (CC), Tony Brothers (R), Pat Fraher (U)
  Total adjustment: +2.1 pts  |  Foul rate: +3.2/gm above avg  |  Home lean: +1.4%

QUARTER CONTEXT
  BOS: Strong finisher (+2.1 pts Q4 vs avg)
  PHI: Slow starter (-1.8 pts Q1 vs avg)

SECTION E: New Data Sources Needed

Source What It Gives Us Endpoint Cost
NBA.com On/Off Splits Player impact (on_court vs off_court NetRtg) stats.nba.com/stats/teamplayeronoffdetails Free
NBA.com Home/Away Splits Per-team HCA in efficiency terms stats.nba.com/stats/leaguedashteamstats?Location= Free
NBA.com Last-N Games Rolling 5/10 ORtg/DRtg stats.nba.com/stats/leaguedashteamstats?LastNGames= Free
NBA.com Shot Locations Shot zone FG% (rim, mid, corner 3, above-break 3) stats.nba.com/stats/leaguedashteamshotlocations Free
NBA.com Clutch Stats Last 5 min, margin <= 5 performance stats.nba.com/stats/leaguedashteamclutch Free
NBA.com Hustle Stats Deflections, contested shots, loose balls stats.nba.com/stats/leaguehustlestatsteam Free

All free. No new API keys needed.


SECTION F: Build Priority

Priority Metric Group Effort Impact
1 League-anchored efficiency deltas (port from old script) Low — formulas exist High
2 Projected score/total/spread Low — computed from existing data High
3 Per-team HCA in points Medium — new NBA.com endpoint High
4 Injury-adjusted ratings (on/off splits) Medium — new endpoint + computation Highest potential
5 EWMA decay-weighted recent form Low — computed from existing game data Medium
6 SOS-adjusted ratings Low — computed from existing data Medium
7 Ref-adjusted total (already partially there) Low — crew_ppg - league_avg Medium
8 Pace imposition score Medium — needs game-level pace history Medium
9 Shot quality / location data Medium — new endpoint Medium
10 Clutch performance splits Medium — new endpoint Lower
11 Hustle stats Medium — new endpoint Lower
Source: ~/edgeclaw/docs/nba-matchup-card-spec.md