AI-детекция мошеннических транзакций
Разница между антифрод-системой и детектором мошеннических транзакций — в фокусе. Антифрод — широкая дисциплина: захват аккаунтов, синтетические личности, friendly fraud. Детектор транзакций решает более узкую задачу: конкретная транзакция — мошенническая или нет? Решение нужно за 50–200ms, до авторизации.
Признаки транзакции для ML-модели
Три группы признаков определяют 80% предсказательной силы:
Velocity features. Сколько транзакций с этой карты за последние 1 минуту / 15 минут / 1 час / 24 часа. Количество уникальных merchant'ов. Суммарный объём. Вычисляются из Redis sliding window — это онлайн-признаки с latency <5ms.
Deviation from history. Насколько транзакция отличается от профиля владельца: нетипичная страна, нетипичный MCC-код, нетипичное время суток, нетипичная сумма (>3σ от personal baseline). Профиль строится заранее и хранится в feature store.
Contextual risk signals. Риск merchant'а (chargeback rate), риск IP/device (не видели раньше или в black list), BIN-риск (карта из страны X, транзакция в стране Y).
def build_transaction_features(txn: Transaction,
customer_profile: CustomerProfile,
velocity: VelocityStore) -> np.ndarray:
features = {
# Velocity
"txn_count_1h": velocity.count(txn.card_id, window="1h"),
"amount_sum_1h": velocity.sum(txn.card_id, "amount", window="1h"),
"unique_merchants_24h": velocity.nunique(txn.card_id, "merchant_id", window="24h"),
# Deviation
"amount_zscore": (txn.amount - customer_profile.avg_amount) / customer_profile.std_amount,
"is_new_country": int(txn.country not in customer_profile.known_countries),
"hour_is_unusual": int(txn.hour not in customer_profile.active_hours),
# Context
"merchant_chargeback_rate": merchant_risk_db.get(txn.merchant_id),
"device_first_seen_days": device_db.days_since_first_seen(txn.device_id),
"bin_country_mismatch": int(txn.bin_country != txn.transaction_country)
}
return np.array(list(features.values()), dtype=np.float32)
Модель и инференс
LightGBM — оптимальный выбор для большинства продакшн-кейсов: быстрый инференс, хорошая работа с пропусками (не все признаки всегда доступны), интерпретируемость через SHAP.
Экспорт в ONNX и инференс через ONNX Runtime дают latency 3–8ms на типичном наборе признаков. Это оставляет достаточно бюджета на feature retrieval из Redis и финальный decision engine.
Пороги и cost-sensitive learning
Классическая ошибка: оптимизировать на AUC и выбирать порог 0.5. В антифроде это неправильно. Стоимость ошибок асимметрична:
- FN (пропустить мошенника): прямые потери = сумма транзакции
- FP (заблокировать легальную транзакцию): стоимость обслуживания жалобы + потери от негативного UX
Строим cost matrix, находим optimal threshold под реальную экономику. Для крупных сумм порог снижается, для небольших — повышается (динамический threshold по сумме).
Онлайн-обучение и drift адаптация
Фрод-паттерны меняются быстро. Раз в месяц — слишком редко. Реализуем:
Mini-batch online learning. Модель обновляется каждые 24 часа на новых размеченных транзакциях (разметка — по факту chargeback + ручная верификация). LightGBM поддерживает continue training.
Concept drift detection. ADWIN или Page-Hinkley тест на входящем потоке признаков. При детекции дрейфа — автоматическое переобучение с уведомлением команды.
Shadow mode. Новая версия модели параллельно считает score на 100% трафика без влияния на решения. Сравниваем метрики через 48 часов — деплой при подтверждённом улучшении.
Практический кейс
Эквайринговая компания, 800 000 транзакций в день. Проблема: старая rule-based система давала False Positive Rate 3.2% — каждая 31-я легальная транзакция блокировалась. Потери от FP: жалобы, churn, репутация у merchant'ов.
После ML-детектора (LightGBM, 180 признаков, ONNX Runtime):
- FPR снизился до 0.6%
- Fraud Detection Rate при том же FPR: +34%
- P99 latency решения (feature retrieval + inference): 67ms
- Автоматическое обнаружение нового фрод-паттерна (волна по конкретному BIN): 3 часа вместо дня ручного анализа
Ключевой инсайт: 60% прироста точности дало добавление velocity-признаков с разными временными окнами (1 мин / 5 мин / 1 час) — они захватывают координированные атаки на несколько карт одновременно.
Сроки: 4–8 недель для базового детектора, 10–16 недель для production-системы с real-time feature store, онлайн-обучением и мониторингом.







