Команда по обеспечению программной целостности собрала шесть SQL-паттернов для выявления мошенничества в транзакциях, отказываясь от машинного обучения в пользу чистой SQL-алгоритмики. Эти шаблоны работают на любом типе данных: от кредитных карт и медицинских счетов до розничных продаж, где фиксируется движение денег. Сначала проверяют скорость операций. Если клиент списывает средства с карты быстрее, чем уведомится владелец, срабатывает фильтр по количеству транзакций за короткий интервал. Используют скользящие окна в один час или пять минут, параллельно запустив разные версии проверки. Важный нюанс: нужно учитывать фиктивных пользователей, например операторов автоматов или людей, массово пополняющих предоплаченные карты, и вешать белый список. Следующий шаблон ловит невозможную перелётность. Если карта используется в Чикаго, а через семь минут — в Лос-Анджелесе, операция считается поддельной. Функция haversine считывает расстояние между точками, а порог скорости ставится выше скорости самолета, например 600 миль в час. Меньшие значения, например 100 миль в час, могут зацепить реальную транспортную компанию, поэтому лучше ориентироваться на авиаперелёты. Третий паттерн ищет аномалии в сумме. Округленные суммы в долларах, такие как один или пять, почти всегда означают проверку карты по номеру из дампа данных. Суммы чуть ниже порога, например 99.99 вместо 100, уловляют мошенников, знающих лимиты на идентификацию. Для льготных программ это не так актуально, там важнее дублирование получателей. Четвёртый шаблон мониторит подозрительных продавцов. Если на одном топливном насосе за неделю проходят десятки разных карт, магазин в красном списке. Статичные пороги не учитывают масштаб бизнеса, поэтому сравнивают текущую активность с усредненным показателем за предыдущие тридцать дней. Если количество уникальных карт превысило норму в три раза, сигнал срабатывает. Пятый паттерн ловит операции вне привычного времени. Люди привыкли тратить деньги в рабочее время. Если карта срабатывает в три часа утра, а клиент обычно активен только с девяти до пяти, это повод для проверки. Фильтр требует минимум двух транзакций в час за последние девяносто дней, чтобы исключить единичные случаи. Для новых клиентов с историей нужно применять глобальные шаблоны или временно пропускать проверку. Шестой паттерн объединяет всё это с оконными функциями. Он добавляет столбцы, показывающие время с последней операции, смену места покупки и общую сумму за двадцать четыре часа. Теперь любые правила превращаются в простые фильтры: например, если за день больше пяти сделок, смена продавца произошла и прошло меньше минуты. Такой подход ускоряет цикл анализа с недель до часов. Важно комбинировать все методы: ни один не идеален. Одни дают ложные срабатывания от честных клиентов, другие пропускают мелкие преступления внутри одного района. Лучше всего считать баллы по всем сигналам одновременно. Три-четыре совпадения почти гарантируют мошенничество, одно — может быть объяснено отпуском. Новичкам стоит начать с проверки скорости, она дешева и эффективна. Далее инвестировать в оконные функции, чтобы аналитики могли быстро формулировать гипотезы. Также нужно помнить об очистке данных: старые системы используют специальные значения вместо null, поэтому стоит проверить их перед фильтрацией. Ложные срабатывания требуют ручной проверки, автоматическая блокировка без анализа убьет репутацию. При работе с персональными данными соблюдайте правила приватности, а при использовании оконных функций сначала фильтруйте по дате, чтобы не сжигать бюджет вычислений.
Команда заменила машинное обучение на SQL-шаблоны для поиска мошенников
15.05.2026 23:22 · hackernews