Что такое рекомендательная система
Задача рекомендательной системы формулируется просто: из каталога в десятки или сотни тысяч SKU выбрать 4–12 позиций, которые стоит показать конкретному пользователю в конкретном месте страницы. Всё остальное — детали реализации этого отбора.
Формально система оценивает функцию релевантности:
score(user, item, context) → вещественное число
user — профиль: история просмотров, покупок, аффинити к брендам и ценам
item — товар: атрибуты из фида, статистика взаимодействий, наличие
context — место размещения, текущая категория, устройство, товар-якорь
Дальше кандидаты сортируются по скору, из них вычитаются недоступные и запрещённые правилами позиции, и верхние N попадают в рекомендательный виджет.
Важное следствие: рекомендательная система — не одна модель, а конвейер. Смена алгоритма меняет качество на единицы процентов, а починка фида или добавление фильтра по наличию — на десятки.
Классы алгоритмов
| Класс | На чём строится | Сильная сторона | Ограничение |
|---|---|---|---|
| Коллаборативная фильтрация | Матрица «пользователь × товар» | Находит неочевидные связи между товарами | Не работает для новых товаров и пользователей |
| Контентная фильтрация | Атрибуты и текстовые описания товаров | Работает с первого дня жизни SKU | Замыкает выдачу в узком круге похожих позиций |
| Матричная факторизация | Разложение матрицы взаимодействий на латентные факторы | Компактность, устойчивость к разреженности | Не учитывает контекст и последовательность |
| Векторные модели (эмбеддинги) | Векторы товаров, обученные на последовательностях | Схожесть по реальному поведению, а не по описанию | Требует объёма данных и регулярного переобучения |
| Two-tower | Отдельные энкодеры пользователя и товара | Быстрый поиск кандидатов по вектору | Сложность обучения и инфраструктуры |
| Гибридные | Взвешенная комбинация нескольких источников | Устойчивость на всех сегментах трафика | Сложнее отлаживать и объяснять |
Коллаборативная фильтрация остаётся базовым классом для магазинов с накопленной историей. Content-based фильтрация обязательна там, где ассортимент быстро обновляется — fashion, книги, сезонные категории. Матричная факторизация и Item2Vec дают компактное векторное представление товаров, а two-tower модель отдельно кодирует пользователя и товар, что позволяет искать кандидатов приближённым поиском ближайших соседей.
Архитектура: кандидаты и переранжирование
Считать тяжёлую модель для каждого товара каталога на каждый запрос невозможно — бюджет ответа обычно измеряется десятками миллисекунд. Поэтому промышленные системы разделены на две стадии.
Каталог (100 000+ SKU)
│
▼ Стадия 1: генерация кандидатов (~5–15 мс)
лёгкие источники: co-visit, векторный поиск, бестселлеры категории,
история пользователя, правила категорийного менеджера
│
▼ 200–500 кандидатов
▼ Стадия 2: переранжирование (~10–30 мс)
тяжёлая модель + бизнес-логика:
маржинальность, наличие, дедупликация брендов, разнообразие
│
▼ Стадия 3: пост-обработка
мерчандайзинговые правила, фиксированные позиции, исключения
│
▼ 4–12 товаров в виджете
Переранжирование — то место, где алгоритмическая релевантность встречается с бизнес-требованиями. Именно здесь ограничивается доля одного бренда в выдаче, поднимаются товары с высокой маржой и вычищаются позиции, которых нет на складе.
Разделение на стадии полезно и организационно: смена модели переранжирования не требует перестройки источников кандидатов, а добавление нового источника не ломает существующее ранжирование. Это позволяет улучшать систему инкрементально.
Метрики: оффлайн и онлайн
Оффлайн-метрики считаются на исторических данных: модель предсказывает, с чем пользователь взаимодействовал в отложенном периоде, и предсказание сравнивается с фактом.
| Метрика | Что измеряет | Зачем нужна |
|---|---|---|
| Precision@k | Доля релевантных среди k выданных | Точность короткой выдачи |
| Recall@k | Доля найденных релевантных из всех релевантных | Полнота охвата интересов |
| NDCG | Качество порядка с учётом позиции | Учитывает, что верхние позиции важнее |
| Coverage | Доля каталога, попадающая в рекомендации | Защита от вырождения в топ-100 бестселлеров |
| Diversity | Разнородность выдачи внутри блока | Защита от «10 почти одинаковых футболок» |
| Novelty | Доля товаров, неизвестных пользователю | Баланс между узнаваемым и новым |
Онлайн-метрики считаются в A/B-тесте на живом трафике и имеют приоритет при любом расхождении:
| Метрика | Как считается | Комментарий |
|---|---|---|
| CTR виджета | Клики / показы виджета | Быстрая, но не связана с деньгами напрямую |
| CR из виджета | Заказы с товаром из виджета / показы | Ближе к результату, чувствительна к атрибуции |
| RPV | Выручка / уникальных посетителей | Основная метрика для сравнения стратегий |
| Атрибутированная выручка | Выручка с товаров, взаимодействовавших с рекомендациями | Зависит от окна атрибуции — фиксируйте его заранее |
Хорошая оффлайн-метрика при плохом онлайн-результате — обычное дело. Оффлайн-оценка вознаграждает предсказание того, что пользователь и так бы нашёл; бизнесу нужен инкремент, который виден только в сравнении с контрольной группой. NDCG и точность с полнотой помогают отсеять заведомо слабые модели, но решение принимается по A/B-тесту.
Холодный старт и фолбэки
Холодный старт — не редкий сбой, а постоянное состояние части трафика. В типовом интернет-магазине заметная доля сессий приходится на посетителей без истории.
| Тип холодного старта | Решение |
|---|---|
| Новый пользователь | Сессионные рекомендации по текущему визиту, популярное в категории входа, тренды |
| Новый товар | Контентные признаки: бренд, категория, ценовой сегмент, текстовое описание |
| Новый проект | Неперсональные стратегии + имплицитные сигналы с первых дней сбора |
| Редкая категория | Агрегация статистики на уровень родительской категории |
Обязательное требование к продакшену — детерминированный фолбэк. Если персональная стратегия вернула меньше позиций, чем нужно виджету, блок должен добираться бестселлерами, а не схлопываться в пустоту.
Карта раздела: где что применяется
| Место размещения | Типовая стратегия | Основная метрика |
|---|---|---|
| Главная страница | Персональные рекомендации, тренды, недавно просмотренные | RPV сессии |
| Листинг категории | Персональная сортировка, промоблоки | CR категории |
| Карточка товара | Похожие товары, аксессуары | CTR, глубина просмотра |
| Корзина | Часто покупают вместе | AOV |
| Постпродажный экран | Сопутствующие и расходники | Повторные заказы |
| Поиск с нулевым результатом | Контентные похожие товары | Спасённые сессии |
Смежные термины: стратегия рекомендаций описывает конфигурацию алгоритма для конкретного места, персональные рекомендации — частный случай подбора с учётом профиля, эмбеддинги и приближённый поиск ближайших соседей — техническая основа векторных стратегий.
Типичные ошибки
- Оптимизация CTR вместо выручки. Блок «вы недавно смотрели» почти всегда выигрывает по CTR и почти никогда — по инкрементальной выручке: пользователь и так вернулся бы к этому товару.
- Отсутствие фильтра по наличию. Рекомендация недоступного товара стоит дороже, чем отсутствие рекомендации.
- Сравнение стратегий без A/B-теста. Последовательное включение стратегий по неделям смешивает эффект с сезонностью.
- Игнорирование разнообразия. Выдача из десяти вариантов одной модели формально релевантна и бесполезна.
- Один алгоритм на все места размещения. Логика подбора в корзине и на главной различается принципиально.
- Отсутствие переобучения. Модель, обученная на прошлогоднем ассортименте, деградирует незаметно — контролируйте покрытие каталога и долю рекомендаций из свежих поступлений.