Główne dania na wynos
Jako największa giełda kryptowalut na świecie niezwykle ważne jest, abyśmy mieli system wykrywania ryzyka, który jest szybki, a jednocześnie nie pogarsza dokładności.
Wyzwaniem, jakie napotkaliśmy, było zapewnienie, że nasze modele zawsze korzystały z aktualnych informacji, szczególnie w przypadku wykrywania podejrzanej aktywności na koncie w czasie rzeczywistym.
Aby osiągnąć większą spójność funkcji i większą szybkość produkcji, przyjmujemy teraz rozsądne założenia dotyczące naszych danych i łączymy nasze potoki wsadowe i strumieniowe.
Odkryj, w jaki sposób nasz proces inżynierii funkcji tworzy silne, spójne funkcje do wykrywania fałszywych wypłat na platformie Binance.
W ramach naszego potoku uczenia maszynowego (ML) — o którym możesz dowiedzieć się więcej w poprzednim artykule — zbudowaliśmy niedawno zautomatyzowany potok inżynierii funkcji, który przekazuje surowe dane do funkcji online nadających się do ponownego wykorzystania, które można udostępniać we wszystkich modelach związanych z ryzykiem.
W procesie tworzenia i testowania tego potoku nasi analitycy danych napotkali intrygujący problem ze spójnością funkcji: w jaki sposób tworzymy dokładne zestawy funkcji online, które dynamicznie zmieniają się w czasie?
Rozważmy ten realny scenariusz: giełda kryptowalut – w tym przypadku Binance – próbuje wykryć oszukańcze wypłaty, zanim pieniądze opuszczą platformę. Jednym z możliwych rozwiązań jest dodanie do modelu funkcji wykrywającej czas, jaki upłynął od ostatniej określonej operacji użytkownika (np. zalogowania się lub powiązania telefonu komórkowego). Wyglądałoby to mniej więcej tak:
user_id|last_bind_google_time_diff_in_days|...
1|3,52|...
Wyzwanie wdrożenia
Liczba kluczy wymaganych do obliczania i aktualizowania funkcji w internetowym magazynie funkcji jest niepraktyczna. Korzystanie z potoku przesyłania strumieniowego, takiego jak Flink, byłoby niemożliwe, ponieważ może on obliczać tylko użytkowników z rekordami przychodzącymi w tej chwili do Kafki.
Jako kompromis moglibyśmy zastosować potok wsadowy i zaakceptować pewne opóźnienia. Załóżmy, że model może pobrać funkcje z internetowego sklepu z funkcjami i przeprowadzić wnioskowanie w czasie rzeczywistym w ciągu około godziny. Jednocześnie, jeśli magazyn funkcji zakończy obliczanie i przetwarzanie danych w ciągu godziny, potok wsadowy — teoretycznie — rozwiąże problem.
Niestety istnieje jeden rażący problem: użycie takiego potoku wsadowego jest bardzo czasochłonne. To sprawia, że zakończenie w ciągu godziny jest niewykonalne, gdy jesteś największą na świecie giełdą kryptowalut, obsługującą około sto milionów użytkowników i limit TPS dla zapisów.
Odkryliśmy, że najlepszą praktyką jest przyjmowanie założeń na temat naszych użytkowników, zmniejszając w ten sposób ilość danych trafiających do naszego magazynu funkcji.
Łagodzenie problemu za pomocą praktycznych założeń
Funkcje online są pobierane w czasie rzeczywistym i stale się zmieniają, ponieważ reprezentują najbardziej aktualną wersję środowiska. Mając aktywnych użytkowników Binance, nie możemy sobie pozwolić na korzystanie z modeli z przestarzałymi funkcjami.
Konieczne jest, aby nasz system jak najszybciej sygnalizował wszelkie podejrzane wypłaty. Każde dodatkowe opóźnienie, nawet o kilka minut, oznacza więcej czasu dla złośliwego podmiotu na uniknięcie zbrodni.
Dlatego ze względu na wydajność zakładamy, że ostatnie logowanie wiąże się ze stosunkowo większym ryzykiem:
Ustaliliśmy, że (250 dni + 0,125 [3/24 opóźnienia] dnia) powoduje stosunkowo mniejsze błędy niż (1 dzień + 0,125 [3/24 opóźnienia] dnia).
Większość operacji nie przekroczy określonego progu; powiedzmy 365 dni. Aby zaoszczędzić czas i zasoby obliczeniowe, pomijamy użytkowników, którzy nie logowali się ponad rok.
Nasze rozwiązanie
Używamy architektury lambda, która obejmuje proces, w którym łączymy potoki wsadowe i strumieniowe, aby osiągnąć większą spójność funkcji.
Jak rozwiązanie wygląda koncepcyjnie?
Batch Pipeline: Wykonuje inżynierię funkcji dla ogromnej bazy użytkowników.
Streaming Pipeline: Naprawia opóźnienie potoku wsadowego w przypadku ostatnich logowań.
Co się stanie, jeśli rekord zostanie pobrany do magazynu funkcji online pomiędzy czasem opóźnienia w przetwarzaniu wsadowym?
Nasze funkcje nadal zachowują dużą spójność, nawet jeśli rekordy są pozyskiwane w godzinnym okresie opóźnienia przetwarzania wsadowego. Dzieje się tak, ponieważ internetowy sklep z funkcjami, z którego korzystamy na Binance, zwraca najnowszą wartość na podstawie czasu_zdarzenia, który określisz podczas pobierania wartości.
Dołącz do naszej drużyny!
Interesuje Cię wykorzystanie uczenia maszynowego do ochrony największego na świecie ekosystemu kryptograficznego i jego użytkowników? Sprawdź Binance Engineering / AI na naszej stronie karier, aby zapoznać się z ofertami pracy.
Aby uzyskać więcej informacji, przeczytaj następujące pomocne artykuły:
(Blog) Wykorzystanie MLOps do zbudowania kompleksowego potoku uczenia maszynowego w czasie rzeczywistym
(Blog) Bliższe spojrzenie na nasz sklep z funkcjami uczenia maszynowego
