WePay機(jī)器學(xué)習(xí)反欺詐實(shí)踐:Python+scikit-learn+隨機(jī)森林
摘要:在這篇博文中,WePay介紹了支付行業(yè)構(gòu)建機(jī)器學(xué)習(xí)模型應(yīng)對(duì)很難發(fā)現(xiàn)的shell selling欺詐的實(shí)踐心得持隧。WePay采用了流行的Python堰怨、scikit-learn開(kāi)源學(xué)習(xí)機(jī)器學(xué)習(xí)工具以及隨機(jī)森林算法崇猫。
【編者按】將機(jī)器學(xué)習(xí)算法用于金融領(lǐng)域的一個(gè)很好的突破口是反欺詐根欧,在這篇博文中曼玩,WePay介紹了支付行業(yè)構(gòu)建機(jī)器學(xué)習(xí)模型應(yīng)對(duì)很難發(fā)現(xiàn)的shell selling欺詐的實(shí)踐心得烘贴。WePay采用了流行的Python羡儿、scikit-learn開(kāi)源學(xué)習(xí)機(jī)器學(xué)習(xí)工具以及隨機(jī)森林算法事示。以下是文章內(nèi)容:
什么是shell selling早像?
雖然欺詐幾乎涉及各種領(lǐng)域,但相對(duì)于傳統(tǒng)的買(mǎi)方或賣(mài)方僅僅擔(dān)心對(duì)方是否是騙子肖爵,支付平臺(tái)需要擔(dān)心的是交易雙方扎酷。如果其中任何一方存在信用詐騙,真正的持卡人發(fā)現(xiàn)和撤銷(xiāo)費(fèi)用遏匆,平臺(tái)自身就要進(jìn)行賬單償還法挨。
shell selling是在這種情況下特別受關(guān)注的欺詐類(lèi)型的一種谁榜。基本上凡纳,當(dāng)交易雙方都帶有欺騙性質(zhì)時(shí)窃植,這種模式便會(huì)發(fā)生,比如說(shuō)有一個(gè)犯罪分子用偷來(lái)的一個(gè)信用卡賬戶(hù)來(lái)支付兩筆支付荐糜。
shell selling可能很難發(fā)現(xiàn)巷怜,因?yàn)檫@些欺騙者姿態(tài)很低調(diào)。他們通常沒(méi)有多少“真正”的客戶(hù)暴氏,所以你不能依靠用戶(hù)反饋結(jié)果延塑,用這種方式你會(huì)碰到更多傳統(tǒng)的欺騙者。當(dāng)一個(gè)商人在一個(gè)很短的時(shí)間段里獲得了來(lái)自同一個(gè)IP的一堆付款時(shí)答渔,這很明顯关带,但主導(dǎo)這種欺詐罪行的情況往往比這還要復(fù)雜很多。他們常常使用各種各樣的技術(shù)來(lái)隱藏自己的身份和逃避偵測(cè)沼撕。
由于shell selling是一個(gè)普遍的難題宋雏,而且很難被發(fā)現(xiàn),所以我們決定建立一個(gè)機(jī)器學(xué)習(xí)算法來(lái)幫助抓住它务豺。
構(gòu)建機(jī)器學(xué)習(xí)算法注意事項(xiàng)
在WePay磨总,我們采用Python建立整個(gè)機(jī)器學(xué)習(xí)的流程,采用流行的scikit-learn開(kāi)源學(xué)習(xí)機(jī)器學(xué)習(xí)工具包笼沥。如果你還沒(méi)有使用過(guò)scikit-learn蚪燕,我強(qiáng)烈建議你嘗試。對(duì)于欺詐模型這類(lèi)需要不斷重新訓(xùn)練和快速部署的任務(wù)奔浅,它有很多優(yōu)點(diǎn):
scikit-learn使用一個(gè)統(tǒng)一的API來(lái)跨不同機(jī)器學(xué)習(xí)算法實(shí)現(xiàn)模型擬合??與預(yù)測(cè)邻薯,使得不同算法之間的代碼復(fù)用真正有效。
網(wǎng)絡(luò)服務(wù)(web services)的評(píng)分可以利用Django或Flask直接進(jìn)行基于Python的服務(wù)器托管乘凸,從而使部署更為簡(jiǎn)單。我們只需要安裝scikit-learn累榜,復(fù)制導(dǎo)出模型文件和必要的數(shù)據(jù)處理管道代碼到網(wǎng)絡(luò)服務(wù)實(shí)例用于啟動(dòng)营勤。
整個(gè)模型的開(kāi)發(fā)和部署周期完全用Python獨(dú)立編寫(xiě)。這給了我們一個(gè)超過(guò)其他流行機(jī)器學(xué)習(xí)語(yǔ)言像R或SAS的優(yōu)勢(shì)壹罚,后者需要模型在投入生產(chǎn)之前被轉(zhuǎn)換成另一種語(yǔ)言葛作。除了通過(guò)消除不必要的步驟簡(jiǎn)化了開(kāi)發(fā),這還給予我們更多的靈活性來(lái)嘗試不同的算法猖凛,因?yàn)橥ǔG闆r下赂蠢,這個(gè)轉(zhuǎn)換過(guò)程并不好處理,它們?cè)诹硪粋€(gè)環(huán)境中的麻煩會(huì)多于價(jià)值辨泳。
算法:隨機(jī)森林(Random Forest)
回到shell selling虱岂,我們測(cè)試了幾種算法玖院,然后選定能給以我們最好的性能的算法:隨機(jī)森林。
隨機(jī)森林是Leo Breiman 和 Adele Cutler開(kāi)發(fā)的一種基于樹(shù)形結(jié)構(gòu)的集成方法第岖,由Breiman于2001年在機(jī)器學(xué)習(xí)期刊的評(píng)議文章中首次提出[1]难菌。隨機(jī)森林在訓(xùn)練數(shù)據(jù)的隨機(jī)子集上訓(xùn)練許多決策樹(shù),然后使用單個(gè)樹(shù)的預(yù)測(cè)均值作為最終的預(yù)測(cè)蔑滓。隨機(jī)子集是從原始的訓(xùn)練數(shù)據(jù)抽樣郊酒,通過(guò)在記錄級(jí)有放回抽樣(bootstrap)和在特征級(jí)隨機(jī)二次抽樣得到。
我們嘗試的算法的召回率键袱,隨機(jī)森林提供了最佳的精度燎窘,緊隨其后的是神經(jīng)網(wǎng)絡(luò)和另外一種集成方法AdaBoost。相比于其他算法蹄咖,隨機(jī)森林針對(duì)我們碰到的各類(lèi)欺詐數(shù)據(jù)有許多的優(yōu)勢(shì):
基于集成方法的樹(shù)可以同時(shí)很好地處理非線性和非單調(diào)性褐健,這在欺詐信號(hào)中相當(dāng)普遍。相比之下比藻,神經(jīng)網(wǎng)絡(luò)對(duì)非線性處理地相當(dāng)不錯(cuò)铝量,但同時(shí)受到非單調(diào)性的羈絆,而邏輯回歸都無(wú)法處理银亲。對(duì)于使用后兩種方法來(lái)處理的非線性和/或非單調(diào)性慢叨,我們需要廣泛的和適當(dāng)?shù)奶卣鬓D(zhuǎn)換。
隨機(jī)森林需要最小的特征預(yù)備和特征轉(zhuǎn)換务蝠,它不需要神經(jīng)網(wǎng)絡(luò)和邏輯回歸要求的標(biāo)準(zhǔn)化輸入變量拍谐,也不需要聚類(lèi)和風(fēng)險(xiǎn)評(píng)級(jí)轉(zhuǎn)換為非單調(diào)變量。
隨機(jī)森林相比其他算法擁有最好的開(kāi)箱即用的性能馏段。另一個(gè)基于樹(shù)的方法轩拨,梯度提升決策樹(shù)(GBT),可以達(dá)到類(lèi)似的性能院喜,但需要更多的參數(shù)調(diào)優(yōu)亡蓉。
隨機(jī)森林輸出特征的重要性體現(xiàn)在作為模型訓(xùn)練的副產(chǎn)品,這對(duì)于特征選擇是非常有用的[2]喷舀。
隨機(jī)森林與其他算法相比具有更好的過(guò)擬合(overfitting)容錯(cuò)性砍濒,并且處理大量的變量也不會(huì)有太多的過(guò)擬合[1],因?yàn)檫^(guò)擬合可以通過(guò)更多的決策樹(shù)來(lái)削弱硫麻。此外爸邢,變量的選擇和減少也不像其他算法那么重要。
下圖是隨機(jī)森林與其競(jìng)爭(zhēng)對(duì)手的對(duì)比情況:
訓(xùn)練算法
我們的機(jī)器學(xué)習(xí)流程遵循一個(gè)標(biāo)準(zhǔn)程序拿愧,包括數(shù)據(jù)抽取杠河、數(shù)據(jù)清洗、特征推導(dǎo)、特征工程和轉(zhuǎn)換券敌、特征選擇唾戚、模型訓(xùn)練和模型性能評(píng)價(jià):
洞察
經(jīng)過(guò)大量的訓(xùn)練,我們的隨機(jī)森林算法對(duì)于shell selling的識(shí)別已經(jīng)成為現(xiàn)實(shí)陪白,并且積極地阻止欺詐颈走。當(dāng)然我們還需要大量的工作去選擇、訓(xùn)練和部署該算法咱士,但是它已經(jīng)使得我們的風(fēng)險(xiǎn)流程更加健壯立由,且有能力使用更少的人工來(lái)檢查抓住更多的欺詐。在同一欺詐召回率序厉,這一模型的精度是不斷調(diào)整和優(yōu)化規(guī)則的2 - 3倍锐膜。
使用這種算法,除了得到明顯的好處以外弛房,我們對(duì)于數(shù)據(jù)和建模過(guò)程中使用的方法也有了更多的理解:
通過(guò)特征選擇的過(guò)程道盏,我們發(fā)現(xiàn)對(duì)這種欺詐行為最有預(yù)測(cè)力的特征是速度型的變量。這些包括用戶(hù)的交易量文捶、設(shè)備荷逞、真正的IP和信用卡。我們還發(fā)現(xiàn)粹排,設(shè)備ID种远、銀行賬戶(hù)和信用卡等賬戶(hù)相關(guān)特性都是很有用的,如多個(gè)賬戶(hù)登錄到一個(gè)設(shè)備顽耳,以及多重提款到一個(gè)銀行賬戶(hù)坠敷。
風(fēng)險(xiǎn)等級(jí)的分類(lèi)變量,如電子郵件域射富,應(yīng)用程序ID膝迎、用戶(hù)的國(guó)家,以及一天中的時(shí)間風(fēng)險(xiǎn)評(píng)級(jí)胰耗,也證明了高度預(yù)測(cè)性限次。
數(shù)字足跡諸如瀏覽器語(yǔ)言、操作系統(tǒng)字體柴灯、屏幕分辨率卖漫、用戶(hù)代理、flash版本等對(duì)于反欺詐是有點(diǎn)用的弛槐。稍微有更多預(yù)測(cè)性的是在人們隱藏他們的數(shù)字足跡過(guò)程當(dāng)中,例如VPN隧道或虛擬機(jī)和TOR的使用依啰。
我們還發(fā)現(xiàn)模型性能迅速惡化乎串。這真的不是一個(gè)驚喜——騙子不斷改變他們的方法來(lái)避免檢測(cè),所以即使是最好的模型,如果不改變也終將過(guò)時(shí)叹誉。但是我們非常驚訝這發(fā)生的速度有多快鸯两。對(duì)shell selling而言,在模型訓(xùn)練后僅僅第一個(gè)月精度便下降一半长豁。因此, 經(jīng)常刷新模型來(lái)保持高檢測(cè)精度對(duì)于欺詐檢測(cè)的成功是至關(guān)重要的钧唐。
不幸的是,頻繁刷新暴露出他們自己的問(wèn)題匠襟。雖然刷新模型盡可能經(jīng)常是理想的钝侠,但是在使用最近的事務(wù)數(shù)據(jù)來(lái)訓(xùn)練模型時(shí)必須格外小心。欺詐標(biāo)簽可以需要一個(gè)月成熟酸舍,所以事實(shí)上使用最近的數(shù)據(jù)也會(huì)污染模型帅韧。和我們最初的假設(shè)不同,利用最新數(shù)據(jù)在線學(xué)習(xí)并不會(huì)總能得到最好的結(jié)果啃勉。
隨機(jī)森林是一個(gè)生產(chǎn)高性能模型的優(yōu)異的機(jī)器學(xué)習(xí)算法忽舟,然而,它通常被用來(lái)作為一個(gè)黑盒方法淮阐。這是一個(gè)問(wèn)題叮阅,因?yàn)槲覀儾⒉皇窃噲D要完全削減人類(lèi)的全部過(guò)程,而且很有可能無(wú)法做到即使我們?cè)敢馄亍H祟?lèi)分析師總是希望得到原因代碼浩姥,告訴他們?yōu)槭裁词虑楸粯?biāo)記之后來(lái)引導(dǎo)他們的案件審查。但隨機(jī)森林群扶,就其本身而言及刻,不能隨時(shí)提供原因代碼。解釋模型數(shù)據(jù)是困難的竞阐,而且還可能涉及挖掘“森林”的結(jié)構(gòu)缴饭,這可以顯著提高評(píng)分的時(shí)間。實(shí)際上骆莹,為了應(yīng)對(duì)這個(gè)問(wèn)題颗搂,WePay的數(shù)據(jù)科學(xué)團(tuán)隊(duì)發(fā)明了一種新的私有方法可以從隨機(jī)森林算生成原因代碼,我們?yōu)檫@種方法申請(qǐng)了臨時(shí)專(zhuān)利幕垦。
結(jié)論
風(fēng)險(xiǎn)管理技術(shù)是WePay的核心丢氢。風(fēng)險(xiǎn)管理不僅僅是技術(shù),它還體現(xiàn)了人類(lèi)和技術(shù)無(wú)縫合作的伙伴關(guān)系先改。它在很大程度上仍然是人類(lèi)不得不思考的方式疚察,騙子可以攻擊一個(gè)支付系統(tǒng),編寫(xiě)規(guī)則來(lái)阻止它們仇奶,而且還是一個(gè)經(jīng)驗(yàn)豐富的專(zhuān)業(yè)人員貌嫡,當(dāng)它下跌到 “明顯欺詐”和“顯然合法” 之間的灰色地帶時(shí),它必須像經(jīng)常處理的那樣,做出判斷是否阻止交易岛抄。
這就是為什么我們?nèi)绱伺d奮于機(jī)器學(xué)習(xí)和人工智能别惦。我們并非試圖取代人類(lèi),只是希望機(jī)器智能更加聰明更好地工作夫椭,而我們可以集中人類(lèi)智慧關(guān)注其他的大難題掸掸。
引文
[1]Machine Learning, October 2001, Volume 45, Issue 1, pp 5-32
Jon Xavier對(duì)本文亦有貢獻(xiàn)。
原文鏈接:How we’re using machine learning to fight shell selling(翻譯/王輝 編輯/周建恫淝铩)