頭一回見!提高10倍效率,阿里給業務校驗平臺插上了AI的翅膀

@Franki Chamaki

摘要:算法

實時業務校驗平臺做爲阿里集團老牌的業務審計系統,覆蓋了集團絕大部分的業務對帳場景,在線上問題及時發現以及減小集團資損上發揮着巨大做用,保障了各個系統的業務穩定性。本文主要介紹實時業務校驗平臺(如下簡稱BCP: Business Check Platform)在智能化方面的創新和實踐。數據庫

關鍵詞:數值一致性、狀態一致性、多值屬性、算法加速安全

需求緣起

隨着業務規模的擴張,阿里集團內部的系統變得愈來愈複雜,在這種複雜的分佈式系統架構下,不免會出現遠程調用失敗,消息發送失敗,併發bug等等問題,這些問題最終會致使系統間的數據不一致,致使用戶體驗受損,用戶利益受損,對平臺來講就是產生資損。意識好的或者是出過問題的系統,可能會去配置一些校驗任務,好比每隔1小時,去跑一次離線計算任務,判斷這段時間內是否是有數據故障出現,可是這種方式時效性較差,而後每一個系統團隊的對帳方式都比較零散隨意,咱們沒有一套體系化解決數據問題的方案,線上問題又一直存在不斷有新的問題產生,處理比較被動,數據質量這塊一直是個空白的領域。bash

▵ 事件模式

BCP就是在這種背景下產生,用來幫助業務系統實時校驗線上的每一筆數據,填補數據質量領域的空白。BCP主要實現如下4個目標:架構

  • 高實時性的發現線上業務髒數據或者錯誤邏輯,第一時間發現並及時通知技術保障,而不是等客戶反饋。併發

  • 方便的接入各類業務規則,經過腳本規則編寫的方式,讓各應用快速接入平臺。框架

  • 整合訂正工具,造成規範的髒數據訂正流程。機器學習

  • 業務上線的實時監控,新上線業務能夠很方便的進行校驗。分佈式

爲了更高效率的讓應用快速接入業務對帳平臺,同時減小對應用帶來的性能損耗和代碼侵入,BCP經過事件模式,把業務數據變化觸發的消息(如DB變動日誌數據,消息中間件消息)轉換成響應業務的事件,放入到事件執行隊列進行規則的檢查,事件監聽框架採用了通用的架構設計,實現了消息的對接,而DB日誌又能夠轉接到消息上,實現數據庫變動的實時監聽。ide

▵ BCP系統架構

BCP的運行依賴規則,規則是對業務邏輯(規律)的抽象,經過執行規則檢查數據,發現問題。因此核心問題是如何定義規則,傳統的對帳模式通常須要業務方在理解透業務的狀況下進行資損點預判與梳理,而後配置手工規則腳本,對數據進行實時校驗及時發現異常。

隨着業務規模的擴張,業務變動變得愈發頻繁,咱們須要不斷的增長新的校驗規則以適應新業務的對帳需求,這裏面須要業務開發、業務測試以及技術支持共同來梳理,消耗很是多的人力,這種方法已經愈來愈不適應各類複雜業務場景的須要,並且不少狀況下即便是提早進行預防梳理,仍然不能覆蓋住全部可能的資損場景。極端一點的狀況是,咱們不少的資損點都是經過「踩坑"踩出來的,即發生了資損問題以後再去編寫對帳邏輯亡羊補牢,因此傳統的對帳模式暴露出了以下幾個問題:

  • 過於依賴專家知識和經驗,對於每一個新場景都須要人工生產規則,效率低通用性差。

  • 沒法及時適應大規模數據的變化,特別是當數據、規律發生變化時。

  • 漏報,極端狀況甚至是在系統出了故障「踩坑」後才觸發某些規則的發現。

▵ 以往的配置模式

目前BCP接收了集團內大部分的業務數據,如何將這些數據產生更大的價值,是咱們一直在思考的問題,智能化就是其中的一個方向。

咱們但願經過智能化的方式讓機器自動去發現業務數據之間的規律與異常數據,幫助業務方進行資損點梳理與監控,讓資損防控的工做變得更加簡單和高效,解決上面提到的若干問題。

引入智能化

釐清定位:

BCP要實現智能化,首要目標就是找清楚本身的定位,而機器學習從學習形式上,能夠分爲監督學習和非監督學習,監督學習是在學習過程當中經過提供對錯標註指示,讓機器自我減小偏差的過程;相對的,因爲人工標註成本較高的緣由,讓機器從類別未知的沒有對錯指示的訓練樣本中進行模式識別的問題稱爲非監督學習。

因爲規則自己的邏輯問題或者業務的變化,不可避免的要帶來誤報警的干擾,固然這仍是在BCP傳統手工規則的時代,業務方很是清楚本身的業務邏輯的狀況下發生的。若是引入智能化對帳,全部的對帳邏輯都由機器本身去發現而後自動進行異常數據告警,誤報的可能性必定是很是高的,因此咱們在設計之初就把這個問題定位爲了監督學習的問題。

@Hitesh Choudhary

既然是監督學習,就要有標註的工做,標註的工做由誰來作?BCP做爲一個業務下層的統一平臺不理解業務,作不了這個事,那隻能交給業務開發方本身來作。標註什麼內容?是異常數據仍是機器發現的對帳邏輯?若是是異常數據,首先數據量比較大標註的任務會比較多,其次單獨看一條數據是否有異常從成本上來說也比較高,因此咱們選擇的是直接標註由機器發現的對帳邏輯。

肯定目標:

BCP實現智能化,主要完成兩個目標:

  1. 自動識別資損點,即從業務數據中發現潛在的規律。

  2. 自動識別異常數據,即找出不符合業務數據規律的異常點。

定義核心思想:

BCP智能化的核心思想是,基於大部分數據正常的原則來找規律和異常數據,即咱們假設大部分的業務數據都是正常的,只有極少部分的數據存在問題。

▵ 經過智能化尋找異常數據的例子

上圖是一個簡單的經過智能化尋找異常數據的例子,咱們經過四條數據就能夠找出可能的數據之間的線性規律和對應的異常數據。

而對應的,咱們可能會想到一些極端場景:

  1. 因爲開發核心業務邏輯編寫的錯誤,可能致使大部分業務數據都是錯誤的,且存在一樣的錯誤邏輯,這種場景智能化對帳並不能起到應有的做用,可是會給出相應的錯誤邏輯規律,給業務方來參考評估。

  2. 因爲跨部門對帳的需求,會存在不一樣業務邏輯的數據混雜在一塊兒的狀況,若是不對這種數據進行清洗歸類,智能化對帳很難找到數據之間的規律,因此爲了產生最好的效果,須要保證數據之間是具備共性的。

引入智能化的具體操做流程:

▵ 整體流程圖

咱們利用了BCP以前沉澱的大量歷史業務數據,將這些數據經過不一樣的算法進行離線分析,生成規則(規律),同時爲了減小誤報的發生,使用者能夠對生成的規律進行人工確認(標註),確認後會生成校驗規則,進行線上數據的實時校驗。

引入智能化後的應用場景

下面咱們介紹BCP中兩種不一樣模式的智能化場景:1)數值一致性場景;2)狀態一致性場景。以後咱們具體介紹如何在兩種場景產生規律。注意,實際中算法的應用並不侷限於電商交易數據,而是能夠解決全部有屬性關聯數據這一類場景的異常檢測需求。

數值一致性場景:

數值一致性場景對應於連續性數據(continuous variable),主要解決具備線性關係的對帳場景,好比和價格,積分有關的相關計算場景,如以前圖4中的例子。咱們將找到的線性關係做爲規律,違背該規律的就能夠認爲是異常數據;咱們的目標是利用大量歷史數據,智能的找出以上規律,經過人工確認校驗規則,而後利用校驗規則來檢測異常。

算法介紹:

針對連續變化數據,咱們考慮N條數據 x:1,⋯,x:N,其中每條數據都有D個數值屬性p1,p2,⋯,pD參與找規律。咱們能夠將數據記作維度爲N×D的矩陣X=[x1:,x2:,⋯,xD:], 其中xi:∈RN(i=1,⋯,D) 。爲簡化標註咱們後面記xi=xi:∈RN 。咱們的目標是從數據 X 中找出D個屬性之間的線性規律。每一則規律能夠表示爲一個向量r=[a1,a2,⋯,aD], 其中ai(i=1,⋯,D)表明線性規律的係數。如規律p1=2p2+p3可表示成r=[−1,2,1,0,⋯,0](共有D−3個0) 。咱們用−r 能夠表示一樣的規律,咱們這裏約定讓規律表達中有儘量多的正數。上面的線性關係可使用矩陣的形式表示爲: Xr=0.

在實踐中,咱們的目標是找到全部線性規律的集合。事實上,該問題能夠建模爲一個對數據在低維度空間線性分解的,找到屬性之間的關係(下圖紅色部分表示低維空間的的線性關係),同時還要容忍數據中少許存在的異常(即下圖灰色部分的稀疏矩陣)。

▵ 數據模型

理想狀況下,咱們觀察到的數據事實上是能夠用一個低秩矩陣來表示。可是在實際中,觀察到的數據在不少時候是受到異常污染的,因此除了低秩矩陣外,咱們還須要使用一個稀疏矩陣來表示受污染的狀況:稀疏矩陣中的非零值表示該行數據不知足某些線性規律,零值表示爲正常數據。

從數學上看,每一個規律對應於X中一組線性相關的列。咱們使用線性迴歸算法能夠簡單的檢驗一組列是否存在線性關係。這裏咱們舉一個簡單的例子:假如數據中存在規律p1=2p2+p3,或者寫成p3=p1−2p2,那麼咱們能夠線性迴歸研究XS=[x1,x2],yS=x3的關係找到該規律(即係數)。可是在實際中,直接使用線性迴歸很可貴到較好的效果,由於實際數據中會可能會存在少許異常數據,所以有少許數據不知足p3=p1−2p2的規律,從而致使直接使用實際數據進行線性迴歸時會產生誤差,進而不能找到真正的規律。

爲了解決這個問題,咱們提出了迭代線性擬合(Iterative Linear Regression)的算法來從含有異常的數據中找到規律。該算法的基本思想是當咱們進行線性擬合時,異常的數據必然會帶來較大的殘差,那麼咱們在擬合後根據較大的殘差將異常的數據剔除,再進行新一輪的線性擬合,直到全部數據的殘差都很小才中止迭代。若是有規律,那回歸中所得的係數最後會收斂到規律係數;若是沒有規律,則迭代會由於一些條件而提早終止。算法大體流程可參考下圖。

▵ 迭代線性擬合流程

狀態一致性場景:

狀態一致性場景對應於分類型數據(categorical data),主要是用來作數據屬性狀態的識別和一致性判斷,狀態一致性僅考慮狀態,針對於分類變量屬性之間的if-then關係。相似的,違背該if-then關係的數據能夠認爲是異常。

狀態一致性對帳能夠細分爲4個種類的對帳:

  1. 某個屬性等於一個固定值,此類對帳通常用來判斷數據是否正確響應,標記位是否正確。例如:
response.code=200,
responseDataObject.success=true,
bizOrder.attributes.unity=1
複製代碼
  1. 某個屬性雖然不是100%等於一個固定值,可是在某種條件下是100%等於一個固定值,此類對帳通常用來解決數據狀態是否正確躍遷,多份數據屬性一致性的檢測,例如:
if attributes.bizCode=refund,then attributes.status=0 and attributes.forOdrRcv=14![image]
複製代碼
  1. 某個屬性出現的狀況和另外一個屬性出現的狀況徹底一致,此類對帳通常用來解決數據標是否存在,紅包是否漏發,屬性是否缺失等等,例如:
if exists credit_buy,then exists rev
複製代碼
  1. 上述3類對帳的混合狀況,而且引入針對特殊數據的篩選邏輯,支持更精細的一致性對帳,例如:
if bizorder.attributes.ptl contains('COUPON'),then attributes.peer =true and bizorder.attributes.item contains('80194')
複製代碼

算法介紹:

針對分類變量的數據,咱們一樣考慮N條數據x:1,⋯,x:N,其中每條數據都有D個分類變量屬性p1,p2,⋯,pD參與找規律,對於i=1,⋯,D, 每一個屬性pi均可以取對應分類變量集合Vi中的值。這裏咱們記Vi={ai1,⋯,aini }表明屬性pi能夠有ni個不一樣的分類變量可取的值的集合。咱們的目標是從數據 X 中找出D個屬性之間的關聯規律。每一則規律能夠表示爲一個集合映射

r=∪j∈J {pj,aji|pj=aji,1≤i≤nj}⇒ ∪k∈K {pk,aki|pk=aki,1≤i≤nk},其中J∩K=∅ 。例如,規律「當p1是a12,  p2是a21,那麼p3是a31」 能夠表達爲
r={{p1,a12}∪{p2,a21}⇒{p3,a31}}.


一樣,咱們須要找到的規律就是一個集合R={r(1),r(2),⋯ }包含儘量多的規律。
複製代碼

從問題定義來看,這是一個能夠轉化爲關聯分析挖掘(association rule mining)的問題。關聯分析最初是用來找交易數據中產品的規律的。例如,從大量交易數據中發現規律{網球拍}⇒⇒{網球},則代表顧客若是買了網球拍,有很大機率也會買網球。常見的關聯規律是布爾關聯規律(Boolean association rules),即考慮的數據項是布爾型,只有存在或不存在兩種狀態(如前面的購買網球拍只有存在和不存在兩種狀態)。假設咱們對分類變量規律進行簡化,全部屬性pi都只有兩種狀態,即ai1=0 不存在, ai2=1 存在, 其中ni=2,∀i=1,⋯D 。那麼咱們的問題能夠徹底轉化爲關聯分析來解。

可是,在實際應用時,還有兩個問題須要解決:

  1. 關聯分析通常用來處理「布爾」類型,即屬性只能有兩種取值狀態,咱們實際應用中屬性會有多種狀態
  2. 關聯分析的搜索空間巨大,數據量大時搜索複雜度指數級增加

爲了解決這兩個問題,咱們的方案是:

  1. 對數據進行轉化,有n種狀態的屬性被拆爲n個不一樣的屬性,每一個屬性變爲「布爾」類型。
  2. 針對BCP的特殊場景,用戶只關心數據所有都符合的規律,咱們對算法作了優化,相比傳統對Apriori及FP Growth算法,能夠達到50-100倍的提速,從而在數據量大屬性多的場景也能夠運行。

咱們後面會對這兩點再作介紹,首先咱們介紹一下傳統的找關聯規則的方法思想。考慮以下例子,假設咱們有5條數據, 3個屬性,以下表所示:

咱們將全部交易記作X,每一條數據記做x, 定義如下基本概念:

  • 項集(itemset): 項的集合S,包含k個項的稱爲k−項集,如{ p1,p2}爲二項集。

  • 支持度(support):描述一個項集在全部數據中出現的頻繁程度,定義爲 supp(S)=|x∈X;S⊆x|/|X| 。上例中項集{p1}的支持度爲4/5=0.8,項集{ p1,p2}的支持度爲3/5=0.6。

  • 置信度(confidence):描述一條規律被知足的頻繁程度,假設一條關於項集的規律P⇒Q ,則該條規律的置信度爲conf(P⇒Q)=supp(P∪Q)/supp(P)。如上例中咱們發現規律p1⇒p2,則該規律的置信度爲supp(p1,p2)/supp(p1)=0.6/0.8=0.75。

如今,咱們講述關聯分析找規律的方法,主要包括如下兩步:

  • 頻繁項集的產生:找到數據集中支持度大於某個閾值(min_support)的全部項集,該閾值叫作最小支持度;

  • 規則的產生:從第一步的頻繁項集中,根據k-項集和比k高的項集聯合,找到規則置信度大於某個閾值全部規則。

其中第一步的計算開銷通常遠大於第二步,不少算法都集中在第一步中如何更高效的產生頻繁項集,主要有先驗算法(Apriori)與頻繁模式增加(FP Growth),咱們用比較成熟的Apriori算法來解決。

多值屬性:

以上咱們僅考慮了布爾關聯規律場景,屬性只有存在/不存在兩種狀態,實際應用中屬性每每能夠取多個值,爲此咱們對數據進行轉化,假如咱們有如下5條數據,2個屬性p1,p2,其中屬性p1是匿名狀態有兩種狀態分別爲a11=匿名, a12=實名,屬性p2是評價積分有三種狀態分別爲a21=好評, a22=中評, a23=差評。那麼咱們有分類變量數據以下:

經過轉換,咱們能夠將以上多狀態值的分類變量數據轉化爲布爾型:

通過轉換咱們就能夠用一樣的方法解決實際數據中的屬性多狀態值問題。

算法加速:

實際應用中,業務方每每更關心置信度爲100%的規律,而算法在搜索的時候,若是仍是簡單的採用不停產生規律而後計算置信度將非100%置信度的規律剔除這種作法,運行時間會很是久。這裏咱們對算法作了優化,經過對搜索路徑的更改,讓算法在產生規律時就只搜索100%置信度的規則,從而加快運行時間提高效率,達到相比以前50-100倍的提速。

所以,實際中算法的大體流程以下圖所示:

以上介紹的兩種算法目前已經穩定運行在BCP平臺,而且大量應用在集團的業務對帳場景中,日均調用量在億級別次,每日發現幾十到上百例數據質量問題,經過檢測出異常及時進行告警避免了資產的損失。

小結

對於阿里巴巴而言,今年是BCP智能化的元年,經過智能化咱們總體提高了業務對帳的效率,使得實時業務校驗這項工做變得更加簡單。

可是,將來的路還很長,在海量的業務數據中,還有不少潛在的規律能夠挖掘,數值類和狀態類的智能化只是咱們實現智能對帳的第一步,後面咱們還會準備在更多的對帳領域實現智能化,讓機器智慧給業務帶來更多紅利。

參考文獻:

[1]Böhm, C., Kailing, K.,Kröger, P., & Zimek, A. (2004). Computing Clusters of Correlation ConnectedObjects. In Proceedings of the 2004 ACM SIGMOD International Conference onManagement of Data (pp. 455–466). New York, NY, USA: ACM.

[2]Agrawal, R., &Srikant, R. (1994). Fast Algorithms for Mining Association Rules in LargeDatabases. Journal of Computer Science and Technology, 15(6), 487–499.

[3]Li, J., Zhang, X., &Dong, G. (1999). Efficient Mining of High Confidence Association Rules withoutSupport Thresholds. Principles of Data Mining and Knowledge Discovery,(September 1999), 283–288.

本文做者:(按姓氏拼音排序,排名不分前後)

高超(龍多):阿里巴巴集團安全生產高可用架構組技術專家。

高靖昆(井乾):阿里巴巴達摩院機器智能技術算法專家。

孫亮(圖宇):阿里巴巴達摩院機器智能高級技術算法專家。


歡迎關注「阿里巴巴中間件官方微博」 ※一個集乾貨與前衛的技術號

歡迎關注「阿里巴巴中間件」官方公衆號,與技術同行

相關文章
相關標籤/搜索