Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / MySQL Новый топик    Ответить
 Группировка комбинаций  [new]
forklive
Member

Откуда:
Сообщений: 10
Добрый день, Всем!
Пилю поисковик букмекерских вилок.

Столкнулся с такой интересной задачей, которую возможно средствами SQL и не решить.

Есть таблица коэффициентов от различных букмекерских контор.
Выглядит примерно так:

Тип рынка (к примеру - П1П2 - т.е. возможный исход матча - только победа одного из игроков(например - теннис). Или П1XП2 - здесь еще возможна ничья. Например - футбол)
Тип коэффициента (на победу, или ничью)
ID соперника
ID события (матча)

Предположим, что в этой таблице записаны коэффициенты на один и тот же футбольный матч 3-х контор:

Контора | Соперник | Тип коэффициента | Тип рынка | Коэффициент

1 БК1 | Соперник 1 | Победа | П1XП2 | 1,5
2 БК1 | Соперник 1 | Ничья | П1XП2 | 3
3 БК1 | Соперник 2 | Победа | П1XП2 | 5
4 БК1 | Соперник 2 | Ничья | П1XП2 | 3
5 БК2 | Соперник 1 | Победа | П1XП2 | 1,6
6 БК2 | Соперник 1 | Ничья | П1XП2 | 2,9
7 БК2 | Соперник 2 | Победа | П1XП2 | 7
8 БК2 | Соперник 2 | Ничья | П1XП2 |2,9
9 БК2 | Соперник 1 | Победа | П1XП2 | 1,7
10 БК2 | Соперник 1 | Ничья | П1XП2 | 2,8
11 БК2 | Соперник 2 | Победа | П1XП2 |7,1
12 БК2 | Соперник 2 | Ничья | П1XП2 |2,8

(Ничья для каждой конторы хранится 2 раза - один раз для одного соперника, второй раз для другого)

И вот вопрос: можно ли как то средствами SQL показать все возможные "вилочные" комбинации?
Т.е. в результате SQL запроса я бы хотел увидеть вот такую таблицу:

1 Комбинация 1 | БК1 | Соперник 1| Победа | 1,5
2 Комбинация 1 | БК1 | Соперник 1| Ничья | 3
3 Комбинация 1 | БК2 | Соперник 2| Победа | 7
4 Комбинация 2 | БК2 | Соперник 1| Победа | 1,6
5 Комбинация 2 | БК2 | Соперник 1| Ничья | 2,9
6 Комбинация 2 | БК1 | Соперник 2| Победа | 5
7 Комбинация 3 | БК1 | Соперник 1| Победа | 1,5
8 Комбинация 3 | БК2 | Соперник 1| Ничья | 2,9
9 Комбинация 3 | БК1 | Соперник 2| Победа | 5

Т.е. "Комбинация" - это комбинация коэффициентов различных контор на все возможные исходы матча.

Такой результат я смог бы сгруппировать по полю "комбинация", и применить различные группировочные функции к коэффициентам.

У меня загружается все в программу, там составляются все комбинации и делается вся работа с помощью массивов. Я хочу упростить конструкцию программы - может все можно сделать SQL - запросом?
4 окт 17, 12:16    [20841636]     Ответить | Цитировать Сообщить модератору
 Re: Группировка комбинаций  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 16227
Да как бы не вижу проблемы... осталось только понять принцип, по которому из именно этих исходных получен именно этот результат.
4 окт 17, 12:36    [20841732]     Ответить | Цитировать Сообщить модератору
 Re: Группировка комбинаций  [new]
forklive
Member

Откуда:
Сообщений: 10
Akina
Да как бы не вижу проблемы... осталось только понять принцип, по которому из именно этих исходных получен именно этот результат.


Принцип простой: Мы можем поставить на победу соперника 1 и на ничью в конторе БК1, а на победу соперника 2 в конторе БК2.
Тем самым мы перекроем все возможные исходы матча. Это будем, к примеру, "комбинация 1".
И не зависимо от исхода матча при определенных соотношениях коэффициентов и сумм ставок мы получим маленькую - но прибыль.
Это и есть "букмекерская вилка".
4 окт 17, 12:44    [20841758]     Ответить | Цитировать Сообщить модератору
 Re: Группировка комбинаций  [new]
forklive
Member

Откуда:
Сообщений: 10
У видел что в первой таблице из первого поста - ошибка: с 9-12 записи относятся к БК3, а не к БК2
4 окт 17, 13:27    [20841931]     Ответить | Цитировать Сообщить модератору
 Re: Группировка комбинаций  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 16227
forklive
Принцип простой: Мы можем поставить на победу соперника 1 и на ничью в конторе БК1, а на победу соперника 2 в конторе БК2.
Тем самым мы перекроем все возможные исходы матча. Это будем, к примеру, "комбинация 1".

Пока звучит малопонятно. Какой смысл составлять комбинации? нет, я бы понял, если бы составлялись ВСЕ возможные (4 для П1П2 при 2 конторах, 8 при трёх, и т.п., и соответственно 9, 27, ... - для П1XП2), но почему из всех возможных тебе нужны те показанные три и не нужны остальные? Какой принцип отбора?

Ну и главное. Цель-то какая? я понимаю, была бы цель "составить комбинацию так, чтобы для каждого исхода получить наибольший/наименьший из предлагаемых коэффициентов". Или в продвинутом варианте - получить максимальный ожидаемый выигрыш (правда, тут придётся задавать некую вероятность каждого из исходов)...
4 окт 17, 14:33    [20842288]     Ответить | Цитировать Сообщить модератору
 Re: Группировка комбинаций  [new]
forklive
Member

Откуда:
Сообщений: 10
Akina
Пока звучит малопонятно. Какой смысл составлять комбинации? нет, я бы понял, если бы составлялись ВСЕ возможные (4 для П1П2 при 2 конторах, 8 при трёх, и т.п., и соответственно 9, 27, ... - для П1XП2), но почему из всех возможных тебе нужны те показанные три и не нужны остальные? Какой принцип отбора?

Мне и нужно составить все возможные комбинации для каждого события. И потом сгруппировать по полю "комбинация", и получить для каждой комбинации процент вилки.

Akina
Ну и главное. Цель-то какая? я понимаю, была бы цель "составить комбинацию так, чтобы для каждого исхода получить наибольший/наименьший из предлагаемых коэффициентов". Или в продвинутом варианте - получить максимальный ожидаемый выигрыш (правда, тут придётся задавать некую вероятность каждого из исходов)...


Смысл найти все прибыльные вилки. Когда я получу вышеописанный результат, с помощью SUM и с помощью деления/сложения/умножения я получу процент прибыльности для каждой комбинации.

К примеру - одна из комбинаций получилось такой:
БК1 - Соперник 1 - победа : 3,8 (сумма ставки 28)
БК1 - Соперник 1 - ничья : 4,5 (сумма ставки 23)
БК2 - Соперник 2 - победа : 2,2 (сумма ставки 48)
Процент такой вилки = 6%

К примеру если мы поставим на это событие суммы, указанные в скобках - то мы получим 6 USD прибыли, независимо от результата матча.
Т.е. нужны все комбинации, которые покрывают все возможные исходы матча одного события.
Получается что где то к запросе будет kf1.eventId = kf2.eventId

----------------------------------------------------------------------------------------------
Пока мысли такие: какого то универсального запроса для всех видов рынков и всех видов вилок сделать не получится.
Вероятнее всего, придется использовать CROSS JOIN
Но если для типа рынка П1П2 нужно 2 раза подключить таблицу коэффициентов kf, то для П1XП2 - таблицу коэффициентов нужно подключать уже 3 раза. А для многоисходных вилок - (угадать точный счет) - неоднократно. Т.е. для каждого количества исходов нужен свой запрос.
Ну и я протестировал cross join - конечно работает не быстро.
4 окт 17, 14:59    [20842405]     Ответить | Цитировать Сообщить модератору
 Re: Группировка комбинаций  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 16227
Ну так это вообще тривиально. Особенно если изменить хранение (например, в представлении), заменив соперника на упорядоченную пару, и соответственно введя вариант "Поражение". Т.е. не

Контора Соперник Тип коэффициента Тип рынка Коэффициент
БК1 Соперник 1 Победа П1XП2 1.5
БК1 Соперник 1 Ничья П1XП2 3
БК1 Соперник 2 Победа П1XП2 5
БК1 Соперник 2 Ничья П1XП2 3

а

Контора Соперники Тип коэффициента Тип рынка Коэффициент
БК1 Соперник 1 - Соперник 2 Победа П1XП2 1.5
БК1 Соперник 1 - Соперник 2 Ничья П1XП2 3
БК1 Соперник 1 - Соперник 2 Поражение П1XП2 5


Обычное декартово произведение нескольких копий таблицы, если нужны все варианты в одной записи... или скажем выбор по генерируемой маске, если надо каждый вариант в своей записи, как в примере.
4 окт 17, 16:28    [20842823]     Ответить | Цитировать Сообщить модератору
 Re: Группировка комбинаций  [new]
forklive
Member

Откуда:
Сообщений: 10
Akina
или скажем выбор по генерируемой маске, если надо каждый вариант в своей записи, как в примере.


Вот здесь не понял: что значит "выбор по генерируемой маске"?

И получается - если исходов 2 - то одключаем 2 таблицы, если 3 исхода - 3, и т.д.
Т.е. универсальности не получится.
Я ведь все правильно понял?
4 окт 17, 20:04    [20843455]     Ответить | Цитировать Сообщить модератору
 Re: Группировка комбинаций  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 16227
forklive
что значит "выбор по генерируемой маске"?
В источник данных запроса добавляется синтетическая таблица типа
          SELECT 'Победа' value
UNION ALL SELECT 'Ничья'
UNION ALL SELECT 'Поражение'

которая множится на всё остальноке и позволяет раздёргать одну комбинацию Контора-Соперник1-Соперник2 на три записи с разными вариантами исхода.

forklive
получается - если исходов 2 - то одключаем 2 таблицы, если 3 исхода - 3, и т.д.
Т.е. универсальности не получится.

Ну почему? Таблиц всегда будет три. Просто в каждой таблицы делается пред-отбор по типу исхода, для П1П2 в подтаблице для ничьих будет пусто, а в соотв. полях выходного набора NULL, отсеять которые не составляет труда.
5 окт 17, 08:09    [20844129]     Ответить | Цитировать Сообщить модератору
 Re: Группировка комбинаций  [new]
forklive
Member

Откуда:
Сообщений: 10
Akina, спасибо за ответы и за помощь!
Пошел разбираться)
6 окт 17, 09:13    [20847117]     Ответить | Цитировать Сообщить модератору
Все форумы / MySQL Ответить