Expected Value (EV)¶
Summary¶
Expected value (EV) in sports betting is the average amount a bettor expects to win or lose per unit wagered if they placed the same bet many times. It is the fundamental mathematical concept behind profitable betting: a bettor's edge comes from consistently finding bets with positive expected value (+EV).
The EV formula in its simplest form is: EV = (Probability of Winning × Amount Won) - (Probability of Losing × Amount Lost). A positive EV bet means the bettor has a mathematical edge over the sportsbook — over many bets, they expect to profit.
In the context of the sports prediction MVP, EV calculation is the core decision mechanism: the Poisson model outputs probabilities, de-vigged odds provide fair prices, and EV = (model_prob × fair_odds) - 1 determines whether a bet is worth placing.
Key Concepts¶
- Positive EV (+EV): Bet has a mathematical edge; expected return > 0. Over infinite repetitions, the bettor profits.
- Negative EV (-EV): Bet has negative expected return; the sportsbook has the edge. Over infinite repetitions, the bettor loses.
- Fair odds: Odds with no vig — implied probabilities sum to 100%. True probability = 1/decimal_odds.
- Implied probability: The probability the sportsbook's odds suggest. For decimal odds d: implied_prob = 1/d.
- Decimal vs. American odds: Decimal (European) odds are easier for EV calculations. American odds (+150) convert to decimal as (100/150)+1 = 1.667.
Formulas¶
Basic EV formula:
$$EV = (p \times b) - (q \times s)$$
Where:
- p = probability of winning (from model)
- q = probability of losing = 1 - p
- b = profit when winning (for decimal odds d: b = d - 1)
- s = stake (usually 1, normalized)
EV for decimal odds:
$$EV = p \times (d - 1) - (1 - p) = p \times d - 1$$
Or equivalently: EV = (p × d) - 1. If p × d > 1, the bet is +EV.
Implied probability from decimal odds:
$$\text{implied_prob} = \frac{1}{d}$$
Example:
- Model estimates Brazil has 60% chance to win (p = 0.60)
- Bookmaker offers odds of 1.80 (implied prob = 55.5%)
- Fair odds (de-vigged) might be 1.70 (implied prob = 58.8%)
- EV = 0.60 × 1.80 - 1 = 1.08 - 1 = +0.08 (8% expected return on stake)
- Or compared to fair odds: EV = 0.60 × 1.70 - 1 = +0.02 (2% edge)
Python Implementation¶
def expected_value(prob_win, decimal_odds):
"""
Calculate expected value of a bet.
Args:
prob_win: Model probability of winning (0-1)
decimal_odds: Decimal odds (e.g., 2.50 = 3.5x return including stake)
Returns:
EV as a decimal (e.g., 0.05 = 5% expected return on stake)
"""
return prob_win * decimal_odds - 1
def implied_probability(decimal_odds):
"""Convert decimal odds to implied probability."""
return 1 / decimal_odds
def is_positive_ev(model_prob, decimal_odds):
"""Check if bet has positive expected value."""
return model_prob * decimal_odds > 1
def ev_with_vig(model_prob, bookmaker_odds, fair_odds):
"""
Calculate EV relative to fair odds (de-vigged).
This shows the true edge vs. the market.
"""
return model_prob * fair_odds - 1
# Example
prob_brazil_win = 0.60
bookie_odds = 1.80
fair_odds = 1.70 # after removing vig
ev = expected_value(prob_brazil_win, bookie_odds)
edge = ev_with_vig(prob_brazil_win, bookie_odds, fair_odds)
print(f"EV vs bookie: {ev:.3f} ({ev*100:.1f}%)") # +0.080
print(f"Edge vs fair: {edge:.3f} ({edge*100:.1f}%)") # +0.020
Notes¶
- EV calculations are only as good as the probability estimates — a model with systematically bad probabilities will give misleading EV
- For World Cup betting: sample sizes are small (64 matches total), so individual match EV can be noisy
- The key insight is that +EV bets should be placed consistently over time; individual outcomes are irrelevant to long-term profitability
- OddsJam and similar tools provide real-time EV calculations across bookmakers for finding the best +EV opportunities
- The sportsbooks' edge (vig) must be removed before calculating EV — otherwise all bets appear worse than they are