Голосование 1 на 1: подсчет рейтингов (Flickchart.com)

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

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

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

Скриншот

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

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

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


person caw    schedule 06.12.2009    source источник
comment
Первая половина вашего вопроса может отличаться от второй тем, что то, как это сделать, может отличаться от того, как это делает фликчарт. Лучший алгоритм (или их комбинация) зависит от нескольких дополнительных сведений о вашей цели: указывают ли результаты только глобальные предпочтения? Отражают ли они ваши предпочтения? Оба? Собираетесь ли вы давать рекомендации на основе рейтинга? Если да, оцениваете ли вы других пользователей, насколько они похожи на вас? Если интересы Боба точно совпадают с моими, может не иметь смысла так высоко учитывать его предпочтения и т. д.   -  person charstar    schedule 13.12.2009
comment
Спасибо, очень хорошие вопросы. То, как это делает Flickchart, возможно, не самое лучшее, но это определенно один из способов сделать это. Так что это было бы хорошо для моей цели. Должен быть глобальный рейтинг и рейтинг только для меня. Все голоса влияют на глобальный рейтинг, но мой собственный рейтинг зависит только от моих голосов. Рекомендации не являются основной целью, но было бы неплохо их иметь.   -  person caw    schedule 13.12.2009
comment
С сожалением -1 голосующий: это действительно интересный вопрос: пожалуйста, отредактируйте, чтобы я мог изменить это на голосование "за"...   -  person Charles Stewart    schedule 26.12.2009


Ответы (9)


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

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

Специфика алгоритма — по ссылке в википедии.

person Christian P.    schedule 06.12.2009
comment
Благодарю вас! Но это может быть только небольшая часть алгоритма. Представьте, что вы уже оценили 20 фильмов — по несколько раз каждый. На 5 ранге стоит Титаник. Тогда у вас есть выбор между Титаником и Шреком. Вы еще не оценили Шрека. Но ты предпочитаешь здесь Шрека. Только с вашей системой очков Шрек вошел бы в рейтинг на 11-м месте или около того. Но это должно быть до Титаника, верно? - person caw; 06.12.2009
comment
Я полагал, что вам нужны оценки для всех людей, а не только для себя. Для вашего личного списка лучших фильмов вам понадобится больше, чем это, иначе вам придется оценивать все фильмы намного больше раз, чтобы он был точным :) - person Christian P.; 07.12.2009
comment
+1 за тот же ответ, о котором я подумал, когда увидел вопрос. ЭЛО хорош для боев 1 на 1 в стиле шахмат. - person Andrew; 15.12.2009
comment
В порядке. Так что ELO кажется хорошим решением, может быть, не самым лучшим. Но это определенно будет работать с ELO. :) Но: Item A выигрывает множество боев и занимает первое место по ELO. У элемента B всего несколько побед, но много поражений, но он превосходит элемент A. Согласно ELO, элемент B должен быть внизу. А по другой модели пункт Б должен быть на 1 месте!? - person caw; 15.12.2009
comment
Количество побед определяет не ваше место, а КОГО вы выигрываете. Представьте, что вы находитесь на 100-м месте в мировом рейтинге по теннису. Если вы трижды обыграете #1, вы не просто подниметесь на пару позиций вверх, вы взлетите до небес. Если вы трижды обыграете #99, вы подниметесь максимум на 1-2 места вверх. - person Christian P.; 15.12.2009
comment
Слабость заключается в том, что ELO разработан с ожиданием того, что A должен иногда побеждать B, даже если B лучше, чем A. У нас нет таких ожиданий, когда мы ранжируем наши предпочтения. (Хотя, если бы вопрос был в том, «Что вы больше в настроении?», а не «Что вы предпочитаете?» или «Что лучше?», тогда, возможно.) Flickchart, во всем остальном он плохо работает (см. мой пост), последовательна в этом вопросе. Когда A побеждает B, A каждый раз опережает B. - person David Berger; 16.12.2009
comment
@marco: Для вашего личного списка все, что это может сделать, это обеспечить свободную сортировку от худшего к лучшему. И потенциально сломанный, так как невнимательный пользователь может сказать, что ему нравится A больше, чем B, лучше, чем C, и больше, чем A. - person Brian; 16.12.2009

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

Вам нужен взвешенный рейтинг, также называемый байесовской оценкой.

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

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

  • R = среднее значение для фильма (среднее) = (рейтинг)
  • v = количество голосов за фильм = (голосов)
  • m = минимальное количество голосов, необходимое для попадания в топ-250 (в настоящее время 3000)
  • C = среднее количество голосов по всему отчету (в настоящее время 6,9)

для Топ-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.

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

person Juliet    schedule 11.12.2009
comment
Большое спасибо! Это очень интересный алгоритм для обычных голосований. Но в этом случае следует учитывать соперника в бою, не так ли? Выиграть у Ла Страда легче, чем у Темного рыцаря, не так ли? - person caw; 11.12.2009
comment
Помните, что пользователи IMDB сами выбирают фильмы, за которые они голосуют, так что нет равных шансов поставить Ла Страда против Темного рыцаря. Веб-сайт борьбы, по-видимому, сделает бои между двумя элементами одинаково вероятными, в отличие от самостоятельно выбранных голосов за фильмы IMDB, однако вы, вероятно, увидите значительный сдвиг в сторону среднего значения для недавно добавленных элементов просто потому, что они не имели много времени, чтобы участвовать в боях. Новые элементы с высокими оценками должны корректироваться со временем, обычно после того, как они наберут 5-кратное минимальное количество голосов для попадания в 10 лучших. - person Juliet; 11.12.2009
comment
Спасибо за дополнительное объяснение, Джульетта. Ваш алгоритм от IMBB отлично подходит для обычных голосований, когда я могу самостоятельно выбирать пункты для голосования. Но для моей цели бои 1 на 1, я думаю, не лучший вариант. - person caw; 13.12.2009
comment
@Juliet Я не голосовал против вас, но я полагаю, что это потому, что использование наивной байесовской оценки делает предположение о независимости. Хотя то, что вы опубликовали, корректирует повышение оценок, оно не учитывает изменения рейтинга других элементов с течением времени (зависимость). Рассмотрим пункты A, B, C и D. Пользователь выбирает B вместо A, затем D вместо C, затем C вместо B. B и C теперь имеют по два участия и один выигрыш, однако следует сделать вывод, что D > C. › B › A. Модель должна выражаться в виде ациклического взвешенного орграфа. - person charstar; 14.12.2009
comment
@cda: допустим, у нас есть A, B, C и D: B выигрывает у A в 70% случаев, D выигрывает у C в 100% случаев, D выигрывает у B в 100% случаев, а C выигрывает у В 70% случаев. Можете ли вы правильно заключить D › B › C › A? Нет, не без информации о количестве боев. Если A, B и C участвовали в 1000 боях, а D участвовал только в одном бою против D и B (отсюда безупречный результат), то вы не можете сделать никаких выводов об относительной силе D. Будет ли представление графа действительно отличаться от байесовской оценки после того, как к графу будут добавлены 10 из 1000 узлов? - person Juliet; 14.12.2009
comment
@Juliet В этом случае использование байесовских методов будет работать только для определения глобального рейтинга. ОП говорит о явной цепочке предпочтений пользователя (а не о показателях пригодности/силы/производительности). Подумайте вот о чем: пользователь голосует за варианты от A до Y, и так получилось, что они ему нравятся в алфавитном порядке, за исключением Z, который ему нравится больше, чем A. Это только одно участие и одна победа, но пользователь ожидает, что Z не будет занимать первое место (из все фильмы, за которые я голосовал, этот даже лучше, чем нынешний топовый). - person charstar; 15.12.2009
comment
Спасибо, чарстар, это именно то, чего не хватает в этом ответе. Но для других целей ответ отличный. Есть много случаев для этого кода. Большое спасибо, Джульетта! - person caw; 15.12.2009

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

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

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

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

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

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

  1. Рандомизируйте список элементов, чтобы они ранжировались от 1 до n.
  2. Выберите два предмета наугад и дайте им сразиться
  3. Если победитель занимает место выше проигравшего: ничего не делать
  4. If the loser is ranked above the winner:
    • If the loser is directly above the winner: Swap them
    • В противном случае: переместите победителя вверх по лестнице на x% к проигравшему в бою.
  5. Перейти к 2

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

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

person DataWraith    schedule 14.12.2009
comment
Спасибо, вы очень помогли. :) Это интересные вопросы (какие предметы выбрать и т.д.). - person caw; 15.12.2009
comment
Yourfightswin/totalfights, где totalfights — это количество боев, в которых участвовал конкретный фильм, на самом деле является лучшим показателем того, какой фильм является лучшим, и дает очень стабильные результаты. (См. мой ответ для объяснения). Как вы думаете, что именно в нем не так? - person KernelJ; 15.12.2009
comment
О, я понимаю вашу точку зрения, моя система предполагает, что каждый человек может проголосовать только один раз за какую-то случайную вещь. Это тривиально работает для одного пользователя, голосующего снова и снова. Если у вас несколько пользователей, вам нужно добавить еще один уровень сложности к системному графу, чтобы каждый пользователь имел одинаковый вес, и это может быть неточным, если некоторые люди не проголосовали очень много. Ответ на это — sumoverallusers(fightswin/totalfights), т.е. история голосования записывается для всех пользователей, и вы просто суммируете все баллы. Если totalfights равен 0, вы можете предположить, что fightsvon/totalfights имеет значение по умолчанию 0,5. - person KernelJ; 15.12.2009

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

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's position and demote loser and all following by 1

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

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

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

person David Berger    schedule 11.12.2009
comment
Вы забыли некоторые закрывающие скобки в своем псевдокоде, не так ли? И в обоих утверждениях есть rank(winner)==null, так что на самом деле это не имеет смысла. Вы думаете это так просто??? - person caw; 13.12.2009
comment
Я не использую открывающие скобки... так зачем закрывающие скобки? С какой стати мне использовать скобки для псевдокода? Есть проблемы со скобками, и я их исправлю. Я не утверждаю, что это хороший алгоритм, я утверждаю, что так работает флик-чарт. Поэкспериментируйте с этим и предложите контрпример. Если бы это было более сложно, не думаете ли вы, что когда вы ранжируете A по сравнению с B, должна быть возможность, что C изменится (больше, чем просто сдвиг вниз на единицу)? - person David Berger; 15.12.2009
comment
Извините, я хотел сказать в скобках. Вот что я имел в виду. ;) Я проверю ваш код. Большое спасибо! - person caw; 15.12.2009
comment
Ваш алгоритм кажется правильным. Но я бы заменил понижение проигравшего на 1 на понижение всех элементов, следующих за ним, на 1. И: Если победитель находится в вашем собственном рейтинге, а проигравший еще нет, победитель продвигается на одну позицию. - person caw; 15.12.2009
comment
Еще одна вещь, которая была бы интересна: как рассчитать глобальный рейтинг? Это очень важно, так как ваш алгоритм использует его. - person caw; 15.12.2009
comment
@marco92w Если победитель находится в вашем собственном рейтинге, а проигравший еще нет, победитель продвигается на одну позицию. Удивительно, но нет! Я видел обратное! Проигравший просто вставляется (я думаю на основе глобального, но на самом деле это просто предположение), часто на более высокую позицию, чем победитель. Это было то, что впервые подсказало мне, что алгоритм был не таким сложным. - person David Berger; 16.12.2009

Или вы можете использовать вариант PageRank, см. проф. Отличное описание Уилфа.

person HH321    schedule 09.12.2009
comment
Спасибо, хорошая идея. Это может сработать. Тогда важность предмета равна сумме значений важности битых предметов, верно? - person caw; 10.12.2009
comment
Не сработает сразу: PageRank предполагает неориентированный циклический граф, эти рейтинги дают двудольный граф. Это означает, что алгоритму не на чем основывать ценность ссылки от избирателя. Нетрудно придумать способы сделать это, но алгоритм будет неполным, пока вы этого не сделаете. - person Charles Stewart; 10.12.2009
comment
Спасибо за эту информацию. Значит, вам нужно определить один фильм как хороший, чтобы сделать возможными расчеты для остальных? - person caw; 11.12.2009
comment
Как я понял вопрос, вы получите ориентированный граф (фильм а лучше, чем б). Он не обязательно должен быть двудольным — будут треугольники. Но я думаю, что алгоритм будет состоять в том, чтобы составить матрицу: A, элемент (i, j) которого равен 1, если веб-сайт j ссылается на веб-сайт i, и равен 0 в противном случае, а затем вы должны найти его собственные векторы и найти тот, что в в котором все элементы имеют один и тот же знак. Самая большая запись сообщит вам о команде первого ранга, следующая по величине запись будет принадлежать команде второго ранга. - person HH321; 11.12.2009
comment
@Charles Stewart PageRank не предполагает неориентированный граф. Ссылки являются направленными ребрами: en.wikipedia.org/wiki/PageRank#Simplified_algorithm - person charstar; 14.12.2009
comment
Я предполагал представить голоса как пару ребер: одно положительное от избирателя к любимому фильму, другое отрицательное к неблагоприятному фильму. Тогда граф двудольный, так как все ребра переходят от избирателей к фильмам. Но если вы сделаете отрицательный голос преимуществом от фильма до избирателя, то я предполагаю, что PageRank сработает. - person Charles Stewart; 15.12.2009
comment
@Charles Stewart Я думаю, что вы немного ошиблись, включив пользователей в качестве узлов в граф. Чтобы сделать модель из одного пользователя, вы можете сделать то же самое, что и PageRank, и превратить победителя в проигравшего. Для нескольких пользователей вы можете сделать то же самое, но с весами краев, основанными на средних значениях для пользователей. Я не уверен, что это обязательно будет решаемо, так что это просто идея. - person David Berger; 16.12.2009
comment
@David: Если вы не хотите относиться ко всем голосам одинаково (!), то вам нужно представить часть того, что вы знаете об избирателе, на графике. Я думаю, что наличие избирателей в качестве узлов, а не, скажем, меток на ребрах, даст гораздо более простой анализ. - person Charles Stewart; 26.12.2009

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

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

  • The number of votes taken on each pairing of films.
    • And also a sorted version of this data grouped like in radix sort
  • Сколько раз проголосовали за каждый фильм в каждой паре фильмов

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

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

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

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

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

  • Начать счет с 0
  • Go through each other film in the system
    • Add voteswon / votestaken versus this film to the score
      • If no votes have been taken between these two films, add 0.5 instead (This is of course assuming you want new films to start out as average in the rankings)

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

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

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

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

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

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

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

===ТО, ЧТО СЛЕДУЕТ, ПОЧТИ НЕПРАВИЛЬНО И ПРИВЕДЕНО В ОСНОВНОМ ДЛЯ ИСТОРИЧЕСКОГО КОНТЕКСТА===

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

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

person KernelJ    schedule 15.12.2009
comment
Большое спасибо! Имеет ли смысл делить на количество голосов, а затем умножать на количество голосов? Ваш подход не учитывает, какие элементы избиты. Итак, если элемент А превосходит слабые элементы на 80%, а элемент Б превосходит сильные элементы на 70%, какой из них лучше? Это должен быть пункт B... - person caw; 16.12.2009
comment
На самом деле это может быть хорошим способом расчета глобального индекса... но он не очень полезен для определения индивидуальных предпочтений. В настоящее время у меня есть около 300 фильмов на фликчарте, и я проголосовал 1000 раз. Но есть 300*299/2 возможных совпадений. Каждый фильм участвовал примерно в 6 голосах. Как я могу оценить 300 фильмов, если все итоги голосования равны 1, 2, 3, 4, 5 или 6? Не говоря уже о том, что большинство фильмов не были сопряжены, а те, которые были, были сопряжены только один раз. - person David Berger; 16.12.2009
comment
@David: Я полностью согласен, это никогда не было моим намерением. Этот подход сходится к правильному ответу по мере увеличения количества голосов. Для одного человека они не стали бы голосовать достаточное количество раз, чтобы получить значимые результаты. Однако объем данных, которые должны храниться для каждого пользователя, довольно мал, поэтому вы должны получить довольно точный глобальный рейтинг. Было бы интересно посмотреть, можно ли использовать подход цепи Маркова для угадывания личного рейтинга путем стереотипизации людей или любой другой подход, основанный только на итоговых показателях по фильмам. Действительно, это было бы блестяще для предложения фильмов, которые вы должны посмотреть! - person KernelJ; 16.12.2009
comment
@ marco92w: * количество голосов получено из фактора количество голосов / общее количество голосов, что является вероятностью того, что был выбран этот конкретный голос, как обсуждалось в предыдущем абзаце. Я вытащил общее количество голосов наружу, потому что оно не зависит от фактического выбора голосов. Так что да, это имеет смысл. Мое последнее решение зависит от сервера, пытающегося поддерживать случайный выбор голосов (гарантированный в первом решении), пытаясь получить одинаковое количество голосов для всех вариантов голосования. Это означает, что новые добавленные фильмы будут часто сравниваться со случайным фильмом. - person KernelJ; 16.12.2009
comment
На самом деле, переосмыслив всю проблему, я совершил серьезную ошибку в своем ответе, забыв, что вероятность попадания в любой упомянутый выбор из двух фильмов в голосовании должна быть равномерно распределена, чтобы цепь Маркова имела смысл. Вот почему, Марко, ты был совершенно прав, второе решение вообще не имеет смысла! Кроме того, нет абсолютно никаких причин, по которым выбор двух голосов должен быть случайным в первом решении. И способ решения проблемы в первом решении такой же, как и во втором неисправном. Быстро сравнивайте новые фильмы со всеми остальными! - person KernelJ; 16.12.2009
comment
@KernelJ предполагает, что личное ранжирование путем создания стереотипов о людях — это то, на что тратится большая часть денег Netflix на исследования и разработки, и любой, кто разработает алгоритм, который на 15% точнее их алгоритма, получит огромный денежный приз. - person David Berger; 16.12.2009
comment
Круто, я посмотрю на это. Интересно, как они измеряют «точность»… Я думал об использовании какого-то генетического алгоритма для создания организмов с предпочтениями. Вы можете проверить это на чем-то вроде того, насколько им нравится веревка. - person KernelJ; 16.12.2009

http://en.wikipedia.org/wiki/Maximize_Affirmed_Majorities?

(Или алгоритм голосования BestThing, изначально называется алгоритм голосования VeryBlindDate)

person Stobor    schedule 10.12.2009
comment
Спасибо. На странице алгоритма BestThing есть описание того, что делает алгоритм: показаны два элемента, и вы выбираете тот, который вам больше нравится. Это именно то, что я ищу. Но действительно ли это так просто? Просто разделить количество побед на общее количество боев? - person caw; 11.12.2009

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

person Joe Phillips    schedule 12.12.2009
comment
Спасибо, d03boy. Я думаю, что это не совсем тот алгоритм, который я ищу. Он используется в экономике, но бесполезен для оценки результатов боя 1 на 1, не так ли? - person caw; 13.12.2009

Я искренне рекомендую книгу Программирование коллективного разума, где вы найдете всевозможные интересные алгоритмы и анализ данных в этом направлении.

person DanDan    schedule 15.12.2009