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

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

Предположим, у нас есть 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 получил лучший рейтинг от a

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


person EBAG    schedule 17.07.2009    source источник
comment
stackoverflow.com/questions/1057269/   -  person EFraim    schedule 17.07.2009
comment
Читайте ответ ниже! я думаю, мне нужно было его продублировать! в любом случае я удаляю другой   -  person EBAG    schedule 17.07.2009


Ответы (3)


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

person TheArtTrooper    schedule 17.07.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

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

person Scott Whitlock    schedule 17.07.2009

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

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

a = b + 400 c = a + 10

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

person Josh    schedule 17.07.2009
comment
Да, мы разработали технику ловли, о которой вы говорите. - person EBAG; 17.07.2009
comment
Хороший. Итак, вы просто пытаетесь выяснить, как конкретно определить реальный рейтинг? На каком языке ты говоришь? - person Josh; 17.07.2009
comment
Язык - это не тот случай, мы можем использовать что-нибудь для этого. Нам нужен надежный алгоритм. - person EBAG; 17.07.2009
comment
Похоже, TheArtTrooper дал вам именно то, что вы искали! Удачи! - person Josh; 17.07.2009