1 Что нужно, чтобы переиспользовать этот опыт в персонализации других продуктов Agenda 2 3 Как мы перенесли онлайн персонализацию в рекомендации «С этим товаром покупают»
запросу ◦ по категории ◦ по размеру/бренду/цвету/… • Сортировка: ◦ «Подобрано для вас» ◦ по цене/скидкам/новинкам • Пагинация: возможность посмотреть тысячи товаров ~8M авторизованных пользователей ~600К доступных товаров 95% пользователей смотрят < 120 товаров
Ручное управление и бизнес-правила Формула на данных ML подход ML персонализация под пользователя Развитие персонализации Отсутствие персонализации 1-to-many (на уровне сегментов) 1-to-1 (персонализация под каждого клиента)
в оффлайне и сохраняет результат] Онлайн персонализация [модель запускается в момент запроса пользователя] Нет ограничения на время инференса модели Скорость получения ответа пользователем
в оффлайне и сохраняет результат] Онлайн персонализация [модель запускается в момент запроса пользователя] Нет ограничения на время инференса модели Скорость получения ответа пользователем Много ресурсов для расчета и хранения результатов модели Возможность учесть горячий контекст пользователя
в оффлайне и сохраняет результат] Онлайн персонализация [модель запускается в момент запроса пользователя] Нет ограничения на время инференса модели Скорость получения ответа пользователем Много ресурсов для расчета и хранения результатов модели Возможность учесть горячий контекст пользователя
Уровень 1. Отбор кандидатов: Популярное + Легкое перс ранжирование на function_score Уровень 2. Тяжелое ранжирование в момент запроса с учетом контекста
Уровень 1. Отбор кандидатов: Популярное + Легкое перс ранжирование на function_score Уровень 2. Тяжелое ранжирование в момент запроса с учетом контекста
10.000 товаров Сервис Reranker Elasticsearch LTR Plugin + Решение “из коробки” - Нужна экспертиза в Java - Недостаточно гибко (разнообразие, пост-процессинг) + Есть экспертиза в Golang + Гибко (user-item фичи, CatBoost, пост-процессинг) + Можно использовать не только с ElasticSearch кандидатами - Требуется собственная разработка и поддержка
предпочтения - Товарные признаки для каждого кандидата - Вычисление парных user-item признаков - Инференс CatBoost модели Топ-N кандидатов Обновление 1 раз в сутки 1 2 Фильтрация + 1 уровень: генерация кандидатов Batch Features Calculation Model training
товарных и кросс признаков • Логика обучения модели: ◦ Обучаемся на показах, целевое действие: добавление в корзину ◦ Офлайн-метрика: NDCG@60, Модель: CatBoost, Loss: YetiRank Обучение модели 2-го уровня 21
товарных и кросс признаков • Логика обучения модели: ◦ Обучаемся на показах, целевое действие: добавление в корзину ◦ Офлайн-метрика: NDCG@60, Модель: CatBoost, Loss: YetiRank • Feature importance: Обучение модели 2-го уровня 15 5 5 12 Предпочтение к бренду 4 8 CR из показа в добавление в корзину (60 дней) Предпочтение к цвету CR из показа в клик (60 дней) Предпочтение к размеру Цена товара 22
кандидатов) - Добавления в корзину: +1% - Покупки: +1% Эксперимент 2 С моделью 2-го уровня (топ-300 кандидатов + рост покрытия) - Добавления в корзину: +3% - Покупки: +2%
в ElasticSearch • Пользователь • Товар • Контекст Рекомендации на странице товара Кандидаты из моделей первого уровня • Пользователь • Товар • Контекст + Якорный sku Рекламная платформа Индекс рекламных товаров в ElasticSearch • Пользователь • Товар • Контекст + Инфо по рекламодателю
в ElasticSearch • Пользователь • Товар • Контекст Показы в каталоге Рекомендации на странице товара Кандидаты из моделей первого уровня • Пользователь • Товар • Контекст + Якорный sku Показы в рекомендациях Рекламная платформа Индекс рекламных товаров в ElasticSearch • Пользователь • Товар • Контекст + Инфо по рекламодателю Показы в рекламной платформе/каталоге
в ElasticSearch • Пользователь • Товар • Контекст Показы в каталоге Рекомендации на странице товара Кандидаты из моделей первого уровня + Пользователь + Товар + Контекст + Якорный sku Показы в рекомендациях Рекламная платформа Индекс рекламных товаров в ElasticSearch • Пользователь • Товар • Контекст + Инфо по рекламодателю Показы в рекламной платформе/каталоге Можно параметризовать подход к онлайн персонализации!
сервис инференса модели Пайплайн подготовки данных Пайплайн обучения модели • Python-библиотека и инструмент для единообразного конфигурирования и запуска ML-пайплайнов с обучением • Единый формат хранения событий кликстрима • Единый формат хранения фичей / трейн датасетов
кода в каждой команде API создания и управления реранкера (template сервиса) API Библиотека на go с методами реранкера Универсальный сервис инференса модели
кэш Запрос источников данных Параллельно Aerospike Redis Postgres Бинарь модели Конфиг с описанием источников фичей и их преобразований etcd S3 Актуальная версия модели на данный момент
кэш Запрос источников данных Формирование комбо-фичей Параллельно Aerospike Redis Postgres Бинарь модели Конфиг с описанием источников фичей и их преобразований etcd S3 Актуальная версия модели на данный момент
кэш Запрос источников данных Формирование комбо-фичей Сортировка Запуск модели Параллельно Aerospike Redis Postgres Бинарь модели Конфиг с описанием источников фичей и их преобразований etcd S3 Актуальная версия модели на данный момент
кэш Запрос источников данных Формирование комбо-фичей Сортировка Запуск модели Параллельно Aerospike Redis Postgres Бинарь модели Конфиг с описанием источников фичей и их преобразований etcd S3 Актуальная версия модели на данный момент model_loader.go data_source_loader.go combiner.go runner.go
кэш Запрос источников данных Формирование комбо-фичей Сортировка Запуск модели Параллельно Aerospike Redis Postgres Бинарь модели Конфиг с описанием источников фичей и их преобразований etcd S3 Актуальная версия модели на данный момент model_loader.go data_source_loader.go combiner.go runner.go SLA: 250 мс, 300 RPS (выдерживаем 1000+ RPS)
кэш Запрос источников данных Формирование комбо-фичей Сортировка Запуск модели Параллельно Aerospike Redis Postgres Бинарь модели Конфиг с описанием источников фичей и их преобразований etcd S3 Актуальная версия модели на данный момент model_loader.go data_source_loader.go combiner.go runner.go SLA: 250 мс, 300 RPS (выдерживаем 1000+ RPS) Масштабирование: - По запросам - По кандидатам - По фичам
кэш Запрос источников данных Формирование комбо-фичей Сортировка Запуск модели Параллельно Aerospike Redis Postgres Бинарь модели Конфиг с описанием источников фичей и их преобразований etcd S3 Актуальная версия модели на данный момент model_loader.go data_source_loader.go combiner.go runner.go Асинхронная отправка логов работы Диверсификация
уровня baseline Берем модель 2-го уровня из ранжирования -6,5% Обучаем отдельную модель 2-го уровня на показах с полки рекомендаций +0,5% + добавляем факторы якорного товара +4,7% + добавляем парные факторы якорного товара и товара из рекомендация (счетчики совместных кликов/cart_add/order) +7,2% 56
поведенческие, так и бизнес метрики • Отдельный сервис с моделью второго уровня – рекомендуем • Рекомендуем разрабатывать универсальные ML решения для разных продуктов – и со стороны DS, и со стороны DEV • Планируем персонализировать Lamoda дальше, не прощаемся :) 60