クレジットカード詐欺検出 scikit-learn

クレジットカード詐欺検出

クレジットカード詐欺検出は、信用カード取引の中から不正な取引を検出する重要な問題です。

以下では、サポートベクターマシン(SVM)を使用してクレジットカード詐欺を検出するモデルを構築する例を示します。

この問題に取り組むために、Kaggleなどから入手できるクレジットカード詐欺のデータセットを使用します。

(googleで“card_transdata.csv”という単語で検索すると、検索結果の1番目に表示されます。)

データの前処理、モデルトレーニング、評価などのステップが含まれています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

# クレジットカード詐欺データセットの読み込み(実際のデータセットを使用する必要があります)
# データセットはCSVファイルと仮定しています
data = pd.read_csv('card_transdata.csv')

# 特徴量とラベルの分割
X = data.drop('Class', axis=1)
y = data['Class']

# データの前処理 (スケーリング)
scaler = StandardScaler()
X = scaler.fit_transform(X)

# データの分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# サポートベクターマシン (SVM) モデルの作成
svm_model = SVC(kernel='linear', C=1, random_state=42)

# モデルの学習
svm_model.fit(X_train, y_train)

# テストデータで評価
y_pred = svm_model.predict(X_test)

# 分類精度の計算
accuracy = accuracy_score(y_test, y_pred)
print("分類精度:", accuracy)

# 混同行列の表示
confusion = confusion_matrix(y_test, y_pred)
print("混同行列:\n", confusion)

# 分類レポートの表示
classification_rep = classification_report(y_test, y_pred)
print("分類レポート:\n", classification_rep)

このコードでは、クレジットカード詐欺のデータセットを使用して、SVMモデルをトレーニングし、評価します。

評価には分類精度混同行列分類レポートが使用されます。

[実行結果]

1
2
3
4
5
6
7
8
9
10
11
12
13
分類精度: 0.961565
混同行列:
[[181235 1322]
[ 6365 11078]]
分類レポート:
precision recall f1-score support

0.0 0.97 0.99 0.98 182557
1.0 0.89 0.64 0.74 17443

accuracy 0.96 200000
macro avg 0.93 0.81 0.86 200000
weighted avg 0.96 0.96 0.96 200000

クレジットカード詐欺検出は、不正な取引を検出するための重要なアプリケーションであり、機械学習モデルを使用してセキュリティを向上させるのに役立ちます。

ソースコード解説

ソースコードの各部分を詳しく説明します。

1. ライブラリのインポート:

1
2
3
4
5
6
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

必要なライブラリをインポートしています。
Pandasはデータフレーム操作のために、NumPyは数値計算のために使用されます。

train_test_splitはデータセットをトレーニングデータとテストデータに分割するために使用し、StandardScalerはデータのスケーリングを行います。

SVCはサポートベクターマシン(Support Vector Machine)モデルのためのクラスです。

accuracy_scoreconfusion_matrixclassification_reportはモデルの評価指標を計算するために使用されます。

2. データセットの読み込み:

1
data = pd.read_csv('card_transdata.csv')

データセットをCSVファイルから読み込みます。

データセットは提供されたデータで、クレジットカード取引に関する情報を含んでいます。

3. 特徴量とラベルの分割:

1
2
X = data.drop('fraud', axis=1)
y = data['fraud']

データセットを特徴量(説明変数)とラベル(ターゲット変数)に分割します。

Xには'fraud'列以外の特徴量が含まれ、yには詐欺かどうかを示すラベルが含まれます。

4. データの前処理 (スケーリング):

1
2
scaler = StandardScaler()
X = scaler.fit_transform(X)

特徴量データ X を標準化(平均0、分散1にスケーリング)します。

標準化は多くの機械学習アルゴリズムで重要です。

5. データの分割:

1
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

データをトレーニングデータとテストデータに分割します。

test_size=0.2 は、データの20%をテストデータに割り当てることを意味します。

random_stateは乱数のシードを設定し、再現性を確保します。

6. サポートベクターマシン (SVM) モデルの作成:

1
svm_model = SVC(kernel='linear', C=1, random_state=42)

サポートベクターマシン(SVM)モデルを作成します。

ここでは線形カーネル (kernel='linear') を使用し、正則化パラメータ C は1に設定しています。

7. モデルの学習:

1
svm_model.fit(X_train, y_train)

作成したSVMモデルをトレーニングデータで学習させます。

8. テストデータで評価:

1
y_pred = svm_model.predict(X_test)

学習済みモデルを使用してテストデータに対する予測を行います。

9. 分類精度

の計算:

1
2
accuracy = accuracy_score(y_test, y_pred)
print("分類精度:", accuracy)

分類精度を計算し、テストデータに対するモデルの性能を評価します。

10. 混同行列 (Confusion Matrix) の表示:

1
2
confusion = confusion_matrix(y_test, y_pred)
print("混同行列:\n", confusion)

混同行列は、真陽性、真陰性、偽陽性、偽陰性のカウントを示す表です。

モデルの性能を評価するのに役立ちます。

11. 分類レポート (Classification Report) の表示:

1
2
classification_rep = classification_report(y_test, y_pred)
print("分類レポート:\n", classification_rep)

分類レポートには、精度、再現率、F1スコアなど、さまざまな評価指標が含まれています。

モデルの詳細な性能評価を提供します。

結果解説

それぞれの評価指標について詳しく説明します。

1. 分類精度 (Accuracy): 0.961565

  • 分類精度は、モデルが正確にクレジットカード取引を詐欺と非詐欺に分類した割合を示します。
    このモデルは、与えられたテストデータ全体の96.16%の正確性でクレジットカード取引を分類できることを示しています。
    高い分類精度は、モデルがほとんどの取引を正しく識別していることを示しています。

2. 混同行列 (Confusion Matrix):

1
2
[[181235   1322]
[ 6365 11078]]
  • 混同行列は、モデルの予測と実際のクレジットカード取引ラベルとの関係を示します。
  • 左上のセル (181235) は真陰性(Non-fraudを正しく予測)の数を示します。
  • 右上のセル (1322) は偽陽性(Non-fraudを誤って詐欺と予測)の数を示します。
  • 左下のセル (6365) は偽陰性(Fraudを誤って非詐欺と予測)の数を示します。
  • 右下のセル (11078) は真陽性(Fraudを正しく詐欺と予測)の数を示します。

3. 分類レポート (Classification Report):

1
2
3
4
5
6
7
8
               precision    recall  f1-score   support

0.0 0.97 0.99 0.98 182557
1.0 0.89 0.64 0.74 17443

accuracy 0.96 200000
macro avg 0.93 0.81 0.86 200000
weighted avg 0.96 0.96 0.96 200000
  • 分類レポートは、クレジットカード詐欺検出モデルの詳細な評価指標を提供します。
  • precision(適合率)は、モデルが詐欺と予測した取引のうち、実際に詐欺である割合を示します。
    詐欺の適合率は0.89であり、比較的高いです。
  • recall(再現率)は、実際に詐欺である取引のうち、モデルが正しく詐欺と予測した割合を示します。
    詐欺の再現率は0.64であり、詐欺を見逃す可能性があることを示しています。
  • f1-score(F1スコア)は、適合率と再現率の調和平均であり、モデルのバランスを評価します。
    詐欺のF1スコアは0.74で、適合率と再現率のトレードオフを示します。
  • supportは各クラス(詐欺と非詐欺)のサポート数を示します。
  • accuracy(正解率)は、正確な予測の割合を示し、先に述べた通り0.961565です。
  • macro avgおよびweighted avgは、クラスごとの平均と重み付け平均を示します。
    通常、クラスのバランスが異なる場合にはweighted avgが重要です。

この結果から、モデルは非詐欺取引の予測に優れた性能を示しており、高い分類精度を持っていますが、詐欺の検出には改善の余地があることがわかります。