---
title: "How well the NBA projection models track one player"
method: GET
path: "/v1/players/nba/{player}/prediction-performance"
tags: ["players"]
---

# How well the NBA projection models track one player

`GET /v1/players/nba/{player}/prediction-performance`

## Request

- Base URL: `https://api.predixsport.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.predixsport.com/v1/players/nba/{player}/prediction-performance`
- Auth: none declared

Per-player reconciliation of our pre-game projections (points, rebounds, assists, threes) against the realized box score, for games the player STARTED — projections assume the starting five, so a late scratch is excluded rather than counted as a miss. `player` accepts the display name ("LeBron James") or its slug ("lebron-james"). Returns per-stat accuracy (model MAE vs a naive rolling-average baseline, CRPS-based distributional skill), a predictability score (points + rebounds skill), and the most recent started games with expected vs actual values and the pre-game p10-p90 band. `source` distinguishes the full-season holdout backtest (2025-26) from live next-day reconciliation (from the 2026-27 season). Typical use: decide whether to trust today's projection for a fantasy start/sit call by checking how the model has tracked that player recently.

## Path parameters

- `player` string, required

## Query parameters

- `season` integer, nullable: NBA season end-year (2026 = 2025-26)
- `last` integer: How many recent started games to return

## Headers

- `authorization` string, nullable

## Response `200`

Successful Response

- NBAPlayerPerformanceResponse
  - `player` string, required
  - `team` string, nullable
  - `season` integer, required
  - `season_label` string, required
  - `source` string, required: 'backtest' = full-season holdout replay (season out-of-sample); 'production' = live predictions reconciled next-day
  - `games_started` integer, required
  - `predictability_score` number, nullable: Mean CRPS skill of points + rebounds x 100. Higher = more predictable for the models.
  - `stats` PlayerStatPerformance[], required
    - `stat` string, required
    - `games` integer, required
    - `avg_expected` number, nullable
    - `avg_actual` number, nullable
    - `mae_model` number, nullable
    - `mae_naive` number, nullable: Naive baseline = mean of season average and last-5 average at prediction time
    - `crps_model` number, nullable
    - `crps_naive` number, nullable
    - `skill` number, nullable: 1 - crps_model / crps_naive: distributional improvement over the naive baseline. Positive = the model tracks this player better than a rolling average.
  - `recent_games` PlayerGameLine[], required: Most recent games first; started games only
    - `match_id` string, required: Prediction file_name — join key across the API
    - `date` string, required
    - `opponent` string, required
    - `is_home` boolean, required
    - `stats` object, required: Keys: points, rebounds, assists, threes

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/predixsport/apis/predixsport-api.md) · [All operations](https://skmtc.dev/predixsport/apis/predixsport-api/llms.txt) · [OpenAPI document](https://skmtc.dev/predixsport/apis/predixsport-api/revisions/02014aee733d?raw)
