Нужна помощь в максимизации трех факторов в нескольких похожих объектах и ​​правильном порядке - PullRequest
5 голосов
/ 29 декабря 2011

Мне нужно написать алгоритм на любом языке, который бы упорядочивал массив на основе 3 факторов. Я использую курорты в качестве примера (например, Hipmunk). Допустим, я хочу в отпуск. Я хочу самое дешевое место, с лучшими отзывами и большинством достопримечательностей. Тем не менее, очевидно, что я не могу найти тот, который # 1 во всех 3.

Пример (при условии, что есть 20 важных достопримечательностей):

Resort A: $ 150 / ночь ... 98/100 в благоприятных отзывах ... 18 из 20 достопримечательностей
Курорт B: $ 99 / ночь ... 85/100 в благоприятных отзывах ... 12 из 20 достопримечательностей
Курорт C: $ 120 / ночь ... 91/100 в благоприятных отзывах ... 16 из 20 достопримечательностей

Курорт B выглядит наиболее привлекательным по цене, но занимает 3-е место в двух других категориях. При этом я могу выбрать курорт C всего за 21 доллар больше за ночь и получить больше достопримечательностей и лучшие отзывы. Цена по-прежнему важна для меня, но на курорте А есть замечательные отзывы и масса достопримечательностей: стоит ли еще $ 51 потраченного на рывок?

Я хочу иметь возможность заполнять список, который будет заказывать горит от «лучшего к худшему» (я цитирую, что он субъективен для потребителя). Как бы я мог максимизировать ценность для каждого курорта?

  • Должен ли я поставить вес для каждого фактора (то есть: 55% цены, 30% отзывов, 15% удобств) и прийти к результату набора чисел и заказать их таким образом?
  • Нужен ли мне режим, медиана и диапазон для всех отелей, чтобы определить среднюю цену, и чтобы отели со средней ценой удерживали наибольший вес?

Если это немного сбивает с толку, зайдите на www.hipmunk.com. У них есть самолет, который они называют Агония (и отель, похожий на мой вопрос), который они используют как свой собственный. Я использовал курорты в качестве примера, чтобы мой вопрос, надеюсь, имел больше смысла. Как поставить математику в такую ​​задачу?

Ответы [ 2 ]

10 голосов
/ 06 января 2012

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

Несмотря на то, что мы оба спрашиваем о трех факторах, я перечислю возможности, которые я нашел, если они будут полезны.

Возможности:

Примечание: Sэто «оценка сортировки», по которой вы будете сортировать (asc или desc).

  1. «Линейно взвешенный» - использовать функцию, подобную: 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>).
  2. «Взвешенное по основанию» - больше похоже на группирование, чем на взвешивание, это просто линейное взвешивание, где весаувеличение кратных по основанию-10 (принцип, аналогичный специфичности селектора CSS ), так что более важные факторы значительно выше: S = 1000 * F<sub>1</sub> + 100 * F<sub>2</sub> ....
  3. оценочное истинное значение (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> - это «фактор, изменяющий значимость» («посещения» в статье).
  4. Байесовская оценка - выглядит очень похоже на 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), чтобы ваши пользователи могли настроить поиск на лету.Или, если вы хотите проявить смекалку, вы можете опросить своих пользователей, прежде чем они начнут искать («Что для вас важнее?»), А затем назначить набор весовых коэффициентов на основе ответа, а после отслеживания достаточного количества опросов вы можете автоматически предложить схему взвешивания.основано на большинстве ответов.

Надеюсь, что вы попадете на правильный путь.

0 голосов
/ 29 декабря 2011

Как насчет наличия переменных весов и предоставления пользователю возможности настраивать его с помощью некоторых вводов, таких как рычаги, чтобы порядок сортировки динамически обновлялся?

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