Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад

Как проектировать систему рекомендаций или подбора контента с учётом пользовательских предпочтений?

Вопрос проверяет, умеете ли вы мыслить как инженер рекомендаций: собрать данные о поведении, построить пайплайн кандидатов и ранжирования, обеспечить быстрый online-ответ и управлять качеством.

Короткий ответ

Обычно система рекомендаций делится на этапы: сбор событий, построение профиля пользователя, генерация кандидатов и ранжирование. Тяжёлая аналитика и обучение/подбор параметров выполняются оффлайн, а в онлайне сервис быстро берёт готовых кандидатов и сортирует их по простым признакам. Важно продумать хранение событий и агрегаций (часто аналитическое хранилище), а также кеш и предрасчёт, чтобы уложиться в latency. Ещё нужны правила “холодного старта”, фильтры (блок-листы, категории) и измерение качества через A/B тесты.

Длинный ответ

Базовая схема рекомендаций

Система рекомендаций — это не один алгоритм, а конвейер, где большая часть работы делается заранее.

1) Сбор данных и событийная модель

Сначала определяем, какие события собираем:

  • просмотр, клик, лайк, покупка, добавление в избранное

  • время просмотра/досмотра, скролл, скрытие контента

  • контекст: устройство, регион, время, источник

Практика:

  • события пишутся асинхронно (не тормозим пользовательский запрос)

  • события должны иметь стабильную схему и версию

2) Профиль пользователя и признаки

Определение: Feature (признак) — числовое/категориальное представление поведения или свойств пользователя/контента, которое помогает ранжировать.

Примеры признаков:

  • топ категорий пользователя за 7/30 дней

  • свежесть интереса (что было недавно)

  • негативные сигналы (скрытия/дизлайки)

  • популярность контента в регионе

3) Генерация кандидатов (candidate generation)

Цель — быстро собрать “небольшой список” того, что потенциально можно показать.

Типовые источники кандидатов:

  • популярное (global/regional)

  • похожее на просмотренное (item-to-item)

  • по подпискам/соц-графу (если есть)

  • тематические подборки/редакционные правила

Кандидаты часто предрасчитываются и хранятся как списки id.

4) Ранжирование (ranking) и бизнес-правила

Дальше кандидаты сортируются:

  • простая формула/модель (на старте)

  • позже — ML-модель (если есть ресурсы и данные)

Поверх ранжирования почти всегда накладываются правила:

  • разнообразие (diversity), чтобы не показывать одно и то же

  • фильтры: блок-листы, возрастные ограничения, категории

  • ограничения повторов (frequency capping)

5) Online-архитектура под latency

Чтобы отвечать быстро:

  • хранить готовые списки кандидатов (например, по сегментам/пользователям)

  • хранить профиль пользователя в быстром доступе (кеш/быстрое KV)

  • обновлять агрегации асинхронно

ClickHouse обычно используется для:

  • хранения событий и быстрых агрегаций по большим объёмам

  • построения витрин/срезов для предрасчёта кандидатов и признаков

6) Холодный старт и деградация

Если о пользователе мало данных:

  • популярное в регионе

  • подборки по контексту (время суток, устройство)

  • лёгкая онбординг-анкета (категории интересов)

Если часть системы недоступна:

  • fallback на популярное/редакционное

  • stale-данные (последний успешный список)

7) Измерение качества

Без метрик рекомендации “на глаз” не строят.

  • онлайн метрики: CTR, конверсия, время просмотра

  • guardrail метрики: жалобы, скрытия, отписки

  • A/B тесты для сравнения стратегий

Вывод

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

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    8

Навыки

  • ClickHouse

Ключевые слова

#recommendation

#feature

#diversity

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.