পাঠ ১২ · ৫৭-এর মধ্যে · মডিউল ৩
Home / AI Courses / Human-Centered AI / ক্যালিব্রেটেড ডিজাইন

ক্যালিব্রেটেড ট্রাস্ট তৈরির ডিজাইন টেকনিক

Designing for calibrated trust
১০ মিনিট পড়া মধ্যম · Intermediate Python কোডসহ সম্পূর্ণ বাংলায়

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

  • একটি অ্যাকুরেসি-ট্রেন্ড ইন্ডিকেটর কীভাবে ট্রাস্ট-ক্যালিব্রেশনকে সাহায্য করতে পারে
  • একটি before/after তুলনা কীভাবে সত্যিকারের গণনা দিয়ে ডিজাইন হস্তক্ষেপের কার্যকারিতা যাচাই করে
  • কেন একটি ভালো-উদ্দেশ্যের হস্তক্ষেপও ভুল প্যারামিটারে উল্টো ক্ষতি করতে পারে
  • ক্যালিব্রেটেড ট্রাস্ট ডিজাইনের সাধারণ কৌশলগুলোর একটি সংক্ষিপ্ত মানচিত্র

১ · ট্রাস্ট ক্যালিব্রেশনের জন্য কী কী ডিজাইন করা যায়

L09–L11 তিনটি সমস্যা দেখিয়েছে: পারসিভড ও প্রকৃত রিলায়াবিলিটির গ্যাপ (L09), সরল থ্রেশহোল্ড নীতির সীমাবদ্ধতা (L10), এবং মানুষের যাচাই-ক্ষমতা নিজেই সময়ের সাথে দুর্বল হওয়া (L11)। এই সমস্যাগুলোর একটি সাধারণ মূল কারণ আছে — ব্যবহারকারীর কাছে সিস্টেমের বর্তমান রিলায়াবিলিটি সম্পর্কে পর্যাপ্ত, সময়মতো তথ্য নেই। ডিজাইন দিয়ে এই তথ্য-ঘাটতি সরাসরি মোকাবিলা করা যায়।

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

২ · একটি সত্যিকারের before/after পরীক্ষা

নিচের সিমুলেশনে সেই একই পরিচিত পরিস্থিতি — পর্যায় ১-এ ৩০টি সিদ্ধান্ত (~৯০% প্রকৃত অ্যাকুরেসি), পর্যায় ২-এ ৩০টি সিদ্ধান্ত (~৫৫% প্রকৃত অ্যাকুরেসি)। BEFORE নীতি হলো একটি সরল স্ট্রিক-হিউরিস্টিক (গত ৪টি সঠিক হলে পরেরটা বিনা-যাচাইয়ে গ্রহণ করা) — কোনো ইন্ডিকেটর নেই। AFTER নীতিতে ব্যবহারকারী একটি অ্যাকুরেসি-ট্রেন্ড ইন্ডিকেটর দেখেন (গত ৯টি ফলাফলের গড়), এবং শুধু ইন্ডিকেটর ≥ ০.৮০ থাকলেই বিনা-যাচাইয়ে গ্রহণ করেন।

Python
import random
random.seed(42)

def generate_outcomes(n, accuracy):
    return [random.random() < accuracy for _ in range(n)]

phase1 = generate_outcomes(30, 0.90)
phase2 = generate_outcomes(30, 0.55)
outcomes = phase1 + phase2

WINDOW = 4         # "before" হিউরিস্টিকের প্রয়োজনীয় স্ট্রিক-দৈর্ঘ্য
IND_WINDOW = 9     # ইন্ডিকেটর কতগুলো সাম্প্রতিক ফলাফলের গড় দেখায়
THRESH = 0.80      # ইন্টারভেনশনসহ অটো-অ্যাকসেপ্ট করতে ইন্ডিকেটরের সর্বনিম্ন মান

def rolling_accuracy(outcomes, i, window):
    start = max(0, i - window + 1)
    recent = outcomes[start:i+1]
    return sum(recent) / len(recent)

def decide_before(outcomes):
    decisions = []
    for i in range(len(outcomes)):
        if i < WINDOW:
            decisions.append(False)
        else:
            decisions.append(all(outcomes[i-WINDOW:i]))
    return decisions

def decide_after(outcomes):
    decisions = []
    for i in range(len(outcomes)):
        if i < IND_WINDOW:
            decisions.append(False)
            continue
        indicator = rolling_accuracy(outcomes, i-1, IND_WINDOW)
        decisions.append(indicator >= THRESH)
    return decisions

def error_rate_when_trusting(phase_outcomes, decisions):
    trusted = [phase_outcomes[i] for i in range(len(phase_outcomes)) if decisions[i]]
    if not trusted:
        return 0.0, 0, 0
    wrong = sum(1 for ok in trusted if not ok)
    return wrong / len(trusted) * 100, wrong, len(trusted)

before = decide_before(outcomes)
after = decide_after(outcomes)

print("BEFORE (শুধু স্ট্রিক-হিউরিস্টিক, কোনো ইন্ডিকেটর নেই):")
e1, w1, t1 = error_rate_when_trusting(phase1, before[:30])
e2, w2, t2 = error_rate_when_trusting(phase2, before[30:])
print(f"  পর্যায় ১ (~৯০% প্রকৃত অ্যাকুরেসি): {t1}/30 বিশ্বাস করা হলো, ভুলের হার {e1:.1f}% ({w1}/{t1})")
print(f"  পর্যায় ২ (~৫৫% প্রকৃত অ্যাকুরেসি): {t2}/30 বিশ্বাস করা হলো, ভুলের হার {e2:.1f}% ({w2}/{t2})")
print()
print("AFTER (অ্যাকুরেসি-ট্রেন্ড ইন্ডিকেটর দেখানো হলো, ইন্ডিকেটর >= 0.80 হলেই অটো-অ্যাকসেপ্ট):")
e1b, w1b, t1b = error_rate_when_trusting(phase1, after[:30])
e2b, w2b, t2b = error_rate_when_trusting(phase2, after[30:])
print(f"  পর্যায় ১ (~৯০% প্রকৃত অ্যাকুরেসি): {t1b}/30 বিশ্বাস করা হলো, ভুলের হার {e1b:.1f}% ({w1b}/{t1b})")
print(f"  পর্যায় ২ (~৫৫% প্রকৃত অ্যাকুরেসি): {t2b}/30 বিশ্বাস করা হলো, ভুলের হার {e2b:.1f}% ({w2b}/{t2b})")

    
পর্যায় ১-এ (নির্ভরযোগ্য পর্যায়) দুটো নীতি প্রায় একই রকম আচরণ করে — BEFORE-এ ২২/৩০ বিশ্বাস করা হয় (ভুলের হার ৪.৫%), AFTER-এ ২১/৩০ (ভুলের হার ৪.৮%) — সামান্য পার্থক্য, ব্যবহারিকভাবে উপেক্ষণীয়। কিন্তু পর্যায় ২-এ (অ্যাকুরেসি হঠাৎ কমে যাওয়া পর্যায়) পার্থক্যটি স্পষ্ট — BEFORE-এ ৬/৩০ বিশ্বাস করা হয় এবং তার ভুলের হার ৫০.০%, কিন্তু AFTER-এ মাত্র ৫/৩০ বিশ্বাস করা হয় এবং ভুলের হার নেমে আসে ৪০.০%-এ। অর্থাৎ ইন্ডিকেটরটি ঠিক সেখানেই সাহায্য করছে যেখানে সাহায্যের সবচেয়ে বেশি প্রয়োজন — বিপজ্জনক পর্যায়ে — অথচ নিরাপদ পর্যায়ে প্রায় কোনো খরচ যোগ করছে না।
মূল কথা · Key takeaway

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

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

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

প্র ০১ AFTER নীতিতে পর্যায় ২-এ BEFORE-এর চেয়ে কম বার (৫ বনাম ৬) বিশ্বাস করা হয়েছে, তবু ভুলের হারও কম। এই দুটো একসাথে কেন ঘটল?

কম বিশ্বাস করা মানেই কম ভুলের হার নিশ্চিত নয় (L09-এর অনুশীলনে window বাড়ানোর উদাহরণে দেখা গিয়েছিল কম স্যাম্পলে ভুলের হার আসলে বেড়েও যেতে পারে)। এখানে যেটা ঘটেছে তা হলো — ইন্ডিকেটরটি স্রেফ "কম সংখ্যক বিশ্বাস" তৈরি করেনি, এটি নির্বাচনীভাবে এমন মুহূর্তগুলো ফিল্টার করেছে যেখানে সাম্প্রতিক প্রকৃত পারফরম্যান্স তুলনামূলক ভালো ছিল — তাই অবশিষ্ট বিশ্বাস করা কেসগুলোর গুণমান বেড়েছে, শুধু সংখ্যা কমেনি।

প্র ০২ এই ইন্ডিকেটরটি কি L10-এর কনফিডেন্স-থ্রেশহোল্ড নীতির থেকে মৌলিকভাবে আলাদা?

কাঠামোগতভাবে দুটোই "একটি সংখ্যা একটি থ্রেশহোল্ডের সাথে তুলনা করা" — কিন্তু উৎস আলাদা। L10-এর কনফিডেন্স স্কোর সিস্টেম নিজেই প্রতিটি নির্দিষ্ট সিদ্ধান্তের জন্য তৈরি করে (per-decision)। এই পাঠের ইন্ডিকেটর সাম্প্রতিক ইতিহাসের একটি সমষ্টিগত পরিমাপ (aggregate, per-window) — এটি একটি নির্দিষ্ট সিদ্ধান্ত সম্পর্কে কিছু বলে না, শুধু সামগ্রিক প্রবণতা বলে। বাস্তব প্রোডাক্টে দুটো একসাথে ব্যবহার করাই সবচেয়ে শক্তিশালী — একটি নির্দিষ্ট-সিদ্ধান্ত সিগন্যাল, একটি প্রবণতা সিগন্যাল।

প্র ০৩ একটি ইন্ডিকেটর দেখালেই কি ব্যবহারকারী সেটি সঠিকভাবে ব্যবহার করবেন — নাকি এটি নিজেও ডিজাইন করতে হবে?

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

অনুশীলন

  1. চিন্তা করুন: উপরের কোডে THRESH-কে ০.৮০ থেকে কমিয়ে ০.৭০ করলে (অর্থাৎ কম কড়া শর্ত) পর্যায় ২-এর ভুলের হার কি BEFORE-এর ৫০.০%-এর চেয়ে ভালো নাকি খারাপ হবে বলে মনে হয়?

    থ্রেশহোল্ড কমালে ইন্ডিকেটর শর্ত পূরণ করা সহজ হয়ে যায়, তাই বেশি বার বিশ্বাস করা হবে — কিন্তু সেই বাড়তি বিশ্বাসগুলো ঠিক সেই মুহূর্তগুলোতে ঘটবে যেখানে সাম্প্রতিক অ্যাকুরেসি এখনও মাঝারি (০.৭০-এর কাছাকাছি, যথেষ্ট ভালো নয়) — তাই ভুলের হার সম্ভবত বাড়বে, হয়তো BEFORE-এর চেয়েও খারাপ হয়ে যেতে পারে।

  2. পরীক্ষা করুন: উপরের কোডে THRESH = 0.80-কে THRESH = 0.70-এ পরিবর্তন করে Run চেপে আপনার অনুমান যাচাই করুন।

    THRESH=0.70-এ পর্যায় ২-তে বিশ্বাস করার সংখ্যা বেড়ে ৯/৩০-এ পৌঁছায়, এবং তার ভুলের হার হয় ৫৫.৬% (৫/৯) — যা BEFORE-এর ৫০.০%-এর চেয়েও খারাপ! এটি সরাসরি প্রমাণ করে key takeaway-টি: একই হস্তক্ষেপ কাঠামো (অ্যাকুরেসি-ট্রেন্ড ইন্ডিকেটর) ভুল থ্রেশহোল্ডে ইন্ডিকেটর-না-থাকা অবস্থার চেয়েও খারাপ ফলাফল দিতে পারে — "একটি ইন্ডিকেটর দেখানো" নিজে যথেষ্ট নয়, এর প্যারামিটারও সঠিকভাবে ক্যালিব্রেট করতে হয়।

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

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