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