構建機器學習模型進行信用卡反欺詐預測!

構建機器學習模型進行信用卡反欺詐預測!

學習是最難掌握的,但如果不學習,你我永遠無法成長。多年來,作者嘗試了不同的東西,並且發現只有通過實踐才能更好的學習,而不只是通過閱讀。無論何時,當作者嘗試構建一些東西(在本例中是機器學習模型)時,會遇到錯誤或陷入現實世界中可能發生的"陷阱"。畢竟,理想中的世界是不存在的。所以為了幫助大家瞭解機器學習模型,作者將建立一個機器學習模型來預測信用卡詐騙。

最近作者在Udemy上學習了關於機器學習的相關課程。如果你剛剛涉獵這個領域,你可以去看看。作者認為他們的教學方式很獨特。通過他們,學到了一些基本的機器學習模型。本文將放出親自操作的步驟,讓大家有更加直觀的感受。這裡將使用Kaggle數據集,下載地址:(https://www.kaggle.com/mlg-ulb/creditcardfraud/data)。他還下載了Anaconda以便加載該模型的所有相關包(https://www.anaconda.com/download/)。也將在本文中使用Anaconda附帶的SpyderIDE。

當然,首先是創建一個python文件,並將其放在與DataSet相同的目錄中。

現在第一個問題是,你如何建立一個機器學習模型?讓我們回憶一下我們要幹什麼。我們是要建立一個機器學習模型來預防信用卡詐騙,其中詐騙是(1)安全是(0)。因此,很明顯,這是一個分類問題,有太多的模型可供選擇。但是讓我們看一下數據,我們會注意到,這裡有很多數據,大約二十九個不同的自變量和超過二十萬的觀測量。所以我們必須排除昂貴的計算模型。接下來,我們看到變量沒有標籤,很難知道它們是否相關。這加大了我們選擇模型的難度,因為有些方法需要所有變量都是完全獨立的。作者個人認為我們可以考慮使用邏輯迴歸進行分類,因為它可以很容易地處理大量的數據,並能很好地處理非線性數據。

在此之前,讓我們先看看邏輯迴歸是如何工作的:在邏輯迴歸中,我們創建了一個邏輯曲線,其上界為1,下界為0。這條曲線的X軸是自變量,我們用這條曲線得到一個在0-1之間發生的自變量的概率值。如果這個值大於0.5,我們可以說它比0更有可能成為1,所以它被歸類為1,反之亦然。你可以看看下面的圖片。

構建機器學習模型進行信用卡反欺詐預測!

現在,沒有相關的庫,你就不能真正建立一個模型。但也不是不可以,只不過這無疑會增加難度。所以,讓我們使用import pandas吧,它可以處理數據的輸入和分割。

構建機器學習模型進行信用卡反欺詐預測!

接下來,我們將使用pandas導入數據,我們還將在DataSet上使用"iloc[].value"命令來提取X和y變量。用於此的代碼如下所示:

構建機器學習模型進行信用卡反欺詐預測!

確保.csv文件名正確! ":"的意思為在X矩陣中都遵循以下要求。另外,pandas應該導入所有行和所有列,除了最後一個列,因為最後一列是因變量。對y來說,pandas應該輸入所有行,但代碼中只有30行而不是31行的原因是Pyton從0開始而不是從1開始。作者第一次嘗試的時候,花了五分鐘才弄清這個原因。

下一步是將數據集拆分為訓練集和測試集。這可以使用"skLearning"庫中的一個函數來完成,這個函數名為"TRANTEST_Split"。我們需要將超過20萬的數據集80%用於訓練,20%用於測試。我們現在要做的就是創建X_TRAN、Y_TRAN、X_TEST和Y_TEST,並給它們賦值,這些值可以使用下面的行來完成:

構建機器學習模型進行信用卡反欺詐預測!

讓我們再次打開數據集,似乎大部分數據已經被縮放了,所以我們不需要再進行縮放,除非處理的信用卡金額還未縮放。你可以縮放數據,但確保縮放數據的範圍不會影響整個結果。我們可以使用"skLearning"庫中的"StandardScaler"類來擴展數據。我們所做的就是調用StandardScaler函數並讓數據標準化。你可以使用下面的代碼來完成它。

構建機器學習模型進行信用卡反欺詐預測!

現在,我們已經對數據進行了處理,並創建了一個邏輯迴歸函數。你可以利用它對詐騙數據進行分類。下面是具體的代碼。我們首先從"sklearn"中引進"邏輯迴歸"。然後,我們創建並將其命名為"classifier",然後將其與X_TRAN和y_TRANS數據(如下所示)相匹配:

構建機器學習模型進行信用卡反欺詐預測!

現在我們可以訓練我們的模型了,我們首先得測試它。這可以通過使用X_test值創建y_pred向量來實現。相關代碼如下所示:

構建機器學習模型進行信用卡反欺詐預測!

恭喜!你已經創建了你的第一個機器學習模型。現在讓我們來看看模型的準確性。我們將創建一個混淆矩陣來策略模型的準確性。首先,我們從"skLearning"導入"confusion_matrix",並使用以下代碼創建基於y_pred和y_test的混淆矩陣:

構建機器學習模型進行信用卡反欺詐預測!

現在,我們只需在混淆矩陣中添加對應錯誤分類的部分,除以總數,再乘以100並且打印它。你可以使用下面的代碼來完成這項步驟:

構建機器學習模型進行信用卡反欺詐預測!

現在,讓我們運行代碼,看看這個模型是否好用,運行代碼給出以下結果:

構建機器學習模型進行信用卡反欺詐預測!

這對於一個簡單的機器學習模型來說真的很好了,但是它還是有些問題。我們需要轉到SpyderIDE中的變量資源管理器進行調整,你可以在下面的圖片中找到它:

構建機器學習模型進行信用卡反欺詐預測!

從這裡我們將打開"cm"變量,這是我們的混淆矩陣並得到以下結果:

構建機器學習模型進行信用卡反欺詐預測!

[0,0]部分對應於安全交易,從數據中看,我們做得很好。[0,1]是我們系統沒有捕捉到的詐騙交易,有九個。[1,0]部分是我們把安全交易歸為詐騙交易的數量,有37例。考慮到真正的交易數量,這是一個相當不錯的數字了。最後,[1,1]部分對應於正確區分出的詐騙交易的數量,我們在這一節中得到了64,這也是相當不錯的。總的來說,這是一個相當好和相當快的預測信用卡詐騙交易的模型,因為99%的交易被正確分類,87%的詐騙交易被"找見"。不過,我們還需要在其他數據集中測試它,以確定分類器是否有普適性,還是隻適合這個數據集。

所以,我們剛剛建立了一個很好的模型,感覺很好,對吧?在現實生活中,我們需要解決一些小問題,比如選擇正確的模型,以及如何評估你的模型,只有通過製作模型和發現它們的缺陷,你才能做得更好。這就是創造的魅力。通過這次操作,告訴了我們建立一個機器學習模型並不難。還有,所有基本的分類模型都遵循相同的結構,因此你可以繼續將其用於其他項目。

所以基本上:

你可以構建一個機器學習模型,即使你不知道大多數變量。

建立機器學習模型很容易,但選擇正確的機器學習模型則需要真正的能力。

正確評估你的模型是必要的,你可以通過混淆矩陣來完成。


分享到:


相關文章: