Рекомендательные системы: что это, зачем нужно и как создать собственную в Yandex Cloud

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

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

Рекомендательные системы имеют широкую область применения и назначение, поэтому их можно подразделять на группы по различным параметрам: предмету, цели, источнику рекомендации, пользовательскому контексту и степени персонализации. Например, цель систем, которые рекомендуют фильмы, книги, новости и другой контент — привлечь пользователя к потреблению новой информации на конкретной платформе. В этом случае предложение контента основано не только на контексте действий самого пользователя, но и на новизне информации, оценках экспертов и популярности у других пользователей. Иначе работают системы, которые советуют купить товары повседневного спроса. Их задача — не только предложить новые продукты, исходя из контекста действий пользователей, но и напомнить о часто покупаемых товарах при наличии истории покупок. Основная цель — повысить средний чек и лояльность покупателя.

От поставленных целей и необходимых характеристик зависит выбор методов реализации.

Существует два больших направления: контентно‑ориентированная и коллаборативная фильтрация.

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

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

Для разработки рекомендательной системы сначала нужно определиться с инфраструктурой. Выбор оборудования индивидуален и зависит от наличия у вас «железа» или облачных ресурсов. Также нужно учесть время и трудозатраты на развертывание системы.

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

Создание собственной рекомендательной системы в Yandex DataSphere

В инструкции мы развернем в Yandex DataSphere рекомендательную систему, разработанную компанией GlowByte — крупнейшим поставщиком решений BI и Big Data в России. Индивидуальные предложения для корзины покупателя будут учитывать как контекст ситуации, так и историю покупок.

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

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

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

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

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

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

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

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

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

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

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

recommender-system-3.png

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

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

recommender-system-4.png

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

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

Вычисление этих агрегатов вынесено в отдельный ноутбук:

recommender-system-5.png

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

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

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

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

recommender-system-6.png

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

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

recommender-system-7.png

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

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

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

recommender-system-8.png

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

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

recommender-system-9.png

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

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

recommender-system-10.png

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

Адрес по которому мы будем делать 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, а вы можете организовать обработку запросов похожим образом:

recommender-system-10.png

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

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

Напишите нам

Начать пользоваться Yandex Cloud

Тарифы

Узнать цены и рассчитать стоимость

Мероприятия

Календарь событий Yandex Cloud
Рекомендательные системы: что это, зачем нужно и как создать собственную в Yandex Cloud
Войдите, чтобы сохранить пост