পাঠ ৩৫ · ৫৭-এর মধ্যে · মডিউল ৮
Home / Courses / Ethics in Computing & AI Safety / এক্সপ্লেইনেবিলিটি

ব্ল্যাক-বক্স মডেল ও এক্সপ্লেইনেবিলিটি

Black-box models & explainability
৯ মিনিট পড়া শুরু · Beginner Python কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • জটিল মডেল কেন ব্ল্যাক-বক্স হয়ে ওঠে — L33-এর সরল থ্রেশহোল্ড মডেলের সাথে তুলনা
  • এক্সপ্লেইনেবিলিটি কেন এথিক্যালি গুরুত্বপূর্ণ — কনটেস্টেবিলিটি, ডিবাগিং, আস্থা
  • Python দিয়ে একটি সত্যিকারের "পার্টার্বেশনের মাধ্যমে ফিচার ইমপর্ট্যান্স" হিসাব
  • এক্সপ্লেইনেবিলিটি ও মডেল-জটিলতার মধ্যে সাধারণ (কিন্তু চূড়ান্ত নয়) একটি ট্রেড-অফ

১ · সরল মডেল বনাম জটিল মডেল

L33-এ যে থ্রেশহোল্ড মডেলটি তৈরি করা হয়েছিল তা সম্পূর্ণ স্বচ্ছ ছিল — এর সিদ্ধান্তের নিয়ম ছিল একটি একক সংখ্যা ("hours ≥ ৫ হলে পাস")। কিন্তু বাস্তব-জগতের অনেক মডেল — যেমন গভীর নিউরাল নেটওয়ার্ক — হাজার হাজার বা লক্ষ লক্ষ প্যারামিটার একসাথে ব্যবহার করে, যেগুলো একে অপরের সাথে জটিলভাবে মিথস্ক্রিয়া করে। কোনো একক প্যারামিটার পড়ে "কেন এই সিদ্ধান্ত?" প্রশ্নের সহজ উত্তর পাওয়া যায় না — সিদ্ধান্তটি হাজারো ছোট প্রভাবের সমষ্টি থেকে উদ্ভূত হয়। এটিই মডেলকে "ব্ল্যাক-বক্স" করে তোলে: ইনপুট ও আউটপুট দেখা যায়, কিন্তু ভেতরের যুক্তি মানুষের পক্ষে সরাসরি পড়া কঠিন।

ইনপুট স্বচ্ছ নিয়ম (hours ≥ 5) আউটপুট সরাসরি পড়া যায় -- "কেন" প্রশ্নের উত্তর স্পষ্ট ইনপুট লক্ষ লক্ষ প্যারামিটার জটিল মিথস্ক্রিয়া আউটপুট "কেন" প্রশ্নের সরাসরি উত্তর নেই -- ব্ল্যাক-বক্স
একটি স্বচ্ছ থ্রেশহোল্ড নিয়ম (উপরে, L33) সরাসরি পড়া যায়; একটি জটিল মডেলের ভেতরের হাজারো প্যারামিটারের মিথস্ক্রিয়া (নিচে) সরাসরি পড়া যায় না — যদিও দুটোই একই ধরনের "উদাহরণ থেকে শেখা" প্রক্রিয়ার ফল।

২ · এক্সপ্লেইনেবিলিটি কেন এথিক্যালি গুরুত্বপূর্ণ

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

৩ · একটি সত্যিকারের "পার্টার্বেশনের মাধ্যমে ফিচার ইমপর্ট্যান্স" হিসাব

সম্পূর্ণ ব্ল্যাক-বক্স মডেলের ভেতরটা সরাসরি পড়া না গেলেও, একটি ব্যবহারিক কৌশল আছে — মডেলটিকে বাইরে থেকে "খোঁচা" দিয়ে দেখা। ধারণাটি সহজ: একটি ফিচার সামান্য পরিবর্তন করো (বাকি সব ফিচার অপরিবর্তিত রেখে), এবং দেখো আউটপুট কতটা বদলায়। আউটপুট যত বেশি বদলায়, সেই ফিচার তত বেশি প্রভাবশালী। নিচের কোড সেলে একটি সিন্থেটিক স্কোরিং ফাংশনে (৪টি ইনপুট ফিচার, একটি অ-রৈখিক ইন্টারঅ্যাকশন টার্মসহ, যাতে শুধু সহগ পড়ে প্রভাব বোঝা কঠিন হয়) এই কৌশলটি প্রয়োগ করা হয়েছে।

Python
# একটি সিন্থেটিক, ইলাস্ট্রেটিভ লোন-স্কোরিং ফাংশন -- বাস্তব কোনো ব্যাংক বা মডেল নয়
# ফিচারগুলো 0.0-1.0 স্কেলে নরমালাইজড ধরা হয়েছে

def score(features):
    income = features["income"]
    credit_score = features["credit_score"]
    debt_ratio = features["debt_ratio"]
    employment_years = features["employment_years"]

    base = (0.4 * income) + (0.3 * credit_score) - (0.5 * debt_ratio) + (0.1 * employment_years)
    # একটি অ-রৈখিক ইন্টারঅ্যাকশন টার্ম -- এই কারণেই শুধু সহগ পড়ে প্রভাব আন্দাজ করা কঠিন
    interaction = 0.05 * income * employment_years
    return base + interaction

# একটি সিন্থেটিক আবেদনকারীর বেসলাইন প্রোফাইল
baseline = {"income": 0.6, "credit_score": 0.7, "debt_ratio": 0.3, "employment_years": 0.5}
base_score = score(baseline)

delta = 0.1  # প্রতিটি ফিচারে যতটুকু "খোঁচা" (perturbation) দেওয়া হবে
importances = {}

for feature in baseline:
    perturbed = dict(baseline)
    perturbed[feature] = perturbed[feature] + delta
    new_score = score(perturbed)
    importances[feature] = abs(new_score - base_score)

ranked = sorted(importances.items(), key=lambda item: item[1], reverse=True)

print(f"বেসলাইন স্কোর: {base_score:.4f}\n")
print("ফিচার                 |Δ স্কোর| (প্রতি +0.1 পরিবর্তনে)")
for feature, importance in ranked:
    print(f"{feature:<18s}    {importance:.4f}")

print(f"\nসবচেয়ে প্রভাবশালী ফিচার: {ranked[0][0]}")

    
লক্ষ্য করুন কোডটি ফাংশনের সংজ্ঞা (সোর্স কোড) সরাসরি বিশ্লেষণ করছে না — এটি শুধু ফাংশনটিকে ইনপুট দিচ্ছে ও আউটপুট পর্যবেক্ষণ করছে, ঠিক যেভাবে একজন অডিটর একটি সত্যিকারের ব্ল্যাক-বক্স মডেলের সাথে কাজ করবেন। ফলাফল দেখাবে debt_ratio সবচেয়ে বেশি প্রভাবশালী (এর ঋণাত্মক সহগ -০.৫ সবচেয়ে বড়), তারপর income (এর সরাসরি সহগ এবং ইন্টারঅ্যাকশন টার্ম উভয়েই অবদান রাখে), তারপর credit_score, এবং সবচেয়ে কম প্রভাবশালী employment_years — যদিও employment_years-এর নিজস্ব সহগ (০.১) থেকে সরাসরি এই ক্রম অনুমান করা কঠিন, কারণ ইন্টারঅ্যাকশন টার্মটি চূড়ান্ত প্রভাবকে বদলে দেয়।
মূল কথা · Key takeaway

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

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ পার্টার্বেশন-ভিত্তিক ফিচার ইমপর্ট্যান্স কি মডেলের সিদ্ধান্তের "সম্পূর্ণ ব্যাখ্যা" দেয়?

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

প্র ০২ একটি প্রতিষ্ঠান কি সবসময় সবচেয়ে বেশি নির্ভুল মডেলটি বেছে নেওয়া উচিত, যদিও সেটি সবচেয়ে কম ব্যাখ্যাযোগ্য হয়?

এটি একটি প্রকৃত ট্রেড-অফ, এবং প্রেক্ষাপটের উপর নির্ভর করে। একটি ভিডিও-সুপারিশ ব্যবস্থায় সামান্য কম এক্সপ্লেইনেবিলিটির বিনিময়ে বেশি নির্ভুলতা গ্রহণযোগ্য হতে পারে — কিন্তু একটি ফৌজদারি বিচার, চিকিৎসা নির্ণয়, বা ঋণ-অনুমোদনের মতো উচ্চ-ঝুঁকির সিদ্ধান্তে, কনটেস্টেবিলিটি ও ডিবাগযোগ্যতার প্রয়োজন এতটাই গুরুত্বপূর্ণ হতে পারে যে সামান্য কম নির্ভুল কিন্তু বেশি ব্যাখ্যাযোগ্য একটি মডেল বেছে নেওয়াই এথিক্যালি যুক্তিসঙ্গত।

প্র ০৩ উপরের কোড সেলে যদি delta-এর মান ০.১ থেকে ০.০১-এ কমানো হয়, তাহলে কি ফিচারগুলোর প্রভাবের ক্রম বদলে যাবে?

এই নির্দিষ্ট স্কোরিং ফাংশনের জন্য না — কারণ ফাংশনটি সহজ (রৈখিক পদ + একটি মৃদু ইন্টারঅ্যাকশন টার্ম), তাই delta ছোট করলে প্রতিটি ফিচারের |Δ স্কোর| সমানুপাতিকভাবে ছোট হবে, কিন্তু আপেক্ষিক ক্রম একই থাকবে। তবে অত্যন্ত জটিল, অ-রৈখিক মডেলে ভিন্ন delta-তে ভিন্ন ক্রম আসতে পারে — এটিই পার্টার্বেশন-ভিত্তিক পদ্ধতির একটি সীমাবদ্ধতা, যা ব্যবহারের সময় মাথায় রাখতে হয়।

অনুশীলন

  1. চিন্তা করুন: এমন একটি বাস্তব-জগতের পরিস্থিতির কথা ভাবুন যেখানে একটি ব্ল্যাক-বক্স সিদ্ধান্তের বিরুদ্ধে কনটেস্ট করতে না পারা একজন সাধারণ মানুষের জন্য গুরুতর ক্ষতির কারণ হতে পারে।

    উদাহরণ — একটি স্বয়ংক্রিয় চাকরি-স্ক্রিনিং সিস্টেম কাউকে ইন্টারভিউ পর্যায়ে না পৌঁছানোর সিদ্ধান্ত দিলে, অথচ প্রার্থী কখনো জানতে পারেন না কেন — তিনি ভবিষ্যতে নিজের আবেদন উন্নত করার সুযোগও পান না, আর সিদ্ধান্তটি ভুল বা পক্ষপাতমূলক হলেও তা চ্যালেঞ্জ করার কোনো পথ থাকে না (M4-M6-এ আরও বিস্তারিত)।

  2. পরীক্ষা করুন: উপরের কোড সেলে baseline-এ employment_years-এর মান ০.৫ থেকে ২.০-তে বাড়িয়ে Run চাপুন — income ফিচারের প্রভাব (|Δ স্কোর|) কীভাবে বদলায় লক্ষ করুন।

    যেহেতু ইন্টারঅ্যাকশন টার্মটি হলো 0.05 * income * employment_years, employment_years বাড়ালে income-এর পরিবর্তনের প্রভাব (এই ইন্টারঅ্যাকশন টার্মের মাধ্যমে) আরও বড় হবে — income-এর |Δ স্কোর| আগের চেয়ে বেড়ে যাবে। এটি দেখায় একটি ফিচারের "প্রভাব" স্থির নয় — এটি অন্য ফিচারের মানের উপর নির্ভর করতে পারে, যা ব্ল্যাক-বক্স মডেল বোঝাকে আরও জটিল করে তোলে।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

আগের পাঠ
ট্রেনিং ডেটা, জেনারেলাইজেশন ও ফেইলিওর মোড