2009-07-17 3 views
0

Мне нужно отсортировать базу продуктов по пользовательским рейтингам.Продукты Рейтинг

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

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

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

в 150 баллов - C 20 точек

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

в 200 баллов - B 40 точек - гр 100 пунктов

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

в 150 баллов - B 20 точек

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

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

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

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

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

200 - б 0

200 - б 0

a 200 - b 0

200 - б 0

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

так определенно лучше, чем б, но с небольшим 10 точек с получил лучшее звание от

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

+0

Абсолютный дубликат? – EFraim

+0

http://stackoverflow.com/questions/1057269/implementing-a-ranking-system – EFraim

+0

Прочтите ответ ниже! я думаю, мне нужно было его дублировать! в любом случае я удаляю другой – EBAG

ответ

1

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

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 

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

1

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

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

A = B + 400 с = а + 10

И как только вы в целом список сборки, решить все это и кешировать ранжирование

+0

Да, мы придумали технику ловли, о которой вы упоминаете. – EBAG

+0

Хорошо. Итак, вы просто пытаетесь выяснить, как определить фактическое ранжирование? На каком языке вы используете? – Josh

+0

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

Смежные вопросы