Рекомендательные системы без облака: как собрать рабочую модель на открытом датасете за час
Рекомендательные системы на основе машинного обучения звучат как задача для большой команды с доступом к закрытым облачным сервисам, но это не так: рабочую сессионную рекомендалку можно собрать на открытом датасете, локально, без подписок и без передачи данных наружу.

Coveo SIGIR eCOM 2021 (открытый датасет с 14 314 товарами) позволяет воспроизвести полный цикл: от графа поведения и векторных метаданных до ранжирования в LightGBM и локального HTTP API, который возвращает до 20 рекомендаций за запрос.
Большинство руководств по рекомендательным системам либо останавливаются на теории, либо требуют платных API. Здесь разбираем конкретную архитектуру, которую автор проекта RecSys-Coveo собрала на публичных данных и выложила с кодом. Машинное обучение в ней отвечает за финальное ранжирование, а не за весь пайплайн: сначала кандидатов отбирают граф, векторное сходство и популярность, и только потом LightGBM расставляет их по местам.
Что понадобится?
- Python 3.8+ и менеджер пакетов pip
- LightGBM (опенсорс-библиотека градиентного бустинга, ставится через pip)
- Датасет Coveo SIGIR eCOM 2021, Public Data Release 1.0.0 (скачивается бесплатно, содержит события просмотров, добавлений в корзину и покупок, а также готовые векторы описаний и изображений товаров)
- Репозиторий RecSys-Coveo (код проекта)
- Около 4 ГБ оперативной памяти для обработки 50 000 сессий
- Время: первый запуск с построением графа и обучением занимает от 30 минут до часа в зависимости от машины
Пошаговая инструкция
-
Разделите сессии на два периода. Первые 50 000 сессий (период
A_G) идут на построение каталога, графа и статистик. Следующие 50 000 сессий (периодB) идут на обучение ранжировщика. Это разделение принципиально: без него будущая покупка изBможет превратиться в ребро графа и подсказать ответ для той же сессии. -
Постройте граф товарных связей. Вершины графа это товары (SKU, то есть идентификаторы конкретных позиций). Между ними три типа направленных рёбер:
- просмотр затем просмотр
- просмотр затем добавление в корзину
- просмотр затем покупка
После просмотра товара A ищите действия с другими товарами в той же сессии. Учитывайте только следующие десять блоков товарных событий и только действия не позднее 30 минут после просмотра A. Вес пары убывает экспоненциально с увеличением промежутка. Одна сессия добавляет ребру не больше единицы веса.
-
Отфильтруйте слабые связи. Ребро должно встретиться минимум в трёх сессиях. Для каждого товара и типа связи сохраняйте до 100 соседей с наибольшим весом. Товары с малой суммой весов дополнительно ослабляйте через параметр в знаменателе: без него единственный слабый сосед после нормировки получил бы балл, равный единице.
-
Добавьте векторное сходство по метаданным. Coveo предоставляет готовые векторы (числовые представления) описаний и изображений товаров. Обучать модели для их построения не нужно. Важно: у описаний и изображений разные пространства, их координаты между собой не складываются. Нормируйте векторы, постройте взвешенную сумму из просмотренных товаров и сравнивайте кандидатов по косинусному сходству (мера того, насколько два вектора «смотрят» в одну сторону: 1 означает полное совпадение направлений, 0 означает отсутствие связи).
-
Учтите поисковый запрос, если он есть. Берите последний поисковый блок перед моментом выдачи. Если он непригоден или старше десяти минут, источник отключается. Вектор запроса сравнивается только с векторами описаний, не изображений.
-
Обработайте пропущенные данные честно. Пропущенный вектор нельзя заменить нулём. Нулевое косинусное сходство бывает и у корректных перпендикулярных векторов. Вместе с баллом передавайте модели маску доступности, признак того, удалось ли рассчитать сходство.
-
Соберите до 300 кандидатов из всех источников. Граф, описания, изображения, поиск, недавние просмотры и историческая популярность дают отдельные списки со своими баллами. Квоты фиксируются до оценки. После объединения уникальных товаров может оказаться меньше суммы квот: один товар может прийти сразу из нескольких источников.
-
Рассчитайте признаки для каждого кандидата. Для каждого из 300 кандидатов соберите:
- баллы по трём типам графовых связей
- косинусное сходство по описаниям
- косинусное сходство по изображениям
- балл поискового запроса
- маски доступности для каждого источника
-
статистики популярности из периода
A_G -
Обучите LightGBM на сессиях периода
B. Модель получает признаки кандидатов и учится различать товары, которые посетитель затем купил, от остальных. Цель это различные SKU зарегистрированных покупок после момента выдачи в той же сессии. Окно наблюдения: 24 часа или последняя запись, что наступит раньше. -
Разверните локальный HTTP API. Обученная модель принимает признаки кандидатов и возвращает до 20 рекомендаций, отсортированных по предсказанному баллу.
Посетитель открыл товар A. Система строит три списка графовых соседей (по просмотрам, корзинам и покупкам), находит похожие товары по описанию (товар C) и по изображению (товар D), проверяет поисковый запрос. Сам товар A тоже остаётся кандидатом: посетитель его посмотрел, но покупка ещё не зарегистрирована. Из всех источников собирается пул до 300 уникальных кандидатов. LightGBM получает признаки каждого и возвращает топ-20. Товар B, связанный с A через граф покупок, оказывается в первой пятёрке, потому что у него высокий графовый балл и среднее сходство по описанию. Товар D с высоким сходством по изображению, но без графовой связи, попадает во вторую десятку.
Утечка данных из будущего. Если строить граф и обучать ранжировщик на одних и тех же сессиях, покупка из обучающей выборки превращается в ребро графа. Модель «подглядывает» ответ. Строгое разделение на периоды A_G (граф) и B (обучение) обязательно.
Замена пропущенного вектора нулём. Нулевое сходство и «сходство не удалось рассчитать» означают разные вещи. Без маски доступности модель путает отсутствие данных с отсутствием связи.
Игнорирование порядка внутри блока. События с одинаковой отметкой времени считаются одним блоком: их внутренний порядок неизвестен. Строить направленные связи между событиями одного блока значит выдумывать порядок, которого нет в данных.
Обратные рёбра. Если после просмотра A посетитель купил B, связь идёт только от A к B. Обратное ребро B к A из этого факта не возникает. Добавление обратных рёбер искажает статистику графа.
Что делать с этим прямо сейчас?
Автору Дзена. Рекомендательные системы машинного обучения определяют, какой контент увидит читатель. Понимание логики «граф плюс признаки плюс ранжировщик» помогает осознать, почему одни статьи получают показы, а другие нет: алгоритм работает с сигналами поведения, а не с «качеством текста» в абстрактном смысле.
Маркетологу. Если вы выбираете или настраиваете рекомендательный движок для интернет-магазина, эта архитектура показывает минимально жизнеспособный набор источников: поведенческий граф, текстовое и визуальное сходство, популярность. Закрытые SaaS-решения часто делают то же самое, но не дают заглянуть внутрь.
Предпринимателю в РФ. Весь стек открытый: данные Coveo доступны без ограничений по региону, LightGBM не требует облачных подписок, API разворачивается локально. Никаких санкционных рисков и зависимости от зарубежных сервисов.
Эта архитектура ценна не масштабом, а прозрачностью. Каждый сигнал (графовый балл, сходство описания, сходство изображения) приходит в ранжировщик как отдельный признак, и можно посмотреть, какой из них повлиял на конкретную рекомендацию. В закрытых сервисах такой возможности обычно нет.
По моим наблюдениям, главная ловушка для тех, кто начинает работать с рекомендательными системами, это желание сразу строить сложную нейросеть. Градиентный бустинг на вручную собранных признаках часто даёт результат быстрее и понятнее. Начните с графа и LightGBM, а нейросети добавляйте, когда упрётесь в потолок качества.
Честная оговорка: датасет Coveo содержит 14 314 SKU. Для реального магазина с сотнями тысяч позиций точный поиск соседей по векторам придётся заменить приближённым (например, через библиотеки FAISS или Annoy), иначе время отклика вырастет до неприемлемого.
Попробуйте AI-инструменты dzen.guru
Разбираем нейросети на практике и показываем, как применять их в работе с контентом и аудиторией
Перейти на dzen.guruРекомендательные системы на машинном обучении не обязаны быть чёрным ящиком. Если у вас есть данные о поведении пользователей и каталог с метаданными, начните с графа, добавьте векторное сходство, отдайте признаки в LightGBM и разверните API. Код проекта RecSys-Coveo открыт, датасет бесплатен, а весь стек работает на вашей машине без единого внешнего вызова.

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».
Читайте также

FPGA для нейросетей за $50: списанная плата тянет 8 языковых моделей локально
Запуск нейросетей на списанной FPGA-плате за 50 долларов звучит как эксперимент для инженеров с паяльником, но автор проекта openTPU доказал, что это рабочий…

Как я собрал модель для определения стадии диабетической ретинопатии в бесплатном Colab за 3 минуты
Диабетическая ретинопатия, поражение сетчатки при диабете, остаётся одной из главных причин потери зрения, и автоматическая оценка её стадии по снимку глазного…

Что такое ИИ-агент Perplexity SPACE: открытая платформа запускает песочницу за 60 мс
Почему это важно Perplexity выложила в открытый доступ платформу, на которой работают ИИ-агенты её поисковика, и любая команда теперь может развернуть такую же…
Комментарии