規則引擎與機器學習比較與結合

banq發表於2022-08-25

機器學習正在席捲全球,許多使用規則引擎做出業務決策的公司開始利用它。然而,這兩種技術針對不同的問題。規則引擎用於執行需要 100% 精度的離散邏輯。另一方面,機器學習專注於獲取大量輸入並嘗試預測結果。瞭解這兩種技術的優勢非常重要,這樣您才能確定問題的正確解決方案。在某些情況下,不是其中之一,而是如何將兩者結合使用以獲得最大價值。

業務邏輯、計算和工作流程
讓我們首先從瞭解業務邏輯開始。多年來,我一直在系統中使用各種型別的邏輯,理解上下文很重要。

什麼是業務邏輯?最簡單的形式是包含管理業務流程的決策的邏輯。這些決策是業務決策。邏輯往往會隨著市場的變化而變化,並且可能經常根據特定行業的驅動因素而變化。邏輯側重於為什麼和何時。最終,在採取行動之前,條件必須為真。

業務邏輯通常利用業務計算。與業務邏輯不同,業務計算往往保持不變。他們專注於什麼和如何。將這兩者從部署方面分離是很重要的,因為它們以不同的速率變化。作為一般規則,任何可重用的邏輯都應該是可獨立部署的。如果可重用邏輯與應用程式部署相關聯,則它不能單獨重用並與其他元件耦合。理想情況下,我們希望將應用程式的可重用部分分解為微服務,以便它們可以獨立重用和部署。

我們如何將業務邏輯的不同步驟連線在一起?工作流程。 它們是業務流程中工作任務的結構化流程或順序。工作流可以是基於人的、基於系統的(例如編排)或兩者的混合。

實現業務邏輯的方法
現在我們瞭解了這些部分是如何組合在一起的,讓我們討論一些構建業務邏輯的方法。
一般來說,實現業務邏輯有三種不同的方法:應用程式程式碼、決策表和規則引擎。
當邏輯變化不大並且相當簡單時,應用程式非常適合。

決策表非常適合經常更改並且具有大量條件的邏輯,這些條件在表中比程式碼更易於管理。

規則引擎

規則引擎與機器學習比較與結合


規則引擎非常適合經常更改且高度複雜且涉及多個邏輯級別的邏輯。規則引擎通常是業務規則管理系統 (BRMS) 的一部分,它提供了廣泛的功能來管理複雜性。 如果我們將此指南放入象限中,它將如下所示:

規則引擎與機器學習比較與結合


隨著複雜性和變化率的增加,應用程式程式碼不再適合業務邏輯。隨著變化率的增加,決策表提供了一些緩解,但最終 BRMS 提供了最適合高變化率和高複雜性的情況。

業務規則管理系統 (BRMS)
讓我們透過檢視以下功能參考檢視來仔細瞭解 BRMS 的功能:

規則引擎與機器學習比較與結合

上圖BRMS能力參考檢視

讓我們來談談這個參考檢視中的幾個關鍵功能,並重點介紹一些也與機器學習功能重疊的功能。

1、規則創作

  • 技術規則或指導規則提供了兩種不同的方式來編寫針對不同終端使用者的規則。技術規則更適合您的開發人員受眾,其中指導性規則由指向和點選方法組成,可能更適合技術較少的使用者。
  • 領域特定語言 (DSL) 是另一種可以使非技術使用者以更易於使用的語言編寫規則的功能。
  • 神經網路是機器學習中使用的一種演算法形式,有趣的是,一些 BRMS 已與此整合。


2、規則管理
規則儲存庫是 BRMS 最強大的功能之一。它是一種機制,開發人員可以在其中找出已經構建的內容以及他們可以重用的內容。規則後設資料儲存在這裡,這對於理解潛在意圖至關重要。

3、部署
通常,可以透過以下兩種方式之一部署規則 - 作為 透過 REST API 呼叫呼叫的獨立服務的一部分,或者作為應用程式的一部分嵌入(程式內)。在本文稍後,我們將看到機器學習平臺共享一個類似的模型。

4、規則執行和部署

預測模型標記語言 (PMML)行動式分析格式 (PFA)都是使模型可互換的行業標準格式。它們使您能夠以一種語言或平臺構建模型,並將其移植到支援 PMML 或 PFA 的另一種語言或平臺。
一個這樣的 BRMS 示例是Drools。Drools 是一個開源的 Apache 許可的、基於 Java 的規則引擎。它支援利用PHREAK 演算法的前向和後向連結推理引擎。如果您希望規則引擎決定規則的順序,此推理引擎會派上用場。Drools 提供指導性規則、技術規則 DRL 語法以及對領域特定語言 (DSL) 的支援。Drools 還支援程式內和獨立部署模型。

機器學習平臺
現在我們對規則引擎有了很好的理解,讓我們將它們與機器學習平臺進行比較。在上一篇文章中,我概述了機器學習是什麼以及如何將它與開源 BPM一起使用。在一篇類似的文章中,我解釋瞭如何將機器學習與Akka一起使用。現在讓我們看一下機器學習平臺的能力參考檢視。

規則引擎與機器學習比較與結合

上圖機器學習平臺能力參考檢視

讓我們談談一些關鍵功能,並再次與 BRMS 檢視類似的重疊部分聯絡起來。

1、資料攝取
資料是機器學習中最重要的東西。您的模型與您的資料一樣好。您需要儘可能多的資料,其中可能包括批處理和實時資料來源。

2、特徵工程
特徵是模型的輸入,一些 ML 平臺為您提供建立這些特徵的功能。其他人提供可以為您自動生成功能的功能。

3、建模正規化
這些是可以在機器學習模型中使用的不同演算法。這裡需要注意的重要一點是,它們不與SupervisedUnSupervisedReinforcement Learning類別相關聯,而是可以在所有三個類別中使用。

4、部署與執行
您會注意到此領域中的 BRMS 功能有一些相似之處,特別是程式內和獨立 REST API 部署以及對 PMML 的支援。

5、管理
管理機器學習模型最重要的方面之一是監控它的準確性。機器學習的一個常見謬誤是機器學習模型永遠不需要重新訓練,因為它可以自我學習。情況並非如此,因為機器學習模型必須經常重新訓練,因為它們所訓練的資料開始偏離它們在生產中執行的資料。

透過將機器學習平臺的能力與規則引擎進行比較,我們現在可以看到在能力級別上存在相似之處和不同之處。鑑於這些領域的產品如何繼續變得更緊密,可以理解兩者之間的選擇有多困難。

規則引擎與機器學習比較與結合



何時使用規則引擎與機器學習的指南
那麼我們如何決定何時使用規則引擎或機器學習呢?要回答這個問題,我們從邏輯、邏輯型別、什麼建立邏輯、資料這幾個維度來回答這個問題。規則非常適合以下情況:

  • 邏輯:確切的邏輯是已知的。使用規則,您可以提前知道要執行的邏輯。
  • 邏輯型別:基於精度。如果那麼業務邏輯是精確的並且不涉及任何預測。它基於對事實的評估產生布林型別的結果。
  • 邏輯創造:由人類完成。軟體工程師或業務使用者建立代表業務邏輯的規則。
  • 資料:不需要自動從資料中推匯出邏輯。分析通常會事先對資料進行以確定確切的邏輯應該是什麼。

現在,讓我們看看使用這些相同維度的機器學習:
  • 邏輯:確切的邏輯未知。相反,在建立預測中重要的輸入/特徵可能是已知的。
  • 邏輯型別:使用演算法進行預測。
  • 邏輯建立:由透過訓練使用演算法執行的機器學習軟體建立。
  • 資料:用於最終生成模型邏輯。是機器學習中最重要的東西。您希望使用盡可能多的資料,並確保資料是公正的。如果資料有偏差,那麼模型就會有偏差。

總之,當您需要精確並瞭解邏輯時,請利用規則引擎;當您想預測某事但不知道如何準確預測時,可以利用機器學習。
但它總是那麼清晰嗎?如果你想利用兩者的力量呢?答案是你可以。有許多混合模式,您可以在其中一起使用機器學習和規則來確定結果。讓我們看一個示例用例。

結合使用機器學習和規則引擎的模式
想象一個用例,您是一名房地產經紀人,希望為您的客戶提供購買房屋的最佳指導。也許他們對幾個感興趣,但不確定他們應該多快採取行動。讓我們透過三種不同的模式將機器學習和規則結合在一起來實現這一點。

模式 1:利用機器學習輸出作為規則的輸入
在這種模式下,執行兩種不同的機器學習模型。一個人確定房子在 10 天內出售的機率。另一個決定了賣家降低要價的機率。這兩個預測都是規則的輸入。然後,這些規則評估模型的輸出並最終向房地產經紀人提供建議。具體來說,如果房子在 10 天內賣出的機率大於 50%,而賣家降價的機率小於 50%,那麼這種模式對房地產經紀人做出了具體的推薦。

規則引擎與機器學習比較與結合


模式 2:利用規則輸出作為機器學習模型的特徵輸入
在這種模式中,我們從作為機器學習模型輸入的規則開始。規則執行業務邏輯以確定基於布林值的值。房子需要維修嗎?是銷售淡季嗎?賣家要不要把房子賣掉現在賣掉?這些規則的輸出然後是機器學習模型的特徵。然後,機器學習模型向房地產經紀人提供了 10 天內出售房屋以及賣家降價的機率。請注意,在此模式中,不會向房地產經紀人提供建議,而是提供機率並將最終建議留給房地產經紀人。

規則引擎與機器學習比較與結合


模式 3:利用規則和機器學習輸出作為輸入
在此模式中,它遵循前兩種模式的混合。規則和機器學習輸出都是機器學習模型的輸入。在這種情況下,賣家降價的機率是 10 天內房屋出售機率的輸入。這種模式也將最終建議留給房地產經紀人。

規則引擎與機器學習比較與結合


示例實現
現在讓我們將這些模式應用到實際的概念證明中。我將基於我在上一篇文章中構建的響應式微服務機器學習概念驗證來構建。我們將對其進行增強以包含機器學習模型作為輸入的規則服務。它將使用上面的模式 1,利用機器學習輸出作為規則的輸入。
讓我們從我們在概念驗證中所做的更改開始,以支援規則與機器學習的整合。下面是一個說明架構的圖表:

規則引擎與機器學習比較與結合


我們引入的一件新事物是基於 Java 的規則 MS。這是將評估機器學習模型機率輸出的規則微服務。
H20 輸出一個置信度值作為其預測的一部分。對於機器學習模型確定為 OK/Not Fraudulent 的交易,規則服務將檢查此置信度值。
如果置信度值小於 50%,那麼它將評估一些額外欺詐檢查的輸出,在這種情況下是名稱和地址。如果其中任何一個失敗,規則將建議交易是欺詐性的。
這是一個遍歷這些步驟的序列流:

規則引擎與機器學習比較與結合


現在讓我們看一下 Java Rules MS 程式碼,看看 drools 規則是如何運作的。

 rule “Trans OK and Prob < 0.50 and name check fail”
  when
     m : RulesData( modelProb <= 0.50, mymodelProb : modelProb)
     RulesData( status == “Transaction OK” )
     RulesData( nameCheck <= 0 )
  then
     m.setStatus(“Fraudulent Transaction from Rules, name check   
     failed”);
end
rule “Trans OK and Prob < 0.50 and address check fail”
  when
     m : RulesData( modelProb <= 0.50, mymodelProb : modelProb)
     RulesData( status == “Transaction OK” )
     RulesData( addressCheck <= 0 )
  then
     m.setStatus(“Fraudulent Transaction from Rules, address check
     failed”);
end

  
我們可以看到這是使用 Drools drl 語法,這是一種編寫技術規則的方式。有兩條規則都檢查交易是否正常以及機器學習輸出是否小於 50%。第一條規則還檢查名稱檢查是否失敗,第二條規則檢查地址檢查是否失敗。您會注意到 Drools 中沒有任何 else 子句。那是根據您指定的條件設計和規則觸發。在每個規則中,您會注意到一個 RulesData 函式正在檢查多個變數的狀態。為了根據資料評估 Drools 規則,您必須建立一個表示資料模型的 POJO。這將包括 getter 和 setter。請參見下面的示例:

    public static class RulesData {
  private int nameCheck=0, addressCheck=0;
  private String status=null;
  private double modelProb=0;
  public String getStatus() {
     return this.status;
  }
  public int getNameCheck() {
     return this.nameCheck;
  }
  public int getAddressCheck() {
     return this.addressCheck;
  }
  public double getModelProb() {
     return this.modelProb;
  }
  public void setNameCheck(int nameCheck) {
     this.nameCheck = nameCheck;
  }
  public void setAddressCheck(int addressCheck) {
     this.addressCheck = addressCheck;
  }
  public void setModelProb(double modelProb) {
     this.modelProb = modelProb;
  }
  public void setStatus(String status) {
     this.status = status;
  }
}

  
讓我們看一下呼叫 Drools 規則的 Java 程式碼片段,如下所示:

 
   //run drools rules
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession("ksession-rules");
// go !
kSession.insert(applicant);
kSession.fireAllRules();
kSession.destroy();

  
此程式碼建立一個 KieSession,然後將我們希望規則執行的資料插入到 KieSession 中。FireAllRules()告訴 Drools 這樣做,解僱所有規則。然後Destroy()用於清理。基於 Java 的 Rules MS 獲取 drools 規則的輸出,並最終將其寫入 Kafka 以供使用。

概括
規則和機器學習各有千秋,結合使用會更加強大。為問題使用正確的解決方案是關鍵。當您需要精確性並瞭解邏輯時利用規則,當您想要預測某事但不知道如何準確預測時利用機器學習。兩者都可以用於反應式微服務架構風格,提供更易於維護、可擴充套件和更快的架構交付。
我希望您發現這個部落格很有價值,並感謝您的寶貴時間!

相關文章