主要要點
作為世界上最大的加密貨幣交易所,我們擁有一個快速且不影響準確性的風險檢測系統至關重要。
我們遇到的挑戰是確保我們的模型始終使用最新信息,特別是在實時檢測可疑帳戶活動時。
為了實現更強的功能一致性和更高的生產速度,我們現在對數據做出合理的假設,並將批次和流處理管道結合起來。
了解我們的功能工程管道如何創建強大、一致的功能來檢測幣安平台上的欺詐性提款。
在我們的機器學習(ML) 管道中(您可以在上一篇文章中了解更多資訊),我們最近建立了一個自動化特徵工程管道,將原始資料匯集到可重複使用的線上特徵中,這些特徵可以在所有風險相關模型之間共用。
在建立和測試此管道的過程中,我們的資料科學家遇到了一個有趣的特徵一致性問題:我們如何創建隨時間動態變化的準確線上特徵集?
考慮這個現實世界的場景:加密貨幣交易所(在本例中為幣安)正試圖在資金離開平台之前檢測到欺詐性提款。一種可能的解決方案是為模型添加一項功能,用於檢測自用戶上次特定操作(例如登入或綁定手機)以來經過的時間。它看起來像這樣:
user_id|last_bind_google_time_diff_in_days|...
1|3.52|...
實施的挑戰
計算和更新線上特徵儲存中的特徵所需的密鑰數量是不切實際的。使用串流管道(例如 Flink)是不可能的,因為它只能計算目前有記錄進入 Kafka 的使用者。
作為妥協,我們可以使用批次管道並接受一些延遲。假設一個模型可以從線上特徵儲存中獲取特徵並在大約一小時內執行即時推理。同時,如果特徵儲存需要一小時才能完成計算和攝取數據,理論上批次管道將解決該問題。
不幸的是,有一個明顯的問題:使用這樣的批次管道非常耗時。當您是世界上最大的加密貨幣交易所,處理大約一億用戶並且寫入的 TPS 限制時,這使得在一小時內完成是不可行的。
我們發現,最佳實踐是對使用者做出假設,從而減少進入特徵儲存的資料量。
透過實際假設緩解問題
線上功能是即時取得的,並且不斷變化,因為它們代表了環境的最新版本。對於活躍的幣安用戶來說,我們不能使用功能過時的模型。
我們的系統必須盡快標記任何可疑的提款。任何額外的延遲,即使是幾分鐘,都意味著惡意行為者有更多的時間來逃脫他們的罪行。
因此,為了提高效率,我們假設最近的登入風險相對較高:
我們發現(250 天 + 0.125[3/24 延遲] 天)產生的誤差比(1 天 + 0.125[3/24 延遲] 天)相對較小。
大多數操作不會超過某個閾值;假設 365 天。為了節省時間和運算資源,我們忽略了一年多沒有登入的用戶。
我們的解決方案
我們使用 lambda 架構,這需要一個將批次和流處理管道結合起來的流程,以實現更強的功能一致性。
從概念上講,該解決方案是什麼樣的?
批量管道:為大量用戶群執行特徵工程。
串流媒體管道:補救最近登入的批次管道延遲時間。
如果在批次攝取的延遲時間之間將記錄攝取到線上特徵儲存會怎樣?
即使在一小時批量攝取延遲期間攝取記錄,我們的功能仍然保持強一致性。這是因為我們在幣安使用的線上特徵儲存根據您在檢索值時指定的 event_time 傳回最新值。
加入我們的團隊!
有興趣使用機器學習來保護世界上最大的加密生態系統及其用戶嗎?在我們的職業頁面上查看幣安工程/人工智慧以了解職位空缺。
有關更多信息,請閱讀以下有用的文章:
(部落格)使用 MLOps 建立即時端到端機器學習管道
(部落格)仔細看看我們的機器學習特徵庫
