Подтвердить что ты не робот

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

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

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

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

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

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


Возможности, которые я нашел до сих пор:

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

  • "Линейно взвешенный" - используйте функцию типа: S = (w1 * F1) + (w2 * F2) + (w3 * F3), где wx - произвольно назначенные веса, а Fx - значения факторов. Вы также хотите нормализовать F (т.е. Fx_n = Fx / Fmax). Я думаю, что это как-то как Работа Lucene работает.
  • "Base-N weighted" - больше похоже на группировку, чем взвешивание, это просто линейное взвешивание, когда весы растут кратно базовым 10 (аналогичный принцип для специфичность селектора CSS), так что более важные факторы значительно выше: S = 1000 * F1 + 100 * F2 + 10 * F3 ....
  • Оценочная истинная ценность (ETV) - это, по-видимому, что Google Analytics, представленная в своей отчетности, где значение одного фактора влияет (весит) на другой фактор - последствие состоит в том, чтобы сортировать по более "статистически значимым" значениям. Ссылка объясняет это довольно хорошо, так что вот только уравнение: S = (F2 / F2_max * F1) + ((1 - (F2 / F2_max)) * F1_avg), где F1 является "более важным" фактором ( "показатель отказов" в статье), а F2 является фактором значимости изменения ( "посещения" в статье).
  • Байесовская оценка - выглядит очень похоже на ETV, так IMDb рассчитывает их рейтинг. См. qaru.site/info/99970/...; уравнение: S = (F2 / (F2+F2_lim)) * F1 + (F2_lim / (F2+F2_lim)) × F1_avg, где Fx совпадают С# 3, а F2_lim - минимальный пороговый предел для фактора значимости (т.е. любое значение, меньшее X, не следует рассматривать).

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

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

4b9b3361

Ответ 1

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

В принципе, вы считаете каждый свой критерий координатой (после нормализации, конечно). Исходя из вашего суждения, вы выбираете абсолютную оптимальную точку, например. в этом случае, автор самого высокого ранга, новейшая статья и т.д. Как только вы выбираете оптимальное решение, каждое "решение" оценивается на основе его расстояния от оптимального. Формула выборки была бы инверсной для евклидова расстояния для каждого артикуля: S = 1/(sqrt ((rank-rank_ideal) ^ 2 + (age-age_ideal) ^ 2 +... + (xn-xn_ideal) ^ 2 )).

Это относится ко всем критериям как равным, поэтому имейте это в виду.

Ответ 2

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