Expected value is the single number that tells you whether a bet is worth making. It doesn't tell you whether the bet will win — nothing tells you that — but it tells you whether, over a large number of similar bets at similar prices, you would profit or lose. Get the EV calculation right consistently and you have an edge. Get it wrong and you don't.
This guide walks through the full calculation for an NBA player prop bet, from raw inputs to the edge percentage you see on a value bets page. Worked examples throughout. By the end you'll be able to compute EV on any prop, on any line, with any sportsbook.
If you want a refresher on what value betting is and why it works in the NBA, start with our pillar guide on NBA value betting. This article assumes you know the basics.
The four inputs
EV calculation requires four numbers. Three come from the sportsbook; one comes from your model.
1. The line
The number being bet over or under. For example, "Jayson Tatum over 26.5 points." The 26.5 is the line.
2. The price
The odds being offered, expressed in your preferred format. Decimal odds are easiest to work with mathematically and we'll use them throughout. American –10 = decimal 1.91. American +110 = decimal 2.10.
If you're working from American odds, convert before calculating. The formulas:
American negative odds (e.g. −110): decimal = 1 + (100 / 110) = 1.91
American positive odds (e.g. +120): decimal = 1 + (120 / 100) = 2.20
3. The implied probability
The probability the sportsbook's price implies. Calculation:
implied_probability = 1 / decimal_odds
So a price of 1.91 implies 1/1.91 = 52.4%. A price of 2.20 implies 1/2.20 = 45.5%. This is what the book says is the chance of the bet winning, before vig.
4. Your true probability estimate
The probability your model assigns to the bet winning. This is the hard one. It's not a single number you read off a screen — it's the output of a projection plus a distribution. We'll cover the projection-to-probability conversion in detail below.
Converting a projection into a probability
This is the step most people get wrong. A projection is a single number — "Tatum will score 28.4 points tonight" — but a probability requires a distribution: how confident are you in that number? What's the spread of likely outcomes around it?
The normal distribution shortcut
For most NBA stat lines (points, rebounds, assists), the actual outcomes follow a roughly normal distribution centred on a true mean, with a standard deviation that depends on the player and the stat. This isn't perfect — in particular, threes and steals are better modelled with a Poisson or negative binomial — but the normal approximation works well enough for most calculations and is easy to compute.
The formula. Given a projection μ (mu) and standard deviation σ (sigma), the probability of the over hitting at line L is:
P(over) = 1 − Φ((L − μ) / σ)
Where Φ is the standard normal cumulative distribution function. In Excel: =1 − NORM.S.DIST((L−μ)/σ, TRUE). In Python: 1 − scipy.stats.norm.cdf((L−μ)/σ).
Example
Tatum projection: μ = 28.4 points. Estimated standard deviation for Tatum's points this season: σ = 6.0. Line: L = 26.5.
Z-score = (26.5 − 28.4) / 6.0 = −0.317
Φ(−0.317) = 0.376
P(over) = 1 − 0.376 = 0.624, or 62.4%
Our model thinks Tatum has a 62.4% chance of going over 26.5 points. The sportsbook line at 1.91 was implying 52.4%. We have a candidate +EV bet.
Where the standard deviation comes from
The standard deviation σ is the most underrated input in EV calculation. Use the same σ for every player and you'll find phantom edges that aren't there. Use a per-player, per-stat σ derived from rolling game logs and you'll calibrate properly. The Statz model produces σ alongside every projection — different players have different σ even at the same projection level, because some players are more consistent than others.
If you're rolling your own model, compute σ from each player's last 20–40 games, weighted toward recent performance. Don't use career standard deviation — it'll be too wide and will smooth out your edges.
Calculating expected value
Now you have the true probability and the price. Expected value per unit staked:
EV = (P_true × (decimal_odds − 1)) − ((1 − P_true) × 1)
Continuing the Tatum example. P_true = 0.624. Decimal odds = 1.91.
EV = (0.624 × 0.91) − (0.376 × 1)
EV = 0.568 − 0.376
EV = +0.192 per unit staked
Translation: for every £1 you bet on Tatum over 26.5 at 1.91, you expect to make 19.2p in the long run, assuming your probability estimate is correct.
Calculating edge percentage
Edge percentage is what we display in the right-hand column of the Statz value bets table. It's the cleanest single number for comparing bets across different prices and probabilities. Formula:
edge_pct = (P_true − P_implied) / P_implied × 100
Tatum example. P_true = 0.624. P_implied = 0.524.
edge_pct = (0.624 − 0.524) / 0.524 × 100 = +19.1%
Why edge percentage instead of raw EV? Because edge percentage is invariant to the price. A +20% edge at 1.50 and a +20% edge at 3.00 are equally good bets in proportional terms, even though their raw EV per unit staked is different. Sorting your value bets by edge % gives you a clean ranking of "how wrong is the price", regardless of whether the price is short or long.
Worked examples across stat types
Example 1: Points (over)
Player: Anthony Edwards. Projection: 27.8 points, σ = 6.5. Line: over 25.5 at 1.85.
Z = (25.5 − 27.8) / 6.5 = −0.354
P(over) = 1 − Φ(−0.354) = 1 − 0.362 = 0.638
P_implied = 1 / 1.85 = 0.541
Edge = (0.638 − 0.541) / 0.541 = +17.9%
EV per unit = (0.638 × 0.85) − (0.362 × 1) = +0.180. Bet.
Example 2: Rebounds (under)
Player: Nikola Jokić. Projection: 11.5 rebounds, σ = 3.2. Line: under 13.5 at 1.95.
Z = (13.5 − 11.5) / 3.2 = +0.625
P(under) = Φ(0.625) = 0.734
P_implied = 1 / 1.95 = 0.513
Edge = (0.734 − 0.513) / 0.513 = +43.1%
EV per unit = (0.734 × 0.95) − (0.266 × 1) = +0.431. Strong bet.
A +43% edge is rare and should make you suspicious. Before betting, check whether Jokić has a known matchup issue (small lineup, fast pace, foul trouble risk) or whether the line was set assuming a different game script. Massive edges often hide model errors.
Example 3: Threes (over) — distribution caveat
For threes, the normal distribution overstates extremes. A player who averages 2.5 threes per game with σ = 1.5 modeled as normal will assign ~5% probability to outcomes of 0 or fewer and 5% to 5 or more, both of which are too high for low totals. The Poisson distribution is a better fit:
P(over L) = 1 − P(X ≤ ⌊L⌋) where X ~ Poisson(λ = projection)
Player: Steph Curry. Projection: 4.2 threes (Poisson λ = 4.2). Line: over 3.5 at 1.90.
P(over 3.5) = 1 − P(X ≤ 3) for Poisson(4.2) = 1 − 0.395 = 0.605
P_implied = 1 / 1.90 = 0.526
Edge = (0.605 − 0.526) / 0.526 = +15.0%. Bet.
Adjusting for vig
The implied probability calculated as 1/decimal_odds includes the sportsbook's vig. For a single market in isolation, this is fine — you compare your true probability to the vigged implied probability and the bet is +EV if it clears the price. But for some calculations (like comparing efficiency across books, or computing no-vig fair odds) you need to strip the vig.
De-vigging a two-way market
For a market with two sides (over/under), the de-vigged probabilities are:
P_fair_over = P_implied_over / (P_implied_over + P_implied_under)
P_fair_under = P_implied_under / (P_implied_over + P_implied_under)
Example. Over 26.5 at 1.91 (P_implied = 52.4%). Under 26.5 at 1.91 (P_implied = 52.4%). Sum = 104.8%.
P_fair_over = 0.524 / 1.048 = 0.500
P_fair_under = 0.524 / 1.048 = 0.500
Without vig, this market is dead even — the book's true estimate is a 50/50 split. The 4.8% over 100% is the vig.
De-vigging is most useful when comparing your model to the book's true estimate (rather than the book's price). If your model says 60% over and the de-vigged book estimate is 50%, you have a true edge. If you only compared to the vigged 52.4%, you'd still be +EV but you'd be slightly underestimating how confident the book is.
A spreadsheet template
Here's a minimal Excel/Google Sheets layout for hand-calculating EV on a single prop. Six columns:
A: Player name (text)
B: Line (number, e.g. 26.5)
C: Decimal odds (number, e.g. 1.91)
D: Your projection (μ)
E: Standard deviation (σ)
F: P_true = 1 − NORM.S.DIST((B−D)/E, TRUE)
G: P_implied = 1/C
H: Edge % = (F−G)/G
I: EV per unit = F*(C−1) − (1−F)
This template is fine for spot-checking individual bets but won't scale to a full slate of 200+ player props per night. For that you need a model that produces μ and σ for every player on every market, every day. That's what statz.ai does.
Common calculation errors
Using the wrong distribution
Threes, steals, and blocks are low-count events that follow Poisson rather than normal distributions. Using normal will overstate the probability of extreme over outcomes. For these stats, switch to Poisson — or, if you're being thorough, negative binomial to handle dispersion.
Using career σ instead of recent σ
A player's variance changes across the season as their role evolves. A starter elevated to 35 minutes per game has different variance than the same player coming off the bench in October. Use the last 20–40 games, weighted recently.
Forgetting to convert American odds
All formulas above use decimal odds. −110 is not 110, it's 1.91. Confusing American and decimal will produce nonsense edges.
Not accounting for stat correlation in parlays
If you're parlaying multiple props on the same player or game, the legs are correlated, not independent. Multiplying the probabilities together as if they were independent will badly mis-estimate the parlay EV. We don't recommend parlays for value betting precisely because the correlation math is complicated and the books charge extra vig on parlays anyway. Singles are simpler and almost always better EV.
From calculation to action
Once you can compute EV on a single bet, the next step is doing it across an entire NBA slate consistently and reliably. That's what the Statz NBA value bets page does — it runs the calculation above, with proper per-player distributions and Bet365 lines, on every prop every day, and surfaces the bets where the edge clears a meaningful threshold.
If you want to understand the projection model that produces μ and σ, read our piece on NBA player prop projections vs sportsbook lines. If you want to understand why we benchmark specifically against Bet365 rather than DraftKings or FanDuel, see Bet365 specifics. And once you've got positive edges identified, the question becomes how much to stake — covered in the bankroll management guide.