Как я могу рассчитать справедливую общую оценку игры на основе переменного количества совпадений? - PullRequest
8 голосов
/ 11 ноября 2008

У меня есть игра, в которой вы можете забивать от -40 до +40 за каждый матч. Пользователи могут играть любое количество матчей. Я хочу рассчитать общий счет, который неявным образом учитывает количество сыгранных матчей.

Расчет только среднего значения не является справедливым. Например, если Питер играет в четыре игры и получает 40 очков за каждый матч, у него будет одинаковое количество очков. оценка как Янне, который сыграл только один матч с 40 очками.

Подведение итогов матча также несправедливо. Питер играет в 2 игры (по 40 очков в каждом матче), общий счет 80. Янне играет в 8 игр (10 очков за каждый матч), общий счет 80.

Существует ли (простой) и справедливый способ подсчета общего балла? Я читал о системе Elo & Glicko для шахматных рейтингов, но оба они основаны на история рейтингов игроков и рейтинг противников.

Ответы [ 12 ]

4 голосов
/ 11 ноября 2008

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

Это может показаться более сложным, чем на самом деле, но есть бесплатное программное обеспечение для выполнения этих вычислений, а в некоторых случаях вычисления достаточно легко выполнить вручную.

См. введение в случайные неравенства и подробности о неравенствах бета-распределения .

4 голосов
/ 11 ноября 2008

Это зависит от того, что вы хотите подчеркнуть, но я думаю, что это и просто, и эффективно:

средний балл + сыгранных игр

Вы могли бы немного взвесить переменные (например, в 2 * сыгранных играх, если вы хотите оказать большее влияние) - но основные отношения кажутся разумными.

В вашем первом примере у Петра было бы 44, а у Джейн - 40, но если бы Питер начал терять очки, Джейн могла бы наверстать упущенное.

3 голосов
/ 30 марта 2010

Вот принципиальный подход:

http://www.evanmiller.org/how-not-to-sort-by-average-rating.html

3 голосов
/ 11 ноября 2008

Вы можете посмотреть Microsoft TruSkill , я читал об этом несколько месяцев назад, и я честно забыл о большинстве деталей, поэтому я не уверен, что это супер уместно, но это может быть хорошее вдохновение

3 голосов
/ 11 ноября 2008

Я думаю, что нет хорошего способа создать счет, подобный этому, в одном числе.

Я бы предложил подсчитать средний успех и указать количество игр. Например

  • Петр забивает 40/2 (в среднем 40 очков в 2 играх)
  • Янне забивает 10/8 (в среднем 10 очков в 8 играх)

Вы можете быстро увидеть, если второе число больше, первое число более точное.

В противном случае используйте ELO, но оно является точным, только если каждый игрок играет не менее 10 матчей

2 голосов
/ 11 ноября 2008

Я рекомендую сделать игровой счет нижним пределом доверительного интервала 95%. В пределе, когда вы играете во многих играх, ваш игровой счет приближается к вашему среднему счету, хотя всегда строго меньше. Это все равно, что использовать средний балл, но, соответственно, скептически относиться к людям, которые играли всего в несколько игр и, возможно, им просто повезло.

Иными словами, это пессимистическая оценка того, каким будет истинное среднее значение после того, как будет сыграно достаточное количество игр.

Как рассчитать 95% доверительный интервал без сохранения всего списка баллов: Вычисление среднего доверительного интервала без сохранения всех точек данных

В качестве альтернативы, если вы отслеживаете количество сыгранных игр, сумму оценок человека и сумму квадратов его очков, вы можете вычислить стандартную ошибку следующим образом:

SE = sqrt((ss - s^2/n) / (n-1) / n)

Вместо того, чтобы возиться с 95% -ным доверительным интервалом, вы можете просто позволить игровому счету:

s/n - SE

Обратите внимание, что вышеприведенное является отрицательной бесконечностью, когда играется только в одну игру. Это означает, что вы дадите кому-то, кто играл только в одну игру, наименьшее возможное количество очков, как и их Счет игры.

Другая идея состоит в том, чтобы явно показывать доверительный интервал при ранжировании людей (отсортировано по нижнему пределу). Тогда люди будут играть больше, чтобы как уменьшить свой CI, так и увеличить свое среднее.

Наконец, возможно, имеет смысл придать больший вес последним играм, с тем чтобы изолированная плохая игра теряла значимость быстрее. Для этого можно выбрать коэффициент дисконтирования d больше 1 и придать i -й игре вес d^(i-1). (Хотя тогда я уже не уверен, как применить идею доверительного интервала.)

PS: я развил эту идею здесь: Как рассчитать среднее значение на основе количества голосов / баллов / образцов / и т. Д.

1 голос
/ 14 ноября 2008

Построить граф, где каждый человек представлен вершиной. Каждое ребро на графике представляет серию матчей между двумя игроками. Теперь примените некоторый тип алгоритма ранжирования страниц, чтобы дать вам набор весов по вершинам. Это должно дать вам ваш рейтинг.

Теперь сложная часть выбирает веса ребер, используемые при поиске страниц. Для направленного ребра (u, v) - от вершины u до вершины v - я бы лично назначил вес, равный количеству очков, которые игрок выиграл против игрока v.

Вы можете добавлять вершины в свой график в любое время, но помните, что рейтинг страницы предпочтительнее старых вершин (то есть тех, которые играли в больше игр!). В любом случае для справки:

http://dbpubs.stanford.edu:8090/pub/1999-66

Альтернативная идея состоит в том, чтобы использовать рейтинги ELO и попытаться загрузить его, назначив каждому одинаковое количество очков для начала, а затем распространить его вперед. Я не могу сказать, что это вполне удовлетворительно.

1 голос
/ 11 ноября 2008

Еще одной отправной точкой может стать статья в Википедии о ELO шахматной системе ранжирования

1 голос
/ 11 ноября 2008

Вы можете установить счет как среднее из 10 лучших игр игрока из последних 30 (или некоторых других чисел - может быть, вам подойдут только последние 10).

Игроки, которые еще не играли в 10 игр, могут взять среднее число игр, в которые они играли, но затем увеличить его до 0, чтобы компенсировать тот факт, что среднее значение n <10 имеет более высокое стандартное отклонение, чем среднее из 10. Не уверен, каким должен быть коэффициент масштабирования для каждого n, но если у вас есть какие-то прошлые данные, которые вы можете посмотреть, вы можете выяснить, насколько изменчивы очки типичного игрока, и исходя из этого. </p>

Или определите, какой глобальный средний балл за игру (возможно, 0), и добавьте (10-n) поддельных баллов этой суммы при подсчете баллов для игрока с менее чем 10 играми.

1 голос
/ 11 ноября 2008

Вы можете проверять выигрышные заезды и давать бонусные очки последовательным победам (+5, +10, +15 ...), поэтому (-10, + 10, + 10, + 10, -10, + 10) даст (-10, + 10, + 15, + 20, -10, + 10). Вы также можете сделать это, не заботясь о пробегах, это даст (-10, + 10, + 15, + 20, -10, + 25).

Другой возможностью было бы установить значение бонуса равным 0 в начале и уменьшить его на 5, если игрок проигрывает, и увеличить его на 5, если игрок выиграл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...