主頁 > 軟體設計 > 風控規則引擎構建及挑戰

風控規則引擎構建及挑戰

2023-01-07 07:27:33 軟體設計

引言

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

背景

什么是規則引擎?

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

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

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

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

為什么需要規則引擎?

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

特點如下:

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

設計實作

技術選型

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

  • 業務需求:應該根據企業的業務需求來選擇規則引擎,如果企業需要快速執行大量規則,則應選擇性能較高的規則引擎,
  • 技術平臺:選擇與企業現有技術平臺相兼容的規則引擎,如果企業使用的是 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/

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/541403.html

標籤:架構設計

上一篇:創建型模式——前言

下一篇:sysAK(青囊)系統運維工具集:如何實作高效自動化運維?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more