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

  • Электронная коммерция: создание рекомендаций и возможности поиска на веб-сайтах брендов
  • CRM: персонализированная электронная почта/директ-мейл-маркетинг
  • Цепочка поставок: прогнозирование спроса, планирование ассортимента
  • Акции/Распродажи: Комплектация товаров, упаковка, промо-предложения

Постановка задачи

Как узнать, какой набор рекомендуемых продуктов подходит для клиентской базы Walmart? Рекомендуемые продукты приводят к увеличению размера корзины и увеличению дохода. Но можем ли мы масштабировать курируемые модели рекомендаций по продуктам для всех отделов и находить возможности для перекрестных покупок? Создание масштабируемого решения может быть сложной задачей с точки зрения сложности, изменяющихся наборов данных реального мира и потребления памяти. Масштабируемый механизм рекомендаций по продуктам — это решение, которое требует компромисса между комбинацией продуктов и сложностью решения. В этом блоге мы будем описывать механизм рекомендаций продуктов на основе транзакций, который мы создали с помощью PySpark, чтобы преодолеть проблему сложности.

Подход к моделированию

Для поиска правильных наборов товарных рекомендаций разделим задачу на 5 шагов:

  1. Получение данных
  2. Предварительная обработка и фильтрация транзакций
  3. Построение модели ассоциации продуктов для поиска правил ассоциации
  4. Проверка вывода
  5. Решение для масштабирования для всех отделов

  1. Получение данных

Ecomm имеет несколько подразделений, таких как электроника, игрушки и сезонные товары, одежда, продукты питания и т. Д. В каждом подразделении есть свой отдел, который имеет категорию и подкатегории, связанные с ним. Мы извлекаем все данные о транзакциях для каждого отдела в течение фиксированного периода времени.

2. Предварительная обработка-

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

Фильтры основаны на 3 ключевых параметрах

  1. Поддерживать
  2. Цена
  3. Вклад GMV (валовая стоимость товаров)

Что такое поддержка, уверенность и подъем в продуктовой ассоциации Mining?

Поддержка: определяет, насколько часто во всех транзакциях используется набор элементов.

Надежность: определяет вероятность появления следствия в корзине при условии, что в корзине уже есть антецеденты.

Лифт: измеряет эффективность правила ассоциации при прогнозировании определенного результата по сравнению со случайным выбором.

Более высокие значения подъема указывают на более сильные ассоциации.

Начнем с фильтрации нерелевантных транзакций, связанных с одним продуктом.

Затем mминимальная и максимальная поддержка рассчитывается на основе распределения диапазона квантилей для подмножества транзакций и продуктов.

MinSupportпомогает удалить продукты, которые редко покупают. Пример: аксессуары для гольфа, электрические ножи.

MaxSupportудаляет продукты, которые обычно покупают для повседневных целей. Пример: кинза, помидоры.

Порог определяется минимальной ценой продукта и GMV, вносимым продуктом.

Первоначальные выводы правила ассоциации учитывают только частоту появления. Однако наша цель анализа корзины — не только найти часто встречающиеся товары, но и увеличить доход/прибыль. Следовательно, мы включаем фильтры по цене и GMV, чтобы включить такие элементы, как беговая дорожка и телевидение. На основе этих фильтров для моделирования выбирается конечное подмножество продуктов и транзакций.

3. Моделирование

Для анализа корзины использовались два подхода:

A) Рост FP:

FP Growth генерирует частые шаблоны из транзакционных данных без генерации кандидатов. Алгоритм распределенного роста FP PySpark ML используется поверх предварительно обработанных данных для поиска часто встречающихся пар элементов и правил ассоциации продуктов, настроенных MinSupport и MinConfidence параметры.

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

B) Вероятностный подход

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

Пример рекомендации: Продукт А, относящийся к категории: Кондиционер для волос, будет рекомендован вместе с Продуктом Б, принадлежащим к категории: Сыворотка для волос.

В целом, на основе обоих подходов подход, основанный на вероятности, был выбран как наиболее эффективное решение для всех отделов на основе 2 факторов:
1. Он учитывает только взаимосвязь между двумя отдельными элементами, тогда как анализ связанных правил (FPGrowth) учитывает многоэлементные отношения.
2. Поскольку мы исключаем взаимосвязь между несколькими предметами, затраты на вычисления сокращаются с O(n^n) до O(n), где n — среднее количество предметов для данной корзины.

4. Проверка вывода

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

Результаты проверки правил ассоциации за один месяц против 3 месяцев, мы наблюдаем больше уникальных запросов/антецедентов и правил за 3 месяца по сравнению с 1 месяцем:

5. Масштабирование

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

Суперотделы разделены в зависимости от объема транзакций и разнообразия каталогов. Рабочий процесс Airflow настроен для всех подразделений с разбивкой на подотделы для обработки анализа корзины за фиксированный период времени. Результаты вычисляются пакетами и объединяются в главную таблицу, которая сгруппирована по суперотделам. Приблизительно общее выполнение рабочего процесса занимает около 6 часов, чтобы охватить все 4 этапа моделирования.

Заключение

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

Благодарность

Рекомендации по продуктам с использованием анализа корзины используются в Walmart Global Tech. Этот механизм рекомендаций разработан совместно с Junhwan Choi. Особая благодарность Сруджане Каддевармут и Джонатану Сидху за эту инициативу и поддержку, Абину Абрахаму за вклад и поддержку, команде Data Venture за помощь в этом усилие.

Ресурсы

https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.ml.fpm.FPGrowth.html