Топливный антифрод
Система детекторов фрода по топливным картам ВИНК: 14 сигналов, каждый со своим весом,
складываются в единый скор карты и компании. Построена и калибрована против живой схемы
fuel_prod1 (oktane, PostgreSQL) — не на абстрактной модели данных.
Подтверждена реальным кейсом 07/2026: та же логика, прогнанная ретроспективно на реальных
транзакциях, поймала бы фрод на 4,12 млн ₽ net-оборота (13 карт с подтверждёнными сигналами, за
вычетом возвратов) в первый день взрывной волны вместо 19 дней ручной проверки.
14 детекторов
Принцип работы, алгоритм и пороги каждого детектора — на странице «Детекторы»; там же SQL-реализация для инженеров.
| ID | Название | Категория | Вес в скоринге |
|---|---|---|---|
| D-01 | Ночная активность вне профиля карты | поведенческий | 15–25 |
| D-02 | Объём/сумма вне персональной нормы карты | — | 15 |
| D-03 | Velocity: серия заправок за короткое окно | поведенческий | 15–25 |
| D-04 | Impossible travel: недостижимые АЗС по времени | жёсткий факт | 30–40 |
| D-05 | Дубли номеров транзакций ВИНК | жёсткий факт | 30–40 |
| D-06 | Подозрительно стабильные / круглые суммы | поведенческий | 15–25 |
| D-07 | Смена типа топлива на карте | контекстный | 10–15 |
| D-08 | Систематический добор лимита под потолок | — | 15 |
| D-09 | Концентрация карты на одной АЗС | контекстный | 10–15 |
| D-10 | Карта, «гуляющая» между компаниями | контекстный | 10–15 |
| D-11 | Дрейф поведения (карта и компания) | контекстный | 10–15 |
| D-12 | Транзакции по мёртвой карте | жёсткий факт | 30–40 |
| D-13 | Доля offline/ручных операций | поведенческий | 15–25 |
| D-14 | Массовая порча лимитов компании | операционный алерт | вне скоринга карт |
Модель скоринга
Скор карты = min(100, Σ активных детекторов за окно 7 дней).
Веса группируются по надёжности сигнала: жёсткие факты (D-04/D-05/D-12) — 30–40,
поведенческие (D-01/D-03/D-06/D-13) — 15–25, контекстные (D-07/D-09/D-10/D-11) — 10–15,
остальные (D-02/D-08) — 15. D-14 — отдельный операционный алерт по компании,
в скор карты не входит.
- < 50 без алерта, накапливается в истории карты
- 50–74 жёлтый алерт — в очередь на разбор
- ≥ 75 красный алерт — авто-фриз карты по конфигу
Как это устроено
- Ночь и выходные считаются в часовом поясе региона конкретной АЗС, а не сервера — иначе весь Дальний Восток выглядел бы «ночным».
- Скорость перемещения между заправками считается по реальным координатам АЗС, а не по эвристике «рядом/не рядом».
- Каждая карта сравнивается со своей собственной историей (персональный процентиль объёма и недельного оборота), а не с усреднённой нормой по всем клиентам.
- Запросы построены под инкрементальную витрину последних 90 дней — не блокируют боевую базу полным сканированием при каждой проверке.
Дальше
- ДетекторыВсе 14 детекторов: принцип работы, алгоритм, пороги и веса, SQL-реализация для инженеров.
- Схема БДКлючевые таблицы fuel_prod1, диаграмма связей, как устроены данные под антифрод.
- Кейс 3,5 млнРеальный кейс 07/2026 (анонимизирован): как антифрод поймал бы фрод, который сейчас нашли вручную только через 19 дней.
- ИсторияФрод-схемы за 3 года на 3,88 млн транзакций: серийное клонирование карт, промышленный «прокат», двойные списания ВИНК — с реальными цифрами.
- ТЗТехническое задание на внедрение сервиса.
Схема снята против живой БД fuel_prod1 (oktane, PostgreSQL) 2026-07-24. Компания и номера карт в кейсе анонимизированы.