Алгоритм ранжирования - PullRequest
5 голосов
/ 17 июля 2009

Мне нужно отсортировать товары по рейтингу пользователей.

Предположим, у нас есть 3 продукта { a , b , c }, и у нас есть отзывы пользователей об этих продуктах. Неважно, какой пользователь даст нам обратную связь (этот вопрос не о корреляционной фильтрации, если вы с ней знакомы - интересы пользователя здесь не так)

Каждая из этих строк представляет собой отзывы пользователей, когда они пытались сравнить 3 продукта:

a 150 баллов - b 0 баллов (этот пользователь только что рассказал нам, что он думает о 2 продуктах a и b и в сравнении a и b он считает, что если он даст 150 баллов, то б стоит 0 баллов)

a 150 баллов - c 20 баллов

c 200 баллов - a 10 баллов (несмотря на предыдущий этот пользователь считает, что c лучше a)

a 200 баллов - b 40 баллов - c 100 баллов

a 150 баллов - b 50 баллов

a 150 баллов - b 20 баллов

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

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

Любая помощь или советы приветствуются.

/ ******************************************* ************************************* /

Вы не можете просто добавить баллы и рассчитать среднее значение баллов товара Потому что важно, как он получил свои очки, предположим, что a набрал 800 очков против b - тогда c получит 10 очков против a , как это :

a 200 - b 0

a 200 - b 0

a 200 - b 0

a 200 - b 0

c 10 - a 0 (это означает, что c лучше, чем a)

так определенно a лучше, чем b , но с небольшими 10 баллами c получил лучший ранг от a

/ ********************************************** ********************************** /

Ответы [ 3 ]

5 голосов
/ 17 июля 2009

У вас есть некоторые проблемы. Добавьте рейтинг c 0 - b 20 , и вы получите круг, где c .

И, конечно, ваш заказ не только не транзитный ( от a ), он также не тотален (могут быть элементы, которые вы не можете решить, что лучше потому что голосование пользователей не было проведено, даже через другие элементы.

То, что вы получаете - это несвязный, ориентированный, конечный граф . (используйте направление ребер, чтобы сказать, какой элемент (узел лучше).

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

Возможно, теория порядка в математике может вам помочь: ищите Теорию порядка , частичный порядок, Диаграмма Хассе .

Чтобы сделать это более практичным:

Используйте двумерный массив со строкой и столбцом на элемент. В ячейку (а, б) рассчитывают сумму рейтингов. Начиная с определенного элемента a, следуйте всем соединениям positiv (> 0), пока вы не достигнете узла, который не имеет позитивных соединений, или вернетесь к узлу, который вы уже посетили. Эти узлы - ваши решения.

3 голосов
/ 17 июля 2009

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

1 голос
/ 17 июля 2009

Я думаю, что вам нужно рассказать, как каждый человек голосовал за каждый продукт, например: проголосовало 1 человек: 100 за а, 50 за б и 0 за с человек 2 проголосовал 0 за а, 200 за б и 80 за с

это должно быть переведено на:
человек 1 проголосовал 3 за а, 2 за б и -1 за с
человек 2 проголосовал -1 за а, 3 за б и 2 за с

где я использую:
3 за самый высокий голос
2 за второе место
1 для самого низкого
И -1, если они проголосовали 0 (указание, что они не любили / не считали продукт)

моя первоначальная мысль об этом все равно

...