ক্লাউড এআই প্ল্যাটফর্মের সাথে একটি জালিয়াতি সনাক্তকরণ মডেল ব্যাখ্যা করা

1. ওভারভিউ

এই ল্যাবে, আপনি প্রতারণামূলক লেনদেন শনাক্ত করার জন্য একটি মডেল তৈরি ও প্রশিক্ষণের জন্য AI প্ল্যাটফর্ম নোটবুক ব্যবহার করবেন এবং ব্যাখ্যাযোগ্য AI SDK-এর মাধ্যমে মডেলের ভবিষ্যদ্বাণীগুলি বুঝতে পারবেন। জালিয়াতি সনাক্তকরণ হল আর্থিক পরিষেবাগুলির জন্য নির্দিষ্ট এক ধরনের অসঙ্গতি সনাক্তকরণ, এবং ML মডেলগুলির জন্য কিছু আকর্ষণীয় চ্যালেঞ্জ উপস্থাপন করে: সহজাতভাবে ভারসাম্যহীন ডেটাসেট এবং একটি মডেলের ফলাফল ব্যাখ্যা করার প্রয়োজন।

আপনি কি শিখুন

আপনি কিভাবে শিখবেন:

  • ভারসাম্যহীন ডেটাসেটগুলি পরিচালনা করুন
  • AI প্ল্যাটফর্ম নোটবুকগুলিতে tf.keras সহ একটি জালিয়াতি সনাক্তকরণ মডেল তৈরি এবং মূল্যায়ন করুন
  • কেন মডেলটি লেনদেনকে জালিয়াতি হিসাবে শ্রেণীবদ্ধ করেছে তা বোঝার জন্য নোটবুকের মধ্যে থেকে ব্যাখ্যাযোগ্য AI SDK ব্যবহার করুন
  • ব্যাখ্যা সহ মডেলটিকে এআই প্ল্যাটফর্মে স্থাপন করুন এবং স্থাপন করা মডেলের পূর্বাভাস এবং ব্যাখ্যা পান

Google ক্লাউডে এই ল্যাবটি চালানোর জন্য মোট খরচ প্রায় $1

2. কেন জালিয়াতি সনাক্তকরণ?

অসঙ্গতি সনাক্তকরণ মেশিন লার্নিংয়ের জন্য একটি ভাল প্রার্থী হতে পারে কারণ ডেটাতে বহিরাগতদের সনাক্ত করার জন্য নিয়ম-ভিত্তিক বিবৃতিগুলির একটি সিরিজ লেখা প্রায়ই কঠিন। জালিয়াতি সনাক্তকরণ হল এক ধরনের অসঙ্গতি সনাক্তকরণ, এবং মেশিন লার্নিংয়ের ক্ষেত্রে দুটি আকর্ষণীয় চ্যালেঞ্জ উপস্থাপন করে:

  • অত্যন্ত ভারসাম্যহীন ডেটাসেট : কারণ অসামঞ্জস্যগুলি, ভাল, অসামঞ্জস্য, সেগুলির মধ্যে অনেকগুলি নেই৷ যখন ডেটাসেটগুলি ভারসাম্যপূর্ণ থাকে তখন ML সবচেয়ে ভাল কাজ করে, তাই যখন আউটলায়াররা আপনার ডেটার 1% এর কম করে তখন জিনিসগুলি জটিল হতে পারে।
  • ফলাফল ব্যাখ্যা করতে হবে : আপনি যদি প্রতারণামূলক কার্যকলাপ খুঁজছেন, সম্ভাবনা আছে আপনি জানতে চাইবেন কেন একটি সিস্টেম কোনো কিছুকে প্রতারণামূলক হিসেবে চিহ্নিত করেছে, এর জন্য তার শব্দটি গ্রহণ করার পরিবর্তে। ব্যাখ্যাযোগ্যতার সরঞ্জামগুলি এতে সহায়তা করতে পারে।

3. আপনার পরিবেশ সেটআপ করুন

এই কোডল্যাব চালানোর জন্য আপনার একটি Google ক্লাউড প্ল্যাটফর্ম প্রকল্পের প্রয়োজন হবে যাতে বিলিং সক্ষম থাকে৷ একটি প্রকল্প তৈরি করতে, এখানে নির্দেশাবলী অনুসরণ করুন।

ধাপ 1: ক্লাউড এআই প্ল্যাটফর্ম মডেল এপিআই সক্ষম করুন

আপনার ক্লাউড কনসোলের AI প্ল্যাটফর্ম মডেল বিভাগে নেভিগেট করুন এবং সক্ষম করুন ক্লিক করুন যদি এটি ইতিমধ্যে সক্ষম না থাকে।

d0d38662851c6af3.png

ধাপ 2: Compute Engine API সক্ষম করুন

কম্পিউট ইঞ্জিনে নেভিগেট করুন এবং সক্ষম নির্বাচন করুন যদি এটি ইতিমধ্যে সক্ষম না থাকে। আপনার নোটবুক উদাহরণ তৈরি করতে আপনার এটির প্রয়োজন হবে৷

ধাপ 3: একটি AI প্ল্যাটফর্ম নোটবুক উদাহরণ তৈরি করুন

আপনার ক্লাউড কনসোলের AI প্ল্যাটফর্ম নোটবুক বিভাগে নেভিগেট করুন এবং New Instance-এ ক্লিক করুন। তারপর GPU ছাড়া টেনসরফ্লো এন্টারপ্রাইজ 2.1 ইনস্ট্যান্স টাইপ নির্বাচন করুন:

9e2b62be57fff946.png

ডিফল্ট বিকল্পগুলি ব্যবহার করুন এবং তারপরে তৈরি করুন ক্লিক করুন। একবার উদাহরণ তৈরি হয়ে গেলে, JupyterLab খুলুন নির্বাচন করুন:

fa67fe02f2a9ba73.png

আপনি যখন উদাহরণ খুলবেন, লঞ্চার থেকে পাইথন 3 নোটবুক নির্বাচন করুন:

4390b1614ae8eae4.png

ধাপ 4: পাইথন প্যাকেজ আমদানি করুন

একটি নতুন সেল তৈরি করুন এবং লাইব্রেরিগুলি আমদানি করুন যা আমরা এই কোডল্যাবে ব্যবহার করব:

import itertools
import numpy as np
import pandas as pd
import tensorflow as tf
import json
import matplotlib as mpl
import matplotlib.pyplot as plt
import explainable_ai_sdk

from sklearn.utils import shuffle
from sklearn.metrics import confusion_matrix
from sklearn.preprocessing import StandardScaler
from tensorflow import keras
from explainable_ai_sdk.metadata.tf.v2 import SavedModelMetadataBuilder

4. ডেটা ডাউনলোড এবং প্রক্রিয়া করুন

আমরা আমাদের মডেল প্রশিক্ষণের জন্য Kaggle থেকে এই কৃত্রিমভাবে তৈরি ডেটাসেট ব্যবহার করব। আসল ডেটাসেটে 6.3 মিলিয়ন সারি রয়েছে, যার মধ্যে 8k হল প্রতারণামূলক লেনদেন - পুরো ডেটাসেটের একটি মাত্র 0.1%!

ধাপ 1: Kaggle ডেটাসেট ডাউনলোড করুন এবং পান্ডাদের সাথে পড়ুন

আমরা Google ক্লাউড স্টোরেজে আপনার জন্য Kaggle ডেটাসেট উপলব্ধ করেছি৷ আপনি আপনার Jupyter নোটবুকে নিম্নলিখিত gsutil কমান্ডটি চালিয়ে এটি ডাউনলোড করতে পারেন:

!gsutil cp gs://financial_fraud_detection/fraud_data_kaggle.csv .

এর পরে, আসুন একটি পান্ডাস ডেটাফ্রেম হিসাবে ডেটাসেটটি পড়ি এবং এটির পূর্বরূপ দেখি:

data = pd.read_csv('fraud_data_kaggle.csv')
data = data.drop(columns=['type'])
data.head()

আপনি পূর্বরূপ এই মত কিছু দেখতে হবে:

8d3d9e022fce1e7f.png

ধাপ 2: ভারসাম্যহীন ডেটার জন্য অ্যাকাউন্টিং

উপরে উল্লিখিত হিসাবে, এই মুহূর্তে ডেটাসেটে 99.9% অ-প্রতারণামূলক উদাহরণ রয়েছে। যদি আমরা একটি মডেলকে ডেটার উপর প্রশিক্ষিত করি, তাহলে সম্ভাবনা রয়েছে যে মডেলটি 99.9% নির্ভুলতায় পৌঁছাবে এবং অনুমান করে যে প্রতিটি লেনদেন একটি প্রতারণামূলক নয় শুধুমাত্র কারণ 99.9% ডেটা জালিয়াতি নয়।

ভারসাম্যহীন ডেটা মোকাবেলার জন্য কয়েকটি ভিন্ন পদ্ধতি রয়েছে। এখানে, আমরা ডাউনস্যাম্পলিং নামে একটি কৌশল ব্যবহার করব। ডাউনস্যাম্পলিং মানে প্রশিক্ষণে সংখ্যাগরিষ্ঠ শ্রেণীর মাত্র একটি ছোট শতাংশ ব্যবহার করা। এই ক্ষেত্রে, "অ-প্রতারণা" হল সংখ্যাগরিষ্ঠ শ্রেণী যেহেতু এটি 99.9% ডেটার জন্য দায়ী৷

আমাদের ডেটাসেটের নমুনা কমাতে, আমরা সমস্ত ~8k প্রতারণামূলক উদাহরণ এবং ~31k নন-জালিয়াতির ঘটনাগুলির একটি এলোমেলো নমুনা নেব। এইভাবে ফলস্বরূপ ডেটাসেটে 25% প্রতারণার ঘটনা ঘটবে, যা আমাদের আগে ছিল .1% এর তুলনায়।

প্রথমে, দুটি ডেটাফ্রেমে ডেটা বিভক্ত করুন, একটি জালিয়াতির জন্য এবং একটি নন-প্রতারণার জন্য (আমরা আমাদের মডেল স্থাপন করার সময় কোডল্যাবে এটি ব্যবহার করব):

fraud = data[data['isFraud'] == 1]
not_fraud = data[data['isFraud'] == 0]

তারপর, অ-জালিয়াতি মামলাগুলির একটি এলোমেলো নমুনা নিন। আমরা .005% ব্যবহার করছি কারণ এটি আমাদের 25/75 জালিয়াতি/অ-জালিয়াতি লেনদেনের বিভাজন দেবে। এটির সাহায্যে, আপনি ডেটা একসাথে রাখতে এবং এলোমেলো করতে পারেন। জিনিসগুলিকে সহজ করার জন্য আমরা কিছু কলামও সরিয়ে দেব যা আমরা প্রশিক্ষণের জন্য ব্যবহার করব না:

# Take a random sample of non fraud rows
not_fraud_sample = not_fraud.sample(random_state=2, frac=.005)

# Put it back together and shuffle
df = pd.concat([not_fraud_sample,fraud])
df = shuffle(df, random_state=2)

# Remove a few columns (isFraud is the label column we'll use, not isFlaggedFraud)
df = df.drop(columns=['nameOrig', 'nameDest', 'isFlaggedFraud'])

# Preview the updated dataset
df.head()

এখন আমরা অনেক বেশি সুষম ডেটাসেট পেয়েছি। যাইহোক, যদি আমরা লক্ষ্য করি যে আমাদের মডেল প্রায় ~75% নির্ভুলতার সাথে একত্রিত হচ্ছে, তাহলে প্রতিটি ক্ষেত্রে এটি "অ-প্রতারণা" অনুমান করার একটি ভাল সুযোগ রয়েছে।

ধাপ 3: ট্রেন এবং পরীক্ষা সেটে ডেটা বিভক্ত করুন

আমাদের মডেল তৈরি করার আগে শেষ কাজটি আমাদের ডেটা বিভক্ত করা। আমরা একটি 80/20 ট্রেন-টেস্ট স্প্লিট ব্যবহার করব:

train_test_split = int(len(df) * .8)

train_set = df[:train_test_split]
test_set = df[train_test_split:]

train_labels = train_set.pop('isFraud')
test_labels = test_set.pop('isFraud')

*ইএ লোপেজ-রোজাস, এ. এলমির, এবং এস. অ্যাক্সেলসন। "PaySim: জালিয়াতি সনাক্তকরণের জন্য একটি আর্থিক মোবাইল মানি সিমুলেটর"। ইন: 28 তম ইউরোপীয় মডেলিং এবং সিমুলেশন সিম্পোজিয়াম-ইএমএসএস, লার্নাকা, সাইপ্রাস। 2016

5. একটি tf.keras মডেল তৈরি করুন, প্রশিক্ষণ দিন এবং মূল্যায়ন করুন

আমরা TensorFlow এর tf.keras API ব্যবহার করে নির্মাণ করব। এই বিভাগে মডেল কোড TensorFlow ডক্স থেকে এই টিউটোরিয়াল উপর নির্মিত হয়েছে. প্রথমে আমরা ডেটা স্বাভাবিক করব, এবং তারপরে অবশিষ্ট ডেটা ভারসাম্যহীনতার জন্য class_weight প্যারামিটার ব্যবহার করে আমরা আমাদের মডেল তৈরি ও প্রশিক্ষণ দেব।

ধাপ 1: ডেটা স্বাভাবিক করুন

সাংখ্যিক ডেটার উপর একটি মডেলকে প্রশিক্ষণ দেওয়ার সময়, ডেটা স্বাভাবিক করা গুরুত্বপূর্ণ, বিশেষ করে যদি প্রতিটি কলাম আলাদা পরিসরে পড়ে। এটি প্রশিক্ষণের সময় বিস্ফোরণ থেকে ক্ষতি প্রতিরোধ করতে সাহায্য করতে পারে। আমরা নিম্নলিখিতগুলি দিয়ে আমাদের ডেটা স্বাভাবিক করতে পারি:

scaler = StandardScaler()
train_set = scaler.fit_transform(train_set) # Only normalize on the train set
test_set = scaler.transform(test_set)

# clip() ensures all values fall within the range [-5,5]
# useful if any outliers remain after normalizing
train_set = np.clip(train_set, -5, 5)
test_set = np.clip(test_set, -5, 5)

তারপর, আসুন আমাদের স্বাভাবিক ডেটার পূর্বরূপ দেখি:

train_set

ধাপ 2: শ্রেণীর ওজন নির্ধারণ করুন

ডেটার নমুনা ডাউন করার সময়, আমরা এখনও অ-প্রতারণামূলক লেনদেনের একটি উপসেট রাখতে চেয়েছিলাম যাতে আমরা সেই লেনদেনের তথ্য হারাতে পারিনি, এই কারণেই আমরা ডেটা পুরোপুরি ভারসাম্যপূর্ণ করতে পারিনি। যেহেতু ডেটাসেট এখনও ভারসাম্যহীন এবং আমরা প্রতারণামূলক লেনদেনগুলিকে সঠিকভাবে চিহ্নিত করার বিষয়ে সবচেয়ে বেশি যত্নশীল, তাই আমরা চাই যে আমাদের মডেলটি আমাদের ডেটাসেটে প্রতারণামূলক উদাহরণগুলিকে আরও বেশি গুরুত্ব দেবে

কেরাস class_weight প্যারামিটারটি ডেটাসেটে কত ঘন ঘন ঘটে তার উপর ভিত্তি করে আমরা প্রতিটি ক্লাস থেকে উদাহরণ দিতে চাই ঠিক কতটা ওজন নির্দিষ্ট করতে দেয়:

weight_for_non_fraud = 1.0 / df['isFraud'].value_counts()[0]
weight_for_fraud = 1.0 / df['isFraud'].value_counts()[1]

class_weight = {0: weight_for_non_fraud, 1: weight_for_fraud}

আমরা এই ভেরিয়েবলটি ব্যবহার করব যখন আমরা আমাদের মডেলকে পরবর্তী ধাপে প্রশিক্ষণ দেব।

ধাপ 3: মডেলটিকে প্রশিক্ষণ দিন এবং মূল্যায়ন করুন

আমরা কেরাস সিকোয়েন্সিয়াল মডেল এপিআই ব্যবহার করে আমাদের মডেল তৈরি করব, যা আমাদের মডেলটিকে স্তরগুলির স্ট্যাক হিসাবে সংজ্ঞায়িত করতে দেয়। আমরা প্রশিক্ষণের সময় বেশ কিছু মেট্রিক্স ট্র্যাক করব, যা আমাদের ডেটাসেটের প্রতিটি ক্লাসে আমাদের মডেল কীভাবে পারফর্ম করছে তা বুঝতে সাহায্য করবে।

METRICS = [
      keras.metrics.TruePositives(name='tp'),
      keras.metrics.FalsePositives(name='fp'),
      keras.metrics.TrueNegatives(name='tn'),
      keras.metrics.FalseNegatives(name='fn'), 
      keras.metrics.BinaryAccuracy(name='accuracy'),
      keras.metrics.Precision(name='precision'),
      keras.metrics.Recall(name='recall'),
      keras.metrics.AUC(name='auc'),
]

def make_model(metrics = METRICS):
  model = keras.Sequential([
      keras.layers.Dense(
          16, activation='relu',
          input_shape=(train_set.shape[-1],)),
      keras.layers.Dropout(0.5),
      keras.layers.Dense(1, activation='sigmoid'),
  ])

  model.compile(
      optimizer=keras.optimizers.Adam(lr=1e-3),
      loss=keras.losses.BinaryCrossentropy(),
      metrics=metrics)

  return model

তারপর, আমরা কিছু প্রাথমিক স্টপিং প্যারামিটার সহ প্রশিক্ষণের সময় ব্যবহারের জন্য কয়েকটি গ্লোবাল ভেরিয়েবল সংজ্ঞায়িত করব।

EPOCHS = 100
BATCH_SIZE = 512

early_stopping = tf.keras.callbacks.EarlyStopping(
    monitor='val_auc', 
    verbose=1,
    patience=10,
    mode='max',
    restore_best_weights=True)

অবশেষে, আমরা আমাদের মডেল তৈরি করতে উপরে সংজ্ঞায়িত ফাংশনটিকে কল করব:

model = make_model()
model.summary()

আমরা আমাদের মডেলকে fit() পদ্ধতিতে প্রশিক্ষণ দিতে পারি, উপরে সংজ্ঞায়িত পরামিতিগুলি অতিক্রম করে:

results = model.fit(
    train_set,
    train_labels,
    batch_size=BATCH_SIZE,
    epochs=EPOCHS,
    callbacks = [early_stopping],
    validation_data=(test_set, test_labels),
    class_weight=class_weight)

প্রশিক্ষণ চালানোর জন্য কয়েক মিনিট সময় লাগবে।

ধাপ 4: মডেল মেট্রিক্স ভিজ্যুয়ালাইজ করুন

এখন যেহেতু আমাদের কাছে একটি প্রশিক্ষিত মডেল রয়েছে, আসুন দেখি আমাদের প্রশিক্ষণের যুগ জুড়ে বিভিন্ন মেট্রিক্স তৈরি করে আমাদের মডেলটি কীভাবে পারফর্ম করেছে:

mpl.rcParams['figure.figsize'] = (12, 10)
colors = plt.rcParams['axes.prop_cycle'].by_key()['color']

def plot_metrics(history):
  metrics =  ['loss', 'auc', 'precision', 'recall']
  for n, metric in enumerate(metrics):
    name = metric.replace("_"," ").capitalize()
    plt.subplot(2,2,n+1)
    plt.plot(history.epoch,  history.history[metric], color=colors[0], label='Train')
    plt.plot(history.epoch, history.history['val_'+metric],
             color=colors[0], linestyle="--", label='Val')
    plt.xlabel('Epoch')
    plt.ylabel(name)
    if metric == 'loss':
      plt.ylim([0, plt.ylim()[1]])
    elif metric == 'auc':
      plt.ylim([0.8,1])
    else:
      plt.ylim([0,1])

    plt.legend()

plot_metrics(results)

আপনার গ্রাফগুলি নিম্নলিখিতগুলির মতো দেখতে হবে (কিন্তু ঠিক একই হবে না):

f98a88e530bb341f.png

ধাপ 5: একটি বিভ্রান্তি ম্যাট্রিক্স প্রিন্ট করুন

পরীক্ষার ডেটাসেট জুড়ে আমাদের মডেল কীভাবে পারফর্ম করেছে তা কল্পনা করার একটি বিভ্রান্তি ম্যাট্রিক্স একটি চমৎকার উপায়। প্রতিটি শ্রেণীর জন্য, এটি আমাদের মডেল সঠিকভাবে এবং ভুলভাবে ভবিষ্যদ্বাণী করে এমন পরীক্ষার উদাহরণগুলির শতাংশ দেখাবে। বিভ্রান্তি ম্যাট্রিক্স তৈরি এবং প্লট করার জন্য Scikit Learn-এর কিছু উপযোগিতা রয়েছে, যা আমরা এখানে ব্যবহার করব।

আমাদের নোটবুকের শুরুতে আমরা confusion_matrix ইউটিলিটি আমদানি করেছি। এটি ব্যবহার করার জন্য, আমরা প্রথমে আমাদের মডেলের ভবিষ্যদ্বাণীগুলির একটি তালিকা তৈরি করব৷ এখানে আমরা আমাদের মডেল থেকে প্রত্যাবর্তিত মানগুলিকে বৃত্তাকার করব যাতে এই তালিকাগুলি আমাদের গ্রাউন্ড ট্রুথ লেবেলের তালিকার সাথে মেলে:

predicted = model.predict(test_set)

y_pred = []

for i in predicted.tolist():
  y_pred.append(int(round(i[0])))

এখন আমরা আমাদের গ্রাউন্ড ট্রুথ লেবেল সহ confusion_matrix পদ্ধতিতে এটি খাওয়াতে প্রস্তুত:

cm = confusion_matrix(test_labels.values, y_pred)
print(cm)

এটি আমাদের পরীক্ষার সেটে আমাদের মডেলের সঠিক এবং ভুল ভবিষ্যদ্বাণীগুলির পরম সংখ্যা দেখায়। উপরের বাম দিকের সংখ্যাটি দেখায় যে আমাদের পরীক্ষা থেকে কতগুলি উদাহরণ আমাদের মডেলকে অ-জালিয়াতি হিসাবে সঠিকভাবে ভবিষ্যদ্বাণী করেছে। নীচের ডানদিকের সংখ্যাটি দেখায় যে কতগুলি এটি সঠিকভাবে জালিয়াতি হিসাবে ভবিষ্যদ্বাণী করেছে (আমরা এই সংখ্যাটি সম্পর্কে সবচেয়ে বেশি যত্নশীল)৷ আপনি দেখতে পাচ্ছেন যে এটি প্রতিটি শ্রেণীর জন্য বেশিরভাগ নমুনার সঠিকভাবে ভবিষ্যদ্বাণী করেছে।

এটিকে কল্পনা করা সহজ করার জন্য, আমরা Scikit Learn ডক্স থেকে plot_confusion_matrix ফাংশনটি অভিযোজিত করেছি। এখানে সেই ফাংশনটি সংজ্ঞায়িত করুন:

def plot_confusion_matrix(cm, classes,
                          normalize=False,
                          title='Confusion matrix',
                          cmap=plt.cm.Blues):
    """
    This function prints and plots the confusion matrix.
    Normalization can be applied by setting `normalize=True`.
    """
    plt.imshow(cm, interpolation='nearest', cmap=cmap)
    plt.title(title)
    plt.colorbar()
    tick_marks = np.arange(len(classes))
    plt.xticks(tick_marks, classes, rotation=45)
    plt.yticks(tick_marks, classes)

    if normalize:
        cm = np.round(cm.astype('float') / cm.sum(axis=1)[:, np.newaxis], 3)

    thresh = cm.max() / 2.
    for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
        plt.text(j, i, cm[i, j],
                 horizontalalignment="center",
                 color="white" if cm[i, j] > thresh else "black")

    plt.tight_layout()
    plt.ylabel('True label')
    plt.xlabel('Predicted label')

এবং আমাদের মডেল থেকে ডেটা পাস করে প্লট তৈরি করুন। আমরা এখানে normalize True এ সেট করছি যাতে কনফিউশন ম্যাট্রিক্স শতাংশ হিসাবে সঠিক এবং ভুল ভবিষ্যদ্বাণীর সংখ্যা প্রদর্শন করে:

classes = ['not fraud', 'fraud']
plot_confusion_matrix(cm, classes, normalize=True)

আপনি এই মত কিছু দেখতে হবে (সঠিক সংখ্যা পরিবর্তিত হবে):

b52ef4ccddce5d8c.png

এখানে আমরা দেখতে পাচ্ছি যে আমাদের মডেল আমাদের পরীক্ষা সেট থেকে 1,594টি জালিয়াতিপূর্ণ লেনদেনের প্রায় 85% সঠিকভাবে ভবিষ্যদ্বাণী করেছে। মনে রাখবেন যে এই ল্যাবে ফোকাস মডেলের মানের উপর নয় - আপনি যদি প্রডাকশনে একটি জালিয়াতি সনাক্তকরণ মডেল স্থাপন করেন তবে আপনি সম্ভবত জালিয়াতি শ্রেণীতে 85% এর বেশি নির্ভুলতা চাইবেন। এই ল্যাবের লক্ষ্য হল ভারসাম্যহীন ডেটাসেটের উপর প্রশিক্ষিত মডেল ব্যাখ্যা করার চারপাশে টুলিংয়ের সাথে আপনাকে পরিচয় করিয়ে দেওয়া।

পরবর্তীতে, আমাদের মডেল এই ভবিষ্যদ্বাণীগুলি করার জন্য কোন বৈশিষ্ট্যগুলির উপর নির্ভর করছে তা বোঝার জন্য আমরা ব্যাখ্যাযোগ্য AI SDK ব্যবহার করব৷

6. ব্যাখ্যাযোগ্য AI SDK ব্যবহার করা

ব্যাখ্যাযোগ্য AI SDK আপনার মডেলের ব্যাখ্যা পাওয়ার জন্য ইউটিলিটি পদ্ধতি প্রদান করে। এটি টেনসরফ্লো এআই প্ল্যাটফর্ম নোটবুক দৃষ্টান্তে আগে থেকে ইনস্টল করা আছে – মনে রাখবেন যে আমরা এটি আমাদের ল্যাবের শুরুতে আমাদের নোটবুকে আমদানি করেছি। SDK-এর সাহায্যে, আমরা নোটবুক ইনস্ট্যান্সের মধ্যে আমাদের মডেল থেকে বৈশিষ্ট্য বৈশিষ্ট্য পেতে পারি, যার মানে এটি ব্যবহার করার জন্য আমাদের ক্লাউডে আমাদের মডেল স্থাপন করার প্রয়োজন নেই।

এই বিভাগে, আমরা যে মডেলটি টেনসরফ্লো সেভডমডেল হিসাবে প্রশিক্ষিত করেছি তা রপ্তানি করব এবং তারপরে ব্যাখ্যা পেতে আমাদের সংরক্ষিত মডেল সম্পদগুলিতে SDK নির্দেশ করব৷

ধাপ 1: প্রশিক্ষিত মডেল রপ্তানি করুন

প্রথমে, আসুন আমাদের নোটবুকের উদাহরণে আমাদের মডেলটিকে একটি ডিরেক্টরিতে সংরক্ষণ করি:

model_dir = 'fraud_model'
tf.saved_model.save(model, model_dir)

আপনি যদি আপনার নোটবুকের বাম সাইডবারে ফোল্ডার ভিউ রিফ্রেশ করেন, তাহলে আপনি fraud_model/ নামে একটি নতুন ডিরেক্টরি দেখতে পাবেন।

ধাপ 2: SDK-এর সাথে ব্যাখ্যা মেটাডেটা পান

এর পরে, আমরা সেই ডিরেক্টরিতে ব্যাখ্যাযোগ্য AI SDK নির্দেশ করব। এটি করা মডেল ব্যাখ্যা পাওয়ার জন্য প্রয়োজনীয় মেটাডেটা তৈরি করবে। get_metadata() পদ্ধতিটি আপনার মডেল থেকে SDK দ্বারা অনুমান করা মেটাডেটা দেখায়, যেমন ইনপুট নাম:

model_builder = SavedModelMetadataBuilder(model_dir)
metadata = model_builder.get_metadata()
print(metadata)

ব্যাখ্যাযোগ্যতা আমাদের এই প্রশ্নের উত্তর দিতে সাহায্য করে: "কেন আমাদের মডেল মনে করেছিল যে এটি প্রতারণা?"

ধাপ 3: আমাদের মডেলের বেসলাইন নির্দিষ্ট করা

ট্যাবুলার ডেটার জন্য, ব্যাখ্যাযোগ্য AI পরিষেবা প্রতিটি বৈশিষ্ট্যের জন্য অ্যাট্রিবিউশন মান ফিরিয়ে দিয়ে কাজ করে। এই মানগুলি নির্দেশ করে যে একটি নির্দিষ্ট বৈশিষ্ট্য ভবিষ্যদ্বাণীকে কতটা প্রভাবিত করেছে। ধরা যাক একটি নির্দিষ্ট লেনদেনের পরিমাণ আমাদের মডেলটিকে এর পূর্বাভাসিত জালিয়াতির সম্ভাবনা 0.2% বাড়িয়ে দিয়েছে৷ আপনি হয়তো ভাবছেন "0.2% কিসের সাথে সম্পর্কিত??"। এটি আমাদের একটি বেসলাইনের ধারণা নিয়ে আসে।

আমাদের মডেলের বেসলাইনটি মূলত এটির সাথে তুলনা করছে। আমরা আমাদের মডেলের প্রতিটি বৈশিষ্ট্যের জন্য বেসলাইন মান নির্বাচন করি, এবং বেসলাইন ভবিষ্যদ্বাণী ফলস্বরূপ আমাদের মডেলের ভবিষ্যদ্বাণী করা মান হয়ে ওঠে যখন বৈশিষ্ট্যগুলি বেসলাইনে সেট করা হয়।

একটি বেসলাইন নির্বাচন করা আপনি যে ভবিষ্যদ্বাণী টাস্ক সমাধান করছেন তার উপর নির্ভর করে। সাংখ্যিক বৈশিষ্ট্যের জন্য, আপনার ডেটাসেটের প্রতিটি বৈশিষ্ট্যের মধ্যম মানকে বেসলাইন হিসাবে ব্যবহার করা সাধারণ। জালিয়াতি সনাক্তকরণের ক্ষেত্রে, যাইহোক, আমরা যা চাই তা ঠিক নয়। যখন আমাদের মডেল কোনো লেনদেনকে জালিয়াতি হিসেবে লেবেল করে তখন আমরা কেস ব্যাখ্যা করার বিষয়ে সবচেয়ে বেশি যত্নশীল। এর মানে হল যে বেসলাইন কেসটির সাথে আমরা তুলনা করতে চাই তা হল অ-প্রতারণামূলক লেনদেন।

এটির জন্য অ্যাকাউন্ট করার জন্য, আমরা বেসলাইন হিসাবে আমাদের ডেটাসেটে অ-প্রতারণামূলক লেনদেনের মধ্যম মান ব্যবহার করব। আমরা উপরে not_fraud_sample ডেটাফ্রেমটি বের করেছি তা ব্যবহার করে এবং আমাদের মডেলের প্রত্যাশিত ইনপুটগুলিকে মেলানোর জন্য এটিকে স্কেল করার মাধ্যমে মধ্যমা পেতে পারি:

not_fraud_sample = not_fraud_sample.drop(columns=['nameOrig', 'nameDest', 'isFlaggedFraud', 'isFraud'])

baseline = scaler.transform(not_fraud_sample.values)
baseline = np.clip(baseline, -5, 5)
baseline_values = np.median(baseline, axis=0)

মনে রাখবেন যে আমাদের একটি বেসলাইন নির্দিষ্ট করার দরকার নেই। যদি আমরা তা না করি, SDK 0 ব্যবহার করবে আমাদের মডেলের প্রতিটি ইনপুট মানের জন্য একটি বেসলাইন হিসাবে। আমাদের জালিয়াতি সনাক্তকরণ ব্যবহারের ক্ষেত্রে, একটি বেসলাইন নির্দিষ্ট করা অর্থপূর্ণ, যা আমরা নীচে করব:

input_name = list(metadata['inputs'])[0]
model_builder.set_numeric_metadata(input_name, input_baselines=[baseline_values.tolist()], index_feature_mapping=df.columns.tolist()[:6])
model_builder.save_metadata(model_dir)

উপরের save_metadata() পদ্ধতিটি চালানোর ফলে explanation_metadata.json নামে আমাদের মডেলের ডিরেক্টরিতে একটি ফাইল তৈরি হয়েছে। আপনার নোটবুকে, ফাইলটি তৈরি করা হয়েছে তা নিশ্চিত করতে fraud_model/ ডিরেক্টরিতে নেভিগেট করুন। এতে এমন মেটাডেটা রয়েছে যা SDK ফিচার অ্যাট্রিবিউশন তৈরি করতে ব্যবহার করবে।

ধাপ 4: মডেলের ব্যাখ্যা পাওয়া

আমরা এখন পৃথক উদাহরণে বৈশিষ্ট্য বৈশিষ্ট্য পেতে প্রস্তুত। এটি করার জন্য, আমরা প্রথমে SDK ব্যবহার করে আমাদের মডেলের একটি স্থানীয় রেফারেন্স তৈরি করব:

local_model = explainable_ai_sdk.load_model_from_local_path(
    model_dir, 
    explainable_ai_sdk.SampledShapleyConfig()
)

এর পরে, আসুন একটি উদাহরণ লেনদেন যা জালিয়াতি হিসাবে শ্রেণীবদ্ধ করা উচিত থেকে আমাদের মডেলের ভবিষ্যদ্বাণী এবং ব্যাখ্যা পাই:

fraud_example = [0.722,0.139,-0.114,-0.258,-0.271,-0.305]
response = local_model.explain([{input_name: fraud_example}])
response[0].visualize_attributions()

এটি চালানোর ফলে একটি ভিজ্যুয়ালাইজেশন তৈরি করা উচিত যা নীচের মত দেখাচ্ছে:

67211d9396197146.png

এই উদাহরণে, লেনদেন হওয়ার আগে অ্যাকাউন্টের প্রাথমিক ব্যালেন্স ছিল জালিয়াতির সবচেয়ে বড় সূচক, যা আমাদের মডেলের পূর্বাভাসকে বেসলাইন থেকে 0.5-এর বেশি উপরে ঠেলে দিয়েছে। লেনদেনের পরিমাণ, গন্তব্য অ্যাকাউন্টে ফলে ব্যালেন্স, এবং ধাপ পরবর্তী বৃহত্তম সূচক। ডেটাসেটে, "ধাপ" সময়ের একটি একক প্রতিনিধিত্ব করে (1 ধাপ হল 1 ঘন্টা)। অ্যাট্রিবিউশন মানও নেতিবাচক হতে পারে।

ভিজ্যুয়ালাইজেশনের উপরে মুদ্রিত "আনুমানিক ত্রুটি" আপনাকে জানতে দেয় যে আপনি ব্যাখ্যাটির উপর কতটা বিশ্বাস করতে পারেন। সাধারণত, 5% এর বেশি ত্রুটি মানে আপনি বৈশিষ্ট্য বৈশিষ্ট্যের উপর নির্ভর করতে পারবেন না। মনে রাখবেন যে আপনার ব্যাখ্যাগুলি আপনার ব্যবহৃত প্রশিক্ষণ ডেটা এবং মডেলের মতোই ভাল। আপনার প্রশিক্ষণের ডেটা, মডেল উন্নত করা বা ভিন্ন মডেলের বেসলাইন চেষ্টা করা আনুমানিক ত্রুটি হ্রাস করতে পারে।

আপনি আপনার ব্যাখ্যা পদ্ধতিতে ব্যবহৃত পদক্ষেপের সংখ্যা বাড়িয়ে এই ত্রুটিটি হ্রাস করতে সক্ষম হতে পারেন। আপনি আপনার ব্যাখ্যা কনফিগারেশনে একটি path_count প্যারামিটার যোগ করে SDK এর সাথে এটি পরিবর্তন করতে পারেন (আপনি নির্দিষ্ট না করলে ডিফল্ট 10):

local_model = explainable_ai_sdk.load_model_from_local_path(
    model_dir, 
    explainable_ai_sdk.SampledShapleyConfig(path_count=20)
)

এই মডেলে ব্যাখ্যাযোগ্য AI দিয়ে আপনি আরও অনেক কিছু করতে পারেন। কিছু ধারণা অন্তর্ভুক্ত:

  • আমাদের মডেলে অনেক উদাহরণ পাঠানো এবং নির্দিষ্ট বৈশিষ্ট্যগুলি সামগ্রিকভাবে আরও গুরুত্বপূর্ণ কিনা তা দেখার জন্য অ্যাট্রিবিউশন মানগুলির গড়। আমরা আমাদের মডেলকে উন্নত করতে এটি ব্যবহার করতে পারি এবং গুরুত্বপূর্ণ নয় এমন বৈশিষ্ট্যগুলিকে সরিয়ে ফেলতে পারি
  • মিথ্যা ইতিবাচক খুঁজে পাওয়া যা আমাদের মডেল জালিয়াতি হিসাবে চিহ্নিত করে কিন্তু অ-প্রতারণামূলক লেনদেন, এবং তাদের অ্যাট্রিবিউশন মান পরীক্ষা করা
  • একটি ভিন্ন বেসলাইন ব্যবহার করুন এবং দেখুন কিভাবে এটি অ্যাট্রিবিউশন মানকে প্রভাবিত করে

🎉 অভিনন্দন! 🎉

আপনি শিখেছেন কীভাবে ভারসাম্যহীন ডেটার জন্য অ্যাকাউন্ট করতে হয়, প্রতারণামূলক লেনদেন শনাক্ত করার জন্য একটি টেনসরফ্লো মডেলকে প্রশিক্ষণ দিন এবং ব্যক্তিগত ভবিষ্যদ্বাণী করতে আপনার মডেল কোন বৈশিষ্ট্যগুলির উপর সবচেয়ে বেশি নির্ভর করছে তা দেখতে ব্যাখ্যাযোগ্য AI SDK ব্যবহার করুন। আপনি চাইলে এখানে থামতে পারেন। একটি নোটবুকের মধ্যে SDK ব্যবহার করার অর্থ হল আপনি একটি মডেল স্থাপন করার আগে আপনাকে ব্যাখ্যাগুলিতে অ্যাক্সেস দিয়ে আপনার মডেল বিকাশের প্রক্রিয়াটিকে সহজ করতে৷ সম্ভাবনা আছে একবার আপনি এমন একটি মডেল তৈরি করেছেন যার সাথে আপনি খুশি, আপনি স্কেলে ভবিষ্যদ্বাণী পেতে এটি স্থাপন করতে চান। যদি এটি আপনার মত শোনায়, ঐচ্ছিক পরবর্তী ধাপে চালিয়ে যান। আপনার কাজ শেষ হলে, ক্লিনআপ ধাপে যান।

7. ঐচ্ছিক: AI প্ল্যাটফর্ম ভবিষ্যদ্বাণীতে মডেলটি স্থাপন করুন

এই ধাপে, আপনি শিখবেন কিভাবে AI প্ল্যাটফর্ম পূর্বাভাসে আপনার মডেল স্থাপন করবেন।

ধাপ 1: একটি ক্লাউড স্টোরেজ বাকেট আপনার সংরক্ষিত মডেল ডিরেক্টরি অনুলিপি.

আমরা আগে যে SDK পদক্ষেপগুলি চালিয়েছিলাম, আপনার কাছে আপনার মডেলটি AI প্ল্যাটফর্মে স্থাপন করার জন্য যা যা প্রয়োজন তা আপনার কাছে রয়েছে। স্থাপনার জন্য প্রস্তুত করার জন্য, আপনাকে আপনার সংরক্ষিত মডেল সম্পদ এবং ব্যাখ্যা মেটাডেটা একটি ক্লাউড স্টোরেজ বাকেটের মধ্যে রাখতে হবে যা ব্যাখ্যাযোগ্য AI পরিষেবা পড়তে পারে।

এটি করার জন্য, আমরা কিছু পরিবেশের ভেরিয়েবল সংজ্ঞায়িত করব। আপনার Google ক্লাউড প্রকল্পের নাম এবং আপনি যে বালতি তৈরি করতে চান তার নাম দিয়ে নীচের মানগুলি পূরণ করুন (অবশ্যই বিশ্বব্যাপী অনন্য)।

# Update these to your own GCP project and model
GCP_PROJECT = 'your-gcp-project'
MODEL_BUCKET = 'gs://storage_bucket_name'

এখন আমরা আমাদের রপ্তানি করা TensorFlow মডেলের সম্পদ সংরক্ষণ করার জন্য একটি স্টোরেজ বাকেট তৈরি করতে প্রস্তুত। যখন আমরা মডেলটি স্থাপন করব তখন আমরা এই বালতিতে AI প্ল্যাটফর্ম নির্দেশ করব।

একটি বালতি তৈরি করতে আপনার নোটবুকের মধ্যে থেকে এই gsutil কমান্ডটি চালান:

!gsutil mb -l 'us-central1' $MODEL_BUCKET

তারপর, সেই বালতিতে আপনার স্থানীয় মডেল ডিরেক্টরিটি অনুলিপি করুন:

!gsutil -m cp -r ./$model_dir/* $MODEL_BUCKET/explanations

ধাপ 2: মডেল স্থাপন করুন

এর পরে, আমরা কিছু ভেরিয়েবল সংজ্ঞায়িত করব যা আমরা আমাদের স্থাপনার কমান্ডগুলিতে ব্যবহার করব:

MODEL = 'fraud_detection'
VERSION = 'v1'
model_path = MODEL_BUCKET + '/explanations'

আমরা নিম্নলিখিত gcloud কমান্ড দিয়ে মডেল তৈরি করতে পারি:

!gcloud ai-platform models create $MODEL --region=us-central1

এখন আমরা gcloud-এর সাথে এই মডেলের আমাদের প্রথম সংস্করণ স্থাপন করতে প্রস্তুত। সংস্করণটি স্থাপন করতে ~5-10 মিনিট সময় লাগবে:

!gcloud beta ai-platform versions create $VERSION \
--model $MODEL \
--origin $model_path \
--runtime-version 2.1 \
--framework TENSORFLOW \
--python-version 3.7 \
--machine-type n1-standard-4 \
--explanation-method 'sampled-shapley' \
--num-paths 10 \
--region=us-central1

origin পতাকায়, আমরা আমাদের সংরক্ষিত মডেল এবং মেটাডেটা ফাইলের ক্লাউড স্টোরেজ অবস্থানে পাস করি। ব্যাখ্যাযোগ্য AI-তে বর্তমানে ট্যাবুলার মডেলের জন্য দুটি ভিন্ন ব্যাখ্যা পদ্ধতি উপলব্ধ রয়েছে। এখানে আমরা নমুনা শ্যাপলি ব্যবহার করছি। num-paths প্যারামিটার প্রতিটি ইনপুট বৈশিষ্ট্যের জন্য নমুনাকৃত পাথের সংখ্যা নির্দেশ করে। সাধারনত, মডেল যত জটিল, যুক্তিসঙ্গত কনভারজেন্সে পৌঁছানোর জন্য তত বেশি আনুমানিক পদক্ষেপের প্রয়োজন হয়।

আপনার মডেল সঠিকভাবে স্থাপন করা হয়েছে তা নিশ্চিত করতে, নিম্নলিখিত gcloud কমান্ডটি চালান:

!gcloud ai-platform versions describe $VERSION --model $MODEL --region=us-central1

রাজ্যকে READY থাকতে হবে।

ধাপ 3: নিয়োজিত মডেলের পূর্বাভাস এবং ব্যাখ্যা পাওয়া

ব্যাখ্যাযোগ্যতার উদ্দেশ্যে, আমাদের মডেল প্রতারণার ভবিষ্যদ্বাণী করে এমন ক্ষেত্রে ব্যাখ্যা করার বিষয়ে আমরা সবচেয়ে বেশি যত্নশীল। আমরা আমাদের মডেলে 5টি পরীক্ষার উদাহরণ পাঠাব যেগুলি সমস্ত প্রতারণামূলক লেনদেন৷

আমরা পূর্বাভাস পেতে Google Cloud CLI ব্যবহার করব। আমাদের পরীক্ষার সেট থেকে সমস্ত জালিয়াতির উদাহরণের সূচক পেতে নিম্নলিখিত কোডটি চালান:

fraud_indices = []

for i,val in enumerate(test_labels):
    if val == 1:
        fraud_indices.append(i)

পরবর্তীতে আমরা 5টি উদাহরণ সংরক্ষণ করব ফর্ম্যাটে আমাদের মডেলটি প্রত্যাশা করছে, এবং সেগুলিকে একটি ফাইলে লিখব:

num_test_examples = 5

instances = []
for i in range(num_test_examples):
    ex = test_set[fraud_indices[i]]
    instances.append({input_name: ex.tolist()})

with open('prediction.json', 'a') as outputfile:
    json.dump({"instances": instances}, outputfile)

আমরা gcloud ব্যবহার করে আমাদের মডেলে এই পাঁচটি উদাহরণ পাঠাতে পারি:

!gcloud beta ai-platform explain \
--model=$MODEL \
--version=$VERSION \
--region='us-central1' \
--json-request=prediction.json

প্রতিক্রিয়া JSON-এ, আপনি এই উদাহরণ জুড়ে প্রতিটি বৈশিষ্ট্যের জন্য অ্যাট্রিবিউশন মান দেখতে পাবেন। প্রতিটি উদাহরণের example_score কী মডেলের ভবিষ্যদ্বাণী অন্তর্ভুক্ত করে - এই ক্ষেত্রে একটি নির্দিষ্ট লেনদেন জালিয়াতি হওয়ার সম্ভাবনা শতাংশ।

8. পরিষ্কার করা

আপনি যদি এই নোটবুকটি ব্যবহার চালিয়ে যেতে চান তবে এটি ব্যবহার না করার সময় এটি বন্ধ করার পরামর্শ দেওয়া হয়। আপনার ক্লাউড কনসোলের নোটবুক UI থেকে, নোটবুকটি নির্বাচন করুন এবং তারপরে থামুন নির্বাচন করুন:

879147427150b6c7.png

আপনি যদি এই ল্যাবে আপনার তৈরি করা সমস্ত সংস্থান মুছে ফেলতে চান তবে নোটবুকের উদাহরণটি বন্ধ করার পরিবর্তে কেবল মুছুন৷

আপনার ক্লাউড কনসোলে নেভিগেশন মেনু ব্যবহার করে, সঞ্চয়স্থানে ব্রাউজ করুন এবং আপনার মডেল সম্পদগুলি সঞ্চয় করতে আপনার তৈরি করা উভয় বালতি মুছে দিন।