Задача
Платёжный сервис: решение fraud/not нужно принимать прямо в потоке, за десятки миллисекунд, иначе деньги успевают уйти. Объём — миллионы транзакций в сутки, фрод постоянно мутирует, а цена ошибки двусторонняя: пропустишь — потеря, перебдишь — заблокируешь живого клиента и потеряешь платёж.
Скоринг постфактум, который был раньше, опаздывал по определению — к моменту вердикта транзакция уже прошла.
Подход
Перенесли скоринг в потоковую обработку (Kafka в Flink). Поверх событий считаем графовые признаки в реальном времени: связи карт, устройств, получателей — именно граф ловит организованные схемы, которые по отдельной транзакции невидимы. Модель обновляется инкрементально, под дрейф фрода.
Перед боевым включением гоняли в теневом режиме параллельно со старой системой и сравнивали вердикты, чтобы не резать живой трафик вслепую. В проде — онлайн-мониторинг дрейфа и метрик по сегментам, чтобы деградация ловилась до того, как её заметит бизнес.
Стек
Kafka · Flink · graph features · online ML · feature store + gRPC
Результат
- 40 мс p99 на решение прямо в потоке.
- −47% потерь от фрода.
- −31% ложных блокировок живых платежей.
- Дрейф фрода ловится онлайн, без переобучения по графику.