OpenMLDB在銀行上線事中交易反欺詐模型實踐

業務背景

隨着機器學習慢慢得業界承認,不少銀行開始引入機器學習模型輔助規則引擎作決策,銀行也作不少離線機器學習模型探索,效果都不錯,可是卻不多最後應用於在線環境,主要有如下幾個緣由git

  1. 在風控場景,在線推理須要高性能,要求tp99 20ms,大部分模型性能很難達到
  2. 特徵實效性要求高,基於真正滑動時間窗口作時序特徵,大部分的基礎設施沒法知足
  3. 特徵計算複雜且量大,上線成本很是高
  4. 離線特徵計算與在線一致性保持困難,最終出現離線效果好,在線效果差狀況

今天做爲一個機器學習應用開發者,來告訴你們基於openmldb(https://github.com/4paradigm/OpenMLDB)是如何解決這些問題的github

如何使用OpenMLDB解決一致性問題

在沒有使用OpenMLDB以前,完成一個反欺詐模型上線項目須要作如下事情去解決一致性問題sql

  1. 由於數據科學家離線使用SQL處理數據,而再在線須要實時計算特徵,須要轉寫特徵方案,就須要和數據科學家對齊特徵處理邏輯,還須要考慮數據科學家方案變化的風險
  2. 根據反欺詐在線系統架構設計一套在線適合實時數據處理架構
  3. 須要人肉開發每個特徵處理邏輯,每一個特徵方案若是幾千特徵,會有大量開發成本,若是要對接多個模式是不可能的

在這個過程當中特徵處理會消耗大量時間去對齊,有時候還會由於特徵沒法上線砍掉科學家的部分特徵,而使用OpenMLDB以後,數據科學家的SQL特徵處理邏輯可以直接給我使用,也就是說我只用作一件事情,拿着數據科學家的sql 扔到OpenMLDB裏面執行拿到結果作模型推理,不再用關心數據科學家的特徵處理邏輯是什麼,因此OpenMLDB給我帶來的好處數據庫

  1. 不用理解數據科學家的特徵方案邏輯,即便方案調整,我也只須要更新SQL到OpenMLDB裏面就行
  2. 不用設計整套在線數據計算流,使用OpenMLDB讓我感受就像使用MySQL開發傳統應用同樣簡單
  3. 告別人肉開發特徵,人生苦短,開發機器學習應用我用OpenMLDB

這裏你們可能會好奇,OpenMLDB是如何作到一個SQL不用作任何修改就能批量和實時執行,由於OpenMLDB支持兩種執行模式架構

  1. 批量模式,針對訓練過程產生樣本,相似傳統數據庫執行SQL
  2. Request模式,針對推理過程實時產生樣本,只會計算與請求相關的特徵

如何使用OpenMLDB解決性能問題

OpenMLDB自帶了一些列編譯優化技術,好比函數動態循環綁定以及在線部分數據徹底是in-memory的,可以保證很是高執行性能,如下是OpenMLDB github自帶的性能數據 運維

咱們能夠看出OpenMLDB的執行性能比SingleStore和Hana有很大的優點,接下來咱們看一個實際SQL執行效率,SQL以下機器學習

select * from (select card_no, trx_time, merchant_id, month(trx_time) as fea_month, 
dayofmonth(trx_time) as fea_day_of_month, hour(trx_time) as fea_hour, 
week(trx_time) as fea_week, substr(card_no, 1, 6) as card_no_prefix,
max(trx_amt) over w30d as w30d_trx_max , min(trx_amt) over w30d as w30d_trx_min, 
sum(trx_amt) over w30d, avg(trx_amt) over w30d, max(usd_amt) over w30d, 
min(usd_amt) over w30d, sum(usd_amt) over w30d, avg(usd_amt) over w30d, 
max(org_amt) over w30d, min(org_amt) over w30d, sum(org_amt) over w30d, 
avg(org_amt) over w30d, distinct_count(merchant_id) over w30d, 
count(merchant_id) over w30d, distinct_count(term_city) over w30d, 
count(term_city) over w30d, max(trx_amt) over w10d, min(trx_amt) over w10d, 
sum(trx_amt) over w10d, avg(trx_amt) over w10d, max(usd_amt) over w10d, 
min(usd_amt) over w10d, sum(usd_amt) over w10d, avg(usd_amt) over w10d, 
max(org_amt) over w10d, min(org_amt) over w10d, sum(org_amt) over w10d,
avg(org_amt) over w10d, distinct_count(merchant_id) over w10d, 
count(merchant_id) over w10d, distinct_count(term_city) over w10d,
count(term_city) over w10d
from tran window w30d as (PARTITION BY tran.card_no ORDER BY tran.trx_time ROWS_RANGE BETWEEN 30d PRECEDING AND CURRENT ROW), 
w10d as (PARTITION BY tran.card_no ORDER BY tran.trx_time ROWS_RANGE BETWEEN 10d PRECEDING AND CURRENT ROW)) as trx_fe 
last join card_info order by card_info.crd_lst_isu_dte on trx_fe.card_no = card_info.crd_nbr and trx_fe.trx_time >= card_info.crd_lst_isu_dte ;

先分析一下這個SQL,影響起性能的因素函數

  1. 時間窗口裏面數據條數
  2. 特徵個數

由於特徵個數是特定的,因此咱們測試在不一樣條數的時間窗口的性能表現性能

使用OpenMLDB在線業務效果

業務效果,是你們很是關心的事情,目前我上線了多個銀行的反欺詐場景,在線效果與離線評估效果保持了一致,模型效果對比客戶的專家規則有2~8提高,在一樣的召回率狀況下,客戶很是承認咱們的工做,但願個人分享可以幫助你們學習

關於OpenMLDB

OpenMLDB是一個面向機器學習應用提供正確、高效數據供給的開源數據庫。除了超過10倍的機器學習數據開發效率的提高,OpenMLDB也提供了統一的計算與存儲引擎減小開發運維的複雜性與整體成本。

歡迎你們參與到https://github.com/4paradigm/OpenMLDB 社區中

相關文章
相關標籤/搜索