Модель
Как рейтинг описывает вопросы и игроков
1. Параметры вопроса
Каждый вопрос имеет две характеристики: сложность diff и спортивность sport.
- Сложность
- Показывает положение вопроса на шкале Elo. Для одиночного игрока с обычным наклоном вероятность взятия равна 50%, когда его рейтинг совпадает со сложностью вопроса.
- Спортивность
- Характеризует наклон вероятностной кривой. Чем она выше, тем сильнее вероятность зависит от разницы между рейтингом игрока и сложностью вопроса.
У неспортивного вопроса кривая шире, поэтому вероятности сильных и слабых игроков ближе друг к другу. Иными словами, спортивность показывает, насколько вопрос разделяет рассматриваемое множество команд по силе.
Width
Для наглядного представления спортивности используется width:
Это разница Elo, которая изменяет отношение шансов взятия в десять раз.
Чем меньше width, тем спортивнее вопрос и тем круче его вероятностная кривая.
Вероятность взятия
Для одного игрока с базовым наклоном вероятностная модель выглядит так:
Здесь R — рейтинг игрока, D — сложность вопроса, а s — его спортивность. Для игрока Elo 2000 текущая модель использует именно такой базовый наклон.
Примеры для Elo 2000
При обычной спортивности:
| Сложность вопроса | Вероятность взятия |
|---|---|
| 1600 | 90.91% |
| 1800 | 75.97% |
| 2000 | 50.00% |
| 2200 | 24.03% |
| 2400 | 9.09% |
Вопрос сложности 2400 находится на 400 Elo выше игрока. Поэтому шансы взятия равны 1 к 10, а вероятность:
Вопрос сложности 2200 при разной спортивности
sport_ratio |
sport |
width |
Вероятность |
|---|---|---|---|
| 0.5 | 0.002878 | 800 | 35.99% |
| 1.0 | 0.005756 | 400 | 24.03% |
| 2.0 | 0.011513 | 200 | 9.09% |
Оценка параметров по результатам
Обе характеристики вычисляются по ответам команд с учетом рейтингов их игроков перед турниром. Концептуально алгоритм выглядит так:
- Выбирается кандидатное значение
sport. - Для него подбирается
diff, точно воспроизводящий фактическое число взятий. - По logloss оценивается, насколько хорошо модель угадала, какие именно команды взяли вопрос.
- Выбирается лучший
sportс учетом prior к обычной спортивности.
Технически параметры оптимизируются одновременно методом SLSQP с аналитическими градиентами.
Функция потерь
Основная функция потерь — суммарный бинарный logloss:
К нему добавляется prior, стягивающий спортивность к стандартной:
- yj равно 1, если команда взяла вопрос, и 0 в противном случае;
- Pj — вероятность взятия, рассчитанная по составу команды и кандидатным параметрам вопроса;
- wj — вес наблюдения;
- λ — сила стягивания спортивности к стандартному значению.
Одновременно оптимизатор выполняет условие калибровки:
Поэтому общее число взятий в модели совпадает с наблюдаемым, а спортивность определяется тем, насколько взятия связаны с силой команд.
Дополнительно спортивность ограничена диапазоном:
Верхняя и нижняя границы подобраны по качеству прогнозов на бенчмарк-панелях.
2. Параметры игрока
Каждый игрок имеет две основные изменяемые характеристики: силу Elo и
волатильность vol. Сила показывает, насколько хорошо игрок в среднем берёт
вопросы по мнению модели, а волатильность — насколько мы уверены в этой оценке.
После каждого турнира для игрока обновляются и Elo, и vol.
В нынешней модели волатильность может только уменьшаться или оставаться прежней: новый
результат даёт дополнительную информацию о силе игрока. Elo, как правило, растёт, если
команда сыграла выше ожидания, и снижается, если команда сыграла ниже ожидания. Из этого
правила есть отдельные технические исключения, например небольшая рейтинговая инфляция.
Калибровка шкалы
- Новый игрок начинает с Elo 2000 и волатильностью 1000.
- Для игрока с минимальной волатильностью одна единица рейтинга соответствует одному дополнительно взятому вопросу на хорошем очном турнире.
Slope
Для расчёта вероятности используется дополнительный коэффициент slope.
Он показывает, насколько растянута индивидуальная кривая вероятности: при значении меньше
единицы игрок получает более высокую вероятность на сложных вопросах и более низкую — на
простых по сравнению с обычной кривой того же Elo.
При slope = 1 получается базовая формула. Уменьшение slope
приближает обе крайние вероятности к 50%: повышает шанс взятия вопроса сложнее игрока и
понижает шанс взятия вопроса проще игрока.
Ind_coef
Коэффициент ind_coef описывает, насколько эффективно вероятности отдельных
игроков складываются в вероятность команды. В hazard-модели он обозначается буквой
ρ:
При ρ = 1 вклады игроков считаются независимыми. Чем меньше ρ,
тем слабее дополнительный игрок повышает вероятность команды. Поэтому большее значение
соответствует более эффективной совместной игре.
Почему коэффициенты зависят от Elo
Изначально предполагалось оценивать slope и ind_coef для каждого
игрока отдельно. Но данных для этого оказалось недостаточно. Если команда из шести игроков
взяла больше «гробов», чем ожидалось, невозможно определить, кто именно был специалистом по
этим вопросам. Попытки понемногу изменять параметры всем участникам только ухудшали
прогнозные бенчмарки. Одиночных выступлений достаточно мало: по ним индивидуальный
slope можно оценить надёжнее, но это почти не влияет на общие прогнозы.
Зато бенчмарки улучшила закономерность, работающая в среднем: чем выше Elo, тем более
пологой становится индивидуальная кривая и тем эффективнее складываются вклады игроков в
сильном составе. Важно: численное значение slope при этом
уменьшается, хотя относительная вероятность взятия сложных вопросов растёт.
В текущем опубликованном рейтинге индивидуальный slope вычисляется так:
Здесь R — Elo игрока. До Elo 2000 используется slope = 1;
минимальное возможное значение равно 0.40.
Ind_coef сейчас не хранится как личный параметр. Для каждого состава он
вычисляется по среднему Elo активных игроков:
Функция clip(x, a, b) ограничивает x диапазоном от a до
b. Поэтому состав со средним Elo 2000 получает ρ = 0.70, со средним
Elo 2500 — ρ = 0.80, а при Elo 3000 достигается потолок ρ = 0.90.
Для асинхронов используется отдельное фиксированное значение ρ = 0.65.