Points Over Expected: A Fair Price for Every Shot

Introducing the HoopStatsEU expected points model

Author

Giannis Tsougkrianis

Published

October 3, 2026

Expected Points banner

A fair price for every shot

When watching a basketball game, the outcome of a shot should not be the criterion for whether it was the right shot to be taken. A corner three from a 42% shooter is a completely different possession than a 8-meter prayer from a big who lives in the paint, even if both end up as three points on the scoreboard.

The expected points (xPts) model puts a number on that instinct. Every shot gets a fair price: what it should be worth, given where it was taken and by whom. Add the prices up over a game and you get the points a player should have scored in an average night. The gap between what he actually scored and that fair price is his Points over Expected (PoE):

PoE = actual points − expected points. A positive value means he finished better than his shot diet and track record said he would; a negative value means he shot poorly.

How the price is set

Think of it as a scouting report that rewrites itself after every game, using only what was known before tip-off:

  1. Where the shot came from. The floor is carved into ten shooting zones: paint, restricted area, mid-range, both corners, both elbows, center, long range and very long range, plus the free-throw line, which the model treats as an eleventh zone of its own. Every zone, is priced through the exact same pipeline described below.
  2. Who’s shooting it. Each player’s career percentage in that zone sets the baseline.
  3. No track record? Fall back on position. A rookie, or a player with zero attempts in a zone, starts from what other players at his position shot there last season.
  4. Threes aren’t for everyone. A player who almost never steps out isn’t priced like an average shooter from deep — his number gets dragged toward a low floor (around 15.5%) in proportion to how rarely he actually shoots 3s.
  5. The hot hand exists. The last five games nudge the price up or down, so a hot streak moves the number without rewriting who the real player is.

Multiply each zone’s attempts by that price and by the shot’s value (2 or 3, or 1 from the free-throw line), add it all up, and you’ve got the player’s expected points for the night.

One thing to keep in mind. PoE does not take into account shot contest, shot-clock and if the shot was moving or stationary. Just the zone and shooter.

The Shooting zones

Basketball court divided into the ten HoopStatsEU shooting zones
Figure 1: The HoopStatsEU shooting zones. Ten zones on the floor, plus the free-throw line.

Five examples show what the model can and can’t tell us.


Example 1 — Streaks: one cold, one hot

Streaks are where basketball people trust their eyes and distrust the box score. Below, two stretches, game by game. A game counts as hot when the player beat his expected points by 3 or more, and cold when he fell short by 3 or more.

The cold stretch: Tyler Dorsey

Ten games starting 06 January 2026.

Across these 10 games Dorsey scored 141 points against 155.5 expected, a difference of -14.5. He had 7 cold games and 1 hot, with the longest cold run lasting 4 games. The worst night was at ZALGIRIS on 25 February: 16 points when his shots were worth 20.3 (-4.3).

The hot stretch: Devon Hall, hot when it mattered the most!

Hall’s final part of the 2024-25 season.

In 10 games, Hall scored 89 points against 68.1 expected (+20.9). That’s 4 hot games, and a longest hot run of 2. His best night came vs PANATHINAIKOS on 23 May: 18 points on shots worth 10.3 (+7.7).

Put the two charts side by side and you have the whole idea. Same model, one player running below his fair price for ten games and another running above it when the lights were brightest.


Example 2 — Kendrick Nunn: a rookie season, shot by shot

A rookie is the hardest player in the league to price. No EuroLeague résumé means the model starts from what players at his position typically shoot from each zone, then hands the wheel over to his own attempts as they pile up. Here’s Kendrick Nunn’s debut season, 2023-24.

Over 35 games Nunn averaged 16.0 points against 15.0 expected, a season total of 561 actual vs 525 expected (+36). The bottom chart breaks that down. His biggest cushion came from 3-pointers (+39 points above expectation), and the weakest part of his game relative to the model was his 2-pointers (-8).

That’s exactly the kind of split a staff wants walking into a film session: not just that a rookie over or under-performed, but which part of his game did it.


Example 3 — Shooting bigs vs non-shooting bigs: Wright and Tavares

Two centers, two very different relationships with the three-point line. Moses Wright has a modest 3-pointer in his repertoire and Walter Tavares is a traditional big man. How does the model price that difference?

Remember rule 4 from earlier: a player’s three-point price is tied to how often he actually takes them. A non-shooter can’t fake his way to a good price by adopting his position average, the model drags him toward the floor. A willing shooter climbs toward his own record. The heat map below shows expected points per three-point attempt in each zone, season by season.

PLAYER_NAME Seasons Games 3PA 3PM 3P% 3PA per game Avg price per 3PA (pts)
MOSES WRIGHT 3 77 46 14 30.4% 0.60 0.85
WALTER TAVARES 9 315 3 0 0.0% 0.01 0.52

Read the top chart first. Wright’s tiles sit visibly higher than Tavares’s, because a player who actually shoots threes earns a price built from his own record, while a player who almost never does gets priced near the floor (about 15.5% — roughly 0.47 points per attempt). The bottom chart shows exactly why: the volume gap is the price gap.

For a coach, the takeaway is practical. A way of distinguishing between an occasional shooter and a completely non-shooter.


Example 4 — The best and worst nights in EuroLeague history

Now the extremes. Among every player performance since the model’s coverage begins (EuroLeague 2008-09 onward) with at least 10 career field-goal attempts, which beat their fair price by the most, and which fell the shortest?

The five hottest

Player Team Season Date Game FGA PTS xPTS PoE
KENDRICK NUNN PANATHINAIKOS 2024-25 03 Apr 2025 @ MONACO 17 37 18.1 18.9
SASHA VEZENKOV OLYMPIACOS 2024-25 10 Jan 2025 vs BAYERN MUNICH 20 45 26.6 18.4
ANDREW GOUDELOCK FENERBAHCE 2014-15 13 Nov 2014 @ BAYERN MUNICH 18 34 15.7 18.3
ANDREAS OBST BAYERN MUNICH 2024-25 22 Nov 2024 vs BARCELONA 16 34 16.0 18.0
PJ DOZIER EFES 2025-26 07 Nov 2025 vs OLIMPIA MILANO 19 34 17.0 17.0

The five coldest

Player Team Season Date Game FGA PTS xPTS PoE
ISAIAH CANAAN UNICS 2021-22 02 Feb 2022 @ ALBA BERLIN 15 5 21.7 -16.7
TJ SHORTS PARIS BASKETBALL 2024-25 01 Nov 2024 vs BASKONIA 21 9 23.5 -14.5
MIKE JAMES MONACO 2021-22 28 Jan 2022 vs REAL MADRID 19 11 24.9 -13.9
JARED RHODEN PARIS BASKETBALL 2025-26 17 Apr 2026 @ ZALGIRIS 13 4 17.5 -13.5
BRAD WANAMAKER DARUSSAFAKA 2016-17 09 Dec 2016 @ BASKONIA 11 3 15.9 -12.9

The hottest night in the database belongs to KENDRICK NUNN, who dropped 37 points on shots worth 18.1 (+18.9). The coldest was ISAIAH CANAAN, with 5 against 21.7 (-16.7). Compare those swings to the ordinary ones in Example 1, and you get a feel for how far from normal these nights really are.


Example 5 — When the scoreboard lies

The all-time lists are dominated by big scoring nights, but PoE has a more interesting use: telling you when a average points total was actually a great shooting night, and when a high points total was a poor one. Two games from the 2025-26 season make the point.

Scoring over-performance: Walkup

THOMAS WALKUP finished with 14 points. The model priced his shots at only 5, meaning he beat his fair price by +9.0. Few looks and he cashed nearly every one.

The cold high-scoring night: Hifi

NADIR HIFI put up 24 points. Impressive amount, but his shots were worth 31.6, so he finished -7.6 relative to expectation. Volume carried the score; efficiency didn’t

Two box scores, two completely opposite stories. That’s the whole point of the model: the scoreboard tells you how many points a player scored; xPts tells you how well he had to shoot to get them.


What the model doesn’t see

xPts is a shot-quality model, so it has no view of defenders, shot clock, passing, screens, or whether a shot was contested. It credits finishing, not creation. And it only knows what happened in EuroLeague games — so a newcomer’s price starts from his position’s norm, no matter how good his résumé was somewhere else.

Methodology note. Expected points are computed as

\[ \text{Expected Points} = \sum_{z=1}^{11} \left( \text{Attempts}_z \times \text{Expected Conversion Rate}_z \times \text{Shot Value}_z \right) \]

where the eleven zones comprise ten shooting zones plus the free-throw zone. Each zone’s expected rate, including free throws, is built from information available before that game. The model covers EuroLeague seasons from 2008-09.