Разработка рекомендательной системы для видео/стримингового сервиса

Зрители уходят, если выдача не попадает в их интересы. Мы разрабатываем рекомендательные системы под ключ: разбираем данные просмотров, настраиваем ранжирование и передаём модель вместе с регламентами. Досмотры растут, отток снижается.
Часто задаваемые вопросы

Почему рекомендательная система перестаёт попадать в интересы

Рекомендательная система учится на журналах показов, а сами журналы — результат её же прошлых решений. Возникает замкнутая петля: популярное показывается чаще, собирает больше взаимодействий, сильнее закрепляется в весах ранжирования и получает ещё больше слотов. Через несколько циклов переобучения качество выдачи начинает отражать не интересы аудитории, а то, что уже было показано.

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

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

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

Эффект внедрения: досмотры, отток, время отклика выдачи

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

Доля возвращающихся зрителей — второй измеримый эффект. Уходит целый класс отказов: холодный старт нового профиля закрывается признаками контента и контекстом устройства, а редкий контент перестаёт выпадать из подборки из-за низкого числа просмотров. Раньше эти два случая давали пустую или почти пустую выдачу — теперь зритель получает осмысленный список с первого захода.

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

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

Как строится рекомендательная система: три режима работы

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

Вариант Когда подходит Ограничения
Свой контур Данные о поведении не должны покидать вашу инфраструктуру, нагрузка предсказуема, пики известны заранее Переобучение упирается в мощность железа; внешние сигналы и часть контекста недоступны, обновление модели идёт реже
Внешняя инфраструктура Нужен быстрый старт и частые эксперименты с обучением на больших объёмах истории История просмотров уходит за периметр; отклик зависит от канала до внешней площадки
Гибридная схема Чувствительные данные остаются внутри, а тяжёлое обучение и редкие пересчёты вынесены наружу Дороже в поддержке: два контура, синхронизация признаков, версионирование моделей и контроль расхождений между ними

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

Этапы внедрения: от аудита данных до передачи модели

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

  1. Аудит данных. Разбираем, какие события снимаются с плеера, с какой полнотой и задержкой, как размечен каталог. Логи проверяем на разрывы и дубли: модель, обученная на грязных событиях, воспроизводит их ошибки.
  2. Схема потоков. Фиксируем путь события целиком: сбор, хранение, расчёт признаков, обучение, сервис выдачи. Согласуем, где признаки считаем пакетно, а где они нужны на лету.
  3. Сборка и обучение. Готовим модель ранжирования и обвязку вокруг неё: разбиение по времени вместо случайного, отложенная проверка, отдельный набор для редких сценариев.
  4. Настройка выдачи. Слой поверх модели: разнообразие, свежесть, ограничение повторов, холодный старт новых роликов, правила для лицензионного и детского контента.
  5. Проверка на живом трафике. Сначала теневой режим — система считает выдачу, но не влияет на неё. Затем сравнение с текущей выдачей на части аудитории: время просмотра, доля досмотров, отвал на первых секундах.
  6. Передача модели. Отдаём код, конфигурации, регламент переобучения и панели метрик, разбираем с вашей командой типовые сбои и порядок отката на предыдущую версию.

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

Артефакты передачи: схемы потоков, конфигурации, регламенты

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

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

После приёмки артефакты лежат в вашем репозитории, а не в переписке. Обсудим задачу — покажем, как выглядит такой комплект на конкретном примере стримингового каталога.

Кейс: как в стриминге сократили отток и подняли досмотры

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

Что изменили в данных и правилах

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

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

Метрики до и после

  • Досмотр первого эпизода: 41% → 63%
  • Доля зрителей, вернувшихся в течение месяца: 28% → 44%
  • Доля новинок в первых десяти позициях: 7% → 31%
  • Повторные показы одного тайтла за сессию: 4,1 → 1,3

Плеер и карточки мы не трогали — сдвиг дала именно пересборка выдачи. Результат зафиксировали на восьмой неделе, а контрольный замер через квартал показал удержание метрик: правила не приходится подкручивать вручную, доля ручных подборок в выдаче упала с 60% до 15%.

Чем совместная фильтрация отличается от контентной?

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

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

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

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

Частые технические сомнения: холодный старт и качество данных

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

Если истории пользователя почти нет — рекомендации будут случайными?

Нет. Холодный старт закрываем контентными признаками (тема, длительность, жанр, автор) и популярностью в похожем сегменте, а первые действия подтягиваем за минуты. Персонализация включается постепенно, без «пустых» подборок на входе.

Что делать с шумом в разметке?

Мы считаем качество разметки до обучения: чистим дубли, ботов и случайные клики, взвешиваем сигналы по глубине просмотра, а не по одному факту открытия. Это убирает перекос в сторону «кликбейтных» карточек.

Можно ли обновлять модель без остановки сервиса?

Да. Новая версия выкатывается в теневом режиме на части трафика и сравнивается с текущей по метрикам удержания; при просадке откат мгновенный. Обновление без остановки — штатный режим, не отдельная операция.

Кому принадлежат модели и данные?

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

Почему подборки выглядят однотипно?

Так работает оптимизация только под клик: выдача схлопывается в узкий круг популярного. Добавляем штраф за повтор и разнообразие по темам и авторам — охват контента растёт, а удержание не падает.

Обсудим задачу и вернёмся с оценкой и планом внедрения

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

  • какие сигналы есть и за какой период сохраняется история — от неё зависит, как поведёт себя выдача на новых позициях каталога;
  • что считаем успехом: долю досмотров, глубину сессии, возврат на следующий день или разнообразие выдачи;
  • где именно встраиваются рекомендации: главная, блок «похожее», автоплей, подборки, письма;
  • сколько позиций нужно ранжировать за раз и как быстро обновляется каталог — от этого зависит архитектура;
  • какие ограничения по инфраструктуре и правам на данные действуют у вас сегодня;
  • кто со стороны заказчика принимает решения по качеству выдачи и как часто планируются замеры;
  • какие сценарии нельзя ломать: права на контент, возрастные ограничения, региональные лимиты.

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

Направления AI-разработки

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    815
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139