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

Предсказание кликов рекламы: определение задачи

~4 минуты чтения

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

Рекламный рынок генерирует \(600+ млрд в год, и практически весь этот объём управляется ML-моделями предсказания кликов (CTR prediction). Улучшение AUC модели Google Ads на 0.1% приносит ~\)280 млн дополнительной выручки в год. При этом требования экстремальны: 1M+ QPS, latency <10ms, калибровка predicted CTR с actual CTR в пределах 2%. Это один из самых высокооплачиваемых кейсов на ML System Design интервью в Google, Meta, Amazon, TikTok.

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

Ad Click Prediction (CTR Prediction) -- ML-система для предсказания вероятности клика на рекламу. Основа монетизации для Google, Facebook, TikTok и любой платформы с рекламой.

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

Компания Тип рекламы Объём Revenue
Google Ads Search + Display 8.5B searches/day $280B/year
Meta Ads Feed + Stories 2B users $130B/year
Amazon Ads Product ads 300M products $40B/year
TikTok Ads Video ads 1B users $15B/year

Бизнес-модель

Auction Types

1. CPC (Cost Per Click)
   - Рекламодатель платит за клик
   - Bid × P(click) = ожидаемый доход

2. CPM (Cost Per Mille)
   - Платит за 1000 показов
   - Используется для brand awareness

3. CPA (Cost Per Action)
   - Платит за конверсию
   - Bid × P(click) × P(conversion|click)

Ranking Formula

# Expected revenue from ad
expected_revenue = bid × P(click)

# Ranking score (simplified)
ad_score = bid × predicted_ctr × quality_score

# Winner of auction
winner = argmax(ad_score for ad in candidates)

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

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

  1. CTR Prediction: P(click | ad, user, context)
  2. Real-time Scoring: < 10ms latency
  3. Personalization: Учёт preferences пользователя
  4. Multi-format Support: Text, image, video ads
  5. Budget Management: Не перерасходовать бюджет

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

Метрика Требование Обоснование
Latency (p99) < 10ms Real-time auction
Throughput 1M QPS Масштаб платформы
Availability 99.99% Revenue loss
Model Freshness < 1 hour Быстрая адаптация

Unique Challenges

1. Extreme Scale

- Billions of ad requests per day
- Millions of ads in inventory
- Must score in milliseconds

2. Massive Feature Space

- User features: demographics, history, interests
- Ad features: creative, advertiser, targeting
- Context: time, device, page content
- Cross features: user×ad interactions
- Total: billions of feature combinations

3. Class Imbalance

CTR ~ 1-2%
- 98% negative examples
- Нужны специальные методы

4. Distribution Shift

- Новые ads появляются постоянно
- User behavior меняется
- Trends и события влияют на CTR

5. Cold Start

- Новые ads без истории
- Новые users без профиля
- Exploration vs Exploitation

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

Offline Metrics

Метрика Описание Formula
AUC-ROC Ranking quality Area under ROC curve
Log Loss Calibration -Σ(y log(p) + (1-y) log(1-p))
Normalized Entropy Relative improvement NE = -(Σ log(p)) / (-n × H(CTR))
Calibration Predicted vs Actual Σ predicted / Σ actual ≈ 1

Online Metrics

Метрика Описание Target
Revenue Total ad revenue
eCPM Effective cost per mille
CTR Click-through rate Maintain
User Engagement Non-ad engagement Maintain
Advertiser ROI Return on ad spend

Calibration Importance

# Calibration is critical for auctions
# If we predict 2% CTR but real is 1%:
# - Advertiser pays 2x expected
# - Bad for advertiser trust
# - Eventually loses advertisers

def calibration_error(predicted, actual):
    """Measure calibration quality"""
    bins = create_bins(predicted, n_bins=10)
    error = 0
    for bin in bins:
        pred_avg = mean(predicted[bin])
        actual_avg = mean(actual[bin])
        error += abs(pred_avg - actual_avg) * len(bin)
    return error / len(predicted)

Feature Categories

1. User Features

  • Demographics (age, gender, location)
  • Interests (inferred from behavior)
  • Device (mobile, desktop, OS)
  • Historical CTR per category
  • Time since last ad click

2. Ad Features

  • Advertiser reputation
  • Ad creative quality
  • Landing page quality
  • Historical CTR
  • Bid amount

3. Context Features

  • Time of day, day of week
  • Page/content context
  • Device screen size
  • Network type

4. Cross Features

  • User × Ad category affinity
  • User × Advertiser history
  • User × Creative type preference

Trade-offs

Аспект Вариант A Вариант B
Revenue vs UX Более релевантные ads Меньше ads
Short vs Long term Кликбейт высокий CTR Quality content
Exploration vs Exploitation Показать новые ads Показать proven
Latency vs Accuracy Простая модель быстрая Сложная точная
Privacy vs Personalization Больше targeting Меньше данных

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

  1. Тип рекламы? (search, display, video, native)
  2. Auction type? (CPC, CPM, CPA)
  3. Масштаб? (QPS, number of ads)
  4. Latency budget?
  5. Какие features доступны?
  6. Privacy constraints? (GDPR, no 3rd party cookies)
  7. Cold start handling? (новые ads/users)
  8. Multi-objective? (CTR + CVR + engagement)

Заблуждение: AUC -- главная метрика для CTR модели

AUC оценивает ранжирование (порядок), но не калибровку (точность predicted probability). Для аукционов калибровка критична: если модель предсказывает CTR=2%, а реальный CTR=1%, рекламодатель платит в 2 раза больше и уходит с платформы. Normalized Entropy (NE) и calibration ratio (predicted/actual) -- основные метрики в production.

Заблуждение: class imbalance (CTR ~1-2%) решается oversampling

Oversampling/undersampling нарушает калибровку, что критично для аукциона. Вместо этого используют: (1) weighted loss с коррекцией на positive rate, (2) calibration post-hoc (isotonic regression), (3) negative downsampling с калибровочной коррекцией p_calibrated = p / (p + (1-p)/w), где w -- downsampling rate.

Заблуждение: свежесть модели не критична

В рекламе distribution shift происходит за часы (новые кампании, события, тренды). Модель, обученная неделю назад, может потерять 5-10% AUC. Meta и Google переобучают модели каждые 1-6 часов через incremental learning (warm start с новыми данными).

На интервью

Типичные ошибки:

❌ "Оптимизируем AUC и всё" -- не упоминает калибровку, которая определяет цену за клик в аукционе. Потеря калибровки = потеря рекламодателей.

❌ "Используем BERT для предсказания CTR" -- BERT inference ~10ms на одну пару, а нужно скорить 100+ ads за <10ms total. Нужны эффективные архитектуры (DCN, DeepFM, DIN).

❌ "Обучаем модель на всех данных за год" -- не учитывает distribution shift. Данные недельной давности уже устарели для рекламы.

Сильные ответы:

✅ "Ключевая метрика -- Normalized Entropy + calibration ratio (predicted/actual ~= 1.0). AUC важен, но без калибровки аукцион не работает корректно."

✅ "Для class imbalance (CTR ~1-2%) использую negative downsampling с калибровочной коррекцией, а не oversampling, чтобы сохранить калибровку."

✅ "Three-stage pipeline: candidate selection (targeting + budget filter, 1M -> 1K) -> lightweight model (LR, 1K -> 100) -> deep model (DCN-V2, 100 ads -> ranked). Total latency <10ms."