🎯
E-commerce · Ozon

Ozon: как трансформер на 1.2B параметров поднял GMV на 14%

GMV вырос на 14% — это около 340 миллиардов рублей в годовом исчислении. Конверсия из главного экрана поднялась с 4.1% до 6.8%. Average order value — на 8% (модель лучше понимает, какие up-sell товары релевантны). CTR на основной ленте — рост на 31%. Для cold-start новых пользователей — самый драматичный эффект. Раньше первая покупка нового пользователя случалась в среднем через 12 дней после регистрации (на основе «общих популярных» товаров часто не находил нужное). С PRISM — 4 дня. Это в 3 раза быстрее монетизация нового пользователя. Контекстуальная модель показала интересный паттерн: «вечерние сессии» (после 21:00) дают в 1.8 раза больше конверсий на персональные подборки, чем «утренние» (до 12:00). Утром пользователи целеустремлённо ищут конкретные вещи, вечером — расслабленно листают и готовы к рекомендациям. Это поменяло маркетинговую стратегию push-уведомлений: «вечерние» подборки стали приоритетной коммуникацией.

+14%
GMV
4.1→6.8%
конверсия главной
12→4д
до первой покупки
28ms
p50 latency

Контекст

Ozon — вторая по обороту e-commerce площадка России после Wildberries: 220 миллионов товаров, 64 миллиона активных покупателей, 19 000 сотрудников. GMV за 2024 год — 2.4 триллиона рублей. Главный экран приложения видит 18 миллионов уникальных пользователей в день. Каждый раз, когда пользователь открывает приложение, главный экран собирается заново — это 18 миллионов персонализированных лент с 60 товарами в каждой = 1.08 миллиарда «карточек товаров» в день, и каждая должна быть релевантной.

Проблема

Прежняя система рекомендаций — collaborative filtering поверх матричной факторизации, работала с 2019 года. Стандартное «вам также понравится». Хорошо работает для часто покупающих пользователей с длинной историей. Для новых пользователей (50 000 регистраций в день) — cold start: рекомендуем «популярное на платформе» = одно и то же всем.

Главная боль — temporal mismatch. Если пользователь купил детский велосипед в апреле, система продолжала ему показывать велосипеды в августе («популярное в категории!»). А ему уже нужен школьный портфель — но система этого не понимает. Конверсия из главного экрана у Ozon была 4.1%, у конкурентов в зрелых рынках — 7-9%.

Вторая боль — отсутствие учёта контекста. День недели, время суток, погода в регионе пользователя, что он делал в приложении в последние 30 секунд — всё это игнорировалось. Утренний пользователь на работе ищет одно, вечерний дома — другое. Старая модель этого не различала.

Решение

Команда Ozon построила свою архитектуру под названием «PRISM» — Personalized Recommendation Inference at Scale Model. Это трансформер на 1.2 миллиарда параметров, обученный на 940 миллионах сессий пользователей. Архитектурно — это encoder-decoder, где encoder читает «всё, что мы знаем о пользователе» как длинную последовательность (история покупок, просмотров, поисков, кликов, лайков, добавлений в избранное — за всё время), а decoder генерирует ранжированный список ID товаров для следующего показа.

Ключевая инновация — сессионный contextual layer. Перед основным трансформером работает маленькая модель «здесь и сейчас» (LSTM, 18M параметров), которая смотрит на последние 30 секунд активности и формирует «короткое намерение» (например, «ищу подарок жене», «листает праздничные товары», «уточняет размер»). Это short-term intent feed в основной трансформер как additional context tokens.

Инфраструктурно — серьёзный challenge. PRISM считается 24/7 для 18M пользователей × 60 товаров = 1B inference в день. Команда оптимизировала через precomputation: основные эмбеддинги пользователя обновляются раз в час; «здесь и сейчас» — раз в сессию (5-30 секунд latency). Inference на специализированной NVIDIA H100 grid (140 GPU), latency p50 — 28 мс, p99 — 110 мс.

Результат

GMV вырос на 14% — это около 340 миллиардов рублей в годовом исчислении. Конверсия из главного экрана поднялась с 4.1% до 6.8%. Average order value — на 8% (модель лучше понимает, какие up-sell товары релевантны). CTR на основной ленте — рост на 31%.

Для cold-start новых пользователей — самый драматичный эффект. Раньше первая покупка нового пользователя случалась в среднем через 12 дней после регистрации (на основе «общих популярных» товаров часто не находил нужное). С PRISM — 4 дня. Это в 3 раза быстрее монетизация нового пользователя.

Контекстуальная модель показала интересный паттерн: «вечерние сессии» (после 21:00) дают в 1.8 раза больше конверсий на персональные подборки, чем «утренние» (до 12:00). Утром пользователи целеустремлённо ищут конкретные вещи, вечером — расслабленно листают и готовы к рекомендациям. Это поменяло маркетинговую стратегию push-уведомлений: «вечерние» подборки стали приоритетной коммуникацией.

Технологический стек
Custom 1.2B transformer (encoder-decoder)LSTM context layer (18M)PyTorch + TorchServeNVIDIA H100 ×140Redis (embeddings cache)Apache Kafka (event stream)ClickHouse (analytics)
Сроки
Прототип PRISM — 11 месяцев. A/B-тест на 5% трафика — ещё 3 месяца. Полная раскатка — 18 месяцев суммарно. Обучается каждые 4 часа на свежих сессиях.
Команда
73 человека: ML researchers (22), ML engineers (18), data engineers (12), MLOps (8), backend integration (8), product (5)

Уроки для индустрии

  1. Длинные последовательности (вся история пользователя) > выжимки. Трансформер сам решает что важно, не теряем сигнал на feature engineering.
  2. Short-term intent (последние 30 секунд) — отдельный слой. Без него рекомендации «лагают» по времени.
  3. Cold start решается через контекст: даже у нового юзера есть «вечер четверга, дождь, ищет подарок» — это уже немало.
  4. Precomputation базовых эмбеддингов + real-time intent дают p99 110мс. Без precomputation — невозможно.
  5. A/B-тест на 5% трафика 3 месяца — единственный способ доказать +14% GMV не случайностью. Stat-power матрицы для рекомендаций нужны больше, чем кажется.
← Кейсы