風控規則引擎構建及挑戰

来源:https://www.cnblogs.com/gugujifly/archive/2023/01/06/17029925.html
-Advertisement-
Play Games

如果決策引擎是風控的大腦,那麼規則引擎則是大腦內的重要構成,其編排了各種對抗黑產的規則,是多年對抗黑產的專家經驗的累計,本文將向你介紹規則引擎的構成及實現。 ...


引言

如果決策引擎是風控的大腦,那麼規則引擎則是大腦內的重要構成,其編排了各種對抗黑產的規則,是多年對抗黑產的專家經驗的累計,本文將向你介紹規則引擎的構成及實現。

背景

什麼是規則引擎?

規則引擎可以幫助企業將業務決策從應用程式代碼中分離出來,並使用預定義的語義模塊編寫業務規則。這使得企業可以更靈活地管理和修改業務規則,而無需修改應用程式代碼。

規則引擎可以接受數據輸入,並根據業務規則解釋數據,做出業務決策。這些業務決策可以是自動的,也可以是人工干預的。

規則引擎通常包含如下幾個部分:

  • 規則庫:規則庫包含了所有可用的規則。這些規則可以是預先定義好的,也可以是動態生成的。
  • 策略:用於管理規則,是對規則的條件組裝,如評分卡策略、最壞匹配策略等。
  • 規則執行引擎:負責規則的執行。讀取規則庫中所有可用規則,根據規則的條件執行規則。

為什麼需要規則引擎?

規則引擎可以幫助企業更有效的管理和執行業務規則,提高決策的質量、效率和可靠性。

特點如下:

  • 將業務決策從代碼中剝離出來:運營人員可以更靈活有效的管理和修改業務規則,而無需修改業務代碼,節省對抗時間
  • 提高決策質量:規則引擎按照業務規則自動做出決策,無需依賴人為干預
  • 提效:規則配置好後,可永久自動執行,減少人力消耗
  • 穩定性:減少發版,減少測試,減少人為錯誤

設計實現

技術選型

在選擇規則引擎時,需要考慮如下幾點:

  • 業務需求:應該根據企業的業務需求來選擇規則引擎。如果企業需要快速執行大量規則,則應選擇性能較高的規則引擎。
  • 技術平臺:選擇與企業現有技術平臺相相容的規則引擎。如果企業使用的是 Java 技術平臺,則應選擇支持 Java 的規則引擎。
  • 成本:考慮規則引擎的購買成本、實施成本和運行成本。是否開源也是很多技術團隊的選擇因素。
  • 可維護性:選擇易於維護的規則引擎,在需要時能夠快速修改和更新規則。
  • 市場占有率:選擇市場占有率較高的規則引擎,在需要時能夠獲得較好的技術支持和培訓。
  • 技術支持:選擇提供較好技術支持的規則引擎,以便在使用過程中能夠得到及時的幫助。

當然,如果人力足夠,可以考慮自己實現規則引擎亦可,自實現版本的規則引擎肯定靈活性更高,但是在性能和穩定性上需要較長時間的驗證和考驗。

如下是市場上熱門的開源規則引擎:

規則引擎 簡介
JBoss Drools JBoss Drools 是一款開源的規則引擎,支持 Java 和其他語言。
OpenRules OpenRules 是一款開源的規則引擎,支持 Java 和其他語言。
Hippo Rules Engine Hippo Rules Engine 是一款開源的規則引擎,支持 Java 和其他語言
Apache Flink Apache Flink 是一款開源的流處理框架,也可以用作規則引擎
Easy Rules Easy Rules 是一個基於 Java 的開源規則引擎框架,它提供了簡單易用的 API,使得開發人員可以輕鬆地使用規則引擎。
基於 Groovy 實現規則引擎 Groovy 是一種動態語言,可以運行在 Java 平臺上。由於 Groovy 的語法簡單,因此可以通過使用 Groovy 來實現規則引擎。

規則引擎術語

  • 規則(Rule):規則是描述業務決策的規則或條件的語句。規則通常由兩部分組成:條件和動作。條件是描述規則被觸發的判斷,動作是描述規則執行的操作。
  • 事實(Fact):事實是描述業務場景的數據。事實可以是一個單獨的數據項,也可以是一組數據。規則引擎會根據事實來觸發規則。
  • 決策表:決策表是一種以表格形式表示規則的數據結構。決策表通常由多個條件列和一個結果列組成。當條件列的值都滿足時,決策表就會觸髮結果列的規則。
  • 規則集合:規則集合是一種由規則組成的數據結構。規則集合通常以樹形結構存儲,每個規則都有一個條件和一個動作。當條件滿足時,規則集合就會執行規則的動作。

規則配置解析

規則引擎最終是需要交付給運營人員去配置使用的,所以必須能滿足靈活的配置編排,且易懂,才能最大發揮它的威力。

規則配置


說明:

  • 觸發條件:任意一個、滿足所有、自定義。其中自定義最靈活,用戶可以使用條件表達式配置任意想要的觸發與或條件
  • 變數(指標):左值,指標是輸入數據衍生、或查詢、或計算所得的值
  • 比較符:等於、不等於、包含、屬於、大於、小於、空 等等
  • 閾值:右值,與指標計算所得值相比較,如果比較符關係成立,則認為命中當前規則
  • 預設值:當指標執行出錯或者超時,預設返回的值

策略配置


說明:

  • 評分卡模式:依據每條規則命中所得分數之和,判定是否命中相應分數段的決策
  • 最壞匹配:只要有一條規則命中,則立即拒絕
  • 閾值:如果是評分卡模式,需要設置三個段位並且指定閾值

性能調優

決策引擎每天承載企業業務全部的風險決策,峰值 QPS 基本過萬,但是風控的決策耗時需要足夠的短,在不影響業務的情況下,儘可能快的返回決策結果,這是一大挑戰。

從以往的調優經驗來看,可以從以下幾點來優化規則引擎:

  • 並行執行規則:一次決策流中可能包含 N 個規則節點,每個規則節點包含 M 個規則,充分利用多核 CPU 優勢,發揮最大威力,但同時需要考慮多線程數據安全問題
  • 預載入指標:規則執行都是在記憶體中的,但是所需要的指標值往往都是需要調用外部系統得到的,一是網路開銷,二是指標計算開銷。可以在執行規則集之前,全部預載入一次指標再緩存,這樣執行時直接從記憶體取值就會快很多。但是需要註意成本問題(如付費指標,存儲成本,架構複雜度等),廢調用問題(前置規則已拒絕)等等
  • 規則載入預編譯:規則首次載入往往比較耗時,此時最好能 warm up 一下,這樣在流量進來後,即可立即執行,但是使用預編譯可能會增加系統的啟動開銷時間,需要做好相應的平衡工作
  • 規則執行優化:運營配置規則時可能不會考慮規則執行順序問題,但是程式在執行的時候可以智能編排一下,通過加入 與或順序 關係,儘可能的把大耗時大成本的指標放在最後面執行,優先執行記憶體指標,萬一命中則直接斷言,後續指標則不會再執行,節省了時間。要做到這一點,需要對指標進行較為詳細的歸類及元數據管理,需要全域的數據配合,對風控這種需要大數據的介面來說是一大挑戰。

總結

規則引擎在風控整體架構內的重要性毋庸置疑,它的穩定性直接關係到風控決策的性能、數據質量。同時,對運營來說,好的決策引擎是足夠靈活,足夠智能,滿足規則數據編排需求,且能立即生效上線,這是保障他們對抗黑產的前提,希望本文對構建高效的規則引擎又較好的啟發。

往期精彩
性能優化必備——火焰圖
我是怎麼入行做風控的
Flink 在風控場景實時特征落地實戰

歡迎關註公眾號:咕咕雞技術專欄
個人技術博客:https://jifuwei.github.io/


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 摘要:主要介紹華為雲在HBase 2.x內核所做的一些MTTR優化實踐。 本文分享自華為雲社區《華為雲在HBase MTTR上的優化實踐》,作者: 搬磚小能手。 隨著HBase在華為雲的廣泛應用,HBase的數據節點規模也越來越大。最新版本的MRS可支持的單集群HBase數據節點規模可達到1024節 ...
  • 一:背景 1. 講故事 在 SQLSERVER 中有非常多的索引,比如:聚集索引,非聚集索引,唯一索引,複合索引,Include索引,交叉索引,連接索引,奇葩索引等等,當索引多了之後很容易傻傻的分不清,比如:複合索引 和 Include索引,但又在真實場景中用的特別多,本篇我們就從底層數據頁層面釐清 ...
  • 如果覺得文章對你有幫助,點贊、收藏、關註、評論,一鍵四連支持,你的支持就是我創作最大的動力。 ❤️ 本文原創聽蟬 公眾號:碼里特別有禪 歡迎關註原創技術文章第一時間推送 ❤️ 前言 沒錯,繼Flutter 異常監控 | 框架 Catcher 原理分析 之後,帶著那顆騷動的好奇心我又搗鼓著想找其他 F ...
  • 模塊化編程 1.基本介紹 傳統的非模塊化開發有如下的缺點:(1)命名衝突(2)文件依賴 JavaScript代碼越來越龐大,JavaScript引入模塊化編程,開發者只需要實現核心的業務邏輯,其他都可以載入別人已經寫好的模塊 JavaScript使用“模塊”(module)的概念來實現模塊化編程,解 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 微信調用jssdk全流程詳解 系統框架使用的是前後端分離,前端使用vant,後端是springboot 一、網頁授權的時序圖 二、公眾號配置 1. 綁定功能變數名稱 登錄微信公眾平臺進入“公眾號設置”的“功能設置”里填寫“JS介面安全功能變數名稱”。也就 ...
  • 摘要:if-else 語句對於程式員來說,是非常非常熟悉的一個判斷語句,我們在日常開發和學習中都經常看見它。 本文分享自華為雲社區《JavaScript代碼之美—代碼優化,減少if-else冗餘的技巧》,作者:黛琳ghz。 前言 if-else 語句對於程式員來說,是非常非常熟悉的一個判斷語句,我們 ...
  • 摘要:session 和 token 本質上是沒有區別的,都是對用戶身份的認證機制,只是他們實現的校驗機制不一樣而已。 本文分享自華為雲社區《Session/Cookie/Token 還傻傻分不清?》,作者: 龍哥手記。 相信項目中用JWT Token的應該不在少數,但是發現網上很多文章對 toke ...
  • 系統運維 SIG 已在龍蜥社區建立 SIG 組。目前 sysAK 工具集已經在龍蜥社區開源,並且在系統運維 SIG、跟蹤診斷 SIG 一起共建,希望大家後期加入 SIG 一起討論共建。本文將從技術角度分享 sysAK 系統。一、 What is sysAKsysAK 是我們去年才提的概念,但裡面的功 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...