ИИ-персонализация в e-commerce: как это выглядит в реальной инженерии
Мы строили системы персонализации с нуля и встраивали их в уже работающие стеки. Честная версия выглядит гораздо грязнее, чем любое демо: cold start, компромиссы по задержке, обучающие данные, которые не совпадают с реальным контекстом выдачи. Проблемы реальные и нетривиальные. Вот что мы из этого вынесли.
Упрощённый пайплайн персонализации. На каждом переходе — от сбора событий до feature store, от модели до serving API — своя задержка и свежесть. Разрыв между «данные собраны» и «рекомендация выдана» обычно больше, чем ожидает команда.
Cold start — это не крайний случай
Мы постоянно видим, как команды относятся к cold start как к сноске. Зря. На большинстве e-commerce магазинов от 40 до 60% сессий принадлежат пользователям, которых система никогда не видела. Добавьте запуски новых товаров и обновление каталога — и вы регулярно отдаёте рекомендации по позициям вообще без истории покупок. У модели не «мало данных» — у неё активно вводящее в заблуждение отсутствие сигнала.
Стратегия fallback важнее, чем принято думать. Вернуть глобальные бестселлеры — это пол, не ответ. Мы получали лучшие результаты, добавляя аффинитет к категории из текущей сессии, источник перехода и — где удаётся получить быстро — раннее поведение в первых нескольких просмотрах. Это не эффектная инженерия, но она двигает цифры.
Инференс на каждый запрос не работает
Виджет рекомендаций, добавляющий 400 мс к загрузке страницы, съест больше конверсии, чем персонализация вернёт. Слой выдачи должен быть быстрым — мы целимся в менее 50 мс на p99. Это почти всегда означает предвычисленные рекомендации из кеша, а не live-инференс.
Значит, ваши рекомендации настолько свежи, насколько свеж последний батч-прогон. Для большинства кейсов — карусели на главной, сортировка категорийных страниц, email-кампании — лаг 15 минут или даже час вполне приемлем. Всё ломается с real-time сигналами: человек только что бросил корзину или только что купил и вы хотите сразу предложить апселл. Вот здесь нужен гибридный подход — и именно там живёт большая часть сложности реализации.
Коллаборативная фильтрация против embedding-моделей
Коллаборативная фильтрация («пользователи, купившие X, также купили Y») — правильная отправная точка для магазинов с плотными данными о покупках. Хорошо изучена, несложна в реализации, реально работает. Разваливается на разреженных каталогах, товарах с единичными покупками и всём сезонном.
Embedding-модели — Two-Tower и BERT4Rec — это архитектуры, которые мы используем чаще всего — лучше справляются с разреженными данными, потому что кодируют атрибуты товаров, а не опираются только на историю совместных покупок. Новые товары получают нормальные рекомендации с первого дня. Обратная сторона: дороже обучать, сложнее отлаживать, требуют больше инфраструктуры. Универсального ответа, что выбрать, нет. Зависит от размера каталога, объёма сессий и, честно говоря, ML-опыта команды.
Откуда реально берётся прирост
Наибольший вклад дают сортировка главной и категорийных страниц — когда товары, которые пользователь скорее купит, оказываются вверху списка. На втором месте триггерные письма: брошенная корзина, post-purchase, browse abandonment. Виджеты «Похожие товары» на страницах товаров — самая заметная функция персонализации и обычно первое, что строит команда, — но по нашему опыту прямой эффект на конверсию у них скромный. Дискавери реален, но его сложнее атрибутировать.
Если строите впервые — не пытайтесь сделать всё сразу. Сначала нормально инструментируйте сессии. Стройте поведенческие когорты. Выкатывайте рекомендации на основе популярности и измеряйте их. Добавляйте коллаборативную фильтрацию, когда пайплайн устоится. Каждая команда, которую мы видели, пытавшаяся сразу прыгнуть на ML-слой, в итоге возвращалась и переделывала data plumbing.
Режимы отказа, которые мы видим чаще всего
Паттерн, который повторяется: система персонализации нормально работает на staging и показывает нулевые результаты в продакшне. В девяти случаях из десяти обучающие данные не совпадают с контекстом выдачи. Модель обучалась на авторизованных сессиях, а трафик преимущественно анонимный. Или пайплайн признаков лагает настолько, что «персонализированные» рекомендации к моменту выдачи уже протухли — по сути случайные.
Второй по частоте: нет holdout-группы. Нельзя понять, помогает ли персонализация, если никогда не запускали её против контроля. Мы аудировали магазины, где виджет рекомендаций работал больше года без A/B-фреймворка — и никто не мог сказать, приносит ли он хоть что-то. Настройте измерение до того, как начнёте оптимизировать.
Следующий шаг
Работаете над сложной commerce-системой?
Мы помогаем инженерным командам проектировать, строить и масштабировать высоконагруженные платформы — с чётким процессом и предсказуемыми сроками.
Поговорим