【待继续研究】如何运用机器学习技术构建可行的反欺诈检测方案?
反欺詐方向的實際應(yīng)用很多,我有做過保險業(yè)反欺詐和零售快消業(yè)的欺詐檢測,拋磚引玉的談?wù)劮雌墼p項目的"道"和"術(shù)"。
1.背景 - 為什么反欺詐檢測難度很高?
反欺詐項目很多情況下就是客戶根本不知道什么是欺詐,什么不是。換句話說,對于什么是詐騙的定義很模糊。往小了說,反詐騙似乎是一個二分類問題(binary classification),但你仔細(xì)想想后會發(fā)現(xiàn)其實這是個多分類問題(multi-class classification),如果你把每種不同詐騙當(dāng)做一種單獨的類型。而單一類型的詐騙幾乎是不存在的,且詐騙的手段日新月新總在變化。即使像銀行還有保險公司這種常年和詐騙打交道的行業(yè),也必須常常更新自己的檢測手段,而不是把賭注壓到同一個模型上。
除此之外,欺詐檢測一般還面臨以下問題:
九成九的情況數(shù)據(jù)是沒有標(biāo)簽(label)的,各種成熟的監(jiān)督學(xué)習(xí)(supervised learning)沒有用武之地。
區(qū)分噪音(noise)和異常點(anomaly)時難度很大,甚至需要發(fā)揮一點點想象力和直覺。
緊接著上一點,當(dāng)多種詐騙數(shù)據(jù)混合在一起,區(qū)分不同的詐騙類型更難。根本原因還是因為我們并不了解每一種詐騙定義。
退一步說,即使我們真的有詐騙的歷史數(shù)據(jù),即在有標(biāo)簽的情況下用監(jiān)督學(xué)習(xí),也存在很大的風(fēng)險。用這樣的歷史數(shù)據(jù)學(xué)出的模型只能檢測曾經(jīng)出現(xiàn)過與歷史詐騙相似的詐騙,而對于變種的詐騙和從未見過的詐騙,我們的模型將會無能為力。因此,在實際情況中,我不建議直接用任何監(jiān)督學(xué)習(xí),至少不能單純依靠一個監(jiān)督學(xué)習(xí)模型來奢求檢測到所有的詐騙。
這就陷入了一個雞生蛋蛋生雞的死循環(huán),因為沒有歷史標(biāo)簽和對詐騙的理解,我們無法做出能對詐騙細(xì)分的模型。因此我們一般使用無監(jiān)督學(xué)習(xí)(unsupervised learning),且需要領(lǐng)域?qū)<?domain experts)也就是對這個行業(yè)非常了解的人來驗證我們的預(yù)測,提供反饋,以便于及時的調(diào)整模型。
2. 反欺詐項目的操作順序(1) - 可視化
一般在拿到數(shù)據(jù)以后,我會推薦以下步驟進(jìn)行分析。當(dāng)然,一個答案很難包括所有常見的操作,僅僅是分享個人經(jīng)驗以供思考。
數(shù)據(jù)可視化 - 相關(guān)矩陣(Correlation Matrix) & 多維尺度變換(Multidimensional Scaling)
人是視覺動物,可以在第一時間“看到”數(shù)據(jù)中存在的問題。因此,對于大部分反欺詐問題,我建議至少要做以下兩個可視化嘗試:
2.1.首先對不同的特征(feature)做一個相關(guān)矩陣分析并可視化,分析相關(guān)矩陣的目的是告訴我們特征兩兩之間的關(guān)系,以便于我們快速發(fā)現(xiàn)一些數(shù)據(jù)里面可能存在的問題。最重要的是幫助我們檢查數(shù)據(jù)是否存在問題,有沒有什么違反常理的情況。
以我最近在寫的文章為例(并不是反欺詐問題),對不同偶像團(tuán)體是否能夠繼續(xù)走紅進(jìn)行預(yù)測。我們希望不同特征之間的兩兩關(guān)系符合嘗試, 我在模型里面用了6個不同的特征并計算相關(guān)矩陣:
通過上表及下圖,我們發(fā)現(xiàn):
團(tuán)員的平均的年齡和演唱會次數(shù)無關(guān)。
出道長度和和演唱會次數(shù)為負(fù)相關(guān)。
舉例,如果我們發(fā)現(xiàn)出道年限和專輯數(shù)呈負(fù)相關(guān),這就違反了常識。按照常識出道時間越長專輯數(shù)應(yīng)該越多,因此需要認(rèn)真檢查為什么會有這樣的情況發(fā)生,是否是潛在問題。
2.2. 多維尺度變換(MDS)來直接可視化數(shù)據(jù)分布
我們都知道一般來說欺詐和正常數(shù)據(jù)應(yīng)該“長得不一樣”,那是否可以直接把它們畫出來來分析。
然而,數(shù)據(jù)可視化往往都是二維或者三維的,但現(xiàn)實往往是成百上千維。即使我們把一個特征作為一個維度,我們最多也只能可視化三個維度。而多維尺度變換(MDS)可以將高維的數(shù)據(jù)在二維或者三維的框架里面進(jìn)行可視化,類似的數(shù)據(jù)點會更加接近。通過觀察數(shù)據(jù)點的分布,我們可以直觀的猜測數(shù)據(jù)是否有規(guī)律,是否存在潛在異常點。
以我最近做的一個項目為例,我們用MDS將一個8維的數(shù)據(jù)在2維上展示出來。我們似乎可以直觀的看到一些近似線性的關(guān)系,以及一些看起來“很可疑”的點,我在圖中標(biāo)注了出來。
這樣做的好處有兩點:
首先我們可以看到數(shù)據(jù)是否存在特定的特征,如果所有的點都是隨機(jī)散亂分布,那我們的麻煩就大了。
我們似乎可以看到有一些離群的數(shù)據(jù)點,這些點可能是潛在的“欺詐”,也有可能只是噪音而已。但我們可以向客戶或者老板展示這個可視圖,向他們證明項目有潛在的價值。
如果在可視化中我們看到了一些規(guī)律,這讓有信心繼續(xù)往下做,進(jìn)入建模階段。多加一句,此處和主成分分析(PCA)也有異曲同工之妙。
3. 反欺詐項目的操作順序(2) - 算法
一般我們對欺詐檢測做兩種假設(shè):
1.時序相關(guān)(time dependent)。對于時序相關(guān)的問題,我們假設(shè)欺詐的發(fā)生依賴于時間,通過時間序列分析,我們可以發(fā)現(xiàn)異常的地方。舉例,假設(shè)一個人的信用卡平時1-11月每月消費2000美元,但12月突然消費了5000美元,此時時間就對我們的項目存在意義。
2.時序獨立(time independent)。對于時序獨立的問題,我們假設(shè)每一個欺詐都是獨立,和時間無關(guān)。于是在分析中,我們移除了時間這個特征,我們不再把時間作為一個分析軸或者影響欺詐發(fā)生的特征。
3.1. 時間序列分析(time series analysis)
時間序列分析展開說是很大的話題,從簡單的觀察一個時間序列是否穩(wěn)定(stability)到更復(fù)雜的看多個特征如何在時間上互相作用如( vector auto-regression(var)。
圖片來源(Anomaly Detection-Using Machine Learning to Detect Abnormalities in Time Series Data)
就像上圖所標(biāo)注出來著一系列點都是潛在的異常點。嚴(yán)格意義上說,時間序列分析在金融經(jīng)濟(jì)領(lǐng)域使用的更多,任何交易模型都需要時序分析。
另一種簡單的時序分析就是持續(xù)追蹤某個值的變化情況,并在多個數(shù)據(jù)中進(jìn)行對比:
上圖是某種產(chǎn)品在不同零售商(不同顏色)的退貨情況,x軸是時間。我們會發(fā)現(xiàn)“橙色”的零售商的退貨模式更不穩(wěn)定(前期有大量持續(xù)退貨),而“青色”的零售商退貨非常穩(wěn)定。因此,"橙色"零售商似乎有些可疑。當(dāng)然,這只是一種解讀方法,不代表一定有問題。
3.2. 時間獨立下的建模
3.2.1. 無監(jiān)督學(xué)習(xí)
如果我們假設(shè)時間對于欺詐并沒有影響,那么我們有很多無監(jiān)督學(xué)習(xí)可以用來檢測異常值。
1.像Isolation Forest就是一種非常穩(wěn)定的算法,是周志華老師提出的。而且在Sklearn里面已經(jīng)得到了實現(xiàn)?;镜脑砭褪且环N集成學(xué)習(xí),通過計算每個數(shù)據(jù)點需要多少次節(jié)點拆分(splitting)才能被劃分到獨立的空間。異常點因為和其他正常點離得較遠(yuǎn)不大相似,因此更容易用很少的拆分就可以被劃到獨立的空間里面去。
2.各種Density Based的聚類方法(CBLOF)。此處需要注意,大家熟知的K-Means為原型的聚類,如K-Modes都不大適合用于異常值檢測,因為其本身很容易受到異常值和噪音的擾動。
3.各種以K近鄰(KNN)為原型的檢測方法。從本質(zhì)上說,和聚類方法是比較類似的。
3.2.2. 統(tǒng)計學(xué)密度估計及分布測試
比較簡單的做法可以嘗試將數(shù)據(jù)擬合到假設(shè)的混合模型上(finite mixture models),一般不大推薦直接這么做,因為需要對于正常數(shù)據(jù)分布的深刻了解,才能做出對于數(shù)據(jù)分布的正確推斷。
3.2.3. 監(jiān)督學(xué)習(xí)
就像上文提到的,我不太建議直接用監(jiān)督學(xué)習(xí)。當(dāng)然,在特定場合下如果需要使用的話,比較出名的就是MetaCost框架,可以結(jié)合各種基礎(chǔ)學(xué)習(xí)器使用。
3.3. 時間相關(guān)及獨立的交叉驗證
其實很多問題不是非此即彼,換句話說,時間獨立和時間獨立可能找到相似的異常點。在項目允許的情況下,我們大可以將兩種時間假設(shè)都做一遍,之后求交集。若出現(xiàn)在交集中,我們對于該點是詐騙的信心會進(jìn)一步上升。
4. 反欺詐項目的操作順序(3) - 如何驗證欺詐點?
假設(shè)我們通過上面的無監(jiān)督學(xué)習(xí)得到了一些“潛在的欺詐點”,我們可以做一些分析來驗證它們是否真的是欺詐。首先我必須聲明,這種歸納是存在很大偏見的,但很難避免。
舉例,我們可以對比異常值數(shù)據(jù)作為樣本(sample)與總體(population)的各項數(shù)據(jù)的統(tǒng)計值(如均值方差等),從統(tǒng)計學(xué)上證明它們是有顯著差異的。但有顯著差異并不代表他們一定是欺詐,只能說明它們不同。
當(dāng)我們從統(tǒng)計學(xué)上證明其存在顯著差異后,我們就開始想要歸納潛在的欺詐原因。以某供貨商的數(shù)據(jù)為例,我們發(fā)現(xiàn)一個產(chǎn)品的進(jìn)貨變多、退貨變少,但單位收益卻上升,這是有問題的。
于是我們就可以大膽的推測他的進(jìn)貨和退貨不是同一種產(chǎn)品,即在退貨時用了比較便宜商品但拿到了更多的退貨錢。
把這個故事講給領(lǐng)域?qū)<乙院?#xff0c;他們會支持、質(zhì)疑、甚至反對這個看法。根據(jù)領(lǐng)域?qū)<业姆答?#xff0c;我們可以不斷的調(diào)整優(yōu)化模型,期待發(fā)現(xiàn)更多的問題。有的時候,也可以直接叫領(lǐng)域?qū)<襾韼兔Ψ治鰹槭裁匆恍?shù)據(jù)可能是欺詐。
5. 總結(jié) - 如何構(gòu)建可行的欺詐檢測方案?
首先,我們必須先要認(rèn)清一個殘酷的現(xiàn)實:?單純依靠機(jī)器學(xué)習(xí)模型來檢測欺詐是愚蠢的。至少在現(xiàn)階段我們不能單純依靠純粹的數(shù)據(jù)模型來做這一點。比較折中且可行的方法是做 混合模型(hybrid model),也就是把人為規(guī)則和機(jī)器學(xué)習(xí)模型合二為一,一起來使用。
首先我們通過對領(lǐng)域?qū)<业脑L談和對歷史數(shù)據(jù)的分析,可以得到一些非??煽康脑u判標(biāo)準(zhǔn)。以保險行業(yè)為例,如果一個人剛買短期保險沒兩天就意外身亡,這存在欺詐的風(fēng)險就很高。這樣的標(biāo)準(zhǔn)或許從機(jī)器學(xué)習(xí)中可以學(xué)到,或許學(xué)不到。如果有成本更低方法做到更好的效果,不要迷信全自動模型。
總結(jié)來說,反欺詐模型難度很高,而且需要和領(lǐng)域?qū)<乙黄饏f(xié)作才能有最好的結(jié)果。機(jī)器學(xué)習(xí)從業(yè)者千萬不要閉門造車,試圖自己靠調(diào)參就搞個大新聞。
我個人推薦的步驟是:
1.對數(shù)據(jù)進(jìn)行必要的可視化,如MDS
2.同時考慮時間是否是重要因素,如果是那么進(jìn)行時序分析
3.用無監(jiān)督學(xué)習(xí)得到一些可能的異常點,如Isolation Forests
4.通過統(tǒng)計學(xué)方法分析得到的異常點是否有顯著的不同,有特征可供我們研究
5.歸納特征并構(gòu)造一個故事,與領(lǐng)域?qū)<夜餐炞C故事的可靠性
6.重復(fù)1-5直到被派到下一個項目上搬磚,爭取找到盡量多有效的欺詐
7.構(gòu)造[規(guī)則+機(jī)器學(xué)習(xí)]的混合模型,進(jìn)一步調(diào)參優(yōu)化模型
鑒于篇幅,很多有趣的做法都沒法詳談,比如時間序列上的聚類和半監(jiān)督異常檢測,有興趣的朋友可以繼續(xù)深入挖掘。
總結(jié)
以上是生活随笔為你收集整理的【待继续研究】如何运用机器学习技术构建可行的反欺诈检测方案?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 反欺诈之地址的处理和使用
- 下一篇: 【不采用】人工智能如何帮助银行反欺诈