Перейти к содержанию

Ранжирование ленты новостей -- определение задачи

~5 минут чтения

Предварительно: Подготовка к интервью по системному дизайну

Каждый день Facebook ранжирует порядка 500 миллионов постов для 2 миллиардов пользователей, выбирая ~50 из 10 000+ кандидатов за менее чем 200 мс. Алгоритм ленты напрямую влияет на время сессии (в среднем 33 минуты в день) и рекламную выручку ($130+ млрд/год у Meta). Некорректное ранжирование приводит к потере DAU на 1--3% за неделю, что на масштабе Facebook означает 20--60 миллионов пользователей. Это одна из самых высоконагруженных ML-систем в индустрии -- 500K QPS с жёстким p99 < 100 мс.

Бизнес-контекст

News Feed Ranking -- ML-система для персонализированного ранжирования контента в ленте социальных сетей. Определяет, какие посты показать пользователю и в каком порядке.

Примеры применения

Компания Тип контента DAU Posts/day
Facebook Posts, photos, videos 2B 500M+
Instagram Photos, Reels, Stories 1.5B 200M+
Twitter/X Tweets, threads 250M 500M+
LinkedIn Posts, articles, jobs 300M 50M+
TikTok Short videos 1B 100M+

Цели системы

Engagement Optimization

Maximize: Σ P(engage) × Value(engage)

где engage = {like, comment, share, save, watch_time}

Multi-objective:
- Short-term: Clicks, likes
- Long-term: Return visits, session time
- Quality: Reduce misinformation, clickbait

Balancing Stakeholders

Stakeholder Wants Metric
Users Relevant content Engagement, satisfaction
Creators Reach, engagement Impressions, followers
Advertisers ROI on ads CTR, conversion
Platform Growth, revenue DAU, time spent, ad revenue

Постановка задачи

Функциональные требования

  1. Personalization: Лента уникальна для каждого user
  2. Real-time Updates: Новый контент появляется быстро
  3. Multi-format: Posts, photos, videos, stories, ads
  4. Diversity: Не показывать только один тип контента
  5. Recency: Баланс свежести и релевантности

Нефункциональные требования

Метрика Требование Обоснование
Latency (p99) < 100ms Быстрая загрузка ленты
Throughput 500K QPS 2B users × refresh
Freshness < 1 min Новый контент быстро
Availability 99.99% Core experience

Ranking Signals

Engagement Signals

  • Like probability
  • Comment probability
  • Share probability
  • Save probability
  • Watch time (video)
  • Click-through rate

Quality Signals

  • Content quality score
  • Creator reputation
  • Originality
  • Misinformation score (negative)
  • Clickbait score (negative)

Relevance Signals

  • Topic match to user interests
  • Social connection strength
  • Content freshness
  • User-content history

Diversity Signals

  • Content type variety
  • Creator diversity
  • Topic diversity
  • Time diversity

Challenges

1. Massive Candidate Pool

graph LR
    A["500+ друзей"] --> E["10K+ кандидатов"]
    B["100+ страниц"] --> E
    C["1000+ групп"] --> E
    D["Рекомендации"] --> E
    E --> F["~50 постов<br/>в ленте"]

    style E fill:#fff3e0,stroke:#ef6c00
    style F fill:#e8f5e9,stroke:#4caf50

2. Multi-Objective Optimization

Оптимизация нескольких целей одновременно: engagement (клики, лайки), quality (борьба с дезинформацией), diversity (разнообразие контента), freshness (свежесть), creator fairness. Эти цели часто конфликтуют.

3. Position Bias

Пользователи скроллят сверху: позиция 1 получает ~50% engagement rate, позиция 10 -- всего ~5%. Тренировочные данные смещены в сторону верхних позиций.

4. Filter Bubbles

Показываем то, что user лайкал раньше -- пользователь видит только похожий контент -- эхо-камеры, поляризация. Нужны exploration и diversity.

Контент может стать вирусным за минуты. Модель должна адаптироваться быстро -- обновление сигналов в реальном времени.

Метрики успеха

Engagement Metrics

Метрика Описание
Daily Active Users Users who engage daily
Time Spent Minutes per session
Sessions per Day Return visits
Engagement Rate Actions per impression

Quality Metrics

Метрика Описание
Content Satisfaction Survey-based
Hide Rate Users hiding content
Report Rate Content reports
Misinformation Rate Flagged content

Creator Metrics

Метрика Описание
Reach Distribution Fairness of reach
New Creator Success Growth of new creators
Creator Retention Creators staying active

Trade-offs

Аспект Вариант A Вариант B
Engagement vs Quality Clickbait gets clicks Quality content
Recency vs Relevance Fresh but random Old but relevant
Personalization vs Diversity More of the same New topics
Creator vs User Show all creator content Show best only
Global vs Local trends Same for all Personalized trends

Ключевые вопросы для интервью

  1. Какой тип платформы? (social, news, professional)
  2. Какой контент? (text, photos, videos)
  3. Масштаб? (users, posts per day)
  4. Latency requirements?
  5. Multi-objective? (engagement + quality)
  6. Ads integration?
  7. Creator fairness requirements?
  8. Content policy enforcement?

Типичные заблуждения

Заблуждение: главная метрика -- engagement rate

Оптимизация только engagement без quality constraints привела к тому, что Facebook в 2018 году обнаружил: контент с дезинформацией получал на 70% больше взаимодействий. Необходим multi-objective подход: engagement + quality + safety. На практике hide/report сигналы получают веса -50x и -100x относительно лайка.

Заблуждение: свежий контент всегда лучше

Чисто хронологическая лента (reverse-chronological) снижает engagement на 20--40% по сравнению с ранжированной. Однако в 2022 Instagram показал, что пользователи хотят опцию хронологической ленты -- баланс recency и relevance зависит от платформы. Правильный подход: freshness как один из сигналов с настраиваемым весом, не как жёсткий фильтр.

Заблуждение: достаточно одного score для ранжирования

Один скалярный score теряет информацию о природе engagement. Пост с P(like)=0.8 и P(hide)=0.3 не то же самое, что пост с P(like)=0.5 и P(hide)=0.01. Multi-task модели с раздельными tower-ами дают на 5--15% лучший engagement quality, чем single-objective подход.


Интервью

Как бы вы определили основную метрику успеха для ленты новостей?

❌ "Максимизируем CTR -- клики на посты"

✅ "Нужна композитная метрика. Краткосрочно: weighted sum из P(like), P(comment), P(share) с разными весами (share ценнее лайка в 10x). Долгосрочно: return visits и session time за неделю. Плюс hard constraints на quality -- hide rate < 5%, report rate < 0.1%. В A/B тестах смотрим на все метрики одновременно, потому что рост CTR за счёт clickbait убивает долгосрочный retention."

Как вы решите проблему cold start для нового пользователя?

❌ "Покажем самый популярный контент"

✅ "5-уровневый подход: (1) демографические признаки для initial ranking, (2) популярный контент в регионе, (3) onboarding -- выбор интересов при регистрации, (4) rapid learning из первых 10--20 взаимодействий с exploration budget 20--30% ленты, (5) импорт социального графа из контактов. Переход от cold-start к персонализированной модели за 2--3 сессии."

Какие trade-offs между engagement и diversity?

❌ "Показываем только то, что пользователь любит -- это максимизирует engagement"

✅ "Чистый engagement-only ранжирование создаёт filter bubbles и снижает discovery. На практике используется MMR re-ranking с penalty за similarity к уже показанному контенту, slot-based diversity (каждый 4-5 пост -- из нового topic/creator), и exploration budget 5% ленты для новых авторов. Краткосрочно diversity снижает CTR на 2--3%, но увеличивает недельный retention на 5--8%."