Сорок миллисекунд — это не пожелание
Бюджет времени задан снаружи. У платежной операции есть таймаут, внутри которого должны уложиться все участники цепочки. Антифроду из этого достается небольшая доля, и она не обсуждается: превысил — операция уходит без проверки либо срывается совсем, и оба исхода плохи.
Поэтому проект с самого начала строился вокруг жесткого бюджета. Все, что не помещается в 40 миллисекунд на девяносто девятом перцентиле, считается недоступным для онлайн-контура и переносится в фон.
Две ошибки, и обе видит клиент
Пропущенное мошенничество — прямые потери и разбирательство. Ложная блокировка — несостоявшаяся покупка, звонок в поддержку и клиент, который в следующий раз заплатит картой другого банка.
Обычно эти показатели разменивают друг на друга движением порога. Наша задача формулировалась иначе: сдвинуть кривую так, чтобы улучшились оба. Именно поэтому основную ставку сделали на новые источники сигнала, а не на перенастройку существующей модели.
Граф ловит то, чего не видно в транзакции
Отдельная операция может выглядеть безупречно: обычная сумма, обычное время, привычная категория. Мошенничество промышленного масштаба видно не в операции, а в связях между операциями.
Мы построили граф сущностей: карта, устройство, адрес доставки, телефон, счет получателя. Ребра — совместные появления в операциях. Дальше работают признаки соседства: сколько разных карт видело это устройство за сутки, как быстро растет кластер вокруг нового адреса, есть ли короткий путь от текущей операции до известного мошеннического узла.
Именно эти признаки дали основной вклад в снижение потерь: одиночную операцию подделать легко, а связи вокруг нее — заметно сложнее.
Признаки, которых нет в базе
Часть сигналов существует только в потоке: число операций по карте за последнюю минуту, сумма за час, скорость смены географии, интервал между попытками. Считать их запросом в базу на каждой транзакции нельзя — не уложиться в бюджет.
Поэтому они считаются потоково, в скользящих окнах, и лежат в быстром хранилище к моменту прихода операции. Отдельная работа — согласованность окон между обучением и боем: окно, посчитанное по-разному, дает модели признак с другим смыслом.
Правила и модель работают вместе
Чистая модель в антифроде неудобна по двум причинам. Ее решение трудно объяснить клиенту и проверяющему, и ее нельзя мгновенно поправить при новой схеме мошенничества — нужен цикл переобучения.
Поэтому в контуре живут оба механизма. Правила закрывают известные схемы, дают мгновенную реакцию на новую волну и обеспечивают объяснимость. Модель ловит то, что под правила не подводится. Решение принимается совместно, и в журнале всегда записано, что именно сработало.
Разметка приходит с опозданием
Главная методическая сложность жанра: правда о транзакции становится известна не сразу. Оспаривание операции может прийти через недели. Это значит, что свежие данные почти не размечены, а модель, обученная на полностью размеченной выборке, всегда живет в прошлом.
Что с этим делаем: обучение идет с учетом задержки поступления меток, качество измеряется на периодах, где разметка уже созрела, а для быстрой реакции на новые схемы используется контур правил и сигналы аномальности, не требующие меток. Плюс контроль дрейфа: изменение распределения признаков — повод пересмотреть модель раньше, чем придут подтвержденные потери.
Что происходит при отказе
Отдельно проектировалось поведение при недоступности части контура. Потеря быстрого хранилища признаков не должна означать остановку платежей: система переходит на сокращенный набор признаков и более консервативные правила. Решение хуже по качеству и принимается вовремя.
Аналитик должен понимать решение за минуту
Отдельным требованием шла работа команды разбора. Операция, отправленная на ручную проверку, приходит к аналитику не голым вердиктом, а с контекстом: какие правила сработали, какие признаки оказались решающими, как выглядит окружение операции в графе связей и что происходило по этой карте за последний час.
Это не украшение интерфейса. Аналитик разбирает поток спорных случаев, и время на один случай — прямая стоимость эксплуатации системы. Разбор, требующий десяти запросов в разные системы, делает антифрод дорогим независимо от качества модели.
Что остается за контуром
- Система не выносит окончательный вердикт по сложным случаям — они уходят аналитику с полным контекстом операции и графом связей.
- Не заменяет процедуры банка: подтверждения, лимиты, обучение клиентов. Это часть общей защиты.
- Плохо работает без истории: новый продукт с нулевой историей операций проверяется правилами, пока не накопится статистика.
- Не решает социальную инженерию сама по себе: операция, которую клиент делает добровольно под давлением мошенника, выглядит легитимной по всем признакам, кроме поведенческих.
Направления рядом — потоковые ML-системы, предиктивная аналитика и эксплуатация моделей.