反欺詐中所用到的機器學習模型有哪些?

AI科技大本營發表於2018-03-11

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1


作者 | 微調(知乎ID微調,普華永道高階資料科學家)


反欺詐方向的實際應用很多,我有做過保險業反欺詐和零售快消業的欺詐檢測,拋磚引玉的談談反欺詐專案的"道"和"術"。


具體的學習方法可以參考我最近的文章:

機器學習門下,有哪些在工業界應用較多,前景較好的小方向?(https://www.zhihu.com/question/57072166/answer/280824223)


  • 該回答的第一部分(1)討論了為什麼欺詐檢測難度很大;

  • 第二部分(2-4)討論了a. 資料視覺化 b. 一些常用的演算法及模型 c. 欺詐點驗證;

  • 第三部分(5)歸納並提出了一個反欺詐模型的通用框架供大家參考。


1. 背景 - 為什麼反欺詐檢測難度很高?


反欺詐專案很多情況下就是客戶根本不知道什麼是欺詐,什麼不是。換句話說,對於什麼是詐騙的定義很模糊。往小了說,反詐騙似乎是一個二分類問題(binary classification),但你仔細想想後會發現其實這是個多分類問題(multi-class classification),如果你把每種不同詐騙當做一種單獨的型別。而單一型別的詐騙幾乎是不存在的,且詐騙的手段日新月新總在變化。即使像銀行還有保險公司這種常年和詐騙打交道的行業,也必須常常更新自己的檢測手段,而不是把賭注壓到同一個模型上。


除此之外,欺詐檢測一般還面臨以下問題:


  • 九成九的情況資料是沒有標籤(label)的,各種成熟的監督學習(supervised learning)沒有用武之地。

  • 區分噪音(noise)和異常點(anomaly)時難度很大,甚至需要發揮一點點想象力和直覺。

  • 緊接著上一點,當多種詐騙資料混合在一起,區分不同的詐騙型別更難。根本原因還是因為我們並不瞭解每一種詐騙定義。

  • ...


退一步說,即使我們真的有詐騙的歷史資料,即在有標籤的情況下用監督學習,也存在很大的風險。用這樣的歷史資料學出的模型只能檢測曾經出現過與歷史詐騙相似的詐騙,而對於變種的詐騙和從未見過的詐騙,我們的模型將會無能為力。因此,在實際情況中,我不建議直接用任何監督學習,至少不能單純依靠一個監督學習模型來奢求檢測到所有的詐騙。


這就陷入了一個雞生蛋蛋生雞的死迴圈,因為沒有歷史標籤和對詐騙的理解,我們無法做出能對詐騙細分的模型。因此我們一般使用無監督學習(unsupervised learning),且需要領域專家(domain experts)也就是對這個行業非常瞭解的人來驗證我們的預測,提供反饋,以便於及時的調整模型。


2. 反欺詐專案的操作順序(1) - 視覺化


一般在拿到資料以後,我會推薦以下步驟進行分析。當然,一個答案很難包括所有常見的操作,僅僅是分享個人經驗以供思考。


資料視覺化 - 相關矩陣(Correlation Matrix) & 多維尺度變換(Multidimensional Scaling)


人是視覺動物,可以在第一時間“看到”資料中存在的問題。因此,對於大部分反欺詐問題,我建議至少要做以下兩個視覺化嘗試:


2.1.首先對不同的特徵(feature)做一個相關矩陣分析並視覺化,分析相關矩陣的目的是告訴我們特徵兩兩之間的關係,以便於我們快速發現一些資料裡面可能存在的問題。最重要的是幫助我們檢查資料是否存在問題,有沒有什麼違反常理的情況。


以我最近在寫的文章為例(並不是反欺詐問題),對不同偶像團體是否能夠繼續走紅進行預測。我們希望不同特徵之間的兩兩關係符合嘗試, 我在模型裡面用了6個不同的特徵並計算相關矩陣:


640?wx_fmt=jpeg


通過上表及下圖,我們發現:


  • 團員的平均的年齡和演唱會次數無關。

  • 出道長度和和演唱會次數為負相關。


640?wx_fmt=jpeg

舉例,如果我們發現出道年限和專輯數呈負相關,這就違反了常識。按照常識出道時間越長專輯數應該越多,因此需要認真檢查為什麼會有這樣的情況發生,是否是潛在問題。


2.2. 多維尺度變換(MDS)來直接視覺化資料分佈


我們都知道一般來說欺詐和正常資料應該“長得不一樣”,那是否可以直接把它們畫出來來分析。


然而,資料視覺化往往都是二維或者三維的,但現實往往是成百上千維。即使我們把一個特徵作為一個維度,我們最多也只能視覺化三個維度。而多維尺度變換(MDS)可以將高維的資料在二維或者三維的框架裡面進行視覺化,類似的資料點會更加接近。通過觀察資料點的分佈,我們可以直觀的猜測資料是否有規律,是否存在潛在異常點。


以我最近做的一個專案為例,我們用MDS將一個8維的資料在2維上展示出來。我們似乎可以直觀的看到一些近似線性的關係,以及一些看起來“很可疑”的點,我在圖中標註了出來。


640?wx_fmt=jpeg


這樣做的好處有兩點:


  • 首先我們可以看到資料是否存在特定的特徵,如果所有的點都是隨機散亂分佈,那我們的麻煩就大了。

  • 我們似乎可以看到有一些離群的資料點,這些點可能是潛在的“欺詐”,也有可能只是噪音而已。但我們可以向客戶或者老闆展示這個可檢視,向他們證明專案有潛在的價值。


如果在視覺化中我們看到了一些規律,這讓有信心繼續往下做,進入建模階段。多加一句,此處和主成分分析(PCA)也有異曲同工之妙。


3. 反欺詐專案的操作順序(2) - 演算法


一般我們對欺詐檢測做兩種假設:


  1. 時序相關(time dependent)。對於時序相關的問題,我們假設欺詐的發生依賴於時間,通過時間序列分析,我們可以發現異常的地方。舉例,假設一個人的信用卡平時1-11月每月消費2000美元,但12月突然消費了5000美元,此時時間就對我們的專案存在意義。

  2. 時序獨立(time independent)。對於時序獨立的問題,我們假設每一個欺詐都是獨立,和時間無關。於是在分析中,我們移除了時間這個特徵,我們不再把時間作為一個分析軸或者影響欺詐發生的特徵。


3.1. 時間序列分析(time series analysis)


時間序列分析展開說是很大的話題,從簡單的觀察一個時間序列是否穩定(stability)到更復雜的看多個特徵如何在時間上互相作用如 vector auto-regression(var)。


一般我們對時間序列重整使其穩定後,會進行一系列分析,最簡單的就是觀察什麼時候出現反常的spike(即突然上升)。


640?wx_fmt=jpeg

圖片來源(Anomaly Detection – Using Machine Learning to Detect Abnormalities in Time Series Data-https://blogs.technet.microsoft.com/machinelearning/2014/11/05/anomaly-detection-using-machine-learning-to-detect-abnormalities-in-time-series-data/)


就像上圖所標註出來著一系列點都是潛在的異常點。嚴格意義上說,時間序列分析在金融經濟領域使用的更多,任何交易模型都需要時序分析。


另一種簡單的時序分析就是持續追蹤某個值的變化情況,並在多個資料中進行對比:


640?wx_fmt=jpeg


上圖是某種產品在不同零售商(不同顏色)的退貨情況,x軸是時間。我們會發現“橙色”的零售商的退貨模式更不穩定(前期有大量持續退貨),而“青色”的零售商退貨非常穩定。因此,"橙色"零售商似乎有些可疑。當然,這只是一種解讀方法,不代表一定有問題。


3.2. 時間獨立下的建模


3.2.1. 無監督學習


如果我們假設時間對於欺詐並沒有影響,那麼我們有很多無監督學習可以用來檢測異常值。


  1. 像某位答主提到的Isolation Forest就是一種非常穩定的演算法,是周志華老師提出的。而且在Sklearn裡面已經得到了實現。基本的原理就是一種整合學習,通過計算每個資料點需要多少次節點拆分(splitting)才能被劃分到獨立的空間。異常點因為和其他正常點離得較遠不大相似,因此更容易用很少的拆分就可以被劃到獨立的空間裡面去。

  2. 各種Density Based的聚類方法(CBLOF)。此處需要注意,大家熟知的K-Means為原型的聚類,如K-Modes都不大適合用於異常值檢測,因為其本身很容易受到異常值和噪音的擾動。

  3. 各種以K近鄰(KNN)為原型的檢測方法。從本質上說,和聚類方法是比較類似的。


3.2.2. 統計學密度估計及分佈測試


比較簡單的做法可以嘗試將資料擬合到假設的混合模型上(finite mixture models),再通過統計學測試檢查異常點、 一般不大推薦直接這麼做,因為需要對於正常資料分佈的深刻了解,才能做出對於資料分佈的正確推斷。


3.2.3. 監督學習


就像上文提到的,我不太建議直接用監督學習。當然,在特定場合下如果需要使用的話,比較出名的就是MetaCost框架,可以結合各種基礎學習器使用。


3.3. 時間相關及獨立的交叉驗證


其實很多問題不是非此即彼,換句話說,時間獨立和時間獨立可能找到相似的異常點。在專案允許的情況下,我們大可以將兩種時間假設都做一遍,之後求交集。若出現在交集中,我們對於該點是詐騙的信心會進一步上升。


4. 反欺詐專案的操作順序(3) - 如何驗證欺詐點?


假設我們通過上面的無監督學習得到了一些“潛在的欺詐點”,我們可以做一些分析來驗證它們是否真的是欺詐。首先我必須宣告,這種歸納是存在很大偏見的,但很難避免。


舉例,我們可以對比異常值資料作為樣本(sample)與總體(population)的各項資料的統計值(如均值方差等),從統計學上證明它們是有顯著差異的。但有顯著差異並不代表他們一定是欺詐,只能說明它們不同。


當我們從統計學上證明其存在顯著差異後,我們就開始想要歸納潛在的欺詐原因。以某供貨商的資料為例,我們發現一個產品的進貨變多、退貨變少,但單位收益卻上升,這是有問題的。


於是我們就可以大膽的推測他的進貨和退貨不是同一種產品,即在退貨時用了比較便宜商品但拿到了更多的退貨錢。


把這個故事講給領域專家以後,他們會支援、質疑、甚至反對這個看法。根據領域專家的反饋,我們可以不斷的調整優化模型,期待發現更多的問題。有的時候,也可以直接叫領域專家來幫忙分析為什麼一些資料可能是欺詐。


5. 總結 - 如何構建可行的欺詐檢測方案?


首先,我們必須先要認清一個殘酷的現實:單純依靠機器學習模型來檢測欺詐是愚蠢的。至少在現階段我們不能單純依靠純粹的資料模型來做這一點。比較折中且可行的方法是做 混合模型(hybrid model),也就是把人為規則和機器學習模型合二為一,一起來使用。


首先我們通過對領域專家的訪談和對歷史資料的分析,可以得到一些非常可靠的評判標準。以保險行業為例,如果一個人剛買短期保險沒兩天就意外身亡,這存在欺詐的風險就很高。這樣的標準或許從機器學習中可以學到,或許學不到。如果有成本更低方法做到更好的效果,不要迷信全自動模型。


總結來說,反欺詐模型難度很高,而且需要和領域專家一起協作才能有最好的結果。機器學習從業者千萬不要閉門造車,試圖自己靠調參就搞個大新聞。


我個人推薦的步驟是:


  1. 對資料進行必要的視覺化,如MDS

  2. 同時考慮時間是否是重要因素,如果是那麼進行時序分析

  3. 用無監督學習得到一些可能的異常點,如Isolation Forests

  4. 通過統計學方法分析得到的異常點是否有顯著的不同,有特徵可供我們研究

  5. 歸納特徵並構造一個故事,與領域專家共同驗證故事的可靠性

  6. 重複1-5直到被派到下一個專案上搬磚,爭取找到儘量多有效的欺詐

  7. 構造[規則+機器學習]的混合模型,進一步調參優化模型


鑑於篇幅,很多有趣的做法都沒法詳談,比如時間序列上的聚類和半監督異常檢測,有興趣的朋友可以繼續深入挖掘。


作者簡介:微調(現知乎ID「微調」, 曾用ID「阿薩姆」,微博@阿薩姆談AI ),普華永道高階資料科學家。

知乎主頁:https://www.zhihu.com/people/breaknever/posts


精彩推薦

2018年3月30-31日,第二屆中國區塊鏈技術暨應用大會將於北京喜來登長城飯店盛大開場,50+區塊鏈技術領導人物,100+區塊鏈投資商業大咖,100+技術&財經媒體,1000+區塊鏈技術愛好者,強強聯合,共同探討最in區塊鏈技術,豪華乾貨禮包享不停。八折門票火熱搶購中!2018,未來已來,帶你玩轉區塊鏈。


640?wx_fmt=jpeg


AI科技大本營使用者群(計算機視覺、機器學習、深度學習、NLP、Python、AI硬體、AI+金融方向)正在招募中,後臺回覆:讀者群,聯絡營長,新增營長請備註姓名,研究方向。

☟☟☟點選 | 閱讀原文 | 檢視大會詳情

相關文章