Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでの不正検出


詐欺は実際に多くの取引にあります。機械学習アルゴリズムを適用して過去のデータを偽り、トランザクションが不正トランザクションである可能性を予測できます。この例では、クレジットカード取引を取得し、データを分析し、機能とラベルを作成し、最後にMLアルゴリズムの1つを適用して、取引の性質が不正であるかどうかを判断します。次に、選択したモデルの精度、精度、およびFスコアを確認します。

データの準備

このステップでは、ソースデータを読み取り、そこに存在する変数を調べて、いくつかのサンプルデータを確認します。これは、データセットに存在するさまざまな列を把握し、それらの機能を調査するのに役立ちます。 Pandas isライブラリを使用して、後続の手順で使用するデータフレームを作成します。

import pandas as pd
#Load the creditcard.csv using pandas
datainput = pd.read_csv('E:\\creditcard.csv')
#https://www.kaggle.com/mlg-ulb/creditcardfraud
# Print the top 5 records
print(datainput[0:5],"\n")
# Print the complete shape of the dataset
   print("Shape of Complete Data Set")
   print(datainput.shape,"\n")

出力

上記のコードを実行すると、次の結果が得られます-

    Time       V1            V2          V3     ...         V27          V28    Amount       Class
0    0.0 -1.359807    -0.072781    2.536347     ...    0.133558    -0.021053    149.62           0
1    0.0  1.191857     0.266151    0.166480     ...   -0.008983     0.014724      2.69           0
2    1.0 -1.358354    -1.340163    1.773209     ...   -0.055353    -0.059752    378.66           0
3    1.0 -0.966272    -0.185226    1.792993     ...    0.062723     0.061458    123.50           0
4    2.0 -1.158233     0.877737    1.548718     ...    0.219422     0.215153     69.99           0

[5 rows x 31 columns]
Shape of Complete Data Set
(284807, 31)
>

データの不均衡の確認

次に、データが不正なトランザクションと本物のトランザクションの間でどのように分散されているかを確認します。これにより、データの何パーセントが不正であると予想されるかがわかります。 mlアルゴリズムでは、これはデータの不均衡と呼ばれます。ほとんどの取引が不正でない場合、少数の取引が本物であるかどうかを判断することが困難になります。クラス列を使用して、トランザクション内の不正なエンジンの数をカウントし、不正なトランザクションの実際の割合を計算します。

import pandas as pd
#Load the creditcard.csv using pandas
datainput = pd.read_csv('E:\\creditcard.csv')
false = datainput[datainput['Class'] == 1]
true = datainput[datainput['Class'] == 0]
n = len(false)/float(len(true))
print(n)
print('False Detection Cases: {}'.format(len(datainput[datainput['Class'] == 1])))
print('True Detection Cases: {}'.format(len(datainput[datainput['Class'] == 0])),"\n")

出力

上記のコードを実行すると、次の結果が得られます-

0.0017304750013189597
False Detection Cases: 492
True Detection Cases: 284315

トランザクションタイプの詳細

不正および非不正取引の各カテゴリの取引の性質をさらに調査します。平均標準偏差、最大値、最小値、さまざまなパーセンタイルなど、さまざまなパラメーターを統計的に推定しようとします。これは、説明されている方法を使用して実現されます。

import pandas as pd
#Load the creditcard.csv using pandas
datainput = pd.read_csv('E:\\creditcard.csv')

#Check for imbalance in data
false = datainput[datainput['Class'] == 1]
true = datainput[datainput['Class'] == 0]

#False Detection Cases
print("False Detection Cases")
print("----------------------")
print(false.Amount.describe(),"\n")

#True Detection Cases
print("True Detection Cases")
print("----------------------")
print(true.Amount.describe(),"\n")

出力

上記のコードを実行すると、次の結果が得られます-

False Detection Cases
----------------------
count    492.000000
mean     122.211321
std      256.683288
min        0.000000
25%        1.000000
50%        9.250000
75%      105.890000
max     2125.870000
Name: Amount, dtype: float64

True Detection Cases
----------------------
count    284315.000000
mean         88.291022
std         250.105092
min           0.000000
25%           5.650000
50%          22.000000
75%          77.050000
max       25691.160000
Name: Amount, dtype: float64

機能とラベルの分離

MLアルゴリズムを実装する前に、機能とラベルを決定する必要があります。これは基本的に、従属変数と独立変数を分類することを意味します。私たちのデータセットでは、クラス列は他のすべての列に依存しています。したがって、最後の列のデータフレームと、残りのすべての列の別のデータフレームを作成します。これらのデータフレームは、作成するモデルのトレーニングに使用されます。

import pandas as pd
#Load the creditcard.csv using pandas
datainput = pd.read_csv('E:\\creditcard.csv')
#separating features(X) and label(y)
# Select all columns except the last for all rows
X = datainput.iloc[:, :-1].values
# Select the last column of all rows
Y = datainput.iloc[:, -1].values

print(X.shape)
print(Y.shape)

出力

上記のコードを実行すると、次の結果が得られます-

(284807, 30)
(284807,)

モデルのトレーニング

次に、データセットを2つの部分に分割します。 1つはトレーニング用で、もう1つはテスト用です。 test_sizeパラメーターは、データセットの何パーセントがテストにのみ使用されるかを決定するために使用されます。この演習は、作成しているモデルに対する自信を得るのに役立ちます。

import pandas as pd
from sklearn.model_selection import train_test_split

#Load the creditcard.csv using pandas
datainput = pd.read_csv('E:\\creditcard.csv')

#separating features(X) and label(y)
X = datainput.iloc[:, :-1].values

# Select the last column of all rows
Y = datainput.iloc[:, -1].values

#train_test_split method
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2)

ディシジョンツリー分類の適用

この状況に適用できるアルゴリズムには、さまざまな種類があります。ただし、分類のアルゴリズムとして決定木を選択します。これはツリーの最大深度4であり、値を予測するためのテストサンプルを提供します。最後に、テストの結果の精度を計算して、このアルゴリズムをさらに続行するかどうかを決定します。

import pandas as pd
from sklearn import metrics
from sklearn.model_selection import train_test_split

#Load the creditcard.csv using pandas
datainput = pd.read_csv('E:\\creditcard.csv')

#separating features(X) and label(y)
X = datainput.iloc[:, :-1].values
Y = datainput.iloc[:, -1].values

#train_test_split method
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2)

#DecisionTreeClassifier
from sklearn.tree import DecisionTreeClassifier
classifier=DecisionTreeClassifier(max_depth=4)
classifier.fit(X_train,Y_train)
predicted=classifier.predict(X_test)
print("\npredicted values :\n",predicted)

#Accuracy
DT = metrics.accuracy_score(Y_test, predicted) * 100
print("\nThe accuracy score using the DecisionTreeClassifier : ",DT)

出力

上記のコードを実行すると、次の結果が得られます-

predicted values :
[0 0 0 ... 0 0 0]
The accuracy score using the DecisionTreeClassifier : 99.9367999719111

評価パラメータの検索

上記のステップの精度レベルが許容範囲内になったら、さまざまなパラメーターを見つけてモデルをさらに評価します。適合率、再現率、Fスコアをパラメーターとして使用します。適合率は、取得されたインスタンスのうちの関連インスタンスの割合であり、再現率は、実際に取得された関連インスタンスの合計量の割合です。 Fスコアは、適合率と再現率の両方の懸念を1つの数値でバランスさせる単一のスコアを提供します。

import pandas as pd
from sklearn import metrics
from sklearn.model_selection import train_test_split
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score

#Load the creditcard.csv using pandas
datainput = pd.read_csv('E:\\creditcard.csv')
#separating features(X) and label(y)

X = datainput.iloc[:, :-1].values
Y = datainput.iloc[:, -1].values

#train_test_split method
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2)

#DecisionTreeClassifier
from sklearn.tree import DecisionTreeClassifier
classifier=DecisionTreeClassifier(max_depth=4)
classifier.fit(X_train,Y_train)
predicted=classifier.predict(X_test)
print("\npredicted values :\n",predicted)
#
# #Accuracy
DT = metrics.accuracy_score(Y_test, predicted) * 100
print("\nThe accuracy score using the DecisionTreeClassifier : ",DT)
#
# #Precision
print('precision')
# Precision = TP / (TP + FP) (Where TP = True Positive, TN = True Negative, FP = False Positive, FN = False Negative).
precision = precision_score(Y_test, predicted, pos_label=1)
print(precision_score(Y_test, predicted, pos_label=1))

#Recall
print('recall')
# Recall = TP / (TP + FN)
recall = recall_score(Y_test, predicted, pos_label=1)
print(recall_score(Y_test, predicted, pos_label=1))

#f1-score
print('f-Score')
# F - scores are a statistical method for determining accuracy accounting for both precision and recall.
fscore = f1_score(Y_test, predicted, pos_label=1)
print(f1_score(Y_test, predicted, pos_label=1))

出力

上記のコードを実行すると、次の結果が得られます-

The accuracy score using the DecisionTreeClassifier : 99.9403110845827
precision
0.810126582278481
recall
0.7710843373493976
f-Score
0.7901234567901234

  1. Pythonでの顧客離れの予測

    すべてのビジネスは顧客の忠誠心に依存しています。顧客からのリピートビジネスは、ビジネスの収益性の基礎の1つです。したがって、顧客が事業を辞める理由を知ることが重要です。顧客が離れることは、顧客離れとして知られています。過去の傾向を見ることで、顧客離れに影響を与える要因と、特定の顧客がビジネスから離れるかどうかを予測する方法を判断できます。この記事では、MLアルゴリズムを使用して、顧客離れの過去の傾向を調査し、どの顧客が離れる可能性が高いかを判断します。 データの準備 例として、この記事のテレコム顧客チャーンを検討します。ソースデータはkaggelで入手できます。データをダウンロードするための

  2. Pythonで国勢調査データを分析する

    国勢調査とは、特定の人口に関する情報を体系的に記録することです。キャプチャされたデータには、人口統計、経済、居住の詳細など、さまざまなカテゴリの情報が含まれます。これは、最終的に政府が現在のシナリオと将来の計画を理解するのに役立ちます。この記事では、Pythonを活用してインドの人口の人口調査データを分析する方法を説明します。さまざまな人口統計学的および経済的側面を見ていきます。次に、分析をグラフィカルに投影する電荷をプロットします。 kaggleから収集されたソース。ここにあります。 データの整理 以下のプログラムでは、最初に短いPythonプログラムを使用してデータを取得します。さらに分