Репозиторий проекта:
Ссылка
Диаграммы: Подробная диаграмма структуры генератора
Ниже ноутбуки в которых по порядку продемонстрирован процесс написания генератора транзакций с демонстрацией основных классов и функций генератора. Начинается с создания данных необходимых для генерации транзакций и продолжается описанием и демонстрацией частей генератора. Заканчивается все описанием и демонстрацией конечного скрипта агрегирующего все разделы генерации: легальные транзакции и фрод всех типов.
Также в конце добавил ноутбук о загрузке транзакций и других данных в SQL базу данных.
Пояснение: compromised client fraud это фрод когда либо аккаунт либо карта клиента скомпрометированы. Т.е. кто-то другой совершает операции через них. В генерации нет конкретного обозначения аккаунта или карты, есть просто online статус транзакции, т.е. транзакция либо онлайн - как-будто мобильное приложение или веб-приложение на ПК; либо оффлайн - как-будто карта. Далее иногда буду называть этот фрод просто compromised fraud.
Генератор состоит из четырех разделов генерации:
Генератор написан с применением функций и классов как основы. Разделы генерации легальных транзакций и compromised фрода больше основаны на функциях и частично на классах. При написании генерации дропов я решил перейти полностью на классы как основу кода, а функции как вспомогательный инструмент.
Параметры генерации задаются в yaml
файлах в папке config/
Принцип генерации - каскадный. Все разделы генерируются по очереди: легальные, compromised fraud, дропы распределители, дропы покупатели.
Между разделами есть зависимости. Генерация compromised fraud зависит от легальных транзакций т.к. клиенты у кого будет compromised fraud это случайно выбранная часть клиентов для кого мы сгенерировали легальные транзакции. Генерация фрода под некоторые типы правил требует наличия легальных транзакций у клиента - например, резкая смена геопозиции между транзакциями.
Генерация транзакций дропов зависит от предыдущих этапов только в плане расчета того, сколько примерно транзакций нужно сгенерировать, т.к. берется число фактически сгенерированных легальных транзакций и от него считается сколько транзакций должно быть у дропов, чтобы вписаться в выставленный drop rate. Из расчитанного количества транзакций берется число клиентов необходимых для генерации этого числа транзакций.
О числе транзакций и клиентов говорится “примерно” т.к. в генерации легальных транзакций количество транзакций для каждого клиента это случайное число из нормального обрезанного распределения. Желаемое количество транзакций выставляется в конфиг файле, но из-за рандомизации все же колеблется. В compromised фроде тоже есть элемент случайности числа транзакций для одного из правил.
В целом, касательно количества транзакций, все выглядит так:
Диаграмма соотношений легальных и фрод транзакций
В итоге все разделы генерации объединяются в единый
генератор в скрипте run_generator.py
Название колонки | Описание |
---|---|
client_id | ID клиента |
txn_time | Время транзакции |
unix_time | UNIX-время |
amount | Сумма |
type | Тип транзакции |
channel | Канал |
category | Категория |
online | Онлайн (да/нет) |
merchant_id | ID торговой точки |
trans_city | Город транзакции |
trans_lat | Широта |
trans_lon | Долгота |
trans_ip | IP-адрес |
device_id | ID устройства |
account | Счёт |
is_fraud | Фрод (да/нет) |
is_suspicious | Подозрение (да/нет) |
status | Статус транзакции |
rule | Антифрод правило |
Файлы создаваемых транзакций пишутся в две директории:
Список разделов. По ссылкам развернутое описание каждого раздела. Либо просто нажмите на кнопку "Далее" ниже.