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

Предложите, какой пользователь мог бы купить, если у него уже есть что-то в корзине

Я развиваю электронный магазин, где буду продавать еду. Я хочу иметь предложение, в котором я бы предложил, что еще мой пользователь может купить, исходя из того, что у него уже есть в корзине. Если у него есть пиво, я хочу, чтобы он предлагал чипсы и другие вещи, уменьшая вероятность того, что он его купит. Но я хочу, чтобы мой алгоритм научился предлагать продукты, основанные на предыдущих покупках всех пользователей. С чего начать? У меня есть таблица продуктов user_id, item_id, date и тому подобное. Как я могу сделать окно предложений без грубой силы, что невозможно.

4b9b3361

Ответ 1

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

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

Например:

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

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

Реально, я думаю, что это ваши варианты:

  • вручную поддерживать связанные продукты. Много времени, но вряд ли приведет к странности.
  • используйте готовое решение - либо SaaS, либо включить библиотеку типа R, которая поддерживает это.
  • рекомендовать (полу) случайные продукты. Имейте набор продуктов, которые вы хотите порекомендовать, и выберите их наугад - например, продукты по продвижению, продукты, которые входят в список "лучший продавец", продукты, стоимость которых меньше х. Исключить категории, которые могут быть проблематичными.

Все эти варианты достижимы в разумные сроки; проблема с построением правильного решения с нуля - это то, что все будут измерять его против Amazon, и у них есть немного начало вам...

Ответ 2

Это обычная проблема, решаемая алгоритмом Apriori Алгоритм интеллектуального анализа данных. Возможно, вам понадобится создать другую таблицу, которая поддерживает эту статистику, а затем предложит на основе предпочтительной комбинации

Ответ 3

Humm... вы ищете двигатель для рекомендаций по продукту, то... Ну, они приходят, в основном, в трех вариантах:

  • Совместная фильтрация
  • Фильтрация контента
  • Гибридные системы рекомендаций

    Первый собирает и хранит данные о действиях, настройках, поведении и т.д. ваших пользователей. Затем эти данные отправляются в механизм, который отделяет его от пользовательских каналов. У каждого канала есть определенные характерные симпатии и антипатии. Итак, когда у вас есть новый посетитель, он или она будут классифицированы и оценены определенным профилем пользователя. Затем элементы будут отображаться на основе этого профиля, нравится/не нравится.

    Теперь фильтрация на основе контента использует другой подход - менее социальный - с учетом ТОЛЬКО вашей предыдущей истории просмотра вашего пользователя, его предпочтений и действий. По сути, это создаст рекомендации, основанные на том, что этот пользователь ранее любил/покупал.

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

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

    Построение одного из них - непростая задача, поскольку я уверен, что вы уже знаете... но я настоятельно рекомендую эту книгу (используя фильтрацию персональной истории!), которая действительно наступила для меня в прошлом: http://www.amazon.com/Algorithms-Intelligent-Web-Haralambos-Marmanis/dp/1933988665

Удачи и хорошего обучения!

Ответ 4

Я думаю, что лучший подход - классифицировать ваши предметы и использовать эту информацию, чтобы сделать выбор.

Я сделал это на веб-сайте бакалеи, и результаты работали неплохо. Идея состоит в перекрестке элементов группы в несколько категорий.

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

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

Item         | Category
-------------+------------
Banana       | Breakfast
Banana       | Quick
Banana       | Fruit
Banana       | Healthy
Museli       | Breakfast
Museli       | Healthy
Sugar Puffs  | Breakfast
Sugar Puffs  | Treat
Kiwi Fruit   | Fruit
Kiwi Fruit   | Healtyh
Kiwi Fruit   | Dessert
Milk         | Breakfast

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

Давайте скажем, что в какой-то корзине есть бананы, музели и сахарные пуфы.

Это три пункта для завтрака, два здоровых, один не так много.

Предложите молоко, поскольку оно соответствует всем трем. Никакая импульсная покупка? Попробуйте еще раз, бросьте киви. и т.д. и т.д.

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

Ответ 5

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

  • Пиво, чипсы, сода
  • Пиво, сода
  • Сода, торт
  • Чипы, пиво
  • Торт, чипсы, пиво

Затем, если у вашего клиента есть Пиво на его тележке, основанный на ваших покупательских покупках, вы можете легко сделать запрос и увидеть, что связанные с пивом предметы:

  • Чипы (3 раза)
  • Сода (2 раза)
  • Торт (1 раз)

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

Ответ 6

Вам, вероятно, понравится Алгоритм факторизации неотрицательных матриц, он может делать именно то, что вы ищете (помимо того, что упоминал Невилл К). Таблица базы данных с купленными продуктами будет матрицей для факторизации. Одним из факторов будет матрица, в которой содержатся вещи, которые люди покупают вместе. Эта матрица будет намного меньше, чем матрица, где вы сравниваете каждый продуктовый магазин со всеми остальными. Он автоматически найдет "группы" бакалейных товаров, которые хорошо сочетаются, как и те категории, которые предлагает Fluffeh, вы найдете их автоматически. Шаги для выполнения:

  • Каждый день или неделя: запустите факторизацию в таблице купленных продуктовых магазинов, чтобы найти новые "тенденции". Сохраните матрицу факторов.
  • Если прибывает новая корзина для покупок: вызовите решателя с корзиной в качестве параметра, вы получите корзину, обогащенную продуктами, которые хорошо подходят. Предложите вещи, которых еще нет в корзине.

Кто-то уже упомянул Коллективный интеллект книги программирования. Это хорошее начало.

Ответ 8

Существует два основных способа:

  • Вручную связывать элементы в базе данных друг с другом (отнимает много времени, но гибко).
  • Автоматически определять, какие товары покупаются другими людьми на основе их прошлых покупок.

Похоже, вы склоняетесь к последнему. Я написал что-то подобное для сайта, который продает различные предметы и предлагает связанные элементы, основанные на прошлых покупках других клиентов. Вот запрос, который я использую:

SELECT items.*, COUNT( cartitems.itemid ) AS c FROM 
items
LEFT JOIN cartitems ON ( cartitems.itemid = items.id )
LEFT JOIN carts ON ( carts.id = cartitems.cartid )
WHERE (
    carts.id IN (
        /* Every cart with this item: */
        SELECT cartitems.cartid
        FROM cartitems
        WHERE ( cartitems.itemid = 123456 )
    )
        AND
    ( cartitems.itemid != 123456 ) /* Items other than this one */
        AND
    carts.checkedout = TRUE /* Carts that have checked out */
)
GROUP BY cartitems.itemid
ORDER BY c DESC
LIMIT 5

В этом примере предполагается, что элемент, на который они смотрят, имеет идентификатор 123456. Таблица "телеги" содержит прошлые покупки. Таблица "cartitems" содержит отдельные предметы, которые были приобретены в прошлом.

Ответ 9

В поисках значимого ответа на ваш вопрос я столкнулся с этим документом:

Модель отслеживания темы для анализа поведения потребительских покупок

Я прочитал только часть документа, но похоже, что это может быть теоретический ответ на ваш вопрос. Надеюсь, это поможет.

Ответ 10

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

это, если вы не хотите погружаться в сложность теоретического машинного интеллекта или сложных алгоритмов для кода.

у нас хороший день:)

Ответ 11

Я думаю, что лучший способ сделать это - "шаблон тегов". Например:

products Table:
=================================
product_id
product_name

tags Table:
=================================
tag_id
tag_name

tags_products Table:
=================================
id_product
id_tag

products registry example:
=================================
1 | Beer
2 | Chips
3 | Cake

tags registry example:
=================================
1 | beer
2 | chips
3 | cake

tags_products registry example:
=================================
1 | 2
1 | 3
2 | 1
2 | 3
3 | 1

Затем вы можете связать все, что хотите, и сделать запрос простым:)

Будьте счастливы.

Grettings.

Ответ 12

Как и все выше сказанное, ключ к выполнению этой работы - реализовать

'x users' также купил 'y item'

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

Вам нужны новые таблицы, например:

  • Таблица друзей (свяжет user_ID вместе, чтобы сформировать "друзей" )
  • Как и таблица (свяжет таблицу друзей и таблицу продуктов для продуктов соответствия)
  • Таблица статистики (будет привязана к таблице Like и Table)

Вам также потребуется обновить существующие таблицы с дополнительными столбцами, например:

  • Product_table со средним_отражением (0-5/0-10/0-100 или как 0/1) на продукт

Если пользователь x и пользователь y являются друзьями, они будут иметь свой ID, сопоставляемый в таблице друзей. В таблице Like будет использован продукт, в котором два пользователя являются друзьями и как product z: (рейтинг 0-5/0-10/0-100; 0/1) вы определяете, какой метод.

Когда продукт нравится/оценивается, он будет иметь свой идентификатор с определенным рейтингом продукта с названием столбца, который обновляется с + X или -X в зависимости от его рейтинга или предпочтений. Вам также необходимо будет выбрать средний положительный результат, если продукт будет оценен или понравится. Пример будет 50% для рейтинга и 100 понравится.

Когда все это сделано, когда пользователь x продает продукты, вы можете найти, если:

  • Пользователь имеет друзей
  • Пользовательские друзья также покупают продукт y
  • что такое рейтинг друга/нравится для продукта y
  • которые другие пользователи пользователей x оценили по высокой цене или понравились
  • какие другие пользователи пользователь x друзья оценили как плохой или не понравились

Вы можете сделать гораздо больше, чем предлагать продукты. С небольшим усилием вы можете совершать горячие предложения для людей и их друзей. Новый продукт появляется на рынке, и его, как продукт z, только лучше. Если люди X и все их друзья любят продукт z, они, возможно, захотят и купят новый продукт.