Разработка модуля рекомендательной системы 1С-Битрикс
Блок «С этим товаром покупают» есть почти в каждом интернет-магазине, но реализован по-разному. Самый простой вариант — ручная привязка в административном интерфейсе — не масштабируется при каталоге от 1 000 позиций. Следующий уровень — «похожие по категории» — работает, но нерелевантен: покупатель мотоцикла видит другие мотоциклы, а не шлемы и перчатки, которые ему действительно нужны. Умная рекомендательная система анализирует поведение покупателей и подбирает товары, которые реально увеличивают средний чек.
Подходы и выбор алгоритма
Три основных подхода к рекомендациям, которые реально применяются в e-commerce на Битрикс:
Collaborative filtering (совместная фильтрация). «Пользователи, купившие X, также купили Y». Требует достаточной истории заказов — работает с каталогом от 500 позиций и объёмом заказов от 1 000/мес. Матрица «пользователь × товар» строится из b_sale_basket и b_sale_order.
Content-based filtering. Рекомендации по схожести характеристик товара: категория, бренд, теги, ценовой диапазон. Работает с первого дня без истории заказов.
Гибридный подход. Для новых товаров (нет истории покупок) используется content-based, для товаров с накопленной статистикой — collaborative. Это оптимальное решение для большинства магазинов.
Архитектура модуля
Сборщик данных. Агент раз в сутки собирает пары «товар A был куплен вместе с товаром B» из b_sale_basket (фильтр: один заказ, оба товара в корзине). Результат — матрица совместных покупок в таблице myvendor_rec_cooc:
CREATE TABLE myvendor_rec_cooc (
product_a INT NOT NULL,
product_b INT NOT NULL,
score FLOAT NOT NULL, -- нормализованный коэффициент
updated_at TIMESTAMP,
PRIMARY KEY (product_a, product_b)
);
Нормализация score: используется метрика Жаккара (cooccurrence / (count_a + count_b - cooccurrence)), которая учитывает популярность товаров и не завышает рейтинг самых продаваемых позиций.
Блок рекомендаций. Компонент получает ID текущего товара, читает из myvendor_rec_cooc топ-N товаров по score, обогащает данными из b_iblock_element и b_catalog_price, отдаёт в шаблон. Полный запрос занимает 5–10 мс — данные уже предрассчитаны.
Детально: персонализированные рекомендации
Collaborative filtering в описанной выше форме — это рекомендации «к товару». Следующий уровень — персональные рекомендации «для пользователя»: «Мы думаем, вам понравится».
Для зарегистрированных пользователей модуль строит профиль интересов из:
- истории просмотров (таблица
myvendor_rec_view_log, пишется через AJAX при открытии карточки товара) - истории заказов из
b_sale_order+b_sale_basket
// Запись просмотра товара
\MyVendor\Rec\ViewLogger::log(
userId: $USER->GetID(),
productId: (int)$arResult['ID'],
sessionId: session_id()
);
На основе профиля раз в сутки агент рассчитывает персональный топ-20 товаров и кеширует в myvendor_rec_personal. На странице «Специально для вас» компонент читает этот кеш — никаких тяжёлых вычислений в рантайме.
Контекстные рекомендации
Помимо карточки товара и главной страницы, модуль реализует рекомендации в трёх контекстах:
- Корзина: «Добавьте к заказу» — товары, часто покупаемые вместе с уже добавленными в корзину
- Страница категории: похожие, но из смежных категорий
- Пустые результаты поиска: альтернативы по характеристикам
A/B тестирование блоков
Модуль включает простой механизм A/B тестирования алгоритмов: часть пользователей (по hash от user_id) видит collaborative-рекомендации, другая часть — content-based. Конверсия в клик и покупку фиксируется в myvendor_rec_click_log. Статистика доступна в административном разделе.
Сроки разработки
| Масштаб | Состав | Срок |
|---|---|---|
| Базовый | Content-based + блок на карточке товара | 2–3 недели |
| Средний | + collaborative filtering + корзина + категория | 5–7 недель |
| Полный | + персонализация + A/B тест + API для мобайла | 9–12 недель |
Для запуска collaborative filtering нужна история заказов. Если магазин новый, стартуйте с content-based и переключайтесь на гибридный режим после накопления 500+ заказов.







