Strasmore Research
Deep Dives Matt ConnorBy Matt Connor

How to De-Vig Betting Odds Into Probabilities

Bookmaker odds sum to more than 100 percent. Learn how to de-vig betting odds into fair probabilities with four methods, in one runnable Python script.

To de-vig betting odds is to strip a bookmaker's margin out of a quoted price and recover the probability underneath. The recipe is short: convert every outcome to an implied probability, add them up, notice the total lands above 100 percent, and split that excess back out. Our event contract prices as probabilities guide covers the simpler case, a single traded price read straight as a probability. This page covers quotes that are deliberately built to sum to more than one, and the part nobody agrees on: how to give the excess back.

Why betting odds sum to more than 100 percent

A book quotes both sides of a market at prices slightly worse than fair. On a true coin flip, a fair pair would be +100 against +100: risk 100 to win 100, whichever side you take. The familiar quote is -110 on both sides instead, meaning risk 110 to win 100. Each -110 converts to 52.38 percent, and the pair adds to 104.76 percent.

Those 4.76 points above 100 are the overround, also called the vig. That excess is the price of the service folded into the quote, and it carries no forecast at all. It is also why a set of quoted odds is not a probability distribution. A distribution sums to one. De-vigging rescales the set back to one, and the entire craft sits in choosing how.

How to convert American and decimal odds to implied probability

Four conversions cover almost everything you will meet.

  • Decimal odds: probability = 1 / price. A price of 5.75 implies 17.39 percent.
  • American odds on a favourite (negative): probability = A / (A + 100), using the absolute value. A quote of -750 implies 750 / 850, or 88.24 percent.
  • American odds on an underdog (positive): probability = 100 / (A + 100). A quote of +475 implies 100 / 575, or 17.39 percent.
  • Fractional odds: probability = denominator / (numerator + denominator). 19/4 implies 4 / 23, the same 17.39 percent.

The panel below runs those conversions on the quotes used throughout this page, all of them invented for the worked example. Three different notations land on the same 17.39 percent.

QueryImplied probability by quote format, illustrative quotes
The exact SQL behind every number
SELECT
    q.2 AS quote,
    round(100.0 * q.3, 2) AS implied_pct
FROM
(
    SELECT arrayJoin([
        (1, '-110 American',   110.0 / 210.0),
        (2, '-750 American',   750.0 / 850.0),
        (3, '+475 American',   100.0 / 575.0),
        (4, '5.75 decimal',      1.0 / 5.75),
        (5, '19/4 fractional',   4.0 / 23.0)
    ]) AS q
)
ORDER BY q.1
Run this yourself

Those are raw implied probabilities, margin included. Add them across a market and you get the book sum. The -750 against +475 pair sums to 1.0563, an overround of 5.63 percent.

Summed across every outcome, each of those books lands above 100 percent, by a different amount.

QueryBook sum and overround on four illustrative markets
The exact SQL behind every number
SELECT
    b.2 AS market,
    round(100.0 * arraySum(b.3), 2) AS book_sum_pct,
    round(100.0 * (arraySum(b.3) - 1.0), 2) AS overround_pct
FROM
(
    SELECT arrayJoin([
        (1, 'Balanced -110 / -110',         [110.0 / 210.0, 110.0 / 210.0]),
        (2, 'Lopsided -750 / +475',         [750.0 / 850.0, 100.0 / 575.0]),
        (3, 'Decimal 1.1333 / 5.75',        [  1.0 / 1.1333, 1.0 / 5.75]),
        (4, 'Three-way +100 / +230 / +300', [100.0 / 200.0, 100.0 / 330.0, 100.0 / 400.0])
    ]) AS b
)
ORDER BY b.1
Run this yourself

Four ways to de-vig betting odds, and where they disagree

Every method answers one question: which slice of the excess belongs to which outcome? They differ only in the answer.

  • Multiplicative, also called proportional: divide each raw probability by the book sum. One line of arithmetic. The deduction scales with size, so the largest absolute cut lands on the favourite.
  • Additive, also called equal margin: subtract the same amount from every outcome, the book sum minus 1, divided by the number of outcomes. Now the largest relative cut lands on the longshot. Across a deep field this can push a tiny probability below zero, which marks the method as out of its range rather than revealing anything about the race.
  • Power: find the exponent k that makes the raw probabilities, each raised to k, sum to one. With k above 1, small numbers shrink harder in relative terms, and the longshot surrenders most of the margin.
  • Shin: solve for z, the share of volume attributed to better-informed traders in Shin's model, then back out the probabilities a book facing that share would quote.

The two fitted methods exist for a pattern documented across decades of settled-market studies: longshot quotes tend to carry more margin than favourite quotes. That pattern has a name, the favourite longshot bias, and neither dividing by a constant nor subtracting a constant can express it.

One quirk is worth knowing before you fit anything. On a two-outcome market, Shin and additive return exactly the same numbers. The algebra collapses to (1 + p1 - p2) / 2 for the first outcome, which is the additive formula rewritten. The two only separate once a market carries three or more outcomes, so a soccer 1X2 board or a rate ladder is where the extra machinery earns its keep.

The panel below applies each of them to the lopsided pair, with the raw quote on the top row for comparison.

QueryDe-vig methods on one lopsided market, -750 against +475
The exact SQL behind every number
SELECT
    m.2 AS method,
    round(100.0 * m.3, 2) AS favourite_pct,
    round(100.0 * m.4, 2) AS underdog_pct
FROM
(
    WITH
        750.0 / 850.0 AS raw_fav,
        100.0 / 575.0 AS raw_dog,
        raw_fav + raw_dog AS book_sum,
        (book_sum - 1.0) / 2.0 AS equal_share,
        arrayMap(i -> 1.0 + (i / 10000.0), range(0, 10001)) AS k_grid,
        -- The exponent on the grid that pulls the raised pair closest to exactly 1.
        arraySort(k -> abs((pow(raw_fav, k) + pow(raw_dog, k)) - 1.0), k_grid)[1] AS k_power
    SELECT arrayJoin([
        (1, 'Raw quote',         raw_fav,               raw_dog),
        (2, 'Multiplicative',    raw_fav / book_sum,    raw_dog / book_sum),
        (3, 'Additive and Shin', raw_fav - equal_share, raw_dog - equal_share),
        (4, 'Power',             pow(raw_fav, k_power), pow(raw_dog, k_power))
    ]) AS m
)
ORDER BY m.1
Run this yourself

Run the de-vig arithmetic yourself

The script below uses the standard library only. No install step, no network access. The four books in it are invented, picked to make the arithmetic visible: it converts each one to raw implied probabilities, prints the overround, then de-vigs it four ways.

python3 - <<'PY'
from math import sqrt


def from_american(odds):
    # Negative odds mark a favourite, positive odds an underdog.
    return -odds / (-odds + 100.0) if odds < 0 else 100.0 / (odds + 100.0)


def from_decimal(price):
    return 1.0 / price


def multiplicative(raw):
    total = sum(raw)
    return [r / total for r in raw]


def additive(raw):
    excess = (sum(raw) - 1.0) / len(raw)
    return [r - excess for r in raw]


def power(raw):
    # Bisection for the exponent k where sum(r ** k) equals 1.
    lo, hi = 0.5, 8.0
    for _ in range(100):
        k = 0.5 * (lo + hi)
        if sum(r ** k for r in raw) > 1.0:
            lo = k
        else:
            hi = k
    k = 0.5 * (lo + hi)
    return [r ** k for r in raw], k


def shin(raw):
    # Bisection for z, the informed share that pulls the fair set back to 1.
    total = sum(raw)

    def fair(z):
        return [(sqrt(z * z + 4.0 * (1.0 - z) * r * r / total) - z) / (2.0 * (1.0 - z))
                for r in raw]

    lo, hi = 0.0, 0.45
    for _ in range(100):
        z = 0.5 * (lo + hi)
        if sum(fair(z)) > 1.0:
            lo = z
        else:
            hi = z
    z = 0.5 * (lo + hi)
    return fair(z), z


def pct(values):
    return '  '.join(format(100.0 * v, '6.2f') for v in values)


def show(label, raw):
    fitted_power, k = power(raw)
    fitted_shin, z = shin(raw)
    print(label)
    print('  raw implied     ', pct(raw))
    print('  book sum        ', format(100.0 * sum(raw), '6.2f'),
          ' overround', format(100.0 * (sum(raw) - 1.0), '.2f'))
    print('  multiplicative  ', pct(multiplicative(raw)))
    print('  additive        ', pct(additive(raw)))
    print('  power (k=' + format(k, '.4f') + ')', pct(fitted_power))
    print('  shin  (z=' + format(z, '.4f') + ')', pct(fitted_shin))
    print()


show('Balanced two-way    -110 / -110',
     [from_american(-110), from_american(-110)])
show('Lopsided two-way    -750 / +475',
     [from_american(-750), from_american(475)])
show('Same book, decimal  1.1333 / 5.75',
     [from_decimal(1.1333), from_decimal(5.75)])
show('Three-way board     +100 / +230 / +300',
     [from_american(100), from_american(230), from_american(300)])
PY

Reading the output from the top:

  • The balanced -110 pair is the quiet case. Every method returns 50.00 percent, the power exponent lands at 1.07, and Shin's z at 0.048. Symmetry leaves nothing to argue about.
  • The lopsided pair is where it bites. Raw, the -750 side implies 88.24 percent and the +475 side 17.39 percent. Multiplicative de-vigs the favourite to 83.54 percent. Additive and Shin both say 85.42 percent. Power, with k near 1.15, says 86.60 percent.
  • The decimal line rebuilds the same book from 1.1333 and 5.75, matching to the rounding of the decimal price. Only the conversion step changes.
  • The three-way board is where additive and Shin finally part company, 48.2 percent against 48.0 percent on the favourite, with power near 48.2 at an exponent of about 1.05.

Look at the spread on that lopsided favourite: 83.54 percent up to 86.60 percent, a range of 3.06 points, from three defensible methods applied to one quote. On the underdog side the same choice moves the answer from 16.46 percent down to 13.40 percent. An edge of a point or two, the size commonly claimed, sits entirely inside that disagreement. The choice of de-vig method carries most of the answer.

What de-vigging means for event contracts

An event contract settles at $1 for YES and $0 for NO, which puts its price in probability units from the start; how event contracts settle covers the mechanics. That still leaves it out of step with a bookmaker's number. The contract has a bid and an ask, and the midpoint between them is a convention. The bookmaker's quote has a margin baked in. Put both on one basis first: de-vig the quoted pair, then compare it with the contract's midpoint or with the side you could actually trade.

Two cautions on what a leftover difference means.

  • A residual is not automatically an arbitrage. It contains your choice of de-vig method, worth up to three points on a lopsided market as shown above, alongside both venues' spreads and fees. YES and NO contract arbitrage walks through what a genuinely locked position requires.
  • Multi-outcome boards multiply the problem. A rate decision quoted across a ladder of possible outcomes spreads its overround over every rung, and the normalization choice moves each rung by a different amount. how markets price Fed rate odds covers reading that kind of board.

FAQ

What does de-vig mean in betting?

De-vigging removes the bookmaker's margin from quoted odds to leave an estimate of the underlying probability. A -110 against -110 pair implies 104.76 percent in total; de-vigged, it becomes 50 percent on each side.

How do you calculate the vig from odds?

Convert every outcome to an implied probability and add them up. Whatever sits above 100 percent is the overround. On the -750 against +475 pair used here, that comes to 5.63 percent.

Which de-vig method is the most accurate?

None of them is correct by construction. Each encodes a different assumption about where the margin sits, and the power and Shin fits allow that margin to vary between favourites and longshots, which is why pricing desks tend to reach for them. Both need enough outcomes to be worth fitting.

Do event contracts have vig?

The YES and NO prices on an event contract come from an order book rather than a posted margin, though the bid and ask play a similar role: the best YES ask and the best NO ask can add to more than 100 cents, and exchange fees sit on top. The same normalization question applies before you treat a price as a probability.

Can you compare a sportsbook price to an event contract price?

Only once both sit on the same basis. De-vig the bookmaker's pair, pick the tradable side or the midpoint of the contract, and remember that the remaining gap still carries your method choice plus the cost of dealing at both venues.


Every method here is a few lines of arithmetic with no dependencies. Change the hardcoded odds and watch which side absorbs the margin. When you want to sit a de-vigged number next to live market data, that is what the Strasmore terminal is for.