Рейтинг продуктов - PullRequest
       26

Рейтинг продуктов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 получил более высокий ранг от

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

Ответы [ 3 ]

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

Взгляните на http://msdn.microsoft.com/en-gb/magazine/dd148646.aspx?pr=blog. Он описывает пять «рейтинговых» систем. Контекст касается тестирования, но я думаю, что базовые концепции достаточно хорошо применимы к вашей проблемной области.

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

Звучит довольно сложно. Я бы подошел к этому как периодически пересматривать рейтинги и сохранять порядок сортировки в базе данных. Из того, что вы описали, это звучит как гигантская алгебраическая система. Я не знаю, может ли это быть решено в БД, но даже если бы это могло быть, это может занять O (n ^ Holy Crap), чтобы решить, поэтому я чувствую, что кэширование будет вашим другом здесь.

Что касается фактического нахождения порядка сортировки, я бы построил список уравнений, например:

a = b + 400 с = а + 10

И как только у вас будет весь список, решите все и кешируйте рейтинг

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

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

a 200 - b 0
c 10 - a 0

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

c 210 - a 200 - b 0

Затем необходимо нормализовать (при условии, что все пользователи имеют одинаковый вес):

c 100 - a (200/210) - b 0

Тогда, если у пользователей другой вес (другими словами, один пользователь имеет больше правдоподобности, чем другой), вы можете сделать это (предположим, что этот пользователь имеет 5):

c 100*5 - a (200/210)*5 - b 0

Как только вы это сделаете, вы можете суммировать все результаты по каждому продукту для всех пользователей.

...