YouTravel.me — маркетплейс авторских туров от тревел-экспертов и частных независимых гидов. На сайте представлено почти 40 000 уникальных предложений. Здесь можно легко и безопасно выбрать тур и отправиться в незабываемое путешествие в любую точку мира.
Проблема
Сегодня персонализация в ecommerce — это чаще всего блоки вроде «Вам понравится также», «С этим товаром покупают» или upsell-рекомендации в корзине. Да, такие решения проще и дешевле внедрить, но их эффективность оставляет желать лучшего. Пользователь не видит весь выбор, который мог бы его заинтересовать, не находит нужное и просто уходит. А вместе с ним — и деньги бизнеса.
Задача
Разработать систему рекомендаций, которая интегрируется во все листинги сайта и максимально учитывает интересы пользователей.
Такую продвинутую персонализацию мы планируем строить на основе машинного обучения и анализа данных — направлениях, в которых специализируется Epoch8.
Решение
Мы разработали стратегию персонализации, которая легко интегрируется на уровне пересортировки любых листингов с их собственной логикой формирования.
Вместо простого выдачи списка рекомендованных объектов через API, мы реализовали:
Именно такую стратегию мы внедрили на сайте YouTravel.
Вместо простого выдачи списка рекомендованных объектов через API, мы реализовали:
- сбор данных о ленивых просмотрах и других поведенческих факторах;
- пересортировку любого списка товаров под каждого клиента.
Именно такую стратегию мы внедрили на сайте YouTravel.
СБОР ДАННЫХ
Для работы персонализации важно собирать данные о действиях пользователя.
Совместно с YouTravel мы сделали систему по сбору информации о том:
Совместно с YouTravel мы сделали систему по сбору информации о том:
- что пользователь видел на странице;
- на что кликнул;
- куда перешел.
Команда YouTravel занималась доработкой фронтенда, а мы разработали серверную часть и обеспечили регулярную обработку данных.
«Ключевой момент в нашем сборе данных - это учет ленивых просмотров. В типичном трекинге сбор информации про просмотры без взаимодействия отсутствует. А нам важно знать, что пользователь видел вот эти 20 товаров, но ничего не выбрал и не совершил никакого действия. Эта информация необходима для статистики и для обучения ML-модели».
– Андрей Татаринов, генеральный директор Epoch8.
КАК ВСЕ УСТРОЕНО
Мы улучшили систему сбора данных как на стороне заказчика, так и на нашей. Теперь она фиксирует:
- ленивые просмотры,
- глубокие просмотры (например, открытие карточки товара),
- покупки.

ПРОЦЕССИНГ ДАННЫХ
Мы получаем данные с фронтенда и сохраняем их в два места:
От онлайн-профиля есть еще одна ветка данных. Сюда поступает поток событий с фронтенда, что позволяет поддерживать актуальное представление о пользователе в режиме реального времени.
- Долгосрочное хранилище — для переобучения модели и подсчета статистики.
- Онлайн-профиль — он предоставляет информацию о текущих предпочтениях пользователя и его поведении в реальном времени.
От онлайн-профиля есть еще одна ветка данных. Сюда поступает поток событий с фронтенда, что позволяет поддерживать актуальное представление о пользователе в режиме реального времени.

Наше API рекомендаций, построенное на основе ML-модели, исполняет ключевой метод — пересортировку списка товаров.
API обращается к онлайн-профилю, чтобы узнать свойства пользователя, для которого требуется пересортировка, и использует модель персонализации, находящуюся в памяти.
API обращается к онлайн-профилю, чтобы узнать свойства пользователя, для которого требуется пересортировка, и использует модель персонализации, находящуюся в памяти.
Этот онлайн-цикл обработки занимает всего полсекунды и происходит в режиме реального времени при взаимодействии пользователя с сайтом.
Есть также долгосрочный цикл. Ежечасно мы обрабатываем накопленную статистику, пересчитываем матрицы рекомендаций и обновляем модель в API. Это обеспечивает актуализацию предрасчитанных рекомендаций для каждого пользователя с регулярным интервалом около часа.
Общее решение выглядит так:
Есть также долгосрочный цикл. Ежечасно мы обрабатываем накопленную статистику, пересчитываем матрицы рекомендаций и обновляем модель в API. Это обеспечивает актуализацию предрасчитанных рекомендаций для каждого пользователя с регулярным интервалом около часа.
Общее решение выглядит так:

СТРАТЕГИИ РЕКОМЕНДАЦИЙ
Мы используем три стратегии для формирования рекомендаций, которые работают одновременно:
Каждая из этих стратегий помогает обеспечить релевантные рекомендации в разных сценариях взаимодействия пользователя с сайтом.
- Долгосрочный пользователь. Если пользователь находится на сайте более 30 минут, он уже участвует в ежечасном цикле переобучения.Поэтому мы пользуемся хорошо рассчитанным вектором свойств пользователя и делаем рекомендации. Они получаются самыми качественными.
- Недавно пришедший пользователь. Когда пользователь только начал взаимодействовать с сайтом, его поведенческие данные еще не вошли в расчет фичей. Однако, если он уже проявил интерес, например, кликнул на товар, мы строим рекомендации, основываясь на свойствах этого товара.
- Новый пользователь. Если пользователь только что зашел на сайт, и о нем пока ничего не известно, мы формируем рекомендации на основе статических данных: выбранного языка, региона, устройства и других общих характеристик.
Каждая из этих стратегий помогает обеспечить релевантные рекомендации в разных сценариях взаимодействия пользователя с сайтом.

РЕЗУЛЬТАТЫ
Сейчас наша стратегия интегрирована в часть листингов на сайте YouTravel, результаты такие:
Если средняя конверсия из показа в клик без рекомендаций — от 3% до 4,5%.
То у персонализированных предложений — от 6% до 9%.
За два месяца мы смогли добиться двукратного увеличения целевого действия. И это не предел!
Если средняя конверсия из показа в клик без рекомендаций — от 3% до 4,5%.
То у персонализированных предложений — от 6% до 9%.
За два месяца мы смогли добиться двукратного увеличения целевого действия. И это не предел!

ЧТО ДАЛЬШЕ?
Мы продолжаем развивать проект, уделяя особое внимание улучшению рекомендаций для новых пользователей, которые составляют значительную долю аудитории.
Чтобы сделать холодные рекомендации более точными, мы включаем в них больше статической информации. Например, начинаем учитывать:
Кроме того, расширяем учет следующих факторов:
Чтобы сделать холодные рекомендации более точными, мы включаем в них больше статической информации. Например, начинаем учитывать:
- рекламную кампанию, по которой пришел пользователь;
- текст объявления, анализируем его и интегрируем данные в рекомендации.
Кроме того, расширяем учет следующих факторов:
- лендинг, на который попал пользователь;
- модель устройства, с которого выполнен вход;
- язык сайта или браузера, установленный у пользователя;
- его геолокацию.
Технологии
- REST/GRPC
- Kafka/PG/HTTP push
- Prometheus Grafana
- Python/FastAPI
- GPU
- Python Airflow/Prefect
- Redis
- MLflow/S3/HDFS/Hive
- Pytorch/XGB
- Metabase/Superset/Tableau
- Jupiter