De-vigging (Removing the Vigorish)

Overview

De-vigging (also called "removing the vig" or "de-minting") is the process of converting bookmaker odds with built-in margin into "fair" odds that reflect true implied probabilities. The sportsbook's margin (vigorish or "juice") is the overround — the amount by which the sum of implied probabilities exceeds 100%. De-vigging reverses this to get true probabilities for accurate expected-value-ev calculations.

For example, a soccer 1X2 market with Home 1.90, Draw 3.50, Away 5.00 has implied probabilities of 52.6%, 28.6%, 20.0% — sum = 101.2%. De-vigging adjusts these to fair probabilities that sum to exactly 100%.

The method matters: different de-vigging approaches give slightly different fair probabilities. The multiplicative method (preferred) and additive method are the two most common.

Why It Matters

De-vigging is essential because:
1. EV calculations require fair probabilities: Computing EV against inflated odds understates the market's true edge.
2. Model comparison: Comparing model probabilities to vig-inflated implied probabilities biases the comparison against the model.
3. Market efficiency analysis: True market probabilities (de-vigged) reveal whether the model is seeing genuine mispricings.
4. Sharp vs. soft comparison: De-vigging Pinnacle odds gives the best estimate of true market probabilities since they have the lowest vig.

Key Formula

Implied probability from decimal odds:

$$p_{implied,i} = \frac{1}{d_i}$$

Total overround:

$$O = \sum_i p_{implied,i}$$

Additive de-vigging (simple normalization):

$$p_{fair,i} = \frac{p_{implied,i}}{O}$$

Multiplicative de-vigging (Shin method, preferred):

$$p_{fair,i} = \frac{p_{implied,i}}{O^{p_{implied,i} / \sum p}}$$

Simplified: scale each probability by a factor proportional to its own magnitude.

Vigorish percentage:

$$v = \left(1 - \frac{1}{O}\right) \times 100\%$$

Worked Example

Odds: Home 1.90, Draw 3.50, Away 5.00

Implied probabilities: 1/1.90=0.526, 1/3.50=0.286, 1/5.00=0.200 → O=1.012

Additive de-vig: 0.526/1.012=0.520, 0.286/1.012=0.283, 0.200/1.012=0.198
Fair odds: 1/0.520=1.92, 1/0.283=3.54, 1/0.198=5.05

Multiplicative de-vig: slightly different — favorites receive proportionally more vig removal

Code Snippet

import numpy as np

def implied_probabilities(odds):
    return np.array([1/o for o in odds])

def overround(odds):
    return sum(implied_probabilities(odds))

def devig_additive(odds):
    """Additive de-vigging: normalize to sum to 1."""
    probs = implied_probabilities(odds)
    fair_probs = probs / sum(probs)
    return fair_probs, 1 / fair_probs

def devig_multiplicative(odds):
    """Multiplicative de-vigging (Shin method)."""
    probs = implied_probabilities(odds)
    O = sum(probs)
    fair_probs = probs / np.power(probs, probs / O)
    fair_probs = fair_probs / fair_probs.sum()
    return fair_probs, 1 / fair_probs

# Example
odds = [1.90, 3.50, 5.00]
fair_probs, fair_odds = devig_multiplicative(odds)
print(f"Fair probabilities: {fair_probs.round(3)}")
# [0.520 0.283 0.198]
print(f"Fair odds: {fair_odds.round(2)}")
# [1.92 3.54 5.05]
print(f"Sum: {fair_probs.sum():.3f}")  # 1.000

Pitfalls

  • Additive method can create invalid probabilities: Extreme longshots can get probabilities > 1 or < 0 after additive normalization. Multiplicative is safer.
  • Sharp vs. soft vig distribution: Multiplicative assumes vig is distributed proportionally, which is more realistic for sharp books.
  • Different books have different vig structures: A soft book's de-vigged odds may still differ from true probabilities due to public bias.
  • Football1X2 vig is asymmetric: The draw is typically underpriced relative to home/away. Additive de-vigging overcorrects the draw.

See Also