Генерация compromised fraud транзакций

Репозиторий проекта: Ссылка
Диаграммы: Подробная диаграмма структуры генератора

Ноутбук:

Указатель

  1. Суть генерации
  2. Конфиги и данные для генерации
  3. Генерация времени
  4. Генерация части данных транзакции
  5. Генерация суммы транзакции
  6. Генерация одной транзакции
  7. Генерация нескольких транзакций
  8. Оркестрация генерации

Суть генерации

Генерируется фрод под несколько антифрод правил. Это значит, что транзакции генерируются с такими значениями, чтобы попадать под придуманные антифрод правила. Транзакции при генерации сразу помечаются под какое они правило. В итоговой таблице это просто выглядит как-будто был детект по конкретному антифрод правилу.

Правило выбирается случайно, но у правил есть веса, но их можно изменить т.к. правила берутся из класса с конфигами, а класс с конфигами берет их из файла.

Список правил

  1. fast_geo_change - быстрая смена геопозиции между транзакциями, при том фрод транзакция - оффлайн. Метрика это просто скорость с которой нужно перемещаться между совершением транзакций, чтобы вписаться по времени в расстояние между ними. В конфиг файле под этот фрод - compr.yaml - выставляется пороговая скорость км/ч, например 800, выше этого порога - фрод по этому правилу.
  2. fast_geo_change_online - то же самое что и первое, но для онлайн транзакций т.е. когда текущая транзакция это онлайн
  3. new_device_and_ip - транзакция с незнакомого устройства и IP-адреса. IP-адрес при этом отличного от клиента города. Отличается от правил с гео скачком, тем что при создании времени учитывается расстояние между координатами транзакций и порог скорости - скорость всегда ниже или равна пороговой, чтобы не попадать под гео правило.
  4. new_device_and_high_amount - транзакция с незнакомого устройства и IP-адреса. Но при этом IP-адрес совпадает по городу с городом клиента. Также транзакция на большую сумму - у compromised фрода свои параметры для сумм по категориям покупок.
  5. trans_freq_increase - внезапное учащение транзакций. Серия из более чем n транзакций с интервалами например до 5 минут. n это порог с которого частые транзакции “детектятся” по этому правилу, например, 4 транзакции. n выставляется в конфигах - compr.yaml. Там же выставляется мин. и макс. возможные интервалы между транзакциями при таком фроде, по умолчанию это 1 и 5 минут.

Все правила кроме trans_freq_increase подразумевают генерацию одной транзакции на клиента. Для trans_freq_increase в конфиг файле выставляется мин. и макс. возможное число транзакций в серии для одного клиента. Мин. значение является также порогом с которого происходит “детект” по этому правилу.

Сгенерированные транзакции пишутся в отдельный файл.

Конфиги и данные для генерации

Также как и в легальных транзакциях у compromised фрода есть свои конфиги и данные в которых он нуждается для генерации. Все это точно также упаковывается в конфиг класс и передается в функции и классы относящиеся к compromised фроду.

Генерация времени

Время всегда основывается на времени последней легальной транзакции. Т.к. координаты создаваемой транзакции генерируются до создания её времени, то при создании времени считается дистанция между координатами последней легальной транзакции и текущей. И в соответствии с правилом и выставленным порогом скорости перемещения высчитывается разница во времени между последней легальной и фрод транзакцией - в случае с trans_freq_increase между последней легальной и первой фрод в серии транзакций, последующие фрод транзакции уже отталкиваются от времени предыдущей фрод транзакции и прибавляют случайную небольшую разницу в соот-вии с конфигами.

Функции

Генерация части данных транзакции

Также как и для легальных транзакций, часть данных транзакции генерируется отдельным объектом. В случае с compromised фродом это: ID мерчанта, координаты, город, id устройства, канал транзакции, тип транзакции. Этим занимается отдельный класс - FraudTxnPartData. Этот класс генерирует эти данные в соответствии с выпавшим антифрод правилом.

Разница с легальными транзакциями в том что:

Генерация суммы транзакции

Для compromised фрода сумму генерирует отдельный класс - TransAmount. В него передается объект конфиг класса в котором есть информация о категориях покупок и характеристиках их сумм чисто под фрод. Также в конфиг классе содержатся отдельные характеристики сумм под правило trans_freq_increase

Генерация одной транзакции

Функция gen_purchase_fraud_txn. В основном использует отдельные функции и классы для генерации данных

  1. случайно выбирает категорию исходя из переданного правила - через специальную функцию
  2. генерирует сумму - через TransAmount
  3. генерирует частичные данные - через FraudTxnPartData
  4. считает гео дистанцию от последней легальной транзакции - через функцию calc_distance
  5. генерирует время - через функцию get_time_fraud_txn
  6. остаточные данные, например: статус, флаг is_fraud, метку правила определят сама.

Генерация нескольких транзакций

Функция gen_multi_fraud_txns

  1. Проходит циклом через переданных в конфиг классе клиентов
  2. На каждом клиенте случайно выбирает правило, под которое создастся транзакция
  3. Если правило это trans_freq_increase то выбирает случайное число транзакций и генерирует это кол-во при помощи специальной функции обертки для функции создания одной транзакции - trans_freq_wrapper
  4. Если это другое правило, то просто генерирует одну транзакцию через функцию создания одной транзакции gen_purchase_fraud_txn
  5. Когда все сгенерировано, то транзакции записываются в файл в двух копиях при помощи специального класса FraudTxnsRecorder

Оркестрация генерации

Для compromised фрода есть отдельный класс оркестратор - ComprRunner, который получает на вход данные конфиг файлов и путь к директории текущего запуска. Исходя из этих данных он создает объект конфиг билдера, через билдер создает объект конфиг класса и объекты других нужных классов.
При вызове run() метода оркестратора происходит полный процесс генерации compromised fraud транзакций.