Implied Odds

[1]:
import sys
sys.path.append("../")
from pprint import pprint
import penaltyblog as pb
import numpy as np

Example starting odds (including overround)

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

np.sum(1 / np.array(odds))
[2]:
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': 0.03242570633874986,
 'method': 'multiplicative'}
[4]:
np.sum(normalised["implied_probabilities"])
[4]:
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': 0.03242570633874986}
[6]:
np.sum(normalised["implied_probabilities"])
[6]:
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': 0.03242570633874986}
[8]:
np.sum(normalised["implied_probabilities"])
[8]:
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': 0.03242570633874986}
[10]:
np.sum(normalised["implied_probabilities"])
[10]:
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': 0.03242570633874986}
[12]:
np.sum(normalised["implied_probabilities"])
[12]:
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': 0.03242570633874986}
[14]:
np.sum(normalised["implied_probabilities"])
[14]:
1.000000000000595