創建自動系統來打擊網站入侵者(欺詐)

在過去大約六個月中,我一直在創建一個打擊欺詐(欺詐活動、欺詐等)的系統,但沒有任何初始基礎設施。 今天我們在系統中發現並實施的想法可以幫助我們檢測和分析許多欺詐活動。 在這篇文章中,我想談談我們遵循的原則以及我們為實現系統當前狀態所做的工作,而不深入研究技術部分。

我們系統的原則

當您聽到“自動”和“欺詐”等術語時,您很可能會開始考慮機器學習、Apache Spark、Hadoop、Python、Airflow 以及 Apache 基金會生態系統和數據科學領域中的其他技術。 我認為使用這些工具的一個方面通常不會被提及:在使用它們之前,您的企業系統需要滿足某些先決條件。 簡而言之,您需要一個包含數據湖和存儲的企業數據平台。 但如果你沒有這樣的平台,仍然需要發展這種做法怎麼辦? 我在下面描述的以下原則幫助我們達到了這樣的程度:我們可以專注於改進我們的想法,而不是尋找可行的想法。 然而,這並不是該項目的“停滯期”。 從技術和產品的角度來看,計劃中還有很多內容。

原則一:商業價值第一

我們將“商業價值”置於我們所有努力的首位。 一般來說,任何自動分析系統都屬於自動化水平較高、技術複雜性較高的複雜系統。 如果從頭開始創建完整的解決方案將花費大量時間。 我們決定將商業價值放在第一位,將技術成熟度放在第二位。 在現實生活中,這意味著我們不接受先進技術作為教條。 我們選擇目前最適合我們的技術。 隨著時間的推移,我們似乎必須重新實現一些模塊。 這是我們接受的妥協方案。

原則 2:增強智能

我敢打賭,大多數沒有深入參與開發機器學習解決方案的人可能會認為替代人類是目標。 事實上,機器學習解決方案遠非完美,只有在某些領域才有可能替代。 我們從一開始就放棄了這個想法,原因有幾個:欺詐活動的數據不平衡以及無法為機器學習模型提供詳盡的功能列表。 相比之下,我們選擇了增強智能選項。 這是人工智能的另一種概念,側重於人工智能的輔助作用,強調認知技術旨在增強人類智能,而不是取代人類智能。 [1]

考慮到這一點,從一開始就開發完整的機器學習解決方案需要付出巨大的努力,這會延遲為我們的業務創造價值。 我們決定在領域專家的指導下構建一個具有機器學習迭代增長方面的系統。 開發這樣一個系統的棘手部分是,它必須為我們的分析師提供案例研究,而不僅僅是這是否是欺詐活動。 一般來說,客戶行為的任何異常都是可疑的,專家需要調查並以某種方式做出回應。 在這些記錄的案例中,只有少數可以真正歸類為欺詐。

原則 3:豐富的洞察平台

我們系統中最困難的部分是系統工作流程的端到端驗證。 分析師和開發人員應該輕鬆獲取歷史數據集以及用於分析的所有指標。 此外,數據平台應該提供一種簡單的方法來用新的指標來補充現有的一組指標。 我們創建的流程(不僅僅是軟件流程)應該可以輕鬆地重新計算以前的時期、添加新指標並更改數據預測。 我們可以通過積累生產系統生成的所有數據來實現這一目標。 在這種情況下,數據就會逐漸成為障礙。 我們需要存儲越來越多的不使用的數據並對其進行保護。 在這樣的場景下,隨著時間的推移,數據會變得越來越無關緊要,但仍然需要我們努力去管理它。 對我們來說,數據囤積沒有意義,我們決定使用不同的方法。 我們決定圍繞我們想要分類的目標實體組織實時數據倉庫,並僅存儲允許我們檢查最近和最新時期的數據。 這項工作面臨的挑戰是,我們的系統是異構的,具有多個數據存儲和軟件模塊,需要仔細規劃才能以一致的方式工作。

我們系統的設計理念

我們的系統有四個主要組件:攝取系統、計算系統、BI 分析和跟踪系統。 它們服務於特定的隔離目的,我們通過遵循某些開發方法來保持它們的隔離。

創建自動系統來打擊網站入侵者(欺詐)

基於合同的設計

首先,我們同意組件應該只依賴它們之間傳遞的某些數據結構(契約)。 這使得它們之間的集成變得很容易,並且不會強加特定的組件組成(和順序)。 例如,在某些情況下,這允許我們直接將接收系統與警報跟踪系統集成。 在這種情況下,將按照約定的通知合同進行。 這意味著這兩個組件將使用任何其他組件都可以使用的合同進行集成。 我們不會添加額外的合同來從輸入系統向跟踪系統添加警報。 這種方法需要使用預定的最小數量的合約,並簡化了系統和通信。 基本上,我們採用一種稱為“合同優先設計”的方法並將其應用於流合同。 [2]

無處不在的流媒體

在系統中保存和管理狀態將不可避免地導致其實現的複雜性。 一般來說,狀態必須可以從任何組件訪問,它必須一致並提供所有組件的最新值,並且它必須可靠且具有正確的值。 此外,調用持久存儲來獲取最新狀態將增加 I/O 量以及實時管道中使用的算法的複雜性。 因此,我們決定如果可能的話,從我們的系統中完全刪除狀態存儲。 這種方法要求所有必要的數據都包含在傳輸的數據單元(消息)中。 例如,如果我們需要計算某些觀察的總數(具有某些特徵的操作或案例的數量),我們會在內存中計算它並生成此類值的流。 依賴模塊將使用分區和批處理來按實體拆分流並對最新值進行操作。 這種方法消除了對此類數據進行持久磁盤存儲的需要。 我們的系統使用Kafka作為消息代理,它可以與KSQL一起用作數據庫。 [3] 但使用它會將我們的解決方案與 Kafka 緊密聯繫在一起,因此我們決定不使用它。 我們選擇的方法允許我們用另一個消息代理替換 Kafka,而無需對系統進行重大內部更改。

這個概念並不意味著我們不使用磁盤存儲和數據庫。 為了檢查和分析系統的性能,我們需要在磁盤上存儲大量的數據,這些數據代表各種指標和狀態。 這裡重要的一點是實時算法不依賴於此類數據。 在大多數情況下,我們使用保存的數據進行離線分析、調試和跟踪系統產生的特定案例和結果。

我們的系統存在問題

有些問題我們已經解決到一定程度了,但還需要更周到的解決方案。 現在,我只想在這裡提及它們,因為每一項都值得單獨撰寫一篇文章。

  • 我們仍然需要定義流程和策略,幫助我們自動分析、發現和探索數據,生成有意義且相關的數據。
  • 在自動調整系統以使用最新數據更新系統的過程中引入人的分析結果。 這不僅是對我們模型的更新,也是對我們流程的更新以及對數據的更好理解。
  • 在 IF-ELSE 的確定性方法和 ML 之間找到平衡。 有人說:“ML 是絕望者的工具。” 這意味著當您不再了解如何優化和改進算法時,您將需要使用機器學習。 另一方面,確定性方法不允許檢測未預見到的異常。
  • 我們需要一種簡單的方法來測試我們的假設或數據中指標之間的相關性。
  • 該系統必須具有多個級別的真陽性結果。 欺詐案件僅佔所有可被視為對系統有利的案件的一小部分。 例如,分析師希望收到所有可疑案例進行審查,並且其中只有一小部分是欺詐性的。 該系統必須有效地為分析師提供所有案例,無論是真正的欺詐還是只是可疑的行為。
  • 數據平台應該能夠檢索歷史數據集,並實時創建和計算計算結果。
  • 在至少三種不同的環境中簡單、自動地部署任何系統組件:生產環境、實驗環境(測試版)和開發人員環境。
  • 最後但並非最不重要。 我們需要創建一個廣泛的基準測試平台來分析我們的模型。 [4]

引用

  1. 什麼是增強智能?
  2. 實施 API 優先的設計方法
  3. Kafka 轉型為“事件流數據庫”
  4. 了解 AUC—ROC 曲線

來源: www.habr.com

添加評論