1.Online Payments Fraud Detection with Machine Learning
Resource from: Online Payments Fraud Detection with Machine Learning
前言¶
使用機器學習進行線上支付詐騙檢測
為了使用機器學習來識別線上支付詐騙,我們需要訓練一個機器學習模型,用於區分詐騙和非詐騙支付。為此,我們需要一個包含有關線上支付詐騙資訊的資料集,以便了解哪些交易類型容易導致詐騙行為。為此任務,我從Kaggle收集了一個資料集,其中包含有關詐騙交易的歷史資訊,可用於檢測線上支付詐騙。以下是我在這裡使用的資料集中的所有欄位:
- step:表示一個時間單位,其中1步等於1小時
- type:線上交易的類型
- amount:交易金額
- nameOrig:發起交易的客戶
- oldbalanceOrg:交易前的餘額
- newbalanceOrig:交易後的餘額
- nameDest:交易的接收者
- oldbalanceDest:交易前接收者的初始餘額
- newbalanceDest:交易後接收者的新餘額
- isFraud:詐騙交易
希望您現在了解了我用於線上支付詐騙檢測任務的資料。接下來,在下面的部分,我將解釋如何使用Python來利用機器學習來檢測線上支付詐騙。
使用資料集¶
操作步驟¶
- 請由Resource登入Kaggle
- 按下
New Notebook按鈕,會透過Kaggle生成一新的Notebook File

- 根據Online Payments Fraud Detection with Machine Learning依照步驟在Notebook裡輸入程式碼並執行
- 從Data Card可以看到這一個資料集的內容,並可從Detail處看到這個資料集的各欄內容

重點內容¶
程式碼的作用及步驟如下:
步驟¶
| 步驟 | 描述 |
|---|---|
| 1 | 載入資料並印出前幾筆觀測值。 |
| 2 | 列印資料中每個欄位的缺失值數量。 |
| 3 | 列印出 “Type” 欄位的各種值的計數。 |
| 4 | 使用 Plotly Express 繪製圓形圖以展示交易類別的分佈情況。 |
| 5 | 計算各個欄位與 “isFraud” 欄位的相關係數並按照降序排列。 |
| 6 | 將 “type” 和 “isFraud” 欄位的值映射成數字和文字標籤。 |
| 7 | 準備資料集並進行訓練與測試分割。 |
| 8 | 使用決策樹分類器進行模型訓練並計算準確度。 |
| 9 | 使用模型進行預測並輸出結果。 |
作用¶
-
載入資料並印出前幾筆觀測值:
這段程式碼載入CSV檔案中的資料並顯示前幾筆觀測值。 -
列印資料中每個欄位的缺失值數量:
這段程式碼列印出資料中每個欄位的缺失值數量。 -
列印出”Type”欄位的各種值的計數:
這段程式碼列印出”Type”欄位中各個類別的計數。 -
使用Plotly Express繪製圓形圖以展示交易類別的分佈情況:
import plotly.express as px figure = px.pie(data, values = quantity, names = transactions, hole = 0.5, title = "Distribution of Transaction Type" ) figure.show()
這段程式碼使用Plotly Express來繪製圓形圖,用來顯示交易類別的分佈情況。 -
計算各個欄位與”isFraud”欄位的相關係數並按照降序排列:
這段程式碼計算各個欄位與”isFraud”欄位之間的相關係數,並將結果按照降序排列,從而瞭解它們之間的相關性。 -
將”type”和”isFraud”欄位的值映射成數字:
data["type"] = data["type"].map({"CASH_OUT":1, "PAYMENT": 2, "CASH_IN": 3, "TRANSFER": 4, "DEBIT": 5}) data["isFraud"] = data["isFraud"].map({0: "No Fraud", 1: "Fraud"}) print(data.head())
這段程式碼將”type”欄位中的交易類別映射成數字,同時將”isFraud”欄位中的0和1映射成”No Fraud”和”Fraud”,方便後續處理。 -
準備資料集並進行訓練與測試分割:
from sklearn.model_selection import train_test_split x = np.array(data[["type", "amount", "oldbalanceOrg", "newbalanceOrig"]]) y = np.array(data[["isFraud"]]) xtrain, xtest, ytrain, ytest = train_test_split(x, y, test_size = 0.10, random_state = 42)
這段程式碼將資料分成特徵(x)和標籤(y),然後使用train_test_split函數將資料集分成訓練集和測試集。
test_size是用來指定測試集的大小比例的參數。它決定了將多少比例的資料用於測試模型,而剩下的部分將用於訓練模型。這是訓練測試分割的一種方法,通常我們將資料集切分為訓練集和測試集,以評估模型的性能。
在這段程式碼中:
test_size=0.10 表示將資料集的 10% 用於測試,而 random_state=42 則是設定隨機數生成器的種子,確保每次切分的結果都是一樣的。
注意,test_size 的取值範圍應該在 0 到 1 之間,表示測試集所占的比例。如果設置為 0.2,則測試集將佔資料集的 20%,而訓練集將佔 80%。總之,這個值需要根據你的資料集大小和模型驗證的需求來選擇。
-
使用決策樹分類器進行模型訓練並計算準確度:
from sklearn.tree import DecisionTreeClassifier model = DecisionTreeClassifier() model.fit(xtrain, ytrain) print(model.score(xtest, ytest))
這段程式碼使用決策樹分類器進行模型訓練,然後使用測試集計算模型的準確度。 -
使用模型進行預測:
#features = [type, amount, oldbalanceOrg, newbalanceOrig] features = np.array([[4, 9000.60, 9000.60, 0.0]]) print(model.predict(features))
這段程式碼使用已訓練好的模型對給定的特徵值進行預測,並輸出預測結果。
延伸Project¶
Last update :
13 novembre 2024
Created : 13 novembre 2024
Created : 13 novembre 2024