Разработка рекомендательной системы: что показывать каждому пользователю

Рекомендательная система отвечает на один вопрос: что из каталога показать именно этому человеку в этот момент. Мы делаем её на заказ для каталога товаров, повторных B2B-заказов, портала с материалами и подсказки менеджеру в CRM. Начинаем с проверки, есть ли в ваших данных история действий, на которой можно учиться, и сравниваем любую модель с простым правилом «популярное в категории». Если модель не выигрывает у правила, мы так и скажем.

Обследование данных — 200 000 ₽, вычитается из первого этапаКаждая модель сравнивается с простым правилом на истории по времениДанные, модель и исходный код остаются в вашем контуре

С чем приходят

Когда рекомендации уже нужны, а подбор идёт вручную

«Похожие товары» берутся из одной категории

Блок на карточке показывает соседей по рубрике. Покупателю предлагают второй чайник к купленному чайнику, а чайник покупают один раз. Нужны сопутствующие позиции, а не двойники.

Менеджер подбирает повторный заказ по памяти

В B2B клиент заказывает похожий набор раз в несколько недель, и опытный менеджер знает, чего в нём обычно не хватает. Когда менеджер уходит, это знание уходит вместе с ним.

Рассылка у всех одинаковая

Письма и баннеры строятся по сегментам, которые составлены один раз и не обновляются. Поведение клиента меняется быстрее, чем сегмент.

Материалы на портале не находят читателя

Статьи, регламенты, курсы и документы лежат в разделах, и человек видит то, что оказалось сверху. Нужен подбор по тому, что он уже читал и что читали похожие на него.

Сценарии

Четыре сценария: что рекомендуем, на чём учимся и где ломается

Каждый сценарий — отдельная задача со своей метрикой. Прогноз потребности склада — другая постановка, она описана на странице прогнозирования спроса.

Сценарий
Что рекомендуем
На чём учимся
Где ломается
СценарийКаталог интернет-магазинасопутствующие товары
Что рекомендуемТовары в карточке, в корзине и в письме после заказа
На чём учимсяПросмотры, добавления в корзину и покупки в разрезе посетителей и сессий
Где ломаетсяРекомендуются товары, которых нет на складе; анонимные посетители не склеены с покупателями; в выдаче одни бестселлеры
СценарийПовторный B2B-заказнабор для клиента
Что рекомендуемПозиции, которые клиент, скорее всего, закажет в ближайший заказ
На чём учимсяИстория отгрузок из 1С по контрагентам и договорам, периодичность заказов
Где ломаетсяОтгрузки сделаны по нескольким юрлицам одного клиента; разовые закупки принимаются за привычку; цена и остаток берутся не из учёта
СценарийПортал, база знаний, обучениематериалы
Что рекомендуемСтатьи, регламенты, курсы, документы
На чём учимсяОткрытия, время чтения, поисковые запросы, метки у материалов
Где ломаетсяУ материалов нет меток, истории мало, устаревшие документы поднимаются наверх
СценарийПодсказка менеджеру в CRMчто предложить клиенту
Что рекомендуемСледующее предложение, на которое клиент вероятнее откликнется
На чём учимсяСделки, звонки, письма, продукты в сделках, итоги переговоров
Где ломаетсяИтоги сделок заполняются через раз, причины отказа выбираются первой строкой списка
Данные

Какие данные нужны рекомендательной системе и чего без них не получится

Больше всего результат зависит не от алгоритма, а от того, что вы записывали о действиях пользователей. Проверку данных делаем первой.

Три вещи, которые должны быть в учёте

  • События. Кто, с каким объектом и когда сделал что: открыл, добавил в корзину, купил, скачал, закрыл сделку. Покупка сильнее просмотра, и рекомендация по просмотрам без покупок перевёрнута.
  • Идентификатор. Одного человека надо узнавать между визитами и устройствами. Если сайт не отличает посетителя от посетителя, рекомендации можно строить только по товару («с этим покупают»), а не по человеку.
  • Каталог с атрибутами. Категория, бренд, характеристики, цена, наличие, дата появления. Без атрибутов нельзя рекомендовать новую позицию, у которой ещё нет истории.

Что обычно оказывается не так

Счётчик аналитики не отличает покупку от отменённого заказа, в 1С один клиент заведён под разными названиями, просмотры пишут боты и сами сотрудники, а в каталоге пустые атрибуты. Эти дефекты находятся на обследовании за несколько дней, а на готовой модели вылезают как «странные рекомендации» и обходятся дороже.

Если события приходят из внешней аналитики, нужна выгрузка сырых событий: по агрегированным отчётам нельзя восстановить, что человек видел до покупки. История заказов берётся из 1С через интеграцию, а свежие остатки и цены на момент показа читаем из учёта.

Методы

От правила до двухступенчатой модели: что брать и когда достаточно

Идём снизу вверх и останавливаемся на первом методе, который проходит проверку. Каждый следующий метод сложнее в эксплуатации.

Метод
Как работает
Когда хватает
Ограничение
МетодПравила и популярноебез обучения
Как работаетСамое покупаемое в категории, новинки, акционные позиции, ручные подборки
Когда хватаетМалая история, небольшой каталог, много анонимных посетителей
ОграничениеОдинаково для всех; бестселлеры вытесняют остальной каталог
МетодСовстречаемостьтовары из одной корзины
Как работаетСчитаем, какие позиции чаще встречаются в одних заказах, и показываем «с этим берут»
Когда хватаетБлок «сопутствующие» на карточке и в корзине, повторные заказы B2B
ОграничениеНе учитывает человека; плохо работает для редких позиций
МетодПо содержимомупохожесть атрибутов и текста
Как работаетСравниваем описания и характеристики материалов или товаров и показываем близкие
Когда хватаетНовые позиции без истории, портал с метками, база знаний
ОграничениеРекомендует похожее и не открывает ничего нового; страдает от пустых атрибутов
МетодСовместная фильтрацияпо поведению людей
Как работаетНаходим людей с похожей историей и предлагаем то, что они выбирали
Когда хватаетДостаточная история от многих пользователей, нужна персонализация
ОграничениеХолодный старт для новых людей и новых позиций; перекос к популярному
МетодДва этапаотбор и ранжирование
Как работаетСначала несколько источников отбирают кандидатов, затем модель ранжирует их по вероятности клика или покупки с учётом контекста
Когда хватаетБольшой каталог, много признаков, нужна настройка под бизнес-цель
ОграничениеСложнее в эксплуатации; требует журнала показов и заметной истории
Холодный старт

Новые товары, новые клиенты и перекос к бестселлерам

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

  • Новая позиция. Рекомендуем её по атрибутам вместе с похожими, а часть показов отдаём ей намеренно, чтобы набралась история. Без этого позиция так и не попадёт в рекомендации и не наберёт события.
  • Новый человек. Первый показ строится на контексте: откуда пришёл, что открыл, какая страница. После нескольких действий включается персональная часть.
  • Перекос к популярному. Модель, обученная на покупках, любит бестселлеры: их покупали чаще всего, значит, их и надо рекомендовать. Выдача сужается до десятка позиций. Следим за долей каталога, которая попадает в рекомендации, и добавляем разнообразие правилом или отдельным шагом переранжирования.
  • Петля обратной связи. Люди кликают на то, что показано. Если модель учится на кликах по собственной выдаче, она закрепляет свои ошибки. Поэтому в обучении учитываем, что было показано, а не только на что нажали, и держим небольшую контрольную группу без рекомендаций.
Проверка

Как проверяем, что рекомендации работают: метрики и их подвохи

Одной красивой цифры нет. Смотрим на набор, и главным остаётся сравнение с простым правилом на той же истории.

Что смотрим
Как считаем
На что обратить внимание
Подвох
Что смотримПопадание в выборугадали ли то, что человек выбрал потом
Как считаемОбучаемся на прошлом, прячем следующие действия и смотрим, оказались ли они в первых позициях
На что обратить вниманиеДелим выборку по времени, а не перемешиванием: иначе модель видит будущее
ПодвохВысокий результат за счёт бестселлеров, которые человек купил бы и так
Что смотримКачество порядкастоит ли нужное выше
Как считаемМетрики с учётом позиции в списке: важно не только попасть, но и оказаться первым
На что обратить вниманиеПозиции 1–3 важнее позиций 8–10, потому что на них смотрят
ПодвохПорядок в тестовой выборке не равен порядку на странице, где есть баннеры и фильтры
Что смотримСравнение с базойлучше ли модель, чем «популярное»
Как считаемТе же данные, та же разбивка, та же метрика для правила и для модели
На что обратить вниманиеРазница считается по группам: новые клиенты, постоянные, разные категории
ПодвохОбщая средняя разница скрывает группы, где модель проигрывает
Что смотримПроверка на людяхменяется ли поведение
Как считаемСравнение группы с рекомендациями и контрольной группы на реальном трафике
На что обратить вниманиеДлительность и размер групп определяем заранее, остановку по первому хорошему дню не допускаем
ПодвохНужен трафик; на малом числе заказов вывод может быть шумом
Правила бизнеса

Что модель не должна решать за вас

Остаток, цена и ограничения

Рекомендуется только то, что можно продать: есть остаток, в регионе доступна доставка, клиенту открыта позиция по договору. Эти данные берутся из учёта в момент показа.

Уже купленное и несовместимое

Не показываем то, что человек только что купил и купит не скоро; не показываем несовместимые комплектующие. Список таких правил пишем вместе с вами.

Что делаем

Из чего состоит работа и сколько она стоит

Цены совпадают со страницей «Тарифы». Цену называем по итогам обследования, остановиться можно после любой ступени, сделанное остаётся у вас по акту.

Обследование данных: один сценарий

Что записывается о действиях, насколько чисты идентификаторы и каталог, какую метрику считать успехом. На выходе схема данных, база для сравнения (простое правило с измеренным результатом) и вилка бюджета. Вычитается из первого этапа.

200 000 ₽ · 2–3 недели

Обследование: каталог и несколько систем

Сайт, 1С, CRM и аналитика вместе: матрица источников истины, склейка идентификаторов, план обмена.

350 000 ₽ · 3–4 недели

Лёгкий пилот: офлайн-проверка

Выгрузка событий, база для сравнения и две-три модели, проверка по времени, разбор по группам. Результат: цифры на ваших данных и решение, идти ли дальше. Без показа людям.

150 000–400 000 ₽ · 2–8 недель

Тяжёлый пилот: показ в одном месте

Блок на одной странице или подсказка в CRM для одной группы менеджеров, журнал показов, правила остатков и контрольная группа. Рекомендации живут на ваших серверах.

400 000–1 200 000 ₽ · 2–3 месяца

Вывод в эксплуатацию

Все целевые места показа, мониторинг качества и охвата, регламент переобучения, обучение сотрудников, передача кода и инструкций. Этапами, у каждого своя приёмка.

от 1 500 000 ₽ этапами по 300 000–700 000 ₽ · от 3 месяцев

Сопровождение

Контроль качества, переобучение, разбор жалоб на «странные» рекомендации. Плановые доработки с пакета на 60 000 ₽. Сверх пакета — 5 000 ₽ в час.

20 000 / 60 000 / 120 000 ₽ в месяц
Процесс

Как идёт работа

2–3 недели — Обследование: данные и цель

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

Недели 3–6 — Офлайн-проверка

Две-три модели от простой к сложной на истории с разбивкой по времени, разбор по группам и список примеров, где рекомендации выглядят странно.

Месяц 2 — Правила и интеграция

Остатки, цены, ограничения, склейка с учётом. Решаем, где живёт рекомендация: на странице, в письме, в CRM. Определяем, что показывается, если модель недоступна.

Месяцы 2–3 — Показ малой части трафика

Журнал показов, контрольная группа, разбор поведения. Дальнейший объём решаете вы по результатам, а не по ожиданиям.

От 3 месяцев — Эксплуатация

Все места показа, мониторинг охвата и качества, переобучение по регламенту, передача исходников и инструкции.

Дальше — развитие или сопровождение

Новые сценарии по тому же основанию данных, новые группы клиентов. Объём работ в месяц записывается в договоре.

Цена

Что двигает стоимость внутри вилки

Состояние событий и идентификаторов

Если приходится сначала склеивать посетителей, чистить ботов и восстанавливать историю заказов, первые недели уходят на данные. Это самая частая причина, по которой вилка уезжает вверх.

Требования к проверке

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

Контроль

Что остаётся у вас и чего мы не делаем

Остаётся у вас

  • Исходный код в вашем репозитории с первого коммита.
  • Обучающие данные, обученные модели и журнал показов лежат на ваших серверах.
  • Описание метрик, база для сравнения и отчёт по группам: можно проверить без нас или отдать другому подрядчику.
  • Инструкция по развёртыванию и переобучению.
  • Право остановиться после любой ступени: сделанное остаётся у вас по акту.

Мы этого не делаем

  • Не строим рекомендации для маркетплейсов, стриминга и массовых потребительских сервисов с нагрузкой такого масштаба.
  • Не обещаем рост выручки или конверсии: до проверки на реальном трафике эти цифры никто не знает.
  • Не собираем данные о посетителях за вас и не настраиваем счётчики и сбор согласий; правовые вопросы готовит юрист заказчика.
  • Не передаём ваши данные внешним сервисам рекомендаций: расчёт идёт в вашем контуре.
  • Не берём работы дешевле 150 000 ₽, не дежурим круглосуточно и не имеем лицензии ФСТЭК.
Граница

Рекомендации, поиск, прогноз и ассистент: где проходит граница

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

Если вопрос звучит «сколько этого купят в следующем месяце», это прогноз, а не рекомендация. Он описан в разделах прогнозирования спроса и предиктивной аналитики. Общая постановка задач машинного обучения на ваших данных описана на странице разработки модели машинного обучения.

Инструменты

На чём собираем

Данные и модели
  • Python, pandas и открытые библиотеки для моделей совстречаемости и факторизации
  • Градиентный бустинг для ранжирования списка кандидатов
  • Векторный поиск в PostgreSQL (pgvector) или Qdrant для похожести по содержимому
  • Хранилище событий в PostgreSQL или ClickHouse, выбираем по объёму
Сервис и развёртывание
  • FastAPI: выдача рекомендаций по запросу с таймаутом и запасным ответом
  • Кэш в Redis для частых запросов
  • Docker, Nginx, GitLab CI
  • Мониторинг охвата, задержки и дрейфа входных данных
Материалы

Материалы по теме

Статья

Рекомендательная система: с чего начать и как проверить пользу

Порядок запуска от простого правила до модели и способ проверки без самообмана.

  • Правило как планка
  • Проверка по времени
  • Контрольная группа
Читать →
Статья

Порог уверенности модели: зачем он нужен

Что делать, когда модель не уверена.

  • Что такое порог
  • Как выбирать значение
  • Что ниже порога
Читать →
Статья

Что такое MLOps простыми словами

Как следить за моделью после запуска.

  • Дрейф данных
  • Переобучение
  • Когда MLOps не нужен
Читать →
Заявка

Разберём, что вы записываете о действиях пользователей

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

Спасибо, заявка отправлена. Ответим в течение рабочего дня.

Не удалось отправить. Напишите в телеграм или позвоните.

Вопросы

Частые вопросы: рекомендательная система на заказ

Сколько стоит разработка рекомендательной системы?

Начинаем с обследования данных: 200 000 ₽ за один сценарий (2–3 недели), 350 000 ₽, если участвуют несколько систем. Лёгкий пилот с офлайн-проверкой стоит 150 000–400 000 ₽, тяжёлый с показом в одном месте — 400 000–1 200 000 ₽. Вывод в эксплуатацию от 1 500 000 ₽ этапами по 300 000–700 000 ₽. Обследование вычитается из первого этапа, если продолжаете с нами.

Хватит ли у нас данных?

Это выясняется за первые дни обследования. Нужны события с идентификатором человека или хотя бы товара, история покупок и каталог с атрибутами. Если истории мало, делаем рекомендации по правилам и по содержимому, а модель на поведении откладываем до накопления данных. Мы скажем об этом до договора на пилот.

Чем рекомендательная система лучше блока «популярное»?

Не всегда лучше, поэтому мы сравниваем. Популярное — сильная планка: его трудно обойти на небольшом каталоге и малой истории. Модель оправдана там, где нужна персонализация и каталог велик.

Как проверить пользу до полного запуска?

Двумя шагами. Офлайн: обучаемся на прошлом, прячем следующие действия и считаем, попали ли в них. Затем показ малой части трафика с контрольной группой без рекомендаций. Дольше и дороже, зато не принимает сезон и акции за эффект модели.

Можно ли работать в закрытом контуре?

Да. Модели на поведении пользователей обычно небольшие и обучаются и работают на ваших серверах без обращения к внешним сервисам. История покупок и профили клиентов остаются внутри. Персональные данные граждан России обычно должны храниться на серверах в России.

Подключается ли система к 1С и CRM?

Да. История заказов берётся из 1С, события из сайта и аналитики, итоги сделок из CRM. Остатки и цены на момент показа читаем из учёта, а не из обучающей выборки. Если у системы нет ни интерфейса, ни выгрузки, скажем об этом до договора.

Как устроено сопровождение?

Ежемесячно: 20 000, 60 000 или 120 000 ₽ в месяц, до 4, 12 или 25 часов. Часы уходят на контроль качества и охвата, переобучение и разбор обращений. Плановые доработки входят с пакета на 60 000 ₽. Сверх пакета — 5 000 ₽ в час, по согласованию до начала.

Вы работаете только в Ростове-на-Дону?

Мы в Ростове-на-Дону, работаем с заказчиками по всей России: удалённо и в вашем контуре. Доступ к системам и обследование согласуем на старте с вашей службой безопасности.