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

73
11

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

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

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

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

Мои первоначальные мысли дают точки для каждого элемента, оцененного пользователем = позиции в списке ранжированных пользователей. (Например, если есть 10 предметов, дайте 1-й ранг 1 очко, 2 9 очков и т.д. с отрицательными очками, присуждаемыми за предметы, скрытые пользователем). И общий вид сортировки будет основываться на общих точках. Но это не сработает хорошо для новых предметов, которые были в значительной степени неоскверненными, и не могли бы легко продвинуться по лестнице.

Итак, любые мысли о справедливом алгоритме, которые могут быть прогностическими для новых элементов?

спросил(а) 2012-01-13T19:13:00+04:00 8 лет, 10 месяцев назад
1
Решение
58

Поэтому я думаю, что у меня есть рабочее решение. Объединив подход, который я упомянул в вопросительном комментарии, с нижней границей доверительного интервала Wilson для параметра Bernoulli оценка, похоже, соответствует моим ожиданиям.

Поэтому, чтобы перефразировать подход из моего комментария: оценка элемента пользователя = количество элементов + 1 - ранг в списке/количестве элементов. (1 из 3 = 1, 2 из 3 =.667, 2 из 5 =.8).

чтобы дать общую оценку предмета, я подключаю формулу Вильсона: (phat + z * z/(2 * n) - z * Math.sqrt((phat * (1-phat) +z * z/(4 * n ))/п))/(1 +z * г/п)

Где phat = среднее количество баллов, n - количество ранжировок, z = 1,96 (для 95% доверительного рейтинга).

Я издевался над некоторыми данными в Excel и играл с различными сценариями, и мне понравились результаты. Будет двигаться к реализации. Спасибо за помощь

ответил(а) 2012-01-16T05:49:00+04:00 8 лет, 10 месяцев назад
42

вот мой доверительный интервал оценки Wilson для параметра Bernoulli в node.js

wilson.normaldist = function(qn) {
var b = [1.570796288, 0.03706987906, -0.0008364353589, -0.0002250947176, 0.000006841218299, 0.000005824238515, -0.00000104527497, 0.00000008360937017, -0.000000003231081277, 0.00000000003657763036, 0.0000000000006936233982];
if (qn < 0.0 || 1.0 < qn) return 0;
if (qn == 0.5) return 0;
var w1 = qn;
if (qn > 0.5) w1 = 1.0 - w1;
var w3 = -Math.log(4.0 * w1 * (1.0 - w1));
w1 = b[0];

function loop(i) {
w1 += b[i] * Math.pow(w3, i);
if (i < b.length - 1) loop(++i);
};
loop(1);
if (qn > 0.5) return Math.sqrt(w1 * w3);
else return -Math.sqrt(w1 * w3);
}

wilson.rank = function(up_votes, down_votes) {
var confidence = 0.95;
var pos = up_votes;
var n = up_votes + down_votes;
if (n == 0) return 0;
var z = this.normaldist(1 - (1 - confidence) / 2);
var phat = 1.0 * pos / n;
return ((phat + z * z / (2 * n) - z * Math.sqrt((phat * (1 - phat) + z * z / (4 * n)) / n)) / (1 + z * z / n)) * 10000;
}

ответил(а) 2014-08-27T20:09:00+04:00 6 лет, 3 месяца назад
42

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

"Этот элемент часто занимает 3-е место", по-моему, не полезен, тогда как "рассматриваемый предмет (который мы будем называть A) лучше всего занимает позиция B в большинстве случаев", поскольку он позволяет создавать (возможно, нечеткие ) заказ вашего списка рассматриваемых предметов.

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

ответил(а) 2012-01-13T19:48:00+04:00 8 лет, 10 месяцев назад
41

Как насчет реализации чего-то похожего на систему рейтинга 9gag. У вас может быть общая страница, на которой отображаются элементы самого высокого рейтинга, и страница для голосования, на которой пользователи могут видеть новые элементы и ранжировать их соответственно.

ответил(а) 2012-01-13T19:33:00+04:00 8 лет, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема