Skip to content
Back to home

Expected Value (EV) and Probability Calculations

How we remove sportsbook margins, estimate a fair probability, and decide whether a price is worth betting

Why This Matters

Sportsbooks build a margin ("vig") into every line. If you read probability straight off the odds, you'll see fake value: bets that look +EV but aren't once the margin is removed.

The short version: for every bet we estimate a fair (no-vig) probability from the whole market, then compare it with the best price at a book you can actually bet. EV is the headline number. It is an estimate, and every bet still carries risk.

Key Terms

Implied Probability

The probability a price implies, vig included.

Example: -110 implies about 52.38%; +150 implies 40%.

Vig (Sportsbook Margin)

In a fair market every outcome's probability adds up to 100%. Books price markets so the implied probabilities add up to more. The extra is the vig.

Example: -110 / -110 implies 52.38% + 52.38% = 104.76%. The extra 4.76% is the margin.

Fair Probability

Our estimate of how likely the outcome is, with the vig removed. EV, edge and fair odds are all computed from it.

Step 1: Pair Up Each Market

You can only remove the vig from a book's price if you also have that book's price on every other outcome. So first we group each book's prices by market:

  • • Moneylines: both teams' prices at the same book. Draw no bet is a two-way market too, since a draw refunds the bet.
  • • 3-way markets (soccer win/draw/win): all three outcomes at the same book, de-vigged together.
  • • Spreads (main, alternate and period spreads): a team at -3.5 pairs with the other team at +3.5 at the same book.
  • • Totals and player props: Over and Under at the same line; Yes and No for yes/no props.

Some markets have no other side to pair with: anytime and first scorer props, and "yes-only" ladders where books only sell one side. These get the one-sided estimate described in Step 4.

Step 2: Remove the Vig at Each Book

For each book that quotes every outcome, we turn its prices into implied probabilities and scale them back to exactly 100%. There are two ways to do the scaling; you can pick either in your settings.

Power (default)

Raises every implied probability to the same power k, choosing k so they add up to 100%. This takes relatively more of the margin off long shots, which is where books tend to hide it.

find k so that Σ p_i^k = 1, then fair p_i = p_i^k

Multiplicative (optional)

Divides each implied probability by the total, so every outcome loses the same share. Simpler, but it tends to overstate long shots.

fair p_i = p_i ÷ (p_1 + p_2 + …)

Example: A +300 / -400 market implies 25% + 80% = 105%. Multiplicative gives 23.8% / 76.2%. Power gives 21.8% / 78.2%. On an even -110 / -110 market both give 50% / 50%.

Step 3: Combine the Books

Your reference method decides which books' no-vig prices make up the fair probability. It works the same way for 2-way and 3-way markets.

Consensus (default, every plan)

The plain average of every book's no-vig probability. Leave-one-out: when we price a bet at a book, that book's own prices are left out of the average as long as at least two other books remain. A book's price is never used to confirm itself.

Pinnacle reference (Premium)

Pinnacle's own no-vig price is the fair probability. When Pinnacle doesn't quote the market, we fall back to leave-one-out consensus and label the bet "Pinnacle fallback".

Weighted (Premium)

A weighted average with the same leave-one-out rule. You can set each book's weight from 0.5 to 3.0. Sharp books you haven't weighted start at a suggested weight: Pinnacle 2.5, Betfair 2.0, Matchbook 1.8. Every other book starts at 1.0.

Sanity check

If a de-vigged probability comes out above 95%, or more than 1.15× what the same books' own prices imply, we treat the other side's data as bad and use the fallback in Step 4 instead.

Step 4: When a Market Can't Be De-vigged

Both fallbacks start from the market average: the implied probability of every book's price, with the highest and lowest dropped when there are three or more. Using the average rather than the best price avoids judging an outlier by itself.

One-sided markets: Adjusted estimate 🔵

Used only when no book quotes any other outcome: scorer props, yes-only ladders, or a moneyline with a single side listed. We divide the market average by an estimated "total market factor":

fair probability = market average ÷ total market factor
  • • The base factor is a smooth curve of the implied probability: 1.35 for long shots around 7.5%, easing to 1.25 at 20%, 1.15 at 32.5%, 1.08 at 45% and 1.06 from 60% up. There are no jumps between ranges.
  • • Market adjustments are added on top: first scorer +0.15, anytime scorer +0.10, blocks and steals +0.05, alternate lines +0.03, special markets (overtime, odd/even, winning margin) +0.03.
  • • The total factor is kept between 1.02 and 1.70.

These factors are estimates, not yet calibrated against results, so treat these bets with more caution than a true de-vig.

Two-sided markets without pairs: Lower confidence ⚠

If both sides are listed but no book quotes both (or the sanity check failed), we use the market average with the vig left in. The one-sided factor would remove roughly twice the vig from a two-sided market, so we don't apply it. Keeping the vig understates the fair probability, which makes these EVs conservative, but the estimate is still rough.

How We Calculate EV (Expected Value)

EV is the main number: it drives the default sort, the Min EV filter and the value tiers.

EV Formula (per 1 unit staked)

EV = p × (d − 1) − (1 − p) = p × d − 1
  • • p = fair probability
  • • d = decimal odds of the price you'd bet (+120 is 2.20)

The value bets list hides bets under 1% EV by default. 3% and up is high value, 5% and up is very high value (🔥).

Example: +120 with a fair probability of 47%: EV = 0.47 × 2.20 − 1 = +3.4%.

Whole-number lines: EV excl. push

On a whole-number line (a -3 spread, a total of 44, 5 receptions) the bet can push and refund your stake. Books' prices don't tell us how likely a push is, so our fair probability is the chance of winning given the bet doesn't push, and we label EV on these lines "EV excl. push". The real EV per dollar staked is a little closer to zero, because pushes return your stake with no profit or loss.

Edge and Fair Odds

Edge (in pts)

A secondary column. It is the gap between the fair probability and the probability implied by the price you'd bet, in probability points:

edge = fair probability − implied probability

Example: +120 implies 45.45%. With a fair probability of 47%, the edge is +1.5 pts (and EV is +3.4%).

Edge is shown in "pts", never "%", because it's a difference between two probabilities, not a return. Two bets with the same edge can have very different EV, which is why we rank by EV.

Fair Odds (no-vig odds)

The price the bet would have with zero vig, from the fair probability alone:

fair decimal = 1 ÷ fair probability

then converted to American odds

Which Price You're Shown

  • • Best price only from your bettable books. These are the books toggled on in your value bets list (DraftKings, FanDuel and Fanatics by default). If two of them tie, the one listed first wins.
  • • Every book we fetch still feeds the fair price. Sharp books like Pinnacle usually can't be bet in Connecticut, but they make the fair probability better. The Pinnacle and weighted methods always fetch them, and on the free plan we add reference books so your two books are never priced against each other alone.
  • • At least three books must quote a selection before we show a value bet for it.

Stale Prices Are Dropped

A book that stopped updating can leave an old price up after the market has moved. That price looks like great value and isn't. So we drop any quote that was too old when we fetched it:

  • • Before the game: older than 30 minutes.
  • • In play: older than 60 seconds.
  • • A quote with no update time is treated as stale.

A stale quote can neither be the best price nor feed the fair price. Age is measured from the book's last update to when we fetched the odds, so check the "updated" time on the page too. In-play games are off by default on the board.

Exchanges and Fees

Prediction-market exchanges quote a contract price and charge a separate taker fee, so their prices are only comparable with a sportsbook's once the fee is added:

cost = price + rate × price × (1 − price)
  • • Kalshi: rate 0.07. Polymarket: rate 0.06. Novig: no fee.
  • • Placeholders are dropped before fees. An empty order book shows up as a 1¢ or 99¢ quote, and a pair of quotes can add up to an impossible probability (over 110%). We remove those on the raw price first, so a 1¢ placeholder can never turn into a huge fake long-shot EV.
  • • On the board, in Who Should I Bet and in paper bots, exchange prices are repriced after fees. On the board and in paper bots they can be the best price, but they never feed the fair price. Exchanges whose fees we don't model yet, such as ProphetX, are left out of the board.
  • • The odds explorer and game pages drop placeholders but don't add exchange fees yet, so an exchange price there reads slightly better than what you'd pay.

Transparency: Probability Badges

Value bets carry a badge saying how their fair probability was found. Hover it to see which normalization (power or multiplicative) was used:

🟢

No-vig consensus devig_two_way

Average no-vig price across the other books quoting both sides.

🟢

No-vig (3-way) devig_three_way

Average no-vig price across books quoting all three outcomes (win, draw, win).

🟡

Pinnacle reference devig_pinnacle

Pinnacle's own no-vig price. Premium setting.

🟡

Pinnacle fallback devig_pinnacle_fallback

You chose Pinnacle, but Pinnacle doesn't quote this market, so we used consensus.

🔵

Weighted consensus devig_weighted

No-vig consensus with sharper books weighted higher. Premium setting.

🔵

Adjusted estimate overround_adjusted_fallback

One-sided market: market average with an estimated margin removed.

⚠

Lower confidence vigged_fallback

Two-sided market with no usable pairs: market average with the vig left in.

Pick 6 legs with no matching sportsbook line have no fair price at all; they're counted as indicative only and never scored.

Why This Prevents "Fake Value"

Using vigged probabilities, stale prices or books you can't bet makes bad bets look good.

Our system avoids that by:

  • • Removing the vig from real, same-book pairs whenever they exist
  • • Leaving the priced book out of its own fair price
  • • Using a labeled estimate only when a market can't be de-vigged
  • • Dropping stale quotes and exchange placeholders
  • • Pricing bets only at books you can actually bet

Best Practices We Follow

We do:

  • • De-vig whenever a book quotes every side
  • • Rank and filter by EV, not raw price differences
  • • Average probabilities, never American odds (they're non-linear)
  • • Compute boosted EV from the exact boosted price at the boosted book
  • • Show how every fair probability was found

We don't:

  • • Use the best price to estimate the fair probability (selection bias)
  • • Show value bets from fewer than three books
  • • Model pushes on value bets, or correlation between Pick 6 legs, yet
  • • Guarantee outcomes: EV is a long-run estimate