От данных к действиям: как мы создавали рекомендации на главной странице Uzum Market. ml.. ml. recsys.. ml. recsys. uzum.. ml. recsys. uzum. uzumtech.. ml. recsys. uzum. uzumtech. алгоритмы машинного обучения.. ml. recsys. uzum. uzumtech. алгоритмы машинного обучения. алгоритмы поиска.. ml. recsys. uzum. uzumtech. алгоритмы машинного обучения. алгоритмы поиска. рекомендательные системы.. ml. recsys. uzum. uzumtech. алгоритмы машинного обучения. алгоритмы поиска. рекомендательные системы. рекомендации.
От данных к действиям: как мы создавали рекомендации на главной странице Uzum Market - 1

Меня зовут Фарит, я ML-инженер в команде рекомендаций Uzum Market. Сегодня я расскажу, как мы с нуля разработали персональные рекомендации для главной страницы нашего маркетплейса. Мы разберем архитектуру системы, используемые алгоритмы и способы измерения успеха проекта.

От данных к действиям: как мы создавали рекомендации на главной странице Uzum Market - 2

Зачем нужны рекомендации?

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

  • повысить удобство навигации;

  • увеличить GMV (валовый объём продаж);

  • предвосхищать потребности пользователей, улучшая их опыт.

Наша цель — сделать процесс выбора максимально простым. Идеальные рекомендации подсказывают товары, которые пользователь, возможно, сам не подумал бы искать.

От идеи к реализации

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

Что у нас было в начале?

  1. Базовый алгоритм рекомендаций:

    1. Отбирались товары, которые купили больше N раз и с рейтингом выше 4,5.

    2. Вычислялся random_order и сортировался по возрастанию: random_order = random() * X - product_score(total_score).

    3. Генерировался product_score(total_score). В этом показателе учитывается:

      1. насколько товар далек от топ 20% по продажам (в штуках) за последние 30 дней;

      2. насколько товар далек от топ 20% по GMV за последние 30 дней;

      3. насколько товар далек от топ 60% по рейтингу и количеству оценок;

      4. буст категории;

      5. и др.

  2. Данные о действиях пользователей: клики, просмотры, добавления в корзину, покупки и другие данные.

  3. Инструменты:

    1. Apache Airflow;

    2. Хранилище данных на основе ClickHouse.

Архитектура системы рекомендаций

Мы выбрали многоступенчатую архитектуру, которая хорошо зарекомендовала себя в других компаниях. Она состоит в основном из трёх этапов:

  1. Генерирование кандидатов: сокращение набора товаров до нескольких сотен, потенциально интересных пользователю.

  2. Ранжирование: определение с помощью машинного обучения наиболее релевантных товаров.

  3. Постобработка: добавление бизнес-правил и фильтров для улучшения итогового списка.

От данных к действиям: как мы создавали рекомендации на главной странице Uzum Market - 3

Генерирование кандидатов

На этапе генерирования кандидатов мы отбирали товары с помощью нескольких подходов:

  • Коллаборативная фильтрация (I2I): товары, похожие на те, с которыми взаимодействовал пользователь.

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

  • Похожие товары, на которые пользователь кликал, но не добавлял в корзину.

Веса для взаимодействий

Чтобы учесть важность различных действий, мы присвоили им веса:

  • Показ товара: 0 — минимальный интерес.

  • Клик: 1 — слабый сигнал интереса.

  • Добавление в корзину: 2 — сильный сигнал намерения купить.

  • Покупка: 5 — подтвержденное действие, максимальный интерес.

От данных к действиям: как мы создавали рекомендации на главной странице Uzum Market - 4

Учёт длительности взаимодействий

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

Ранжирование

После отбора кандидатов нужно определить, какие товары наиболее релевантны конкретному пользователю. Для этого мы использовали CatBoostRanker, обученную с помощью алгоритма LambdaMART. Основной метрикой для обучения модели была nDCG@100 (в качестве позитивного сигнала мы выбрали заказ товара), которая учитывает как релевантность товара, так и его позицию в списке.

Признаки для ранжирования

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

  1. На основе взаимодействий:

    1. конверсии на уровне категорий за разные временные периоды;

    2. количество кликов, добавлений в корзину и покупок.

  2. Признаки товаров:

    1. рейтинг и количество отзывов.

    2. средняя цена и уровень скидки.

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

Топ-10 товаров до ранжирования и после

Топ-10 товаров до ранжирования и после

Постобработка

Даже лучшие модели не всегда выдают идеальный список рекомендаций. На этапе постобработки мы добавили правила:

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

  • Исключили товары, которые пользователь уже видел, но не выбрал.

  • Добавили популярные товары для новых пользователей.

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

Топ-10 товаров до постобработки и после

Топ-10 товаров до постобработки и после

Техническая архитектура системы

От данных к действиям: как мы создавали рекомендации на главной странице Uzum Market - 7

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

Основные компоненты:

  • Данные из Clickstream: собираются все действия пользователей на платформе: клики, просмотры, добавления в корзину и т. д. Эта информация является основой для дальнейшего анализа и feature engineering.

  • Apache Airflow: с помощью DAG’ов организовывается последовательность задач по трансформации и обработке данных. Airflow обеспечивает надежную и управляемую среду для автоматизации процессов.

  • Spark используется для масштабируемого анализа и обработки больших объёмов данных. С его помощью готовим наборы данных и генерируем признаки.

  • S3 служит хранилищем для обработанных данных и моделей. Это обеспечивает гибкость и масштабируемость хранения.

  • Kafka используется для передачи данных между компонентами системы. Это позволяет оперативно обновлять рекомендации по мере поступления новых данных.

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

И ещё немного про онлайн-рекомендации

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

Онлайн‑рекомендации формируются следующим способом:

  • у нас имеются данные о похожих товарах;

  • для каждого пользователя берутся последние K кликов по товарам;

  • для каждого из K товаров формируется список из N похожих товаров;

  • товары из этих списков вставляются на каждую M‑ую позицию по стратегии round‑robin (товары берутся по очереди из списков).

От данных к действиям: как мы создавали рекомендации на главной странице Uzum Market - 8

Как результат полка начала генерировать на 22,4% больше выручки. 

От данных к действиям: как мы создавали рекомендации на главной странице Uzum Market - 9

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

Заключение

Внедрение и развитие рекомендательных систем — очень интересный процесс. С момента начала бурного развития рекомендаций в Uzum Market наша команда принесла значительный эффект в увеличение общего ARPU по итогам запущенных A/B‑тестов и сейчас на рекомендации приходится 21% общей выручки маркетплейса. Помимо рекомендаций на главной странице, мы также развиваем персонализированные push‑уведомления, рекомендации на странице товара, в поиске и избранном.

Перед нами стоят ещё более сложные задачи и амбициозные цели, поэтому периодически мы ищем в нашу команду классных Senior ML‑инженеров (описание вакансии здесь — следите за нами и приходите пообщаться).

Оставайтесь на связи, подписывайтесь на блог компании — впереди ещё много интересного:)

Автор: HiGal

Источник

Rambler's Top100