Лучший метод для создания механизма рекомендаций / прогнозирования

Я здесь сегодня, чтобы спросить вас, как вы планируете разработать систему рекомендаций. Обратите внимание, что я не прошу код, а скорее что-то вроде алгоритма / математики.

Веб-сайт, над которым я работаю, предлагает множество элементов, каждый с сотнями пользовательских оценок от 0 до 5 в различных категориях, вот пример таблицы элементов:

Я БЫназвание      ОписаниеСредний рейтингСтоимостьЮзабилитифункциональность
Напиток       Blablabla    4,2                    2,2  2,3         4,0              
Автомобиль         Blablabla    3,5                    3,3  3.0         4,4              
Мешок         Blablabla    4,9                    5.0  4,2         0.2              
питание       Blablabla    2,8                    2,1  4,8         1.2              

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

Таким образом, столбцы «Стоимость», «Удобство использования» и «Функциональность» и т. Д. Представляют собой различные категории, которые может иметь элемент и который может оценить пользователь. Столбец «Средний рейтинг» — это медиана всех категорий.

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

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

Пользователь ищет 3 в стоимости, 3 в удобстве использования и 4 в функциональности и представляет. Результатом должен быть элемент (ы), который наилучшим образом соответствует этим критериям, который в этом случае будет (в порядке соответствия идентификаторов от лучшего к худшему): 2, 1, 3, 4 ок.

Как бы мне этого добиться? Добавляем «вес» к каждой категории. Я провел много исследований, но я не очень опытен в продвинутой математике. Кажется, что вычисление евклидова расстояния и сравнение их — хорошая идея, но я бы предпочел услышать больше подходов.

0

Решение

Вот схема простого алгоритма, который я упомянул в комментариях. Допустим, ползунки пользователя:

cost=2.3, usability=2.1, functionality=4

Вы можете создать запрос SQL, который попытается минимизировать «общее расстояние» этих значений от значений в вашей таблице. Псевдо-SQL-код:

SELECT
(cost - 2.3)^2 + (usability - 2.1)^2 + (functionality - 4)^2 AS score
FROM
product_table
ORDER BY
score

Назначение площади (^2), чтобы отрицательные оценки не мешали друг другу. Я думаю, что вы можете просто сделать ABS() и здесь (уберите минус), но взятие квадрата кажется популярным способом сделать это.

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

Если вы хотите, вы можете умножить каждое предложение на вес, чтобы сделать его более значимым; значение 1.0 не будет иметь значения, значение меньше уменьшит его эффект, а значение больше усилит его вклад. Если вы хотите полностью игнорировать одну из этих трех мер, просто умножьте ее вклад на 0и это гарантирует, что различия в расстояниях для этой меры не будут иметь никакого эффекта.

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


Обратите внимание, что это требует ввода пользовательских значений в ваш SQL. Если вы не можете использовать здесь параметризацию, не забудьте тщательно отбросить / экранировать ваши данные.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]