Ми інтегруємо AI-детектор шахрайських транзакцій на базі LightGBM та ONNX Runtime, який аналізує кожну транзакцію за 50–200ms. За цей час система збирає velocity-ознаки з Redis, обчислює z-score відхилень, перевіряє merchant risk DB і віддає score моделі. Якщо модель помиляється з False Positive, клієнт втрачає гроші та нерви. Якщо пропускає шахрая — втрачає ще більше. Ми будуємо ML-детектори під ключ, які знижують FPR до 0.5% без втрати у виявленні. Нижче — технічна реалізація.
Наш досвід — понад 10 проектів у фінтех, де ми вирішували проблему координації ознак та дрейфу концепцій. Кожен проект — це індивідуальне налаштування feature engineering, порогів та онлайн-навчання. Ми використовуємо LightGBM з cost-sensitive навчанням та експортуємо модель в ONNX Runtime для інференсу з latency 3–8ms. Feature store на базі Redis та PostgreSQL забезпечує real-time retrieval всіх ознак. Моніторинг дрейфу через ADWIN та Page-Hinkley тести дозволяє автоматично перенавчати модель при зміні фрод-патернів. Результат: P99 latency рішення 67ms при 800 000 транзакцій на день, FPR знижено з 3.2% до 0.6%. Економія від зниження FP склала мільйони гривень щомісяця.
Які ознаки забезпечують 80% прогностичної сили?
| Група | Приклади | Джерело |
|---|---|---|
| Velocity features | Кількість транзакцій за 1 хв/1 год, сума, унікальні merchant'и | Redis sliding window (<5ms) |
| Deviation from history | Z-score суми, нова країна, незвичний час | Feature store (профіль клієнта) |
| Contextual risk signals | Chargeback rate merchant'а, device first seen, BIN mismatch | Merchant risk DB, device DB, BIN-таблиця |
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 оптимальний для антифрод-систем?
LightGBM — оптимальний вибір для більшості продакшн-кейсів: швидкий інференс (в 1.5 раза швидше за CatBoost по latency), відмінна робота з пропусками (не всі ознаки завжди доступні), інтерпретованість через SHAP. Експорт в ONNX та інференс через ONNX Runtime дають latency 3–8ms на типовому наборі ознак. Це залишає достатньо бюджету на feature retrieval з Redis та фінальний decision engine. Докладніше — LightGBM документація.
Як ми виставляємо пороги та враховуємо вартість помилок?
Класична помилка: оптимізувати на AUC та обирати поріг 0.5. В антифроді це неправильно. Вартість помилок асиметрична: FN (пропустити шахрая) — прямі втрати, рівні сумі транзакції; FP (заблокувати легальну транзакцію) — вартість обслуговування скарги та втрати від негативного UX. Будуємо cost matrix для вибору optimal threshold під реальну економіку. Для великих сум поріг знижується, для невеликих — підвищується (динамічний threshold за сумою).
Як реалізується онлайн-навчання та адаптація до дрейфу?
Фрод-патерни змінюються швидко. Раз на місяць — занадто рідко. Реалізуємо:
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 год) — вони захоплюють координовані атаки на кілька карток одночасно.
Порівняння пакетного та онлайн-навчання
| Параметр | Пакетне навчання | Онлайн-навчання |
|---|---|---|
| Частота оновлення | Раз на місяць | Щоденно |
| Адаптація до дрейфу | Низька | Висока (ADWIN) |
| Інфраструктура | Проста | Потребує pipeline |
| Латенсія оновлення | Години | Хвилини |
Що входить у реалізацію під ключ
- Feature engineering: розробка та валідація ознак, feature store на базі Redis + PostgreSQL.
- Модель: LightGBM з cost-sensitive навчанням, експорт в ONNX.
- Інфраструктура: ONNX Runtime на Kubernetes, pipeline для онлайн-навчання.
- Моніторинг: drift detection (ADWIN), розподіл score, FPR/Recall.
- Документація: model card, технічна документація, runbook.
- Навчання: тренінг команди замовника, передача коду та доступів.
- Підтримка: 3 місяці постпродакшн супроводу.
Типові помилки при впровадженні
- Використовувати AUC як єдину метрику — неправильно, потрібно враховувати cost matrix.
- Ігнорувати дрейф ознак — модель швидко застаріває.
- Не робити shadow mode перед деплоєм — ризикуєте погіршити метрики.
Етапи впровадження
- Аналітика (1–2 тижні): збір вимог, аудит даних, прототип ознак.
- Проектування (1 тиждень): архітектура feature store, ML pipeline, моніторинг.
- Розробка (2–4 тижні): модель, сервіс інференсу, online learning цикл.
- Тестування (1 тиждень): A/B-тест в shadow mode, перевірка метрик.
- Деплой (1 тиждень): production-запуск, налаштування моніторингу.
- Супровід (3 місяці): оптимізація ознак, усунення drift.
Терміни та вартість
Базовий детектор — 4–8 тижнів, production-система з real-time feature store, онлайн-навчанням та моніторингом — 10–16 тижнів. Вартість розраховується індивідуально після оцінки вашого проекту. Гарантуємо зниження FPR мінімум на 50% від поточних значень.
Замовте консультацію для оцінки вашого проекту. Зв'яжіться з нами, щоб обговорити деталі та отримати пропозицію.







