自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何構(gòu)建用于檢測信用卡詐騙的機(jī)器學(xué)習(xí)模型?

人工智能 機(jī)器學(xué)習(xí)
我們將介紹一些強(qiáng)大的,但是在機(jī)器學(xué)習(xí)中普遍適用的技術(shù)。閱讀之后,你應(yīng)該具備在你自己的領(lǐng)域著手進(jìn)行具體機(jī)器學(xué)習(xí)實驗的相應(yīng)知識。

[[187627]]

機(jī)器學(xué)習(xí)是我們?nèi)粘=佑|到的許多產(chǎn)品的長期發(fā)展動力,從類似于Apple的Siri和Google的智能助手,到類似于亞馬遜的建議你買新產(chǎn)品的推薦引擎,再到Google和Facebook使用的廣告排名系統(tǒng)。最近,機(jī)器學(xué)習(xí)又由于“深度學(xué)習(xí)”的發(fā)展開始進(jìn)入公眾視線,包括AlphaGo擊敗韓國圍棋大師李世石,并且在圖像識別和機(jī)器翻譯領(lǐng)域發(fā)布了令人印象深刻的新產(chǎn)品。

我們將介紹一些強(qiáng)大的,但是在機(jī)器學(xué)習(xí)中普遍適用的技術(shù)。閱讀之后,你應(yīng)該具備在你自己的領(lǐng)域著手進(jìn)行具體機(jī)器學(xué)習(xí)實驗的相應(yīng)知識。

我們結(jié)合一個Python擴(kuò)展的“案例研究”:我們可以如何構(gòu)建用于檢測信用卡詐騙的機(jī)器學(xué)習(xí)模型?(雖然我們會使用詐騙檢測語言,所做的大部工作是在微小修改基礎(chǔ)上適用于其他分類問題,例如,廣告點擊預(yù)測。)隨著時間的推移,我們會遇到許多機(jī)器學(xué)習(xí)的關(guān)鍵思想和術(shù)語,包括邏輯回歸、決策樹、隨機(jī)森林、正向預(yù)測(True Positive)和負(fù)向預(yù)測(False Positive)、交叉驗證(cross-validation),以及受試者工作特征(Receiver Operating Characteristic,簡稱ROC)曲線和曲線以下區(qū)域(Area Under the Curve,簡稱AUC)曲線。

目標(biāo):信用卡詐騙

在線銷售產(chǎn)品的企業(yè)不可避免地需要應(yīng)對欺詐行為。一個典型的欺詐交易,詐騙者使用偷來的信用卡號碼去在線網(wǎng)站購買商品。欺詐者稍后會在其他地方以打折形式銷售這些商品,中飽私囊,然而企業(yè)必須承擔(dān)“退款”成本。你可以從這里獲取信用卡詐騙的詳細(xì)內(nèi)容。

讓我們假設(shè)自己是一個電子商務(wù)企業(yè),并且已經(jīng)應(yīng)對詐騙有一些時間了,我們想要使用機(jī)器學(xué)習(xí)幫助解決問題。更具體地說,每次交易進(jìn)行時,我們想要去預(yù)測是否可以證明是詐騙者(例如,是否授權(quán)的持卡人不是交易人),這樣我們可以相應(yīng)地采取行動。這類機(jī)器學(xué)習(xí)問題被稱為分類,因為我們正在做的就是把每筆收入歸入欺詐或非欺詐這兩類中的其中一類。

對于每一筆歷史付款,我們有一個布爾值指示表明這筆交易是否欺詐(fraudulent),以及一些我們認(rèn)為可能表明欺詐的其他屬性,例如,以美元支付的金額(amount)、卡片開卡國家(card_country),以及這張卡片同一天內(nèi)在我們企業(yè)的支付次數(shù)(card_use_24h)。因此,極有可能我們建立預(yù)測模型的數(shù)據(jù)看起來如以下CSV所示:

  1. fraudulent,charge_time,amount,card_country,card_use_24h 
  2.  
  3. False,2015-12-31T23:59:59Z,20484,US,0 
  4.  
  5. False,2015-12-31T23:59:59Z,1211,US,0 
  6.  
  7. False,2015-12-31T23:59:59Z,8396,US,1 
  8.  
  9. False,2015-12-31T23:59:59Z,2359,US,0 
  10.  
  11. False,2015-12-31T23:59:59Z,1480,US,3 
  12.  
  13. False,2015-12-31T23:59:59Z,535,US,3 
  14.  
  15. False,2015-12-31T23:59:59Z,1632,US,0 
  16.  
  17. False,2015-12-31T23:59:59Z,10305,US,1 
  18.  
  19. False,2015-12-31T23:59:59Z,2783,US,0  

有兩個重要的細(xì)節(jié)我們會在討論里跳過,但是我們需要牢記于心,因為它們同樣重要,甚至超過我們在這里介紹的模型構(gòu)建問題。

首先,確定我們認(rèn)為存在詐騙行為的特征是一個數(shù)據(jù)科學(xué)問題。在我們的例子中,我們已經(jīng)確認(rèn)支付的金額、這張卡片是在哪個國家發(fā)行的,以及過去一天里我們收到的卡片交易次數(shù)等作為特征,我們認(rèn)為這些特征可能可以有效預(yù)測詐騙。一般來說,你將需要花費許多時間查看這些數(shù)據(jù),以決定什么是有用的,什么是沒有用的。

其次,計算特征值的時候存在數(shù)據(jù)基準(zhǔn)問題:我們需要所有歷史樣本值用于訓(xùn)練模型,但是我們也需要把他們的實時付款值加進(jìn)來,用以正確地對新的交易加入訓(xùn)練。當(dāng)你開始擔(dān)憂詐騙之前,你已經(jīng)維持和記錄了過去24小時滾動記錄的信用卡使用次數(shù),這樣如果你發(fā)現(xiàn)特征是有利于詐騙檢測的,你將會需要在生產(chǎn)環(huán)境和批量環(huán)境中分別在計算中使用它們。依賴于定義的不同特征,結(jié)果很有可能是不一樣的。

這些問題合在一起通常被認(rèn)為是特征工程,并且通常是工業(yè)級機(jī)器學(xué)習(xí)領(lǐng)域最常涉及(有影響)的部分。

邏輯回歸

讓我們以一個最基本的模型開始,一個線性模型。我們將會發(fā)現(xiàn)系數(shù)a、b、...、z,如下 

 

 

線性模型 

對于每一筆支付,我們會將amount、card_country和card_use_24h的值代入到上面的公式中,如果概率大于0.5,我們會“預(yù)測”這筆支付是欺詐的,反之我們將會預(yù)測它是合法的。

在我們討論如何計算a、b、...、z之前,我們需要解決兩個當(dāng)前問題:

概率(欺詐)需要在0和1之間的一個數(shù)字,但是右側(cè)的數(shù)量可以任意大(絕對值),取決于amount和 card_use_24h的值(如果那些特征的值足夠大,并且a或者b至少有一個非零)。

card_country不是一個數(shù)字,它從許多值中取其一(例如US、AU、GB,以及等等)。這些特征被稱為分類的,并且需要在我們可以訓(xùn)練模型之前進(jìn)行適當(dāng)?shù)?ldquo;編碼”。

Logit函數(shù)

為了解決問題(1),我們會建立一個稱為詐騙者的log-odds模型,而不是直接通過p = Probability(fraud)構(gòu)建模型,所以我們的模型就變成 

 

 

log-odds模型 

如果一個事件發(fā)生的概率為p,它的可能性是p / (1 - p),這就是為什么我們稱公式左邊為“對數(shù)幾率(log odds)”或者“logit”。

考慮到a、b、...、z這些值和特征,我們可以通過反轉(zhuǎn)上面給出的公式計算預(yù)測詐騙概率,得到以下公式 

 

 

 

詐騙p的概率是線性函數(shù)的轉(zhuǎn)換函數(shù)L=a x amount + b x card_use_24h + …,看起來如下所示: 

 

 

 

不考慮線性函數(shù)的值,sigmoid映射為一個在0和1之間的數(shù)字,這是一個合法的概率。

分類變量

為了解決問題(2),我們會使用分類變量 card_country(拿N個不同值中的1個)并且擴(kuò)展到N-1“虛擬”變量。這些新的特征是布爾型格式,card_country = AU、card_country = GB等等。我們只是需要N-1“虛擬”,因為當(dāng)N-1虛擬值都是false的時候N值是必然包含的。為了簡單起見,讓我們假設(shè)card_country可以僅僅使用AU、GB和US三個值中的一個。然后我們需要兩個虛擬變量去對這個值進(jìn)行編碼,并且我們想要去適配的模型(例如,發(fā)現(xiàn)系數(shù)值)是: 

 

 

 

模型類型被稱為一個邏輯回歸。

擬合模型

我們?nèi)绾未_定a、b、c、d和Z的值?讓我們以隨機(jī)選擇a、b、c、d和Z的方式開始。我們可以定義這套猜測的可能性如: 

 

 

 

也就是說,從我們的數(shù)據(jù)集里取出每一個樣本,并且計算詐騙p的預(yù)測概率,提供給猜測a、b、c、d和Z(每個樣本的特征值)的值使用: 

 

 

 

對于每個實際上是欺詐的樣本,我們希望p比較接近1,而對于每一個不是詐騙的樣本,我們希望p接近0(所以1-p應(yīng)該接近1)。因此,我們對于所有欺詐樣本采用p產(chǎn)品,對于所有非欺詐樣本采用1-p產(chǎn)品,用以得到評估,猜測a、b、c、d和Z有多好。我們想讓似然函數(shù)盡可能大(例如,盡可能地接近1)。開始我們的猜測,我們迭代地調(diào)整a、b、c、d和Z,提高可能性,直到我們發(fā)現(xiàn)不可以再通過擾動系數(shù)提升它的值。一種常用的優(yōu)化方式是隨機(jī)梯度下降。

Python實現(xiàn)

現(xiàn)在我們將會使用標(biāo)準(zhǔn)的Python開源工具實踐我們剛剛討論完的原理。我們將會使用pandas,它給Python帶來了類似于R語言的大規(guī)模數(shù)據(jù)科學(xué)的API(R-like data frames),以及scikit-learn,它是一個熱門的機(jī)器學(xué)習(xí)包。讓我們對之前描述過的CSV文件命名為“data.csv”;我們可以上傳數(shù)據(jù)并看一下下面的代碼: 

 

 

 

我們可以使用如下代碼編碼card_country成為合適的虛擬變量 

 

 

 

現(xiàn)在大規(guī)模數(shù)據(jù)幀數(shù)據(jù)擁有了所有我們需要的數(shù)據(jù)、虛擬變量以及所有用于訓(xùn)練我們的模型的數(shù)據(jù)。我們對目標(biāo)進(jìn)行切分(在這種欺詐情況下嘗試預(yù)測變量)以及用scikit需要的屬性作為不同的輸入?yún)?shù)。

在進(jìn)行模型訓(xùn)練之前,我們還有一個問題需要討論。我們希望我們的模型歸納充分,例如,當(dāng)對付款進(jìn)行分類時應(yīng)該是準(zhǔn)確的,它應(yīng)該是我們之前沒有見過的方式,而不應(yīng)該僅僅是之前見過那些在支付時計算的特殊模式。為了確保不會在現(xiàn)有的數(shù)據(jù)中過度擬合模型成為噪聲,我們將會分割數(shù)據(jù)為兩個訓(xùn)練集,一個訓(xùn)練集會被用來評估模型參數(shù)(a、b、c、d和Z)以及驗證集(也被叫做測試集),另一個數(shù)據(jù)集會被用來計算模型性能指標(biāo)(下一章我們會介紹)。如果一個模型是過度擬合的,它會在訓(xùn)練集上表現(xiàn)良好(因為它會在該集合中學(xué)習(xí)模式),但是在驗證集上表現(xiàn)較差。還有其他的交叉驗證方式(例如,k-fold交叉驗證),但是“測試訓(xùn)練”分離會適合我們這里的目的。

我們使用sckit可以很輕松地分割數(shù)據(jù)為訓(xùn)練和測試集,如下: 

 

 

 

在這里例子中,我們會使用數(shù)據(jù)的2/3用于訓(xùn)練模型,數(shù)據(jù)的1/3用于驗證模型。我們現(xiàn)在準(zhǔn)備去訓(xùn)練模型,在此它只是個瑣碎小事: 

 

 

 

該擬合函數(shù)運行擬合程序(***化上面提到的似然函數(shù)),然后我們可以針對a、b、c、d(在coef_)和Z(在intercept_)的值查詢返回的對象。因此我們的最終模型是 

 

 

 

評價模型表現(xiàn)

一旦訓(xùn)練了模型之后,我們就需要去確定這個模型在預(yù)測感興趣的變量上究竟有多好了(在本例子中,該布爾值表明該支付是否存在欺詐)?;叵胍幌挛覀冊?jīng)說過希望對支付按照欺詐進(jìn)行分類,如果概率(欺詐)大于0.5,我們希望將其歸類為合法的。針對一個模型和一個分類規(guī)則的性能評定方式,通常使用兩個變量,如下所示:

假陽性率:所有合法費用中被錯誤地分類為欺詐的那部分,以及

真陽正率(也被稱為召回率或者敏感性指標(biāo)),所有欺詐收入中被正確地分類為欺詐的那部分。

評估分類性能有很多方式,我們會鎖定這兩個變量。

理想情況下,假陽性率將會接近0并且真陽正率會接近1。當(dāng)我們改變概率閾值時我們把一筆費用分類為欺詐的(上面我們說是0.5,但是我們可以選擇0和1之間的任何值,越小的值意味著我們更加積極地標(biāo)記支付為欺詐的,而高的值意味著我們更加保守),假陽性率和真陽正率勾畫了一個曲線,這個曲線依賴于我們的模型有多好。我們稱之為受試者工作特征曲線(ROC曲線),可以使用scikit很容易計算出來: 

 

 

 

變量fpr、tpr和閾值包含了所有ROC曲線的數(shù)據(jù),但是我們挑選了一些有針對性的樣本:如果概率(欺詐)大于0.514,而假陽性率是0.374,真陽性率是0.681時,我們假定該費用為欺詐。我們所選的ROC曲線及描繪點為: 

 

 

 

模型性能較好,越接近ROC曲線(上面藍(lán)色的線),越會緊靠圖形左上方的邊框。注意ROC曲線可以告訴你模型有多好,可以使用一個AUC數(shù)計算,或者查看曲線下的面積。AUC值越接近于1,模型性能越好。 

 

 

 

當(dāng)然,當(dāng)你把模型值放入生產(chǎn)環(huán)境并使用它時,你通常會需要去通過我們上面采用的方式,即比較他們的閾值方式采取行動輸出概率模型,如果概率(欺詐)>0.5,我們認(rèn)為一筆費用被假設(shè)為是欺詐的。因此,對于一個特定的應(yīng)用程序,模型性能對應(yīng)于ROC曲線上的一個點,曲線整體再一次僅僅控制了假陽性率和真陽正率之間的交易平衡,例如,政策選擇范圍內(nèi)的處置方式不同。

決策樹與隨機(jī)森林

上述的邏輯回歸模型是線性機(jī)器學(xué)習(xí)模型的一個示例。想象一下,我們有的每一筆支付示例是空間里的一個點,這個點的坐標(biāo)就是特征值。如果我們僅僅有兩個特征值,每個示例點會是X-Y平面上的一個點。如果在我們可以使用線性函數(shù)把無欺詐樣本和欺詐者樣本區(qū)分開時,通常類似于邏輯回歸的線性模型就能較好地運行,這意味著幾乎所有欺詐樣本處于一條線的一邊,而幾乎所有的非欺詐樣本處于這條線的另一邊。

通常情況下,預(yù)測特征和目標(biāo)變量之間的關(guān)系,我們試圖預(yù)測這個關(guān)系是非線性的,在這種情況下,我們需要使用非線性模型計算關(guān)系。一個強(qiáng)有力的、較為直觀的非線性模型是決策樹,如下所示: 

 

 

 

對于每個節(jié)點,我們將特定特征的值和一些閾值進(jìn)行比較,根據(jù)比較結(jié)果分出向左還是向右。我們繼續(xù)以這種方式(類似一個于二十問的游戲,雖然數(shù)目不需要二十層深度),直到我們到達(dá)樹木的樹葉。樹葉由我們訓(xùn)練集里的所有的樣本組成,比較這棵樹上的每一個節(jié)點的滿意路徑,示例樹葉上欺詐那一部分被模型報告預(yù)測的概率判定為欺詐。當(dāng)我們有新的樣本需要被分類時,直到到達(dá)樹葉之前,我們生成它的特征并且開始玩“二十問的游戲”,然后預(yù)測欺詐的可能性,并描述如下。

雖然我們不會去深究樹是如何生成的細(xì)節(jié)內(nèi)容(雖然,簡單來說我們就是為每一個節(jié)點選擇特征和閾值,***化信息增益或者辨別力概念,即上述圖表中報告的基尼系數(shù),并在達(dá)到預(yù)先指定的一些停止標(biāo)準(zhǔn)前一直進(jìn)行遞歸),使用scikit訓(xùn)練決策樹模型就像訓(xùn)練邏輯回歸一樣容易(或者事實上在任何其他模型上): 

 

 

 

決策樹的一個問題是它們很容易被過度擬合,一棵很深的樹的每個葉子僅僅是訓(xùn)練數(shù)據(jù)里的一個示例,通常會計算每個樣本的噪音,并且可能不是常見趨勢,但是隨機(jī)森林模型可以幫助解決這個問題。在一個隨機(jī)森林中,我們訓(xùn)練大量的決策樹,但是每棵樹的訓(xùn)練僅僅是我們現(xiàn)有的數(shù)據(jù)的一個子集,并且當(dāng)構(gòu)建每棵樹時我們僅僅考慮了切分的子集特征。所預(yù)測的欺詐的概率是森林里所有樹所生產(chǎn)的平均概率。僅基于數(shù)據(jù)子集對每棵樹進(jìn)行訓(xùn)練,僅將特征的子集作為每個節(jié)點的分離候選來考慮,減少樹木之間的相關(guān)性,讓過度擬合更少一些。

綜上所述,當(dāng)特征和目標(biāo)變量之間的關(guān)系是線性時,像邏輯回歸這樣的線性模型是適當(dāng)?shù)模蛘弋?dāng)你希望分離任務(wù)特征對預(yù)測的影響(因為這樣可以直接讀取回歸系數(shù))。另一方面,像決策樹這樣的非線性模型和隨機(jī)森林是很難解釋的,但是他們可以被用來計算更復(fù)雜的關(guān)系。

產(chǎn)品化機(jī)器學(xué)習(xí)模型

訓(xùn)練一個機(jī)器學(xué)習(xí)模式可以被認(rèn)為僅僅是使用機(jī)器學(xué)習(xí)解決業(yè)務(wù)問題過程的***步。正如上面描述的,模型訓(xùn)練通常必須在特征工程開始工作前完成。一旦有了模型就需要去產(chǎn)品化它了,也就是說,讓這個模型可以用于生產(chǎn)環(huán)境并可以采取適當(dāng)?shù)男袆?例如,阻止被評估為欺詐的交易)。

雖然我們不會在這里談?wù)摷?xì)節(jié),但是產(chǎn)品化會引入許多挑戰(zhàn),例如,你可以使用Python部署模型,但是你的生產(chǎn)環(huán)境軟件棧使用的是Ruby。如果出現(xiàn)這種情況,你將會需要讓你的模型通過一定格式的序列化形式從Python轉(zhuǎn)為Ruby,并且讓你生產(chǎn)環(huán)境的Ruby代碼讀取序列化,或者使用面向服務(wù)的系統(tǒng)架構(gòu)實現(xiàn)從Python到Ruby的服務(wù)請求,二選一。

對于完全不同性質(zhì)的問題,你也會想要在生產(chǎn)環(huán)境下維持度量模型性能(與驗證數(shù)據(jù)的大量計算不同)。依賴于你如何使用模型,這個過程可能比較困難,因為僅僅使用模型去控制行為的方式可以導(dǎo)致你沒有數(shù)據(jù)計算你的度量。本系列的其他文章將會考慮一些這類問題。

支撐材料

包含所有的示例代碼的Jupyter筆記、模型訓(xùn)練樣本數(shù)據(jù)可以"閱讀原文“的原文鏈接中找到。

作者介紹

Michael Manapat (@mlmanapat) ,在Stripe負(fù)責(zé)領(lǐng)導(dǎo)機(jī)器學(xué)習(xí)產(chǎn)品開發(fā)工作,包括Stripe Radar。在加入Stripe之前,他是Google的一名工程師,同時也是哈佛大學(xué)應(yīng)用數(shù)學(xué)專業(yè)博士后研究員和講師。他從麻省理工大學(xué)(MIT)獲得了數(shù)學(xué)專業(yè)博士學(xué)位。 

責(zé)任編輯:龐桂玉 來源: 大數(shù)據(jù)雜談
相關(guān)推薦

2017-04-11 12:45:29

Python機(jī)器學(xué)習(xí)信用卡欺詐檢測

2017-04-11 21:13:58

機(jī)器學(xué)習(xí)數(shù)據(jù)分析pandas

2015-04-01 14:53:17

信用卡網(wǎng)絡(luò)釣魚趨勢科技

2022-08-01 11:17:34

LGBM信用卡

2017-03-10 09:11:49

信用卡盜刷機(jī)器學(xué)習(xí)

2017-04-27 11:09:52

信用卡支付技術(shù)

2014-03-24 09:41:45

攜程信息泄露信用卡

2018-07-05 14:20:48

信用卡

2020-09-23 13:40:01

信用卡欺詐網(wǎng)絡(luò)釣魚攻擊

2020-09-01 07:29:11

機(jī)器學(xué)習(xí)ML技術(shù)債務(wù)

2010-07-15 15:20:09

2017-07-07 14:41:13

機(jī)器學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)JavaScript

2021-11-02 09:40:50

TensorFlow機(jī)器學(xué)習(xí)人工智能

2012-03-16 10:08:39

Geode指紋掃描器信用卡

2009-03-20 23:50:54

2014-09-23 10:17:38

2021-04-15 07:43:34

信用卡勒索軟件攻擊

2020-03-26 08:00:00

機(jī)器學(xué)習(xí)人工智能AI

2014-09-22 10:32:34

2012-07-02 10:07:40

點贊
收藏

51CTO技術(shù)棧公眾號