機器學習實戰:Python信用卡欺詐檢測

2021-01-07 機器之心Pro

本文由機器之心編輯,「機器之心」專注生產人工智慧專業性內容,適合開發者和從業者閱讀參考。點擊右上角即刻關注。

對信用卡交易數據建立檢測模型,使用Python庫進行預處理與機器學習建模工作,代碼通俗易懂。包括數據預處理與清洗,模型調參與評估等詳細數據分析與建模流程。

故事背景與Python環境

故事背景:原始數據為個人交易記錄,但是考慮數據本身的隱私性,已經對原始數據進行了類似PCA的處理,現在已經把特徵數據提取好了,接下來的目的就是如何建立模型使得檢測的效果達到最好,這裡我們雖然不需要對數據做特徵提取的操作,但是面對的挑戰還是蠻大的。

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

Numpy-科學計算庫 主要用來做矩陣運算,什麼?你不知道哪裡會用到矩陣,那麼這樣想吧,咱們的數據就是行(樣本)和列(特徵)組成的,那麼數據本身不就是一個矩陣嘛。

Pandas-數據分析處理庫 很多小夥伴都在說用Python處理數據很容易,那麼容易在哪呢?其實有了pandas很複雜的操作我們也可以一行代碼去解決掉!

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

Scikit-Learn-機器學習庫 非常實用的機器學習算法庫,這裡面包含了基本你覺得你能用上所有機器學習算法啦。但還遠不止如此,還有很多預處理和評估的模塊等你來挖掘的!

首先我們用pandas將數據讀進來並顯示最開始的5行,看見木有!用pandas讀取數據就是這麼簡單!這裡的數據為了考慮用戶隱私等,已經通過PCA處理過了,現在大家只需要把數據當成是處理好的特徵就好啦!

數據分析

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

千萬不要著急去用機器學習算法建模做這個分類問題。首先我們來觀察一下數據的分布情況,在數據樣本中有明確的label列指定了class為0代表正常情況,class為1代表發生了欺詐行為的樣本。從上圖中可以看出來。。。等等,你不是說有兩種情況嗎,為啥圖上只有class為0的樣本啊?再仔細看看,納尼。。。class為1的並不是木有,而是太少了,少到基本看不出來了,那麼此時我們面對一個新的挑戰,樣本極度不均衡,接下來我們首先要解決這個問題,這個很常見也是很頭疼的問題。

這裡我們提出兩種解決方案 也是數據分析中最常用的兩種方法,下採樣和過採樣!

先挑個軟柿子捏,下採樣比較簡單實現,咱們就先搞定第一種方案!下採樣的意思就是說,不是兩類數據不均衡嗎,那我讓你們同樣少(也就是1有多少個 0就消減成多少個),這樣不就均衡了嗎。

很簡單的實現方法,在屬於0的數據中,進行隨機的選擇,就選跟class為1的那類樣本一樣多就好了,那麼現在我們已經得到了兩組都是非常少的數據,接下來就可以建模啦!不過在建立任何一個機器學習模型之前不要忘了一個常規的操作,就是要把數據集切分成訓練集和測試集,這樣會使得後續驗證的結果更為靠譜。

在訓練邏輯回歸的模型中做了一件非常常規的事情,就是對於一個模型,咱們再選擇一個算法的時候伴隨著很多的參數要調節,那麼如何找到最合適的參數可不是一件簡單的事,依靠經驗值並不是十分靠譜,通常情況下我們需要大量的實驗也就是不斷去嘗試最終得出這些合適的參數。(代碼有些長就不貼了,建議直接看源碼)

邏輯回歸模型

萬能的邏輯回歸,解決分類問題的最佳算法

在使用機器學習算法的時候,很重要的一部就是參數的調節,在這裡我們選擇使用最經典的分類算法,邏輯回歸!千萬別把邏輯回歸當成是回歸算法,它就是最實用的二分類算法!這裡我們需要考慮的c參數就是正則化懲罰項的力度,那麼如何選擇到最好的參數呢?這裡我們就需要交叉驗證啦,然後用不同的C參數去跑相同的數據,目的就是去看看啥樣的C參數能夠使得最終模型的效果最好!可以到不同的參數對最終的結果產生的影響還是蠻大的,這裡最好的方法就是用驗證集去尋找了!

模型已經造出來了,那麼怎麼評判哪個模型好,哪個模型不好呢?我們這裡需要好好想一想!

一般都是用精度來衡量,也就是常說的準確率,但是我們來想一想,我們的目的是什麼呢?是不是要檢測出來那些異常的樣本呀!換個例子來說,假如現在醫院給了我們一個任務要檢測出來1000個病人中,有癌症的那些人。那麼假設數據集中1000個人中有990個無癌症,只有10個有癌症,我們需要把這10個人檢測出來。假設我們用精度來衡量,那麼即便這10個人沒檢測出來,也是有 990/1000 也就是99%的精度,但是這個模型卻沒任何價值!這點是非常重要的,因為不同的評估方法會得出不同的答案,一定要根據問題的本質,去選擇最合適的評估方法。

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

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

這可還木有完事,我們剛才只是在下採樣的數據集中去進行測試的,那麼這份測試還不能完全可信,因為它並不是原始的測試集,我們需要在原始的,大量的測試集中再次去衡量當前模型的效果。可以看到效果其實還不錯,但是哪塊有些問題呢,是不是我們誤殺了很多呀,有些樣本並不是異常的,但是並我們錯誤的當成了異常的,這個現象其實就是下採樣策略本身的一個缺陷。

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

上圖中我們可以看到不用的閾值產生的影響還是蠻大的,閾值較小,意味著我們的模型非常嚴格寧肯錯殺也不肯放過,這樣會使得絕大多數樣本都被當成了異常的樣本,recall很高,精度稍低 當閾值較大的時候我們的模型就稍微寬鬆些啦,這個時候會導致recall很低,精度稍高,綜上當我們使用邏輯回歸算法的時候,還需要根據實際的應用場景來選擇一個最恰當的閾值!

過採樣數據生成策略

SMOTE算法生成大量異常數據

說完了下採樣策略,我們繼續嘮一下過採樣策略,跟下採樣相反,現在咱們的策略是要讓class為0和1的樣本一樣多,也就是我們需要去進行數據的生成啦。

SMOTE算法是用的非常廣泛的數據生成策略,流程可以參考上圖,還是非常簡單的,下面我們使用現成的庫來幫助我們完成過採樣數據生成策略。

算法流程如下:

(1)對於少數類中每一個樣本x,以歐氏距離為標準計算它到少數類樣本集中所有樣本的距離,得到其k近鄰。 (2)根據樣本不平衡比例設置一個採樣比例以確定採樣倍率N,對於每一個少數類樣本x,從其k近鄰中隨機選擇若干個樣本,假設選擇的近鄰為xn。 (3)對於每一個隨機選出的近鄰xn,分別與原樣本按照如下的公式構建新的樣本。

很簡單的幾步操作我們就完成過採樣策略,那麼現在正負樣本就是一樣多的啦,都有那麼20多W個,現在我們再通過混淆矩陣來看一下,邏輯回歸應用於過採樣樣本的效果。數據增強的應用面已經非常廣了,對於很多機器學習或者深度學習問題,這已經成為了一個常規套路啦!

我們對比一下下採樣和過採樣的效果,可以說recall的效果都不錯,都可以檢測到異常樣本,但是下採樣是不是誤殺的比較少呀,所以如果我們可以進行數據生成,那麼在處理樣本數據不均衡的情況下,過採樣是一個可以嘗試的方案!

總結:對於一個機器學習案例來說,一份數據肯定伴隨著很多的挑戰和問題,那麼最為重要的就是我們該怎麼解決這一系列的問題,大牛們不見得代碼寫的比咱們強但是他們卻很清楚如何去解決問題。今天咱們講述了一個以檢測任務為背景的案例,其中涉及到如何處理樣本不均衡問題,以及模型評估選擇的方法,最後給出了邏輯回歸在不用閾值下的結果。這裡也是希望同學們可以通過案例多多積攢經驗,早日成為大牛。

相關焦點

  • 跟著吳恩達老師學習機器學習,Python筆記分享!
    但是多項式回歸能夠更精準地找出輸入變量和輸出變量之間的關係,甚至是在這個關係不是線性的時候、手擼python多項式回歸對數回歸(羅吉斯回歸)對數回歸是在線性回歸基礎上開發的。他也用到了同一個簡單的直線方程。這就是一個廣泛使用的、強大的、流行的機器學習算法了。這可以用來預測分類變量。以下文章逐步解釋了對數回歸用於二分類問題的開發過程。
  • WePay機器學習反欺詐實踐:Python+scikit-learn+隨機森林
    【編者按】將機器學習算法用於金融領域的一個很好的突破口是反欺詐,在這篇博文中,WePay介紹了支付行業構建機器學習模型應對很難發現的shell selling欺詐的實踐心得。WePay採用了流行的Python、scikit-learn開源學習機器學習工具以及隨機森林算法。以下是文章內容:什麼是shellselling?
  • Python機器學習實戰 —— KNN算法詳解
    這個系列按照機器學習實戰的章節來寫,由於市面上已經有很多同類的文章,一般以介紹算法,貼代碼,舉例子為主,個人讀下來,覺得對於實現的代碼還是不能有很好的理解,所有有了這個系列。#dict.get  獲取指定鍵的值,默認返回none,鍵值不存在時,不同於dict['key']直接返回error,也可以指定,下面指定為0        classCount[voteLabels] = classCount.get(voteLabels,0)+1    print(classCount)    #Python3.5中:iteritems變為items(python2
  • 放棄機器學習,Python 如何進行物體檢測?
    學習在不使用機器學習或任何框架的情況下,如何在Python中進行物體檢測。作者 | Ravindu Senaratne譯者 | 彎月,責編 | 屠敏頭圖 | CSDN 下載自視覺中國以下為譯文:每當我們聽說「物體檢測」時,就會想到機器學習和各種不同的框架。
  • python機器學習預測分析核心算法.pdf
    《美團機器學習實踐》_美團算法團隊.pdf《深度學習入門:基於Python的理論與實現》高清中文PDF+源碼特徵提取與圖像處理(第二版).pdfpython就業班學習視頻,從入門到實戰項目2019最新《PyTorch
  • 2020 年度最佳的23個機器學習項目!(附原始碼)
    https://drive.google.com/file/d/1er9NJTLUA3qnRuyhfzuN0XUsoIC4a-_q/viewhttps://data-flair.training/blogs/advanced-python-project-detecting-fake-news/到目前為止,如果對DataFlair提出的的機器學習項目有任何問題,歡迎留言。
  • 【收藏】23個機器學習最佳入門項目(附原始碼)
    我們為你推薦這篇文章,在本教程中,涵蓋面向初學者,中級專家和專家的23種機器學習項目創意,以獲取有關該增長技術的真實經驗。這些機器學習項目構想將幫助你了解在職業生涯中取得成功、和當下就業所需的所有實踐。通過項目學習是你短期內能做的最好投資,這些項目構想使你能夠快速發展和增強機器學習技能。語言上,這些機器學習項目可以用Python,R或任何其他工具開發。
  • 機器學習筆記——機器學習實戰之準備(一)
    機器學習的主要任務學習機器學習的原因python語言優勢1.1  何謂機器學習簡單的說,機器學習就是把無序的數據變換成有用的信息。將機器學習算法轉換為應用程式,執行實際任務。1.6 python語言的優勢有以下幾個原因:(1)python的語法清晰;(2)易於操作的純文本文件;(3)使用廣泛,存在大量的開發文檔1.7 NumPy函數基礎下面給出一個數組和矩陣的例子:In [1]: import numpy as npIn
  • python人工智慧項目實戰,PDF+源碼
    《python人工智慧項目 Intelligent Projects Using Python》 實施機器學習和深度學習方法,使用Python構建智能,認知AI項目我們首先介紹如何使用機器學習和深度學習技術創建智能系統的基礎知識。您將吸收各種神經網絡架構,如CNN,RNN,LSTM,以解決關鍵的新世界挑戰。您將學習如何訓練模型以檢測人眼中的糖尿病視網膜病變狀況,並創建用於執行視頻到文本翻譯的智能系統。您將在醫療保健領域中使用轉移學習技術,並使用GAN實施樣式轉移。
  • 欺詐不可怕,機器學習算法分分鐘拿下!
    它們無法適應未知的欺詐模式和方案,無法有效識別複雜的欺詐技術。機器學習(ML)算法可以學習並適應所處理的每一個數據,可以在打擊欺詐方面發揮作用。一個經過優化設計的AI系統不僅能適應新變化,還能發現新模式而不會產生可能會導致過多假陽性的過擬合。這就是為什麼越來越多的行業正在採用機器學習和人工智慧以檢測和防止欺詐的原因。
  • Python最佳經典學習路線
    (3)類與對象,繼承,多態 (4)tkinter界面編程 (5)文件與異常,數據處理簡介 (6)Pygame實戰飛機大戰 python語言高級:(python語言的高級庫,常用的企業級開發案例實戰)
  • 2021年,送給碼農的免費Python機器學習課程
    2021年來了,越過了充滿艱辛的2020,希望大家在新的一年裡,手裡能多一件對抗未知的武器,剛哥送給大家免費的Python機器學習課程。線性回歸最基本的機器學習算法必須是具有單個變量的線性回歸算法。
  • 算法應用|機器學習python應用,初識機器學習是怎樣滴感受?
    每個算法模型都介紹其較為通用且實用的建模過程,力爭使基礎較差的讀者也能無障礙利用python來使用機器學習算法。1 初識機器學習1.1 什麼是機器學習?機器學習已經有了十分廣泛的應用,例如:數據挖掘、計算機視覺、自然語言處理、生物特徵識別、搜尋引擎、醫學診斷、檢測信用卡欺詐、證券市場分析、 DNA 序列測序、語音和手寫識別、戰略遊戲和機器人運用。機器學習的算法分為兩大類 : 監督學習和無監督學習 。
  • 構建信用卡反欺詐預測模型——機器學習
    機器學習進一步蠶食其他人工智慧技術領域。4. 類似想法以往有,但常見於小規模問題。沒想到圍棋這種狀態空間巨大的問題其假設空間竟有強烈的結構,存在統一適用於任意多子局面的評價函數。巨大的狀態空間誘使我們自然放棄此等假設,所以這個嘗試相當大膽。5. 工程實現能力超級強,別人即便跳出盲點,以啟發式搜索界的工程能力也多半做不出來。
  • 精品教學案例 | 信用卡反欺詐模型
    通過本案例,能夠達到以下教學效果:培養學生處理信用卡及消費貸款數據的能力。本案例中的預測模型基於一個信用卡和消費貸款數據進行訓練,先進行異常值處理,然後進行過採樣平衡,最後構建模型進行預測。幫助學生熟悉異常值處理和建模的過程。
  • 放棄機器學習框架,如何用Python做物體檢測?
    」時,就會想到機器學習和各種不同的框架。但實際上,我們可以在不使用機器學習或任何其他框架的情況下進行物體檢測。在本文中,我將向你展示如何僅使用Python進行操作。首先,我們定義一個模板圖像(或者叫模板物體),然後程序將在源圖像中查找與我們選擇的模板匹配的所有其他物體。舉例來說明一下。下面有兩張圖片,上面是飛機的源圖像,下面是模板照片,其中的物體為飛機。
  • 放棄機器學習框架,如何用 Python 做物體檢測?
    (給Python開發者加星標,提升Python技能)來源:CSDN每當我們聽說「物體檢測」時,就會想到機器學習和各種不同的框架
  • 案例詳解:欺詐檢測中的代價敏感算法
    可以看看信用卡交易的案例。未經持卡人授權的交易被視為欺詐性交易(通常在所有交易中佔很小的一部分)。信用卡欺詐檢測系統應自動識別和阻止此類欺詐交易,與此同時不要阻止合法交易。每種分類問題的相關代價是多少?讓我們假設以下場景:系統沒有識別到欺詐交易,錢款丟失,持卡人需要償還所有交易金額。如果系統檢測到欺詐交易,這筆交易就會被阻止。
  • python初學者必看的學習路線 Python是近幾年比較火的程式語言
    >(2)判斷/循環語句,函數,命名空間,作用域 (3)類與對象,繼承,多態 (4)tkinter界面編程 (5)文件與異常,數據處理簡介 (6)Pygame實戰飛機大戰,2048 2、python語言高級
  • 機器學習實戰
    想快速入門機器學習領域的童鞋還等什麼?!看小編介紹的這個課程就可以啦!!