Skip to content

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


操作步驟
  1. 請由Resource登入Kaggle
  2. 按下New Notebook按鈕,會透過Kaggle生成一新的Notebook File
    Pasted image 20230726163007.png
  3. 根據Online Payments Fraud Detection with Machine Learning依照步驟在Notebook裡輸入程式碼並執行
  4. 從Data Card可以看到這一個資料集的內容,並可從Detail處看到這個資料集的各欄內容
    Pasted image 20230726165057.png

重點內容

程式碼的作用及步驟如下:

步驟
步驟 描述
1 載入資料並印出前幾筆觀測值。
2 列印資料中每個欄位的缺失值數量。
3 列印出 “Type” 欄位的各種值的計數。
4 使用 Plotly Express 繪製圓形圖以展示交易類別的分佈情況。
5 計算各個欄位與 “isFraud” 欄位的相關係數並按照降序排列。
6 將 “type” 和 “isFraud” 欄位的值映射成數字和文字標籤。
7 準備資料集並進行訓練與測試分割。
8 使用決策樹分類器進行模型訓練並計算準確度。
9 使用模型進行預測並輸出結果。
作用
  1. 載入資料並印出前幾筆觀測值:

    data = pd.read_csv("/kaggle/input/paysim1/PS_20174392719_1491204439457_log.csv")
    print(data.head())
    

    這段程式碼載入CSV檔案中的資料並顯示前幾筆觀測值。

  2. 列印資料中每個欄位的缺失值數量:

    print(data.isnull().sum())
    

    這段程式碼列印出資料中每個欄位的缺失值數量。

  3. 列印出”Type”欄位的各種值的計數:

    print(data.type.value_counts())
    

    這段程式碼列印出”Type”欄位中各個類別的計數。

  4. 使用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來繪製圓形圖,用來顯示交易類別的分佈情況。

  5. 計算各個欄位與”isFraud”欄位的相關係數並按照降序排列:

    correlation = data.corr()
    print(correlation["isFraud"].sort_values(ascending=False))
    

    這段程式碼計算各個欄位與”isFraud”欄位之間的相關係數,並將結果按照降序排列,從而瞭解它們之間的相關性。

  6. 將”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”,方便後續處理。

  7. 準備資料集並進行訓練與測試分割:

    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 是用來指定測試集的大小比例的參數。它決定了將多少比例的資料用於測試模型,而剩下的部分將用於訓練模型。這是訓練測試分割的一種方法,通常我們將資料集切分為訓練集和測試集,以評估模型的性能。

在這段程式碼中:

xtrain, xtest, ytrain, ytest = train_test_split(x, y, test_size=0.10, random_state=42)

test_size=0.10 表示將資料集的 10% 用於測試,而 random_state=42 則是設定隨機數生成器的種子,確保每次切分的結果都是一樣的。

注意,test_size 的取值範圍應該在 0 到 1 之間,表示測試集所占的比例。如果設置為 0.2,則測試集將佔資料集的 20%,而訓練集將佔 80%。總之,這個值需要根據你的資料集大小和模型驗證的需求來選擇。

  1. 使用決策樹分類器進行模型訓練並計算準確度:

    from sklearn.tree import DecisionTreeClassifier
    model = DecisionTreeClassifier()
    model.fit(xtrain, ytrain)
    print(model.score(xtest, ytest))
    

    這段程式碼使用決策樹分類器進行模型訓練,然後使用測試集計算模型的準確度。

  2. 使用模型進行預測:

    #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

Comments

Comments