白客告訴你如何用Python檢測信用卡欺詐

分享前還是先分享自己的Python學(xué)習(xí)交流群:308754087群內(nèi)不定時分享干貨唉堪,包括2017最新的python企業(yè)案例學(xué)習(xí)資料和零基礎(chǔ)入門教程,歡迎初學(xué)和進階中的小伙伴入群學(xué)習(xí)交流

原始數(shù)據(jù)為個人交易記錄迅涮,但是考慮數(shù)據(jù)本身的隱私性下面,已經(jīng)對原始數(shù)據(jù)進行了類似PCA的處理当悔,現(xiàn)在已經(jīng)把特征數(shù)據(jù)提取好了,接下來的目的就是如何建立模型使得檢測的效果達到最好脉执,這里我們雖然不需要對數(shù)據(jù)做特征提取的操作疼阔,但是面對的挑戰(zhàn)還是蠻大的。

import pandas as pd

import matplotlib.pyplot as plt

import numpy as np

from sklearn.cross_validation import train_test_split

from sklearn.linear_model import LogisticRegression

from sklearn.cross_validation import KFold, cross_val_score

from sklearn.metrics import confusion_matrix,recall_score,classification_report

數(shù)據(jù)分析與建陌胍模可不是體力活婆廊,時間就是金錢我的朋友(魔獸玩家都懂的!)如果你用Python來把玩數(shù)據(jù)巫橄,那么這些就是你的核武器啦否彩。簡單介紹一下這幾位朋友!

Numpy-科學(xué)計算庫 主要用來做矩陣運算嗦随,什么列荔?你不知道哪里會用到矩陣,那么這樣想吧枚尼,咱們的數(shù)據(jù)就是行(樣本)和列(特征)組成的贴浙,那么數(shù)據(jù)本身不就是一個矩陣嘛。

Pandas-數(shù)據(jù)分析處理庫 很多小伙伴都在說用python處理數(shù)據(jù)很容易署恍,那么容易在哪呢崎溃?其實有了pandas很復(fù)雜的操作我們也可以一行代碼去解決掉!

Matplotlib-可視化庫 無論是分析還是建模盯质,光靠好記性可不行袁串,很有必要把結(jié)果和過程可視化的展示出來。

Scikit-Learn-機器學(xué)習(xí)庫 非常實用的機器學(xué)習(xí)算法庫呼巷,這里面包含了基本你覺得你能用上所有機器學(xué)習(xí)算法啦囱修。但還遠不止如此,還有很多預(yù)處理和評估的模塊等你來挖掘的王悍!

data = pd.read_csv("creditcard.csv")

data.head()

看見木有破镰!用pandas讀取數(shù)據(jù)就是這么簡單!

接下來我們核心的目的就是去檢測在數(shù)據(jù)樣本中哪些是具有欺詐行為的压储!

count_classes = pd.value_counts(data['Class'], sort = True).sort_index()

count_classes.plot(kind = 'bar')

plt.title("Fraud class histogram")

plt.xlabel("Class")

plt.ylabel("Frequency"

千萬不要著急去用機器學(xué)習(xí)算法建模做這個分類問題鲜漩。首先我們來觀察一下數(shù)據(jù)的分布情況,在數(shù)據(jù)樣本中有明確的label列指定了class為0代表正常情況集惋,class為1代表發(fā)生了欺詐行為的樣本孕似。從上圖中可以看出來。刮刑。喉祭。等等霸饲,你不是說有兩種情況嗎,為啥圖上只有class為0的樣本氨弁亍?再仔細看看习寸,納尼胶惰。。霞溪。class為1的并不是木有孵滞,而是太少了,少到基本看不出來了鸯匹,那么此時我們面對一個新的挑戰(zhàn)坊饶,樣本極度不均衡,接下來我們首先要解決這個問題殴蓬,這個很常見也是很頭疼的問題匿级。

這里我們提出兩種解決方案 也是數(shù)據(jù)分析中最常用的兩種方法,下采樣和過采樣染厅!

先挑個軟柿子捏痘绎,下采樣比較簡單實現(xiàn),咱們就先搞定第一種方案肖粮!下采樣的意思就是說孤页,不是兩類數(shù)據(jù)不均衡嗎,那我讓你們同樣少(也就是1有多少個 0就消減成多少個)涩馆,這樣不就均衡了嗎行施。

不同C參數(shù)對應(yīng)的最終模型效果:

C parameter: 0.01

Iteration 1 : recall score = 0.958904109589

Iteration 2 : recall score = 0.917808219178

Iteration 3 : recall score = 1.0

Iteration 4 : recall score = 0.972972972973

Iteration 5 : recall score = 0.954545454545

Mean recall score 0.960846151257

C parameter: 0.1

Iteration 1 : recall score = 0.835616438356

Iteration 2 : recall score = 0.86301369863

Iteration 3 : recall score = 0.915254237288

Iteration 4 : recall score = 0.932432432432

Iteration 5 : recall score = 0.878787878788

Mean recall score 0.885020937099

C parameter: 1

Iteration 1 : recall score = 0.835616438356

Iteration 2 : recall score = 0.86301369863

Iteration 3 : recall score = 0.966101694915

Iteration 4 : recall score = 0.945945945946

Iteration 5 : recall score = 0.893939393939

Mean recall score 0.900923434357

C parameter: 10

Iteration 1 : recall score = 0.849315068493

Iteration 2 : recall score = 0.86301369863

Iteration 3 : recall score = 0.966101694915

Iteration 4 : recall score = 0.959459459459

Iteration 5 : recall score = 0.893939393939

Mean recall score 0.906365863087

C parameter: 100

Iteration 1 : recall score = 0.86301369863

Iteration 2 : recall score = 0.86301369863

Iteration 3 : recall score = 0.966101694915

Iteration 4 : recall score = 0.959459459459

Iteration 5 : recall score = 0.893939393939

Mean recall score 0.909105589115

Best model to choose from cross validation is with C parameter = 0.01

同樣的道理,這里我們采用recall來計算模型的好壞魂那,也就是說那些異常的樣本我們的檢測到了多少蛾号,這也是咱們最初的目的!這里通常用混淆矩陣來展示涯雅。

這個圖就非常漂亮了P虢獭(并不是說畫的好而是展示的很直接)從圖中可以清晰的看到原始數(shù)據(jù)中樣本的分布以及我們的模型的預(yù)測結(jié)果,那么recall是怎么算出來的呢斩芭?就是用我們的檢測到的個數(shù)(137)去除以總共異常樣本的個數(shù)(10+137)轻腺,用這個數(shù)值來去評估我們的模型。利用混淆矩陣我們可以很直觀的考察模型的精度以及recall划乖,也是非常推薦大家在評估模型的時候不妨把這個圖亮出來可以幫助咱們很直觀的看清楚現(xiàn)在模型的效果以及存在的問題贬养。

這可還木有完事,我們剛才只是在下采樣的數(shù)據(jù)集中去進行測試的琴庵,那么這份測試還不能完全可信误算,因為它并不是原始的測試集仰美,我們需要在原始的,大量的測試集中再次去衡量當前模型的效果儿礼】г樱可以看到效果其實還不錯,但是哪塊有些問題呢蚊夫,是不是我們誤殺了很多呀诉字,有些樣本并不是異常的,但是并我們錯誤的當成了異常的知纷,這個現(xiàn)象其實就是下采樣策略本身的一個缺陷壤圃。

對于邏輯回歸算法來說,我們還可以指定這樣一個閾值琅轧,也就是說最終結(jié)果的概率是大于多少我們把它當成是正或者負樣本伍绳。不用的閾值會對結(jié)果產(chǎn)生很大的影響。

上圖中我們可以看到不用的閾值產(chǎn)生的影響還是蠻大的乍桂,閾值較小冲杀,意味著我們的模型非常嚴格寧肯錯殺也不肯放過,這樣會使得絕大多數(shù)樣本都被當成了異常的樣本睹酌,recall很高漠趁,精度稍低 當閾值較大的時候我們的模型就稍微寬松些啦,這個時候會導(dǎo)致recall很低忍疾,精度稍高闯传,綜上當我們使用邏輯回歸算法的時候,還需要根據(jù)實際的應(yīng)用場景來選擇一個最恰當?shù)拈撝担?/p>

我們繼續(xù)嘮一下過采樣策略卤妒,跟下采樣相反顾瞪,現(xiàn)在咱們的策略是要讓class為0和1的樣本一樣多摊沉,也就是我們需要去進行數(shù)據(jù)的生成啦。

(1)對于少數(shù)類中每一個樣本x,以歐氏距離為標準計算它到少數(shù)類樣本集中所有樣本的距離噩凹,得到其k近鄰广辰。

(2)根據(jù)樣本不平衡比例設(shè)置一個采樣比例以確定采樣倍率N炭懊,對于每一個少數(shù)類樣本x票渠,從其k近鄰中隨機選擇若干個樣本,假設(shè)選擇的近鄰為xn阱洪。

(3)對于每一個隨機選出的近鄰xn便贵,分別與原樣本按照如下的公式構(gòu)建新的樣本。

SMOTE算法是用的非常廣泛的數(shù)據(jù)生成策略冗荸,流程可以參考上圖承璃,還是非常簡單的,下面我們使用現(xiàn)成的庫來幫助我們完成過采樣數(shù)據(jù)生成策略蚌本。

很簡單的幾步操作我們就完成過采樣策略盔粹,那么現(xiàn)在正負樣本就是一樣多的啦隘梨,都有那么20多W個,現(xiàn)在我們再通過混淆矩陣來看一下舷嗡,邏輯回歸應(yīng)用于過采樣樣本的效果轴猎。數(shù)據(jù)增強的應(yīng)用面已經(jīng)非常廣了,對于很多機器學(xué)習(xí)或者深度學(xué)習(xí)問題进萄,這已經(jīng)成為了一個常規(guī)套路啦捻脖!

我們對比一下下采樣和過采樣的效果,可以說recall的效果都不錯垮斯,都可以檢測到異常樣本,但是下采樣是不是誤殺的比較少呀只祠,所以如果我們可以進行數(shù)據(jù)生成兜蠕,那么在處理樣本數(shù)據(jù)不均衡的情況下,過采樣是一個可以嘗試的方案抛寝!

文章來源:

如有侵權(quán)熊杨,請聯(lián)系小編刪除文章

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市盗舰,隨后出現(xiàn)的幾起案子晶府,更是在濱河造成了極大的恐慌,老刑警劉巖钻趋,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件川陆,死亡現(xiàn)場離奇詭異,居然都是意外死亡蛮位,警方通過查閱死者的電腦和手機较沪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來失仁,“玉大人尸曼,你說我怎么就攤上這事√呀梗” “怎么了控轿?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拂封。 經(jīng)常有香客問我茬射,道長,這世上最難降的妖魔是什么冒签? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任躲株,我火速辦了婚禮,結(jié)果婚禮上镣衡,老公的妹妹穿的比我還像新娘霜定。我一直安慰自己档悠,他們只是感情好,可當我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布望浩。 她就那樣靜靜地躺著辖所,像睡著了一般。 火紅的嫁衣襯著肌膚如雪磨德。 梳的紋絲不亂的頭發(fā)上缘回,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天,我揣著相機與錄音典挑,去河邊找鬼酥宴。 笑死,一個胖子當著我的面吹牛您觉,可吹牛的內(nèi)容都是我干的拙寡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼琳水,長吁一口氣:“原來是場噩夢啊……” “哼肆糕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起在孝,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤诚啃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后私沮,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體始赎,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年仔燕,在試婚紗的時候發(fā)現(xiàn)自己被綠了极阅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡涨享,死狀恐怖筋搏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情厕隧,我是刑警寧澤奔脐,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站吁讨,受9級特大地震影響髓迎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜建丧,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一排龄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧翎朱,春花似錦橄维、人聲如沸尺铣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凛忿。三九已至,卻和暖如春竞川,著一層夾襖步出監(jiān)牢的瞬間店溢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工委乌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留床牧,地道東北人。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓遭贸,卻偏偏與公主長得像戈咳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子革砸,可洞房花燭夜當晚...
    茶點故事閱讀 45,446評論 2 359

推薦閱讀更多精彩內(nèi)容