Собесов

khangich (Netflix): фрод-детекция по логам логинов

ML / Data ScienceML System DesignСложнаяSenior

Условие

У вас есть месяц логов Netflix: account_id, device_id, метаданные платежей. Как обнаружить фрод — кражу аккаунта (account takeover) и платёжный фрод?

Решение

Подход

Две задачи, две модели. Общий каркас: фичи → классификатор → правила.

1. Account takeover (ATO).

  • Сигналы аномалии: новый device_id, новая страна / IP, рост числа одновременных сессий, ночные логины для дневного пользователя.
  • Целевая разметка: подтверждённые случаи возврата паролей / жалоб пользователей.
  • Модель: gradient boosting на per-event фичах + последовательность последних 30 логинов (LSTM или агрегаты count_last_24h).

2. Payment fraud.

  • Сигналы: карта впервые на этом аккаунте, страна карты ≠ страна логина, chargeback в истории, BIN карты в чёрном списке.
  • Сильный класс-имбаланс (≤ 1%): class_weight='balanced', focal loss, PR-AUC как метрика.
  • Калибровка вероятностей — критична: триггер «hold payment» при p > τ, τ выбирается под бизнес-ограничение.

3. Признаки.

  • Сессионные: длина сессии, число одновременных стримов.
  • Истории: разница между текущим IP/девайсом и историческим распределением.
  • Графовые: один device_id, привязанный к 10 аккаунтам — сигнал sharing/abuse.
  • Эмбеддинги девайсов: автоэнкодер или Word2Vec по последовательностям account → device.

4. Архитектура production.

  • Online inference на стриме логинов (Kafka → Flink/Spark Streaming → модель).
  • Реакция: блок логина, запрос 2FA, мягкая капча.
  • Offline пересчёт фичей и retraining раз в неделю.

5. Метрики.

  • Offline: PR-AUC, recall@precision=0.95.
  • Online: доля заблокированных, false positive rate (жалобы пользователей), доля предотвращённых chargebacks.
import lightgbm as lgb
 
model = lgb.LGBMClassifier(
    objective="binary",
    is_unbalance=True,
    n_estimators=500,
)
model.fit(X_train, y_train, eval_set=[(X_val, y_val)], eval_metric="average_precision")

Подводные камни

  1. Дешёвая метка. Подтверждённый фрод — это только верхушка айсберга; в «нефроде» полно скрытых положительных. Используйте PU-learning или semi-supervised, или таргетируйте только верифицированные случаи и принимайте, что мы недодиагностируем.
  2. Concept drift. Атакующие меняют тактику; модель надо мониторить и переобучать. Дашборд: распределение скоров по часам, доля high-risk.
  3. Cost of false positive. Заблокировать честного пользователя — больно. Лучше step-up через 2FA, чем жёсткий блок.
  4. Latency. Inference на логине должен укладываться в 100-200 мс. Heavy LSTM может не успеть — берите GBM + предрасчитанные эмбеддинги.

Эталонный ответ

Две модели: ATO и payment fraud. GBM на per-event и сессионных фичах + графовые/историчные признаки. Метрика — PR-AUC, recall@precision. На проде — streaming inference и step-up auth вместо жёсткого блока. Регулярное переобучение из-за concept drift обязательно.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти