1 против 1 голос: рассчитать оценки (Flickchart.com)

Вместо того, чтобы оценивать предметы с оценками от 1 до 10, я хотел бы иметь 1 против 1 "боев". Два элемента отображаются рядом друг с другом, и вы выбираете тот, который вам нравится больше. Основываясь на этих результатах "боя", алгоритм должен рассчитывать рейтинги для каждого предмета.

Вы можете увидеть этот подход на Flickchart.com, где фильмы оцениваются с использованием этого подхода.

Это выглядит так:

Screenshot

Как видите, предметы подталкиваются вверх, если они выигрывают "бой". Рейтинг всегда меняется в зависимости от результатов "боя". Но это не может быть основано только на выигрышной котировке (здесь 54%), поскольку выиграть у "Титаника" сложнее, чем у "25-го часа" или около того.

Есть несколько вещей, которые мне не совсем понятны: - Как рассчитываются рейтинги? Как вы решаете, какой фильм занимает первое место в рейтинге? Вы должны учитывать, как часто выигрывают предметы и насколько хороши побитые предметы. - Как выбрать, какие предметы имеют "бой"?

Конечно, вы не можете сказать мне, как именно Flickchart делает все это. Но, может быть, вы можете сказать мне, как это можно сделать. Заранее спасибо!

Ответы

Ответ 1

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

В принципе, все фильмы начинаются с 0 побед/поражений, и каждый раз, когда они получают выигрыш, они получают определенное количество очков. Обычно у вас в среднем около 20 (но любой номер будет делать) и выигрывает против фильма с тем же рейтингом, что и вы, именно так. 20. Победа над плохим фильмом может дать около 10 очков, в то время как победа над лучшим фильмом может дайте вам 30 очков. По-другому, проигрывая хороший фильм, вы теряете только 10 очков, но если вы проиграете плохой фильм, вы потеряете 30 очков.

Специфика алгоритма находится в ссылке wikipedia.

Ответ 2

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

То, что вы хотите, - это взвешенный рейтинг, также называемый байесовской оценкой.

Я думаю, IMDB Топ 250 фильмов - лучшая отправная точка для создания рейтинга сайта. В некоторых фильмах есть 300 000 голосов, а у других - менее 50 000. IMDB использует байесовскую оценку для ранжирования фильмов друг против друга без несправедливого взвешивания популярных фильмов. Алгоритм приведен в нижней части страницы:

weighted rating (WR) = (v ÷ (v+m)) × R + (m ÷ (v+m)) × C где:

  • R = среднее для фильма (среднее) = (Рейтинг)
  • v = количество голосов за movie = (голосов)
  • m = минимальные голоса должны быть указаны в Топ 250 (в настоящее время 3000)
  • C = среднее голосование по всему отчету (в настоящее время 6.9)

для Top 250, только голоса от считаются регулярные избиратели.

Я не знаю, как IMDB выбрал 3000 как их минимальное голосование. Они могли выбрать 1000 или 10000, и список был бы более или менее одинаковым. Возможно, они используют "среднее число голосов после 6 недель в кассе" или, возможно, используют пробную версию и ошибку.

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

Формула работает так хорошо, потому что она "подтягивает" оценки к среднему значению, поэтому оценки выше среднего немного уменьшаются, оценки ниже среднего немного увеличиваются. Однако сила тяги обратно пропорциональна числу голосов, которое имеет фильм. Таким образом, фильмы с несколькими голосами более агрессивно тянутся к среднему значению, чем фильмы с большим количеством голосов. Вот два данных для демонстрации свойства:

Rank  Movie            Votes            Avg Rating        Weighted Rating
----  -----            -----            ----------        ---------------
219   La Strada        15,000+          8.2               8.0
221   Pirates of the   210,000+         8.0               8.0
      Caribbean 2

Оба рейтинга фильмов сбиты, но тяга по La Strada более драматична, так как она имеет меньше голосов и поэтому не столь репрезентативна, как рейтинги для PotC.


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

Items
-----
ItemID (pk)
FightsWon (int)
FightsEngaged (int)

Средний рейтинг - FightsWon/FightsEngaged. Весовой рейтинг рассчитывается по формуле выше.

Когда пользователь выбирает победителя в бою, увеличьте выигрышное поле FightsWon на 1, увеличьте оба пункта. Поле FightsEngaged на 1.

Надеюсь, это поможет! - Джульетта

Ответ 3

Что касается flickchart, я немного поиграл с ним, и я думаю, что система рейтинга довольно проста. В псевдокоде я предполагаю, что он выглядит примерно так:

if rank(loser) == null and rank(winner) == null
    insert loser at position estimated from global rank
    insert winner at position estimated from global rank
else if rank(winner) == null or rank(winner) < rank(loser)
    then advance winner to loser position and demote loser and all following by 1

Почему я так думаю? Во-первых, я полностью убежден, что их байесовские приуры не основаны на тщательном изучении моих предыдущих выборов. Кажется, у них нет никакого способа догадаться, потому что мне нравится Возвращение джедая, что мне нравится Империя наносит ответный удар. На самом деле, они не могут понять, потому что я видел Home Alone 2, что я, возможно, видел Home Alone 1. После сотен рейтингов выбор не появился.

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

Кроме этого, вы заметите, что рейтинги вообще не меняются, если только фильм с более низким рейтингом не сравнится с более высоким рейтингом. Я не думаю, что какие-то реальные баллы сохраняются: сайт кажется полностью без памяти, за исключением порядкового ранга каждого фильма и вашего последнего рейтинга.

Ответ 4

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

На данный момент я просто сортирую <fights won> / <total fights>, сначала наивысший. Это отлично работает, если вы единственный, кто голосует, или если много людей голосуют. В противном случае он может быстро стать неточным.

Одна из проблем заключается в том, как выбрать, какие из двух предметов должны сражаться. Одна вещь, которая, кажется, работает хорошо (субъективно), должна позволить предмету, который имеет наименьшие бои, до сих пор, сражаться с случайным предметом. Это приводит к относительно равномерному количеству боев за предметы (- > точность) за счет возможной скуки для избирателей (избирателей). Они часто будут сравнивать новейший предмет с чем-то другим, что немного скучно. Чтобы облегчить это, вы можете выбрать n предметов с самым низким счетом боя и выбрать один из них случайным образом в качестве первого соперника.

Вы упомянули, что хотите добиться победы против сильных противников, считая больше, чем против слабых. Как упоминалось в других сообщениях выше, рейтинговые системы, используемые для шахмат и т.п. (Elo, Glicko), могут работать. Лично я хотел бы использовать Microsoft TrueSkill, так как он кажется наиболее точным и также обеспечивает хороший способ выбрать два элемента, чтобы срастаться друг с другом - те, у которых самая высокая вероятность рисования, рассчитанная TrueSkill. Но, увы, мое математическое понимание недостаточно для того, чтобы действительно понять и реализовать детали системы, и в любом случае это может подлежать лицензированию...

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

Помимо систем оценки, вы также можете попробовать различные простые лестничные системы. Один пример:

  • Рандомизировать список элементов, поэтому они оцениваются от 1 до n
  • Выберите два предмета наугад и пусть они сражаются.
  • Если победитель занимает выше проигравшего: ничего не делай
  • Если проигравший находится выше победителя:
    • Если проигравший находится прямо над победителем: замените их
    • Else: Переместите победителя вверх по лестнице x% к проигравшей битве.
  • Перейти 2

Это относительно неустойчиво в начале, но со временем улучшается. Однако он никогда не перестает колебаться.

Надеюсь, что смогу хотя бы немного помочь.

Ответ 6

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

Необходимые данные:

  • Число голосов, полученных при каждом соединении фильмов.
    • А также отсортированная версия этих данных, сгруппированных, как в сортировке по методу radix
  • Сколько раз каждый фильм проголосовали за каждую партию фильмов.

Дополнительные данные:

  • Сколько раз каждый фильм участвовал в голосовании для каждого пользователя.

Как выбрать голосование для пользователя:

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

Как рассчитать рейтинг рейтинга для фильма:

  • Начните счет 0
  • Пройдите через каждую пленку в системе
    • Добавьте voteswon / votestaken против этого фильма в партитуру
      • Если между этими двумя фильмами не было голосов, добавьте 0.5 вместо этого (это, конечно, предполагает, что вы хотите, чтобы новые фильмы начинались как средние в рейтинге).

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

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

=== ЭТО ОРИГИНАЛЬНЫЙ ОТВЕТ ===

Проблема на самом деле очень проста. Я предполагаю, что вы хотите заказать предпочтение, чтобы проголосовать за фильм, т.е. Фильм с рейтингом № 1 - это фильм, который, скорее всего, будет выбран во время голосования. Если вы сделаете так, чтобы в каждом голосовании вы выбирали два фильма совершенно случайно, вы можете рассчитать это с помощью простых математических вычислений.

Во-первых, каждый выбор из двух фильмов для голосования в равной степени вероятен, поэтому результаты каждого голосования могут быть просто добавлены вместе для оценки (экономит умножение на 1/nC2 на все). И, очевидно, вероятность того, что кто-то проголосует за один конкретный фильм против другого конкретного фильма, просто votesforthisfilm / numberofvotes.

Итак, чтобы вычислить оценку для одного фильма, вы просто суммируете votesforthisfilm / numberofvotes для каждого фильма, с которым он может сравниться.

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

=== ЧТО ПОСЛЕДУЕТ БОЛЬШОЙ НЕПРАВИЛЬНО И ОСНОВНО ЗДЕСЬ ДЛЯ ИСТОРИЧЕСКОГО КОНТЕКСТА ===

Этот метод оценки основан на цепи Маркова вашей системы голосования, предполагая, что все возможные вопросы голосования были одинаково вероятными. [Это первое предложение неверно, потому что все вопросы голосования должны быть одинаково вероятными в цепочке Маркова, чтобы получить значимые результаты] Конечно, это не так, и на самом деле вы также можете это исправить, поскольку вы знаете, насколько вероятен каждый голос вопрос был, это просто количество голосов, которые были сделаны по этому вопросу! [Вероятность получить конкретный вопрос голоса на самом деле не имеет значения, поэтому это не помогает] Таким образом, используя тот же график, но с ребрами, взвешенными проголосовавшими голосами...

Вероятность получения каждого фильма с учетом того, что он был включен в голосование, такой же, как и вероятность получения каждого фильма, и его участие в голосовании делится на вероятность его включения в голосование. Это доходит до sumoverallvotes((votesforthisfilm / numberofvotes) * numberofvotes) / totalnumberofvotes, деленного на sumoverallvotes(numberofvotes) / totalnumberofvotes. С большой отменой это доходит до votesforthisfilmoverallvotes / numberofvotesinvolvingthisfilm. Это действительно просто!

Ответ 8

Я считаю, что такой сценарий 1 против 1 может быть типом совместного анализа, называемого Discrete Choice. Я вижу это довольно часто в веб-опросах для исследования рынка. Заказчику обычно предлагается выбрать между двумя + разными наборами функций, которые они предпочли бы больше всего. К сожалению, это довольно сложно (для нестатистического парня, подобного мне), поэтому вам может быть трудно понять его.