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
-
Pythonでの顧客離れの予測
すべてのビジネスは顧客の忠誠心に依存しています。顧客からのリピートビジネスは、ビジネスの収益性の基礎の1つです。したがって、顧客が事業を辞める理由を知ることが重要です。顧客が離れることは、顧客離れとして知られています。過去の傾向を見ることで、顧客離れに影響を与える要因と、特定の顧客がビジネスから離れるかどうかを予測する方法を判断できます。この記事では、MLアルゴリズムを使用して、顧客離れの過去の傾向を調査し、どの顧客が離れる可能性が高いかを判断します。 データの準備 例として、この記事のテレコム顧客チャーンを検討します。ソースデータはkaggelで入手できます。データをダウンロードするための
-
Pythonで国勢調査データを分析する
国勢調査とは、特定の人口に関する情報を体系的に記録することです。キャプチャされたデータには、人口統計、経済、居住の詳細など、さまざまなカテゴリの情報が含まれます。これは、最終的に政府が現在のシナリオと将来の計画を理解するのに役立ちます。この記事では、Pythonを活用してインドの人口の人口調査データを分析する方法を説明します。さまざまな人口統計学的および経済的側面を見ていきます。次に、分析をグラフィカルに投影する電荷をプロットします。 kaggleから収集されたソース。ここにあります。 データの整理 以下のプログラムでは、最初に短いPythonプログラムを使用してデータを取得します。さらに分