Implied Odds#

[1]:
import penaltyblog as pb
import numpy as np
from pprint import pprint

Example starting odds (including overround)#

[2]:
odds = [2.7, 2.3, 4.4]

np.sum(1 / np.array(odds))
[2]:
np.float64(1.0324257063387499)

Remove the overround using basic multiplicative method#

[3]:
normalised = pb.implied.multiplicative(odds)
pprint(normalised)
{'implied_probabilities': array([0.35873804, 0.42112726, 0.2201347 ]),
 'margin': np.float64(0.03242570633874986),
 'method': 'multiplicative'}
[4]:
np.sum(normalised["implied_probabilities"])
[4]:
np.float64(0.9999999999999999)

Remove the overround using additive method#

[5]:
normalised = pb.implied.additive(odds)
normalised
[5]:
{'implied_probabilities': array([0.3595618 , 0.42397404, 0.21646416]),
 'method': 'additive',
 'margin': np.float64(0.03242570633874986)}
[6]:
np.sum(normalised["implied_probabilities"])
[6]:
np.float64(1.0)

Remove the overround using power method#

[7]:
normalised = pb.implied.power(odds)
normalised
[7]:
{'implied_probabilities': array([0.3591711 , 0.42373075, 0.21709815]),
 'method': 'power',
 'k': 1.0309132393169356,
 'margin': np.float64(0.03242570633874986)}
[8]:
np.sum(normalised["implied_probabilities"])
[8]:
np.float64(0.9999999999989682)

Remove the overround using Shin’s method#

[9]:
normalised = pb.implied.shin(odds)
normalised
[9]:
{'implied_probabilities': array([0.35934392, 0.42324385, 0.21741223]),
 'method': 'shin',
 'z': 0.016236442857291165,
 'margin': np.float64(0.03242570633874986)}
[10]:
np.sum(normalised["implied_probabilities"])
[10]:
np.float64(0.9999999999990125)

Remove the overround using Joseph Buchdahl’s margin weights proportional to the odds approach#

[11]:
normalised = pb.implied.differential_margin_weighting(odds)
normalised
[11]:
{'implied_probabilities': array([0.3595618 , 0.42397404, 0.21646416]),
 'method': 'differential_margin_weighting',
 'margin': np.float64(0.03242570633874986)}
[12]:
np.sum(normalised["implied_probabilities"])
[12]:
np.float64(0.9999999999999998)

Remove the overround using Keith Cheung’s odds ratio approach#

[13]:
normalised = pb.implied.odds_ratio(odds)
normalised
[13]:
{'implied_probabilities': array([0.35881036, 0.42256142, 0.21862822]),
 'method': 'odds_ratio',
 'c': 1.05116912729218,
 'margin': np.float64(0.03242570633874986)}
[14]:
np.sum(normalised["implied_probabilities"])
[14]:
np.float64(1.000000000000595)