How scoring works in The Outlier
This page explains how outlier scores are computed using a weighted combination of player and league context. It covers how hybrid z-scores (# of standard deviations a stat is from the average) are calculated, how team stats are treated, and what filters are applied to keep results meaningful.
Overview
- Player z-scores: Two z-scores are calculated. Individual z-scores compare a player's performance to their OWN average of a stat, while League z-scores compare a player's performance to the LEAGUE's average of that stat.
Individual z-scores are combined with league z-scores using a weighted approach, where individual z-scores have a higher impact on outlier score and league z-scores have a slightly lower impact on outlier score. Since rookie players have no previous season's averages to reference, their stats are scored solely in comparison to the league average. - Team z-scores: Team-level stats are evaluated only against that team’s own season averages—no league hybrid is used for team metrics.
- Noise control: Players who play under 10 minutes in a game are excluded, and percentages require minimum attempts (e.g., for FG%, 3P%, FT%) to avoid misleading extremes.
Scoring formula
Each player stat is measured as a z-score relative to both the player’s own season averages and the league’s averages. The final hybrid score blends these components:
// compute player z-score and league z-score
player_z = (actual - player_mean) / player_std
league_z = (actual - league_mean) / league_std
// combine using configured weights
combined_z = player_weight * player_z + league_weight * league_z
// apply stat weight for final score
weighted_score = combined_z * stat_weight
- player_weight and league_weight multipliers are set to 0.6 and 0.4 respectively.
- Team scores always compare against team season averages only.
Stat Weights
Not all stats influence game outcomes equally. To reflect their impact, each stat is multiplied by a stat weight in the scoring formula. Higher-weighted stats contribute more heavily to outlier ranking.
- High-impact examples: PTS, TS%, eFG%, and TOV often receive higher weights because they directly correlate with winning margins and overall game efficiency.
- Medium-impact examples: REB, AST, and STL may carry moderate weights since they affect possession control and ball movement but are more context-dependent.
- Low-impact or volatile stats: BLK, PF, or niche efficiency metrics typically have lower weights to reduce noise and outlier inflation.
Why this method
The hybrid model balances two important perspectives: individual consistency and league-wide rarity. A performance might be ordinary for one player but extraordinary in the league context—or vice versa. Weighting both helps highlight the most meaningful statistical outliers without overreacting to small-sample noise.
Example
If a player who averages 8 points (std 4) scores 24 in a game, their player_z = (24−8)/4 = 4.0. With player_weight = 0.7, league_weight = 0.3, and a stat weight of 1.2, that game becomes a significant positive outlier that rises to the top of the rankings.
Stat Weights & Detection Rules
Each statistic is evaluated using custom thresholds and multipliers to determine whether a performance is a meaningful outlier. More impactful stats receive higher weights, while less predictive or negative stats (like turnovers or fouls) receive lower or negative weights. Here's the actual thresholds and values I currently have applied (open to suggestions).
| Stat | Player Threshold (Z) | Team Threshold (Z) | Weight | Minimum Raw Difference |
|---|---|---|---|---|
| Counting Stats | ||||
| PTS | 0.5 | 1.2 | 1.2 | 5 |
| AST | 0.5 | 1.0 | 1.2 | 4 |
| OREB | 1.0 | 1.0 | 1.5 | 4 |
| DREB | 1.0 | 1.0 | 1.2 | 4 |
| STL | 1.2 | 1.2 | 0.8 | 3 |
| BLK | 1.0 | 1.0 | 1.0 | 3 |
| TOV | 1.0 | 1.0 | -1.0 | 3 |
| PF | 0.5 | 0.5 | -0.6 | 3 |
| Shooting – Made Shots | ||||
| FG3M | 0.5 | 0.5 | 1.2 | 3 |
| FTM | 0.8 | 1.0 | 0.8 | 5 |
| Shooting Percentages | ||||
| FG3_PCT | 1.5 | 1.2 | 1.5 | 0.30 |
| FT_PCT | 1.2 | 1.0 | 0.8 | 0.08 |
| TS_PCT | 0.5 | 1.5 | 2.5 | 0.10 |
| Advanced Metrics | ||||
| AST_TO | 0.3 | 1.0 | 1.5 | 4 |
| REB_PCT | 0.3 | 1.0 | 1.2 | 0.10 |
| PLUS_MINUS | 1.0 | 1.0 | 0.7 | 5 |
| Team-Only Advanced Metrics | ||||
| OFF_RATING | — | 1.0 | 1.5 | 3 |
| DEF_RATING | — | 1.0 | -1.5 | 3 |
| PACE | — | 1.0 | 1.5 | 10 |
| PTS_OFF_TOV | — | 1.0 | 2.5 | 3 |
| PTS_PAINT | — | 1.0 | 1.5 | 4 |