Каков хороший алгоритм для предложения вещей, которые могут понравиться кому-то на основе их предыдущего выбора? (например, как популяризируется Amazon для предложения книг и используется в таких сервисах, как iRate Radio или YAPE, где вы получаете предложения по рейтингу)
Алгоритм предложения продуктов
Ответы (9)
Просто и понятно (корзина заказа):
Ведите список транзакций с точки зрения того, какие товары были заказаны вместе. Например, когда кто-то покупает видеокамеру на Amazon, он одновременно покупает и носитель для записи.
При принятии решения о том, что «рекомендуется» на данной странице продукта, просмотрите все заказы, в которых был заказан этот продукт, подсчитайте все другие товары, купленные в то же время, а затем отобразите 5 самых популярных товаров, которые чаще всего покупались в то же время. время.
Вы можете расширять его оттуда, основываясь не только на заказах, но и на том, что люди последовательно искали на сайте и т. д.
С точки зрения рейтинговой системы (например, оценок фильмов):
Становится сложнее, когда вы вбрасываете рейтинги. Вместо отдельной корзины товаров, которые вы купили, у вас есть история оценок товаров покупателями.
В этот момент вы смотрите на интеллектуальный анализ данных, и сложность его огромна.
Простой алгоритм, тем не менее, недалеко от описанного выше, но принимает другую форму. Возьмите товары клиента с самой высокой и самой низкой оценкой и найдите других клиентов с аналогичными списками с самой высокой и самой низкой оценкой. Вы хотите сопоставить их с другими, у которых есть такие же крайние симпатии и антипатии — если вы сосредоточитесь только на симпатиях, то, когда вы предложите что-то, что они ненавидят, вы доставите им плохой опыт. В системах внушения вы всегда хотите ошибаться в сторону «теплого» опыта, а не «ненависти», потому что один плохой опыт испортит их от использования внушения.
Предлагайте покупателю товары из других списков.
Посмотрите на "Что такое хороший алгоритм рекомендации?" и его обсуждение на Hacker News.
Однозначного ответа нет, и маловероятно, что для этого существует стандартный алгоритм.
То, как вы это сделаете, сильно зависит от типа данных, которые вы хотите связать, и от того, как они организованы. Это зависит от того, как вы определяете «связанный» в рамках вашего приложения.
Часто самая простая мысль дает хорошие результаты. В случае с книгами, если у вас есть база данных с несколькими атрибутами для каждой записи книги (скажем, автор, дата, жанр и т. д.), вы можете просто предложить случайный набор книг одного автора, одного жанра, похожих названий и другие такие.
Тем не менее, вы всегда можете попробовать более сложные вещи. Вести учет других пользователей, которым был нужен этот «продукт», и предлагать другие «продукты», которые требовались этим пользователям в прошлом (продуктом может быть что угодно, от книги до песни и всего, что вы можете себе представить). То же, что и большинство крупных сайтов, у которых есть функция подсказок (хотя они, вероятно, принимают много информации, от атрибутов продукта до демографических данных, чтобы лучше обслуживать клиента).
Или вы даже можете прибегнуть к так называемому ИИ; можно построить нейронные сети, которые принимают все эти атрибуты продукта и пытаются (на основе предыдущих наблюдений) связать его с другими и обновить себя.
Сочетание любого из этих случаев может сработать для вас.
Я бы лично рекомендовал подумать о том, как вы хотите, чтобы алгоритм работал, и как предлагать сопутствующие «продукты». Затем вы можете изучить все варианты: от простого до сложного и сбалансировать свои потребности.
Алгоритмы рекомендуемых продуктов — это огромный бизнес в наши дни. Например, NetFlix предлагает 100 000 лишь за незначительное повышение точности своего алгоритма.
Как вы уже поняли из ответов, и действительно, как вы предполагаете, это большая и сложная тема. Я не могу дать вам ответ, по крайней мере ничего из того, что уже было сказано, но я укажу вам на пару отличных книг по теме:
Programming CI: http://oreilly.com/catalog/9780596529321/ — довольно мягкое введение в образцы на Python.
CI в действии: http://www.manning.com/alag выглядит более подробно ( но я только что прочитал первую главу или 2), и у меня есть примеры на Java.
Я думаю, что поиск в Google по методу наименьшей среднеквадратичной регрессии (или что-то в этом роде) может дать вам пищу для размышлений.
Я думаю, что большинство полезных советов уже было предложено, но я подумал, что просто напишу, как я это сделаю, просто подумав, поскольку я ничего подобного не делал.
Сначала я бы нашел, где в приложении я буду использовать данные, которые будут использоваться, поэтому, если у меня есть магазин, он, вероятно, будет в кассе. Затем я бы сохранил связь между каждым товаром в корзине.
теперь, если пользователь переходит на страницу элементов, я могу подсчитать количество отношений с другими элементами и выбрать, например, 5 элементов с наибольшим количеством отношений с выбранным элементом.
Я знаю, что это просто, и, вероятно, есть лучшие способы.
Но я надеюсь, что это поможет
Анализ потребительской корзины — это область исследования, которую вы ищете:
Microsoft предлагает два подходящих алгоритма со своим сервером анализа: Алгоритм ассоциации Microsoft Алгоритм деревьев решений Microsoft
Ознакомьтесь с этой статьей msdn, чтобы узнать, как лучше всего использовать службы Analysis Services для решения этой проблемы.
существует рекомендательная платформа Certona, созданная amazon. Она может оказаться полезной. Она используется такими компаниями, как B&Q и Screwfix. Дополнительную информацию см. на сайте www.certona.com/.