Предсказание кликов рекламы: определение задачи¶
~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)
Постановка задачи¶
Функциональные требования¶
- CTR Prediction: P(click | ad, user, context)
- Real-time Scoring: < 10ms latency
- Personalization: Учёт preferences пользователя
- Multi-format Support: Text, image, video ads
- 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¶
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¶
4. Distribution Shift¶
5. Cold Start¶
Метрики успеха¶
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 | Меньше данных |
Ключевые вопросы для интервью¶
- Тип рекламы? (search, display, video, native)
- Auction type? (CPC, CPM, CPA)
- Масштаб? (QPS, number of ads)
- Latency budget?
- Какие features доступны?
- Privacy constraints? (GDPR, no 3rd party cookies)
- Cold start handling? (новые ads/users)
- 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."