Проверка, является ли транзакция мошеннической

CUK77

Professional
Messages
1,193
Reputation
3
Reaction score
396
Points
83
Для выявления признака, что платеж является мошенническим, существует большое количество эвристик. Некоторые компании могут похвастаться цифрой под 200 эвристик. Хотя у меня сразу возникают подозрения, что некоторые из этих эвристик либо ничем не подкреплены, либо являются следствием какой-то другой эвристики, либо это вовсе костыль, позволяющий лучше подгонять результат под обучающую выборку и не дающий никакого эффекта на реальных данных. Большое количество эвристик дает лишь: переобученную модель, неправильное распознавание является ли транзакция мошеннической и уменьшение производительности приложения.

Поэтому перечислю лишь основные и, в общем случае, наиболее эффективные эвристики:

одна карта – много IP, и обратный случай: один IP – много карт;
одна карта – много покупок/неудачных попыток;
один клиент – много карт (особенно эмитированных различными банками);
один клиент – много индексов, email'ов;
имя клиента не совпадает с именем владельца эккаунта на сайте мерчанта (если есть);
страна клиента не совпадает со страной владельца эккаунта на сайте мерчанта (если есть);
оплата происходит ночь (по локальному времени клиента).

Но «много» это сколько? За какой период времени (5 секунд или 2 недели)? Как обойти проблему, что вес фильтра x1 в не равен весу фильтра x2, а величины их весов должны динамически меняться в процессе работы приложения?

Часто основным подходом является наивное присвоение фиксированного значения для какого-то из фильтров и последующая обработка этих условий в конструкциях типа (это псевдокод, а не 1С):

if (количество_карт_с_одного_ip > 4) {
статус_платежа = отклонен;
return;
}
else {
if (количество_покупок_с_карты_за_1_час > 5) {
статус_платежа = отклонен;
return;
}
else {
// continuation magic…
}
}

// проведение платежа…

Не забывайте менять стратегии для удачных вбивов!
 
Top