Как обеспечить наиболее релевантные результаты с помощью многофакторной взвешенной сортировки

Мне нужно обеспечить взвешенную сортировку по 2+ факторам, упорядоченным по «актуальность». Однако факторы не изолированы полностью, я хочу, чтобы один или несколько факторов влияли на «срочность» (вес) других.

Пример: добавленный контент ( статей ) можно проголосовать за / против и, таким образом, получить рейтинг; у них есть дата публикации, и они также помечены категориями. Пользователи пишут статьи и могут голосовать, а также могут иметь или не иметь какой-то рейтинг (эксперт и т. Д.).Наверное, похоже на StackOverflow, не так ли?

Я хочу предоставить каждому пользователю список статей, сгруппированных по тегам, но отсортированных по «релевантности», где релевантность рассчитывается на основе рейтинга и возраста статьи. , и, возможно, зависит от рейтинга автора. I.E. статья с высоким рейтингом, написанная несколько лет назад, не обязательно может быть такой же актуальной, как статья со средним рейтингом, написанная вчера. И, возможно, если бы статья была написана экспертом, она была бы более актуальной, чем статья, написанная «Джо Шмо».

Другим хорошим примером может быть присвоение гостиницам «мета-оценки», состоящей из цены, рейтинга и достопримечательностей .

У меня вопрос: какой алгоритм для многофакторной сортировки лучше? Это может быть дубликатом этого вопроса , но меня интересует общий алгоритм для любого количества факторов (более разумное ожидание - 2–4 фактора), предпочтительно «полностью автоматическая» функция, которая Мне не нужно настраивать или требовать ввода данных пользователем, и я не могу анализировать линейную алгебру и странность собственных векторов.


Возможности, которые я обнаружил на данный момент:

Примечание: S - это «оценка сортировки»

  1. «Линейно взвешенная» - используйте такую ​​функцию, как: S = (w 1 * F 1 ) + (w 2 * F 2 ) + (w 3 * F 3 ) , где w x - произвольно присвоенные веса, а F x - значения факторов. Вы также можете нормализовать F (т.е. F x_n = F x / F макс ). Я думаю, что так работает поиск Lucene .
  2. «Base-N weighted» - больше похоже на группировку, чем на взвешивание, это просто линейное взвешивание, при котором веса увеличиваются, кратно основанию-10 (аналогичный принцип специфичности селектора CSS ), поэтому что более важные факторы значительно выше: S = 1000 * F 1 + 100 * F 2 + 10 * F 3 ... ].
  3. Оценка истинного значения (ETV) - это, по-видимому, то, что Google Analytics представила в своей отчетности , где значение одного фактора влияет ( веса ) на другой фактор - Следствием этого является сортировка по более «статистически значимым» значениям. Ссылка объясняет это довольно хорошо, поэтому вот только уравнение: S = (F 2 / F 2_max * F 1 ) + ((1 - (F 2 / F 2_max )) * F 1_avg ) , где F 1 - это " более важный «фактор» («показатель отказов» в статье), а F 2 - «модифицирующий значимость» фактор («посещения» в статье).
  4. Байесовская оценка - очень похожа на ETV, именно так IMDb рассчитывает свой рейтинг.См. этот пост на StackOverflow для объяснения ; уравнение: S = (F 2 / (F 2 + F 2_lim )) * F 1 + (F 2_lim / (F 2 + F 2_lim )) × F 1_avg , где F x являются то же, что и № 3, и F 2_lim - это минимальный пороговый предел для фактора «значимости» (т. е. любое значение меньше X не должно рассматриваться).

Варианты №3 или №4 выглядят действительно многообещающими, поскольку вам действительно не нужно выбирать произвольную схему взвешивания, как в вариантах №1 и №2, но проблема в том, как это сделать для более чем двух факторов. ?

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

29
задан Community 23 May 2017 в 12:25
поделиться

1 ответ

Рассмотрим цепочку весов. Например. у вас есть 3 фактора: X , Y и Z . Вы можете вычислить ETVyz как W = (Z/Zmax * Y) + (1 - Z/Zmax) * Yavg для каждой записи, а затем вычислить ETVxw как S = (W/Wmax * X) + (1 - W/Wmax) * Xavg. Вы можете объединить больше факторов, аналогично.

0
ответ дан 28 November 2019 в 02:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: