fintech-fab / fintech-fab.ru

Fintech Fab Website - стажировка, обучение, тренинги
4 stars 16 forks source link

Модуль антифрода платежных операций #16

Open mikanoz opened 10 years ago

mikanoz commented 10 years ago

Делаем модуль выявления мошеннических операций.

Некая система Мерчанта (продавца, который осуществляет платежные операции) совершает платежные транзакции и перед тем, как выполнить платеж, запрашивает у модуля расчет степени мошенничества по каждой транзакции. Модуль на основе истории запросов и правил фрода, рассчитывает степень мошенничества (очки фрода) и предлагает действия (заблокировать, или только уведомить).

Основа для выявления - это анализ всех предыдущих операций.

Например, по Мерчанту и точке продажи номер 1 проходит 100 платежных операций в день на общую сумму в среднем 100 тыс. руб.

В модуль вносим правило [1], что в случае превышения средних значений на 20% за 24 часа, необходимо блокировать все транзакции этого Мерчанта.

Также вносим правило [2], что с одного номера карты в данной точке продажи нельзя совершать более 1 операции за 12 часов (блокируем только эту транзакцию).

Изначально модулю неизвестна статистика предыдущих операций по данному Мерчанту и точке продажи, поэтому правило [1] может сработать только на следующий день, а правило [2] может сработать сразу, как только по номеру карты произойдет вторая транзакция в течение 12 часов.

Правила должны объединяться в группы, чтобы Мерчанту можно было привязать группу правил (некоторые группы могут быть стандартными и привязываться к разным Мерчантам).

Также присутствует возможность ручной блокировки по значению любого поля.

Основная предметная область. Некоторые таблицы описаны ниже. С остальными должно быть все ясно. Можно добавлять или менять, если понадобится, это принципиальная схема и могут быть варианты лучше.

image

FraudBlock - это блокировки, которые могут быть внесены вручную или автоматически.

from_id | источник блокировки active_to | можно назначить дату, до которой действительна блокировка field | на какое поле запроса действует блокировка value | на какое значение поля действует блокировка

Например, блокируем вручную (from_id) мерчанта (field=merchant_id) номер 123 (value=123) И если приходит транзакция с такими данными, то блокируется безусловно без проверки по правилам.

FraudRequest - это данные, которые приходят в запросе от Мерчанта на расчет фрода.

merchant_id | мерчант point_id | id точки продажи transaction_id | id транзакции transaction_type | тип транзакции amount | сумма транзакции currency | валюта транзакции pan | полный номер карты bin | бин карты (первые 6 цифр из номера) system | платежная система (виза, мастеркард и т.д) type | типа карты (кредитная, дебетовая, виртуальная и т.д.) ip | с какого ip совершается операция country | из какой страны совершается операция

FraudLimitRule - данные для правила

name | название правила actions | требуемое действие (уведомить, заблокировать, начислить очки - может быть все одновременно) target | поле, на которую направлено действие (мерчант, точка продажи, транзакция, etc) score | начисляемые очки фрода field | поле, по которому рассчитывается фрод (мерчант, точка продажи, бин карты, etc) amount | указывается для расчета фрода на сумму транзакций quantity | указывается для расчета фрода на количество транзакций period | количество времени (в минутах), для расчета по периоду percentage | чекбокс, если требуется расчет отношения количества/суммы по отношению к предыдущему периоду value | вспомогательное значение для расчета

Примеры правил на человеческом языке:

Уведомить о риске на точке продажи, если по точке продажи номер А происходит превышение общей суммы продаж на 20% по сравнению с предыдущей неделей. Заблокировать Мерчанта, если по Мерчанту номер Б произошло увеличение количества транзакций на 50% по сравнению с предыдущими 24 часами. Заблокировать bin карты, если по данному bin происходит продажа чаще, чем 100 раз в течение часа. Уведомить, если на точке продажи произошла операция на сумму более 10 тыс. руб. Уведомить, если по Мерчанту произошли операции количеством более 300 штук в течение одного часа.

mikanoz commented 10 years ago

FraudLocationRules - правила геолокации.

Мерчант или точка продажи, может быть привязан к какому либо ip, и тогда флажок check_ip ограничивает операции этого Мерчанта с иного ip. Или опцией check_ip_qnt можно сообщить, что точка продажи не может изменять свой ip более чем check_ip_qnt раз в течение period.

Та же самая логика - по региону или стране.

Регион и страну нужно будет определять самим по ip-адресу. В сети есть открытые источники баз ip и сервисы определения ip (лучше базы найти, т.к. сервисы иногда могут не работать). Для России база нужна полная (определение регионов), для нероссийских ip достаточно определить страну (регионы не участвуют).

eupathy commented 10 years ago

Положу алгоритм сюда 2014-09-01 13-53-33

Quazar99 commented 10 years ago

Хочу разобраться в этом.