Как предложить клиенту самое нужное: создаем рекомендательную систему для бизнеса

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

Мы рассмотрим развертывание рекомендательной системы, созданной компанией GlowByte.

Коротко о компании:

GlowByte — крупнейший поставщик BI и Big Data решений в России. Компания занимается клиентской, финансовой, производственной аналитикой, внедрением инструментов Business Intelligence, технологий Big Data. Среди клиентов - крупные банки, ритейлеры, FMCG, производственные и телекоммуникационные компании. В своих решениях Glowbyte использует ML-методы и Deep Learning, создает прогнозные модели, решает сложные задачи математической оптимизации.

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

Об инструментах

Для разработки рекомендательной системы сначала нужно подобрать инфраструктуру. Кто-то выбирает «железо», кто-то облачные ресурсы. Если вести разработку в облаке, можно уменьшить риск ошибок при расчёте сайзинга, избежать потерь времени на закупку, доставку, обслуживание оборудования и установку прикладного ПО. Облачное развёртывание дает возможность быстрого ап- и даунскейлинга при повышении или уменьшении нагрузок и позволяет экспериментировать с технологиями, применять широкий набор облачных сервисов, быстро проверять гипотезы и выводить модели в продакшн.

Мы будем разворачивать в Yandex DataSphere — облачной среде для ML-разработки. В инструкции будем использовать синтетические входные данные, вам потребуется собственная информация о товарах, клиентах и их покупках. Примеры кода решения есть в ноутбуке от GlowByte. Мы будем создавать выборку данных, обучать модель и формировать рекомендации.

Для работы нужен аккаунт в Yandex Cloud и установленный и настроенный интерфейс командной строки.

Шаг 1: Создание проекта в DataSphere и загрузка данных

Для начала нам потребуются новый проект в Yandex DataSphere и данные. Нам будут нужны истории корзин покупателей, характеристики товаров, характеристики торговых точек, внешние данные (погода, макроэкономические данные).

Чтобы создать проект, открываем консоль Yandex Cloud, переходим в рабочий каталог, нажимаем кнопку «Создать ресурс» и выбираем DataSphere. В открывшемся окне зададим имя и описание проекта. Также мы можем создать новый сервисный аккаунт, чтобы в дальнейшем использовать его при обращении к ресурсам Yandex Cloud через API.

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

Шаг 2: Подготовка данных для обучения модели

Рекомендательную систему мы построим на решении задачи классификации: принадлежит товар данной корзине или не принадлежит. Поэтому для обучения модели нужно получить два вида записей, извлеченных из истории корзин. Позитивная запись содержит случайный товар, исключенный из корзины, а негативная – случайный товар, не находившийся в корзине. Это поможет различать товары, которые стоит и не стоит помещать в корзину. Затем мы обогащаем каждую полученную запись контекстом: характеристиками магазина, временными характеристиками и внешними данными. Код этих этапов формирования датасета для обучения модели можно посмотреть в представленном выше ноутбуке.

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

Например, так выглядит загруженный ноутбук с подготовкой данных и формированием позитивных и негативных корзин:

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

Реализация SVD-разложения и методов обучения модели:

Так мы сможем определить меру сходства целевого товара и товаров из конкретной корзины.

Чтобы получить персональные рекомендации для клиентов, используем так называемые вычисляемые RFM-агрегаты каждого товара: recency (как давно покупали товар), frequency (как часто покупают товар), monetary (сколько каждый клиент потратил на этот товар). Рассчитанные агрегаты также станут предикторами прогнозной модели. Детально код этого этапа можно посмотреть в ноутбуке, представленном в начале статьи.

Вычисление RFM-агрегатов:

Таким образом мы подготовили датасет, на котором будем решать задачу.

Шаг 3: Обучение модели

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

У нас были представлены две модели: для клиентов с историей и без.

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

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

Следующий важный этап — оценка качества разработанных моделей. Специалисты GlowByte считают, что она должна проходить в два этапа. Во-первых, нужно оценить точность прогнозирования принадлежности товара к корзине. Во-вторых, протестировать эффект от «боевого внедрения» рекомендаций. В нашем случае первый этап проводится на исторических данных при помощи различных метрик оценки качества решения задачи классификации. Второй этап можно реализовать при помощи тщательного проектирования и проведения A/B-теста.

Шаг 4: Деплой модели и обработка внешних запросов

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

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

Выполним код ноутбука и закрепим чек-пойнт с деплоем. Для этого перейдем в раздел Checkpoints, выберем нужный, нажмем Pin и назовем чек-пойнт deploy.

Затем выбираем ячейку, которую нужно развернуть и в контекстном меню кликаем Deploy selected cell. Аналогично называем ее deploy, выбираем чек-пойнт, который мы для нее сохранили ранее, и описываем ее входные и выходные переменные.

Проверим, что наша ячейка активна. Перейдем в раздел Nodes, выберем ячейку deploy и скопируем id ячейки, который необходимо указать в запросе:

Теперь сделаем внешний запрос. Для этого мы воспользуемся сервисом REQBIN. Вы можете вместо REQBIN воспользоваться любым HTTP-клиентом, позволяющим отправлять запросы с параметрами, например, Postman.

Адрес по которому мы будем делать POST-запрос: https://datasphere.api.cloud.yandex.net/datasphere/v1/nodes/<node_id>:execute, где <node_id> нужно заменить на ранее скопированный id ячейки deploy. Аутентифицироваться будем с помощью IAM-токена, который можно получить несколькими способами в зависимости от вашего типа аккаунта, например с использованием CLI Yandex Cloud. Вводим токен в разделе Authorization. В разделе контента выбираем JSON и вводим:

{"folder_id","b1XXXXXXXXXXXXXXi", "input":{ "input_data": {"user_id": 290000000, "created_at" : "2021-04-24T18-25:43.511Z", "store_id" : 742, "slot_num" : 5, "session_id" : "qwe-123-asd", "items" : [{ "name" : "dish_1", "code" : 13, }, { "name" : "dish_2", "code" : 77, }, { "name" : "dish_3", "code" : 39, }] } } }

В качестве folder_id здесь используется id каталога, в котором развернут проект в DataSphere, а input_data будет зависеть от структуры и состава ваших данных и содержать список из нескольких товаров, уже попавших в корзину ранее. Мы будем использовать структуру, аналогичную описанной в ноутбуке deploy, и вы можете таким же образом организовать обработку запросов:

Нажимаем Send в REQBIN и получаем JSON с ответом нашей рекомендательной системы, которая на основании составленной покупателем корзины предложила 5 подходящих товаров. В нашем случае это товары с id 4, 5, 6, 62 и 58.

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

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

Подписывайтесь на блог Yandex Cloud, чтобы узнавать еще больше новостей и историй об IT и бизнесе.

Другие истории, которые активно читают наши подписчики:

0
Комментарии
-3 комментариев
Раскрывать всегда