বহুতранজ্যাকশনে ফ্রড খুবই কমন। আমরা মেশিন লার্নিং অ্যালগরিদম ব্যবহার করে অতীতের ডেটা বিশ্লেষণ করব এবং একটি ট্রানজ্যাকশন ফ্রড কিনা তা প্রিডিক্ট করব। আমাদের উদাহরণে আমরা ক্রেডিট কার্ড ট্রানজ্যাকশন নেব, ডেটা অ্যানালাইসিস করব, ফিচার এবং লেবেল তৈরি করব এবং cuốiে একটি ML অ্যালগরিদম প্রয়োগ করব ট্রানজ্যাকশনের প্রকৃতি ফ্রড কিনা তা জজ করতে। তারপর আমাদের চয়ন করা মডেলের একুরেসি, প্রিসিশন এবং F-স্কোর বের করব।
ডেটা প্রিপারেশন
এই ধাপে আমরা সোর্স ডেটা পড়ব, ভেরিয়েবলগুলো অধ্যয়ন করব এবং কিছু স্যাম্পল ডেটা দেখব। এটি আমাদের ডেটাসেটে কোন কোন কলাম আছে এবং তাদের ফিচার বুঝতে সাহায্য করবে। আমরা Pandas লাইব্রেরি ব্যবহার করে ডেটাফ্রেম তৈরি করব যা পরবর্তী ধাপগুলোতে ব্যবহার হবে।
উদাহরণ
import pandas as pd
# creditcard.csv পান্ডাস দিয়ে লোড করা হচ্ছে
datainput = pd.read_csv('E:\\creditcard.csv')
# https://www.kaggle.com/mlg-ulb/creditcardfraud
# শীর্ষ ৫ রেকর্ড প্রিন্ট
print(datainput[0:5], "\n")
# সম্পূর্ণ ডেটাসেটের শেপ প্রিন্ট
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 অ্যালগরিদমে এটিকে ডেটা ইমব্যালেন্স বলা হয়। যদি অধিকাংশ ট্রানজ্যাকশন ফ্রড না হয়, তবে কিছু ট্রানজ্যাকশন জেনুইন কিনা তা জজ করা কঠিন হয়। আমরা Class কলাম ব্যবহার করে ফ্রডুলেন্ট এবং জেনুইন ট্রানজ্যাকশনের সংখ্যা গুনব এবং ফ্রডুলেন্ট ট্রানজ্যাকশনের আসল পার্সেন্টেজ বের করব।
উদাহরণ
import pandas as pd
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
ট্রানজ্যাকশন টাইপের বিস্তারিত
আমরা ফ্রডুলেন্ট এবং নন-ফ্রডুলেন্ট ট্রানজ্যাকশনের ক্যাটাগরি অনুযায়ী ভেতর থেকে তদন্ত করব। আমরা মিন, ম্যাক্স, মিন, স্ট্যান্ডার্ড ডেভিয়েশন, বিভিন্ন পার্সেন্টাইল ইত্যাদি স্ট্যাটিস্টিক্যালি এসটিমেট করার চেষ্টা করব। এটি describe মেথড দিয়ে অর্জন করা যায়।
উদাহরণ
import pandas as pd
datainput = pd.read_csv('E:\\creditcard.csv')
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 অ্যালগরিদম ইমপ্লিমেন্ট করার আগে আমাদের ফিচার এবং লেবেল ঠিক করতে হবে। অর্থাৎ ডিপেন্ডেন্ট এবং ইন্ডিপেন্ডেন্ট ভেরিয়েবল ক্যাটাগরাইজ করা। আমাদের ডেটাসেটে Class কলাম বাকি সব কলামের ওপর ডিপেন্ডেন্ট। তাই আমরা লাস্ট কলামের জন্য একটি ডেটাফ্রেম এবং বাকি সব কলামের জন্য আরেকটি ডেটাফ্রেম তৈরি করব। এই ডেটাফ্রেমগুলো মডেল ট্রেন করার জন্য ব্যবহার হবে।
উদাহরণ
import pandas as pd
datainput = pd.read_csv('E:\\creditcard.csv')
# ফিচার (X) এবং লেবেল (y) আলাদা করা
# লাস্ট কলাম বাদে সব কলাম সিলেক্ট
X = datainput.iloc[:, :-1].values
# লাস্ট কলাম সিলেক্ট
Y = datainput.iloc[:, -1].values
print(X.shape)
print(Y.shape)
আউটপুট
উপরোক্ত কোডটি রান করলে নিচের ফলাফল পাবেন:
(284807, 30) (284807,)
মডেল ট্রেন করা
এখন ডেটাসেটকে দুটি অংশে ভাগ করব। ট্রেনিং এবং টেস্টিং। test_size প্যারামিটার দিয়ে ঠিক করব কত শতাংশ ডেটা শুধু টেস্টিংয়ে ব্যবহার হবে।
উদাহরণ
import pandas as pd
from sklearn.model_selection import train_test_split
datainput = pd.read_csv('E:\\creditcard.csv')
X = datainput.iloc[:, :-1].values
Y = datainput.iloc[:, -1].values
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2)
ডিসিশন ট্রি ক্লাসিফিকেশন প্রয়োগ
এই পরিস্থিতিতে প্রয়োগ করার জন্য অনেক অ্যালগরিদম আছে। কিন্তু আমরা ডিসিশন ট্রি বেছে নিচ্ছি ক্লাসিফিকেশনের জন্য। যা হলো ম্যাক্স ট্রি ডেপথ ৪ এবং টেস্ট স্যাম্পল দিয়ে ভ্যালু প্রিডিক্ট করব। শেষে টেস্ট রেজাল্ট থেকে একুরেসি ক্যালকুলেট করব এই অ্যালগরিদম চালিয়ে যাব কিনা তা ঠিক করতে।
উদাহরণ
import pandas as pd
from sklearn import metrics
from sklearn.model_selection import train_test_split
datainput = pd.read_csv('E:\\creditcard.csv')
X = datainput.iloc[:, :-1].values
Y = datainput.iloc[:, -1].values
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2)
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-স্কোর প্রিসিশন এবং রিকল দুটোর ব্যালেন্স এক নম্বরে দেয়।
উদাহরণ
import pandas as pd
from sklearn import metrics
from sklearn.model_selection import train_test_split
from sklearn.metrics import precision_score, recall_score, f1_score
datainput = pd.read_csv('E:\\creditcard.csv')
X = datainput.iloc[:, :-1].values
Y = datainput.iloc[:, -1].values
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2)
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)
DT = metrics.accuracy_score(Y_test, predicted) * 100
print("\nThe accuracy score using the DecisionTreeClassifier : ", DT)
# Precision
print('precision')
precision = precision_score(Y_test, predicted, pos_label=1)
print(precision_score(Y_test, predicted, pos_label=1))
# Recall
print('recall')
recall = recall_score(Y_test, predicted, pos_label=1)
print(recall_score(Y_test, predicted, pos_label=1))
# F1-score
print('f-Score')
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