Вопрос

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

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

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

a 150 баллов - b 0 баллов (этот пользователь только что рассказал нам, что он думает о двух продуктах a и b, и при сравнении a и b он считает, что если он дает 150 баллов, то b стоит 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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

a = b + 400 c = a + 10

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top