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)