Рейтинг


  • T

    Обсудим создание хорошей рейтинговой системы для игры в классическую (спортивную мафию).

    0_1585760291280_90658853_3405831829432408_1531417078114811904_n.jpg


  • T

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

    Цитата


    Вашему вниманию принцип подсчета очков.

    При победе красной команды, все игроки красных получают баллы. Так же и при победе чёрных.

    ОСНОВНЫЕ БАЛЛЫ ЗА ПОБЕДУ:

    Мирный житель – 1 балл
    Мафия – 1 балл
    Шериф – 1 балл
    Дон – 1 балл

    ДОПОЛНИТЕЛЬНЫЕ БАЛЛЫ:

    Лучший ход (ЛХ). Право лучшего хода даётся игроку, убитому в первую ночь, назвать тройку чёрных. Баллы начисляются за угаданных 2 или 3 мафиози.
    ЛХ не защитывается при подъёме 2 и более игроков на нулевой круг.

    ЛХ за угаданных двух чёрных – 0,25 балла
    ЛХ за угаданных трёх чёрных – 0,4 балла

    Лучшему игроку (ЛИ) каждой раздачи по мнению ведущего.

    ЛИ (победивший) – 0,2....0,7 балла (градация 0,1)
    ЛИ (проигравший) - 0,1 ..... 0,4 балла
    ЛИ может присваиваться до четырёх игроков в игре, но сумма всех ЛИ не больше 1

    Дисквалификация с игрового стола - минус 0.5 балла
    Штрафы за действия, негативно повлиявшие на ход игры - минус 0,4 балла

    Как считаются итоговые очки?

    Итого очков = ((сумма баллов+ЛИ+ЛХ +Штраф) / игр сыграно)) * 100% + 12,5% * игр сыграно



  • T

    Обсудим этот способ подсчёта более подробно, концентрируясь на основной формуле, по которой считают "рейтинг":

    Итого очков = ((сумма баллов + ЛИ + ЛХ + Штраф) / игр сыграно)) * 100% + 12,5% * игр сыграно
    

    На самом деле, тут опечатка, и следует читать как

    Итого очков = ((сумма баллов + ЛИ + ЛХ + Штраф) / игр сыграно)) * 100 + 0.125 * игр сыграно
    

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

    Поисследуем формулу. Сначала переведём в более удобный формат.

    При этом, проигнорируем допбаллы "ЛИ + ЛХ + Штраф" для простоты. Будем считать эти слагаемые равными нулю. Т.е., просто учитываем факт победы: в любой игре победа даёт вклад 1, а поражение 0.

    Обозначим N количество игр, проведённое игроком.
    Обозначим B сумму баллов, набираемых за одну игру. Поскольку игнорируем доп. баллы, это вырождается просто в количество побед.
    Обозначим P сумму баллов за все игры (то же самое, что "Итого очков").

    Вот что получилось:

    P = 100*B/N + 0.125*N
    

    Теперь вспомним, что B/N в мире рейтингов называется winrate, т.е., соотношение побед к количеству проведённых игр. Мы дальше будем использовать этот термин.

    Рассмотрим по порядку проблемы этой формулы.

    Проблема 1: неограниченный рост "P" с увеличением числа игр

    Начнём сразу с примера. Сравним двух игроков.

    1. У игрока A очень высокий winrate, равный 0.7. Т.е., он побеждает в 70% игр. Количество игр, в которых он принимал участие, пусть будет 50.
    2. У игрока B winrate = 0.5. Т.е., он - средний игрок, побеждает в половине игр. Количество игр у него пусть будет 210.
      Посчитаем их рейтинги:
    Pa = 100×0.7 + 0.125×50 = 76.25
    Pb = 100×0.5 + 0.125×210 = 76.25
    

    Они одинаковы. Я специально подобрал числа так, чтобы было одинаково.
    Но такой результат ненормален. Очевидно, что игрок A намного сильнее B, и рейтинг у него должен быть намного выше. Причём, игр он сыграл уже немало. В мафии 50 игр ведь достаточно, чтобы более-менее адекватно оценивать силу игры.

    Почему так получилось? Потому что автор формулы даёт бонус за количество проведённых игр - см. слагаемое 0.125*N. Я, возможно, догадываюсь, какая идея была у автора, но тогда осуществил он её крайне некорректно.
    А представьте, что у постоянных игроков количество игр накопится и станет 1000? Бонусная часть будет 0.125*1000 = 125. И сколько времени новичок, только что пришедший в клуб, будет навёрстывать этот гандикап, даже если он сильный игрок? Ему потребуются годы, чтобы наверстать даже аутсайдеров.

    Не очень трудно исправить этот недостаток, причём, даже претендуя на некую научность, т.е. наличие правильного статистического смысла.

    Вот один из интересных вариантов, но вы должны быть математиком, чтобы понять эту информацию:
    https://en.wikipedia.org/wiki/Binomial_proportion_confidence_interval
    См. секцию Wilson score interval.
    Z соответствует количеству СКО для доверительного интервала. Имеет смысл выбрать из интервала 1-2.

    Для нематематиков вкратце: идея тут в том, что мы считаем Winrate игрока, сыгравшего мало игр, менее достоверным, чем Winrate игрока, сыгравшего больше игр. Winrate игрока, сыгравшего мало игр (новичка), мы как бы подтягиваем к ½, потому что это игрок пока малоизвестной силы. Число ½ здесь - это априорная вероятность Winrate новичка. Хотя, возможно, ½ лучше изменить на что-то типа 40%, потому что новый игрок ошибается чаще опытного среднего.

    Реализовать эту или другую формулу не проблема. Была бы программа, которая ведёт базу данных игроков и делает остальную рутинную работу по хранению результатов игр и рейтингов.

    Проблема 2: неограниченное уменьшение волатильности рейтинга с увеличением числа игр

    Суть в том, что если годами вести рейтинг по формуле выше и ничего не делать, то в конце концов изменение рейтинга, зависящее от Winrate, после каждой игры станет мизерным. Когда число N велико, Winrate меняется очень медленно. Игрок мог разучиться играть или наоборот хорошо научиться играть, но изменения будут очень медленными.
    Способы решения:

    • Простейший способ: считать игры только за последний год.
    • Более сложный способ: каждой игре давать вес, который зависит от того, насколько далеко в прошлом она была сыграна. Чем дальше в прошлое, тем вес меньше. Примерно такое происходит в рейтинге Эло.

    Проблема 3: огромная недостоверность рейтинга при малом числе игр

    Представим себе, что в клуб пришёл игрок, сыграл одну игру, выиграв её, и больше не появляется. Какой у него будет рейтинг?

    P = 100×1.0 + 0.125×1 = 100.125
    

    Допустим, остальные уже сыграли по 200 игр, причём лидер рейтинга имеет Winrate = 0.7. Его рейтинг таков:

    P = 100×0.7 + 0.125×200 = 95
    

    Серьёзно? Игрок с одной проведённой игрой будет выше опытного игрока с космическим винрейтом 0.7?

    Конечно, нужно так или иначе предотвращать попадание игроков с ненадёжным (мало игр) рейтингом в основной рейтинговый список.

    Проблема 4: отсутствие учёта силы игры оппонентов и партнёров

    Получается, абсолютно всё равно, были мы мафией/мирным с новичком или бывалым игроком - за победу всё равно получим всегда одно очко, и оно пойдёт в winrate.
    Эта проблема наиболее сложная для решения. В рейтингах типа Elo, TrueSkill, Glicko она решена, но есть некоторые трудности в адаптации подобных систем для игр типа мафии из-за того, что в матче есть не просто оппонент, а несколько оппонентов, а также несколько партнёров.
    Хотя, есть мысли, что можно сделать, я не думаю, что стоит бросаться решать эту проблему на данном этапе - она не очень серьёзна. При определённых условиях. Например, при условии, что рейтинг чисто клубный. Тогда партнёры и оппоненты будут постоянно меняться, и при достаточно большом количестве игр в среднем будут попадаться одинаковые. Закон больших чисел в действии.
    Но вот если считать рейтинг в целом по стране или в общем случае когда есть слабо связанные между собой кластеры игроков (клубы), и считаем межклубный рейтинг, то придётся что-то решать.


    Эти проблемы - только те, что сразу приходят на ум. Можно покопаться и найти ещё, но смысла нет, потому что без решения первых трёх жить невозможно.