Основные выводы
Поскольку мы являемся крупнейшей в мире криптобиржей, нам крайне важно иметь систему обнаружения рисков, которая быстра, но не ставила под угрозу точность.
Задача, с которой мы столкнулись, заключалась в том, чтобы наши модели всегда использовали актуальную информацию, особенно при обнаружении подозрительной активности в учетной записи в режиме реального времени.
Чтобы добиться большей согласованности функций и большей скорости производства, мы теперь делаем разумные предположения о наших данных и объединяем наши пакетные и потоковые конвейеры.
Узнайте, как наш конвейер разработки функций создает надежные и согласованные функции для обнаружения мошеннических выводов средств на платформе Binance.
Внутри нашего конвейера машинного обучения (ML), о котором вы можете узнать больше в предыдущей статье, мы недавно создали автоматизированный конвейер разработки функций, который преобразует необработанные данные в многократно используемые онлайн-функции, которые можно использовать во всех моделях, связанных с рисками.
В процессе создания и тестирования этого конвейера наши специалисты по данным столкнулись с интригующей проблемой согласованности функций: как нам создать точные наборы онлайн-функций, которые динамически меняются с течением времени?
Рассмотрим такой реальный сценарий: криптовалютная биржа — в данном случае Binance — пытается обнаружить мошеннический вывод средств до того, как деньги покинут платформу. Одним из возможных решений является добавление в вашу модель функции, которая определяет время, прошедшее с момента последней конкретной операции пользователя (например, входа в систему или привязки мобильного телефона). Это будет выглядеть примерно так:
user_id|last_bind_google_time_diff_in_days|...
1|3,52|...
Проблема реализации
Количество ключей, необходимых для расчета и обновления функций в онлайн-хранилище функций, нецелесообразно. Использование потокового конвейера, такого как Flink, было бы невозможно, поскольку он может подсчитывать пользователей только по записям, поступающим в Kafka в настоящий момент.
В качестве компромисса мы могли бы использовать пакетный конвейер и согласиться на некоторую задержку. Допустим, модель может получить функции из онлайн-магазина функций и выполнить вывод в реальном времени примерно за один час. В то же время, если хранилищу функций потребуется один час для завершения расчета и приема данных, пакетный конвейер — теоретически — решит проблему.
К сожалению, есть одна вопиющая проблема: использование такого пакетного конвейера требует очень много времени. Это делает невозможным завершение операции в течение одного часа, если вы являетесь крупнейшей в мире криптобиржей, имеющей около ста миллионов пользователей и ограничение TPS для записи.
Мы обнаружили, что лучше всего делать предположения о наших пользователях, тем самым сокращая объем данных, поступающих в наше хранилище функций.
Облегчение проблемы с помощью практических предположений
Онлайн-функции принимаются в режиме реального времени и постоянно меняются, поскольку представляют собой самую актуальную версию среды. Имея активных пользователей Binance, мы не можем позволить себе использовать модели с устаревшими функциями.
Крайне важно, чтобы наша система как можно скорее отмечала любые подозрительные операции по снятию средств. Любая дополнительная задержка, даже на несколько минут, дает злоумышленнику больше времени, чтобы скрыть свои преступления.
Итак, в целях эффективности мы предполагаем, что недавние входы в систему сопряжены с относительно более высоким риском:
Мы обнаружили, что (250 дней + 0,125 [3/24 задержки] дня) дает относительно меньшие ошибки, чем (1 день + 0,125 [3/24 задержки] дня).
Большинство операций не превысят определенный порог; скажем, 365 дней. Чтобы сэкономить время и вычислительные ресурсы, мы опускаем пользователей, которые не заходили в систему более года.
Наше решение
Мы используем лямбда-архитектуру, которая включает в себя процесс объединения пакетных и потоковых конвейеров для достижения большей согласованности функций.
Как выглядит решение концептуально?
Пакетный конвейер: выполняет разработку функций для огромной базы пользователей.
Потоковый конвейер: устраняет задержку пакетного конвейера для недавних входов в систему.
Что, если запись будет добавлена в онлайн-хранилище функций между временем задержки пакетной загрузки?
Наши функции по-прежнему сохраняют высокую согласованность, даже если записи принимаются в течение одночасового периода задержки пакетного приема. Это связано с тем, что онлайн-магазин функций, который мы используем в Binance, возвращает последнее значение на основе event_time, которое вы указываете при получении значения.
Присоединиться к нашей команде!
Заинтересованы в использовании машинного обучения для защиты крупнейшей в мире криптоэкосистемы и ее пользователей? Ознакомьтесь с разделом Binance Engineering/AI на нашей странице вакансий, чтобы узнать о вакансиях.
Для получения дополнительной информации прочитайте следующие полезные статьи:
(Блог) Использование MLOps для создания сквозного конвейера машинного обучения в реальном времени
(Блог) Подробный обзор нашего магазина функций машинного обучения
