クレジットカード不正検出プロジェクト–機械学習プロジェクト

公開: 2021-05-24

クレジットカード詐欺検出プロジェクトへようこそ。 今日は、Pythonと機械学習を使用して、クレジットカード取引のデータセット内の不正を検出します。 すべてのステップのコードを共有しましたが、各ステップがどのように機能するかを理解してから実装するのが最善です。

さぁ、始めよう!

目次

ステップのあるクレジットカード詐欺検出プロジェクト

クレジットカード詐欺検出プロジェクトでは、利用可能な最も人気のあるプログラミング言語の1つであるPythonを使用します。 私たちのソリューションは、誰かが私たちのシステムのセキュリティウォールを迂回して不正なトランザクションを行ったかどうかを検出します。

データセットにはクレジットカードトランザクションがあり、その機能はPCA分析の結果です。 「Amount」、「Time」、および「Class」機能があり、「Amount」はすべてのトランザクションの金額を示し、「Time」は最初のトランザクションとそれぞれのトランザクションの間の経過秒数を示し、「Class」はトランザクションかどうかを示します。合法かどうか。

「クラス」では、値1は不正取引を表し、値0は有効な取引を表します。

ここでデータセットとソースコード全体を入手できます

ステップ1:パッケージをインポートする

必要なパッケージをインストールして、クレジットカード詐欺検出プロジェクトを開始します。 'main.py'ファイルを作成し、次のパッケージをインポートします。

numpyをnpとしてインポートします

パンダをpdとしてインポートします

sklearnをインポートする

scipy.statsからインポートノルム

scipy.statsからimportmultivariate_normal

sklearn.preprocessingからインポートMinMaxScaler

matplotlib.pyplotをpltとしてインポートします

Seabornをsnsとしてインポートする

ステップ2:エラーを探す

データセットを使用する前に、データセット内のエラーや欠落している値を探す必要があります。 欠落した値が存在すると、モデルに誤った結果がもたらされ、モデルが非効率的かつ非効率的になる可能性があります。 したがって、データセットを読み取り、欠落している値を探します。

df = pd.read_csv('creditcardfraud / creditcard.csv')

#欠落値

print( "missing values:"、df.isnull()。values.any())

このデータセットに欠落値は見つからなかったため、次のステップに進むことができます。

世界のトップ大学であるマスター、エグゼクティブ大学院プログラム、ML&AIの高度な証明書プログラムからオンラインで人工知能コースに参加して、キャリアを早めましょう。

ステップ3:視覚化

クレジットカード詐欺検出プロジェクトのこのステップでは、データを視覚化します。 視覚化は、データが何を示しているかを理解するのに役立ち、見逃した可能性のあるパターンを明らかにします。 データセットのプロットを作成しましょう。

#通常と詐欺をプロット

count_classes = pd.value_counts(df ['Class']、sort = True)

count_classes.plot(kind ='bar'、rot = 0)

plt.title( "分散トランザクション")

plt.xticks(range(2)、['Normal'、'Fraud'])

plt.xlabel( "クラス")

plt.ylabel( "頻度")

plt.show()

私たちのプロットでは、データが非常に不均衡であることがわかりました。 これは、過剰適合が発生するため、教師あり学習アルゴリズムを使用できないことを意味します。 さらに、問題を解決するための最良の方法がわからないため、より多くの視覚化を実行します。 ヒートマップをプロットするには、以下を使用します。

#ヒートマップ

sns.heatmap(df.corr()、vmin = -1)

plt.show()

次に、データがどこから来たのかを理解するのに役立つデータ分布グラフを作成します。

イチジク、axs = plt.subplots(6、5、squeeze = False)

iの場合、enumerate(axs.flatten())のax:

ax.set_facecolor('xkcd:charcoal')

ax.set_title(df.columns [i])

sns.distplot(df.iloc [:、i]、ax = ax、fit = norm、

color =”#DC143C”、fit_kws = {“ color”:“#4e8ef5”})

ax.set_xlabel(”)

fig.tight_layout(h_pad = -1.5、w_pad = -1.5)

plt.show()

データ分布グラフを使用すると、「時間」を除くほぼすべての特徴がガウス分布に由来することがわかりました。

したがって、多変量ガウス分布を使用して不正を検出します。 「時間」機能のみがバイモーダル分布(およびガウス分布に注意)に由来するため、これを破棄します。 さらに、視覚化により、「時間」機能には他の機能のような極端な値がないことがわかりました。これが、これを破棄するもう1つの理由です。

次のコードを追加して、説明した機能を削除し、他の機能をスケーリングします。

クラス=df['クラス']

df.drop(['Time'、'Class'、'Amount']、axis = 1、inplace = True)

cols = df.columns.difference(['Class'])

MMscaller = MinMaxScaler()

df = MMscaller.fit_transform(df)

df = pd.DataFrame(data = df、columns = cols)

df = pd.concat([df、classes]、axis = 1)

ステップ4:データセットを分割する

'functions.py'ファイルを作成します。 ここでは、アルゴリズムのさまざまな段階を実装するための関数を追加します。 ただし、これらの関数を追加する前に、データセットを検証セットとテストセットの2つのセットに分割しましょう。

パンダをpdとしてインポートします

numpyをnpとしてインポートします

def train_validation_splits(df):

#詐欺取引

詐欺=df[df ['Class'] == 1]

#通常のトランザクション

通常=df[df['クラス']==0]

print('normal:'、normal.shape [0])

print('fraud:'、fraud.shape [0])

normal_test_start = int(normal.shape [0] * .2)

fraud_test_start = int(fraud.shape [0] * .5)

normal_train_start = normal_test_start * 2

val_normal = normal [:normal_test_start]

val_fraud = fraud [:fraud_test_start]

validate_set = pd.concat([val_normal、val_fraud]、axis = 0)

test_normal = normal [normal_test_start:normal_train_start]

test_fraud = fraud [fraud_test_start:fraud.shape [0]]

test_set = pd.concat([test_normal、test_fraud]、axis = 0)

Xval = validate_set.iloc [:、:-1]

Yval = validate_set.iloc [:、-1]

Xtest = test_set.iloc [:、:-1]

Ytest = test_set.iloc [:、-1]

train_set = normal [normal_train_start:normal.shape [0]]

Xtrain = train_set.iloc [:、:-1]

Xtrain.to_numpy()、Xtest.to_numpy()、Xval.to_numpy()、Ytest.to_numpy()、Yval.to_numpy()を返します

ステップ5:平均と共分散行列を計算する

次の関数は、平均と共分散行列を計算するのに役立ちます。

def Estimate_gaussian_params(X):

「」

各特徴の平均と共分散を計算します。

引数:

X:データセット

「」

mu = np.mean(X、axis = 0)

sigma = np.cov(XT)

ムー、シグマを返す

ステップ6:最後の仕上げを追加する

'main.py'ファイルでは、前の手順で実装した関数をすべてのセットに対してインポートして呼び出します。

(Xtrain、Xtest、Xval、Ytest、Yval)= train_validation_splits(df)

(mu、sigma)= Estimate_gaussian_params(Xtrain)

#ガウスpdfを計算する

p = multivariate_normal.pdf(Xtrain、mu、sigma)

pval = multivariate_normal.pdf(Xval、mu、sigma)

ptest = multivariate_normal.pdf(Xtest、mu、sigma)

ここで、イプシロン(またはしきい値)を参照する必要があります。 通常、しきい値をpdfの最小値で初期化し、すべてのイプシロン値をベクトルに保存しながら、最大pdfに達するまでステップごとに増加させるのが最善です。

必要なベクトルを作成した後、「for」ループを作成し、同じループを繰り返します。 しきい値を、すべての反復で予測を生成するpdfの値と比較します。

また、グラウンドトゥルース値と予測に従ってF1スコアを計算します。 見つかったF1スコアが前のスコアよりも高い場合、「最良のしきい値」変数をオーバーライドします。

クレジットカード詐欺検出プロジェクトでは、「精度」を指標として使用できないことに注意してください。 これは、すべてのトランザクションを通常どおり99%の精度で反映し、アルゴリズムが役に立たなくなるためです。

上記で説明したすべてのプロセスを「functions.py」ファイルに実装します。

defメトリック(y、予測):

fp = np.sum(np.all([predictions == 1、y == 0]、axis = 0))

tp = np.sum(np.all([predictions == 1、y == 1]、axis = 0))

fn = np.sum(np.all([predictions == 0、y == 1]、axis = 0))

精度=(tp /(tp + fp))if(tp + fp)> 0 else 0

リコール=(tp /(tp + fn))if(tp + fn)> 0 else 0

F1 =(2 *適合率*再現率)/(適合率+

リコール)if(適合率+再現率)> 0 else 0

適合率、再現率、F1を返す

def selectThreshold(yval、pval):

e_values = pval

bestF1 = 0

bestEpsilon = 0

e_valuesのイプシロンの場合:

予測=pval<イプシロン

(適合率、再現率、F1)=メトリック(yval、予測)

F1> bestF1の場合:

bestF1 = F1

bestEpsilon=イプシロン

bestEpsilon、bestF1を返します

最後に、関数を「main.py」ファイルにインポートし、それらを呼び出してF1スコアとしきい値を返します。 これにより、テストセットでモデルを評価できるようになります。

(イプシロン、F1)= selectThreshold(Yval、pval)

print(「見つかった最高のイプシロン:」、イプシロン)

print( "クロス検証セットのベストF1:"、F1)

(test_precision、test_recall、test_F1)=メトリック(Ytest、ptest <イプシロン)

print( "外れ値が見つかりました:"、np.sum(ptest <イプシロン))

print(“ Test set Precision:”、test_precision)

print(“ Test set Recall:”、test_recall)

print( "テストセットF1スコア:"、test_F1)

このすべての取り組みの結果は次のとおりです。

見つかった最高のイプシロン:5e-324

交差検定セットのベストF1:0.7852998065764023

見つかった外れ値:210

テストセット精度:0.9095238095238095

テストセットリコール:0.7764227642276422

テストセットF1スコア:0.837719298245614

結論

これで、完全に機能するクレジットカード詐欺検出プロジェクトが完成しました。

このプロジェクトに関してご質問やご提案がございましたら、下にコメントをお送りください。 あなたからの御一報をお待ちしています。

習得したすべてのスキルを使用して、他の競合するプラットフォームでもアクティブになり、スキルをテストして、さらに実践的になることができます。 このコースの詳細に興味がある場合は、機械学習とAIのExecutive PGプログラムのページを確認し、キャリアカウンセラーに相談してください。

クレジットカード詐欺検出プロジェクトの目的は何ですか?

このプロジェクトの目的は、取引金額、場所、およびその他の取引関連データに基づいて、クレジットカード取引が不正であるかどうかを予測することです。 これは、クレジットカードのトランザクションデータを追跡することを目的としています。これは、トランザクションデータの異常を検出することによって行われます。 クレジットカード詐欺の検出は、通常、取引データの異常を検出し、カード所有者(予防措置として)と銀行に疑わしい取引について通知するアルゴリズムを使用して実装されます。

クレジットカード詐欺の検出は、クレジットカード詐欺の検出と阻止にどのように役立ちますか?

クレジットカード詐欺を検出して阻止するために、クレジットカード会社は、カードを使用して購入した消費者について販売者から受け取ったデータを分析します。 クレジットカード会社は、購入からのデータを以前に消費者に保存されたデータと自動的に比較して、購入と消費者が一貫しているかどうかを判断します。 コンピューターが消費者のデータを分析し、購入したデータと比較します。 コンピュータはまた、消費者の購入履歴と現在の購入の違いを検出しようとします。 次に、コンピューターは購入のリスク分析を行い、会社が購入の実行を許可する必要があるかどうかを判断します。

クレジットカード詐欺の検出に使用される機械学習アルゴリズムは何ですか?

クレジットカード詐欺の検出に使用されるいくつかの機械学習アルゴリズムがあります。 最も一般的なアルゴリズムの1つは、SVMまたはサポートベクターマシンです。 SVMは、コンピュータサイエンスで多くのアプリケーションを使用する、適応型の分類および回帰アルゴリズムです。 クレジットカードの不正検出で使用され、新しいデータセットを予測して事前定義されたカテゴリのセット(クラスとも呼ばれます)に分類します。 SVMは、クレジットカード詐欺の検出に使用して、新しいデータがすでに定義されているカテゴリに属しているかどうかを予測できます。