Основні висновки

  • Оскільки ми є найбільшою у світі криптобіржею, дуже важливо, щоб у нас була система виявлення ризиків, яка є швидкою, але не поступається точністю.

  • Проблема, з якою ми зіткнулися, полягала в тому, щоб наші моделі завжди використовували актуальну інформацію, особливо під час виявлення підозрілої активності в обліковому записі в режимі реального часу.

  • Щоб досягти кращої узгодженості функцій і більшої швидкості виробництва, тепер ми робимо розумні припущення щодо наших даних і поєднуємо наші пакетні та потокові конвеєри.

Дізнайтеся, як наша розробка функцій створює надійні та узгоджені функції для виявлення шахрайських вилучень на платформі 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 для створення конвеєра наскрізного машинного навчання в реальному часі

  • (Блог) Детальніше про наш магазин функцій машинного навчання