Я собирался задать тот же вопрос о многофакторной взвешенной сортировке, потому что мое исследование только дало ответы (например, формулы с пояснениями) на двухфакторную сортировку.
Несмотря на то, что мы оба спрашиваем о трех факторах, я перечислю возможности, которые я нашел, если они будут полезны.
Возможности:
Примечание: S
это «оценка сортировки», по которой вы будете сортировать (asc или desc).
- «Линейно взвешенный» - использовать функцию, подобную:
S = (w<sub>1</sub> * F<sub>1</sub>) + (w<sub>2</sub> * F<sub>2</sub>) + (w<sub>3</sub> * F<sub>3</sub>)
, где w<sub>x</sub>
- произвольно назначенные веса, а F<sub>x</sub>
- значения факторов.Вы также хотели бы нормализовать F
(т. Е. F<sub>x_n</sub> = F<sub>x</sub> / F<sub>max</sub>
). - «Взвешенное по основанию» - больше похоже на группирование, чем на взвешивание, это просто линейное взвешивание, где весаувеличение кратных по основанию-10 (принцип, аналогичный специфичности селектора CSS ), так что более важные факторы значительно выше:
S = 1000 * F<sub>1</sub> + 100 * F<sub>2</sub> ...
. - оценочное истинное значение (ETV) - это, очевидно, то, что Google Analytics представило в своих отчетах , где значение одного фактора влияет ( весов ) на другой фактор - следствием является сортировка по более "статистически значимым"" ценности.Ссылка объясняет это довольно хорошо, поэтому вот только уравнение:
S = (F<sub>2</sub> / F<sub>2_max</sub> * F<sub>1</sub>) + ((1 - (F<sub>2</sub> / F<sub>2_max</sub>)) * F<sub>1_avg</sub>)
, где F<sub>1</sub>
- это «более важный» фактор («показатель отказов» в статье), а F<sub>2</sub>
- это «фактор, изменяющий значимость» («посещения» в статье). - Байесовская оценка - выглядит очень похоже на ETV, именно так IMDb вычисляет свой рейтинг.См. этот пост StackOverflow для объяснения ;уравнение:
S = (F<sub>2</sub> / (F<sub>2</sub>+F<sub>2_lim</sub>)) * F<sub>1</sub> + (F<sub>2_lim</sub> / (F<sub>2</sub>+F<sub>2_lim</sub>)) × F<sub>1_avg</sub>
, где F<sub>x</sub>
- это то же самое, что и # 3, а F<sub>2_lim</sub>
- минимальный пороговый предел для фактора "значимости" (т. е. любое значение меньше X не должно учитываться).
Параметры № 3 и № 4 выглядят действительно многообещающе, так как вам не нужно выбирать произвольную схему взвешивания, как вы это делаете в № 1 и № 2, но тогда проблема в том, как вы делаете это для большегочем два фактора?
В вашем случае назначение весов в # 1, вероятно, было бы хорошо.Вам нужно будет отрегулировать алгоритм в зависимости от того, что ваши пользователи считают более важным - вы можете выставить веса w<sub>x</sub>
в качестве фильтра (например, выпадающий список 1-10), чтобы ваши пользователи могли настроить поиск на лету.Или, если вы хотите проявить смекалку, вы можете опросить своих пользователей, прежде чем они начнут искать («Что для вас важнее?»), А затем назначить набор весовых коэффициентов на основе ответа, а после отслеживания достаточного количества опросов вы можете автоматически предложить схему взвешивания.основано на большинстве ответов.
Надеюсь, что вы попадете на правильный путь.