Рейтинг кандидатів згідно з даними бетінгової платформи: sports.bwin.com
from decimal import Decimal
odds = {
'Петро Порошенко': 2,
'Юлія Тимошенко': 2.8,
'Володимир Зеленський': 4,
'Анатолій Гриценко': 21,
'Андрій Садовий': 41,
'Юрій Бойко': 51,
'Олег Ляшко': 51,
'Олександр Вілкул': 201,
'Євген Мураєв': 301,
'Руслан Кошулинський': 501,
'Ігор Смешко': 501,
'Ольга Богомолець': 501,
'Сергій Тарута': 501,
'Олександр Шевченко': 1001,
'Генадій Балашов': 1001,
'Аркадій Корнатський': 1001,
'Інна Богословська': 1001,
'Сергій Каплін': 1001,
'Ілля Кива': 1001,
'Олександр Мороз': 1001,
'Валентин Наливайченко': 1001,
'Хтось інший': 101
}
all_probabilities_with_margin = sum([Decimal(1) / Decimal(odd) for odd in odds.values()])
bookmakers_margin = all_probabilities_with_margin - 1
print('Маржа букмекера: {0:.2f}%.\nТим часом середня маржа на ринку: десь 4.5%'.format(
bookmakers_margin * 100
))
Маржа букмекера: 25.25%.
Тим часом середня маржа на ринку: десь 4.5%
print('Рейтинг згідно sports.bwin.com:')
all_probabilities = 0
for name, odd in odds.items():
probability = (Decimal(1) / (Decimal(odd) * all_probabilities_with_margin)) * 100
all_probabilities += probability
print('{0}: {1:.2f}%'.format(name, probability))
print('All probabilities: {0}%'.format(all_probabilities))
Рейтинг згідно sports.bwin.com:
Петро Порошенко: 39.92%
Юлія Тимошенко: 28.51%
Володимир Зеленський: 19.96%
Анатолій Гриценко: 3.80%
Андрій Садовий: 1.95%
Юрій Бойко: 1.57%
Олег Ляшко: 1.57%
Олександр Вілкул: 0.40%
Євген Мураєв: 0.27%
Руслан Кошулинський: 0.16%
Ігор Смешко: 0.16%
Ольга Богомолець: 0.16%
Сергій Тарута: 0.16%
Олександр Шевченко: 0.08%
Генадій Балашов: 0.08%
Аркадій Корнатський: 0.08%
Інна Богословська: 0.08%
Сергій Каплін: 0.08%
Ілля Кива: 0.08%
Олександр Мороз: 0.08%
Валентин Наливайченко: 0.08%
Хтось інший: 0.79%
All probabilities: 99.99999999999999999999999989%
print(
'А що якщо в переліку є кандидати, яких букмекер оцінює як нулі,\n'
'але з причин фінансової доцільності пише їм якийсь загальноприйнятний максимум?\n'
'Візьмемо 1001 як цей максимум і позначимо всіх кандидатів з виграшом більше 1000,\n'
'як тих, що мають нульові шанси\n'
'Ще існує такий пункт, як "хтось інший", букмекер вважає, що вже всі реальні\n'
'претенденти додались. Сумарно всі хто ще може додатися оцінюється як виграш 101,\n'
'тобто 10 кандидатів без всіляких шансів. Приберемо це пункт також\n'
)
del odds['Хтось інший']
all_probabilities_with_margin = sum(
[Decimal(1) / Decimal(odd) for odd in odds.values() if odd < 1000]
)
bookmakers_margin = all_probabilities_with_margin - 1
print('Маржа букмекера: {0:.2f}%.\nТим часом середня маржа на ринку: десь 4.5%'.format(
bookmakers_margin * 100
))
А що якщо в переліку є кандидати, яких букмекер оцінює як нулі,
але з причин фінансової доцільності пише їм якийсь загальноприйнятний максимум?
Візьмемо 1001 як цей максимум і позначимо всіх кандидатів з виграшом більше 1000,
як тих, що мають нульові шанси
Ще існує такий пункт, як "хтось інший", букмекер вважає, що вже всі реальні
претенденти додались. Сумарно всі хто ще може додатися оцінюється як виграш 101,
тобто 10 кандидатів без всіляких шансів. Приберемо це пункт також
Маржа букмекера: 23.46%.
Тим часом середня маржа на ринку: десь 4.5%
print('Рейтинг згідно sports.bwin.com:')
all_probabilities = 0
for name, odd in odds.items():
if odd > 1000:
# Skip all 0 probability candidates
continue
probability = (Decimal(1) / (Decimal(odd) * all_probabilities_with_margin)) * 100
all_probabilities += probability
print('{0}: {1:.2f}%'.format(name, probability))
print('All probabilities: {0}%'.format(all_probabilities))
Рейтинг згідно sports.bwin.com:
Петро Порошенко: 40.50%
Юлія Тимошенко: 28.93%
Володимир Зеленський: 20.25%
Анатолій Гриценко: 3.86%
Андрій Садовий: 1.98%
Юрій Бойко: 1.59%
Олег Ляшко: 1.59%
Олександр Вілкул: 0.40%
Євген Мураєв: 0.27%
Руслан Кошулинський: 0.16%
Ігор Смешко: 0.16%
Ольга Богомолець: 0.16%
Сергій Тарута: 0.16%
All probabilities: 99.99999999999999999999999992%