পাঠ ৩৪ · ৫৭-এর মধ্যে · মডিউল ৭
Home / Courses / Human-Computer Interaction / ইউজেবিলিটি পরিমাপ

ইউজেবিলিটি পরিমাপ — মেট্রিক্স, SUS ও টাস্ক সাকসেস রেট

Measuring usability — metrics, SUS & task success rate
৯ মিনিট পড়া মধ্যম-কঠিন · Intermediate Python কোডসহ সম্পূর্ণ বাংলায়

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

  • ইউজেবিলিটি মাপার প্রধান মেট্রিক্সের ধরন এবং কোনটা কী তথ্য দেয়
  • System Usability Scale (SUS)-এর সঠিক গণনা পদ্ধতি ও ব্যাখ্যা
  • একটি সিমুলেটেড ডেটাসেট থেকে টাস্ক সাকসেস রেট ও টাইম-অন-টাস্ক পরিসংখ্যান গণনা করতে পারা
  • বিভিন্ন মেট্রিক্স একসাথে মিলিয়ে ডিজাইনের সামগ্রিক অবস্থা সম্পর্কে সিদ্ধান্তে পৌঁছানো

১ · ইউজেবিলিটি মেট্রিক্সের ধরন

L15-এ শেখা ইউজেবিলিটির পাঁচটি কোয়ালিটি কম্পোনেন্ট (লার্নেবিলিটি, এফিসিয়েন্সি, মেমোরেবিলিটি, এরর, সন্তুষ্টি) মূলত তিনটি মাপযোগ্য বিভাগে ভাগ করা যায় —

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

তিনটি মেট্রিক প্রায়ই একে অপরের সাথে মেলে না — একটি টাস্ক দ্রুত (উচ্চ এফিসিয়েন্সি) সম্পন্ন হতে পারে কিন্তু ব্যবহারকারী চাপে অনুভব করে কম সন্তুষ্ট থাকতে পারেন। এই কারণে তিনটিই একসাথে মাপা জরুরি — শুধু একটি সংখ্যা সম্পূর্ণ ছবি দেয় না।

২ · System Usability Scale (SUS) — সঠিক সূত্র

SUS একটি ১০-আইটেমের Likert-স্কেল (১ = দৃঢ়ভাবে দ্বিমত, ৫ = দৃঢ়ভাবে একমত) প্রশ্নাবলী, যেখানে বিজোড়-সংখ্যক আইটেম (১, ৩, ৫, ৭, ৯) ইতিবাচকভাবে লেখা এবং জোড়-সংখ্যক আইটেম (২, ৪, ৬, ৮, ১০) নেতিবাচকভাবে লেখা হয় — এই পরিবর্তনটি ব্যবহারকারীকে চিন্তা না করে সবগুলোতে একই উত্তর দেওয়া থেকে বিরত রাখে। প্রতিটি আইটেমের "কন্ট্রিবিউশন" বের করার সূত্র —

$$\text{বিজোড় আইটেম: } x_i = \text{score} - 1 \qquad \text{জোড় আইটেম: } x_i = 5 - \text{score}$$

প্রতিটি কন্ট্রিবিউশন ০ থেকে ৪-এর মধ্যে থাকে, তাই দশটি আইটেমের যোগফল সর্বোচ্চ ৪০ — একে ২.৫ দিয়ে গুণ করলে চূড়ান্ত স্কোর ০ থেকে ১০০-এর মধ্যে আসে —

$$SUS = 2.5 \times \sum_{i=1}^{10} x_i$$

শিল্পে সাধারণভাবে উদ্ধৃত একটি বেঞ্চমার্ক হলো — গড় SUS স্কোর প্রায় ৬৮-এর কাছাকাছি (SUS নিয়ে প্রকাশিত গবেষণায় বহু প্রোডাক্টের গড় থেকে), তাই ৬৮-এর উপরে থাকা স্কোরকে "গড়ের চেয়ে ভালো" এবং নিচে থাকা স্কোরকে "গড়ের চেয়ে খারাপ" হিসেবে একটি মোটামুটি রেফারেন্স পয়েন্ট হিসেবে ব্যবহার করা যায় — এটি একটি প্রচলিত ইলাস্ট্রেটিভ রেফারেন্স, কোনো কঠোর পাস/ফেইল থ্রেশহোল্ড নয়।

Python
import statistics

# SUS: ৫ জন পার্টিসিপ্যান্ট, প্রতিজন ১০টি আইটেমে ১-৫ Likert স্কোর দিয়েছেন
responses = [
    [4, 2, 4, 2, 3, 2, 4, 2, 4, 3],  # P1
    [5, 1, 4, 1, 4, 2, 5, 1, 4, 2],  # P2
    [3, 3, 3, 3, 3, 3, 3, 3, 3, 3],  # P3
    [4, 2, 5, 1, 4, 1, 4, 2, 5, 2],  # P4
    [2, 3, 3, 4, 2, 3, 3, 4, 2, 4],  # P5 -- একটি দুর্বল সেশন
]

def sus_score(items):
    total = 0
    for idx, score in enumerate(items):
        item_num = idx + 1              # ১-ইনডেক্সড আইটেম নম্বর
        if item_num % 2 == 1:           # বিজোড় আইটেম (ইতিবাচক)
            total += (score - 1)
        else:                            # জোড় আইটেম (নেতিবাচক)
            total += (5 - score)
    return total * 2.5

scores = [sus_score(r) for r in responses]
for i, s in enumerate(scores, 1):
    print(f"P{i}: SUS = {s:.1f}")

print()
print(f"গড় (mean) SUS   = {statistics.mean(scores):.2f}")
print(f"মিডিয়ান SUS     = {statistics.median(scores):.2f}")
print(f"স্ট্যান্ডার্ড ডেভিয়েশন = {statistics.stdev(scores):.2f}")

print()
print("--- টাস্ক সাকসেস / টাইম-অন-টাস্ক ডেটাসেট ---")
# একই টাস্কের উপর ৮টি সিমুলেটেড ইউজেবিলিটি সেশন
sessions = [
    {"participant": "P1", "success": True,  "time_s": 42},
    {"participant": "P2", "success": True,  "time_s": 55},
    {"participant": "P3", "success": False, "time_s": 120},
    {"participant": "P4", "success": True,  "time_s": 38},
    {"participant": "P5", "success": True,  "time_s": 67},
    {"participant": "P6", "success": False, "time_s": 95},
    {"participant": "P7", "success": True,  "time_s": 49},
    {"participant": "P8", "success": True,  "time_s": 60},
]

n = len(sessions)
successes = sum(1 for s in sessions if s["success"])
success_rate = successes / n * 100
print(f"টাস্ক সাকসেস রেট = {successes}/{n} = {success_rate:.1f}%")

all_times = [s["time_s"] for s in sessions]
success_times = [s["time_s"] for s in sessions if s["success"]]

print(f"গড় সময় (সবাই)        = {statistics.mean(all_times):.1f} সেকেন্ড")
print(f"মিডিয়ান সময় (সবাই)    = {statistics.median(all_times):.1f} সেকেন্ড")
print(f"গড় সময় (শুধু সফল)     = {statistics.mean(success_times):.1f} সেকেন্ড")

    
লক্ষ্য করুন — পাঁচজনের SUS স্কোর যথেষ্ট ছড়িয়ে আছে (৩৫.০ থেকে ৮৭.৫ পর্যন্ত), যার গড় ৬৫.৫ — এই সাধারণভাবে উদ্ধৃত ~৬৮ বেঞ্চমার্কের সামান্য নিচে। P5 (৩৫.০, একটি দুর্বল সেশন) সবচেয়ে বেশি টেনে নামিয়েছে — এটাই দেখায় কেন শুধু গড় নয়, স্ট্যান্ডার্ড ডেভিয়েশনও (২২.৭) দেখা জরুরি, যা বলে দেয় অভিজ্ঞতাটি সবার জন্য সমান নয়। টাস্ক সাকসেস রেট (৬টি সফল/৮টি মোট = ৭৫.০%) ও ব্যর্থ সেশনগুলোর দীর্ঘ সময় (P3: ১২০ সেকেন্ড, P6: ৯৫ সেকেন্ড — যা সফল সেশনগুলোর গড় সময় ৫১.৮ সেকেন্ডের চেয়ে অনেক বেশি) — দুটো ডেটাসেটই একই গল্প বলছে: ডিজাইনটি কিছু ব্যবহারকারীর জন্য ভালোভাবে কাজ করছে, কিন্তু একটি উল্লেখযোগ্য অংশের জন্য এখনও যথেষ্ট নয়।

৩ · মেট্রিক্স একসাথে মিলিয়ে পড়া

কোনো একটি সংখ্যা একা সিদ্ধান্ত নেওয়ার জন্য যথেষ্ট নয়। উপরের উদাহরণে টাস্ক সাকসেস রেট (৭৫%) এবং গড় SUS (৬৫.৫) দুটোই একই দিকে ইঙ্গিত করছে — মাঝারি মানের ইউজেবিলিটি, নির্দিষ্ট কিছু জায়গায় স্পষ্ট সমস্যা। যদি দুটো মেট্রিক পরস্পরবিরোধী হতো (যেমন উচ্চ সাকসেস রেট কিন্তু কম SUS), তাহলে সেটি নিজেই একটি গুরুত্বপূর্ণ সংকেত হতো — হয়তো ব্যবহারকারীরা টাস্ক শেষ করতে পারছেন, কিন্তু প্রক্রিয়াটি চাপযুক্ত বা বিরক্তিকর মনে হচ্ছে (একটি ক্লাসিক এফেক্টিভনেস-বনাম-সন্তুষ্টি ফাঁক)।

এই সংখ্যাগুলো L32-এর A/B টেস্ট বা M13-এর ক্যাপস্টোনে ঠিক এভাবেই ব্যবহৃত হবে — একটি ডিজাইনের একাধিক মেট্রিক (SUS, সাকসেস রেট, সময়, এবং প্রয়োজনে A/B পরিসংখ্যান) একসাথে মিলিয়ে একটি সুসংগত সিদ্ধান্তে পৌঁছানো, কোনো একটি সংখ্যার উপর অন্ধভাবে নির্ভর না করে।

মূল কথা · Key takeaway

SUS একটি সাবজেক্টিভ, স্ট্যান্ডার্ডাইজড সন্তুষ্টি স্কোর — সঠিক সূত্র (বিজোড়: স্কোর-১, জোড়: ৫-স্কোর, যোগফল×২.৫) ছাড়া ভুল ফলাফল আসবে। এফেক্টিভনেস (সাকসেস রেট), এফিসিয়েন্সি (সময়), ও সন্তুষ্টি (SUS) — তিনটি মেট্রিক একসাথে গণনা করে দেখাই একটি ডিজাইনের প্রকৃত ইউজেবিলিটি চিত্র বোঝার একমাত্র নির্ভরযোগ্য পথ।

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

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

প্র ০১ SUS-এর আইটেমগুলো কেন ইচ্ছাকৃতভাবে ইতিবাচক ও নেতিবাচক ভাষায় পাল্টে পাল্টে লেখা হয় (বিজোড় ইতিবাচক, জোড় নেতিবাচক)? যদি সবগুলো আইটেম ইতিবাচক ভাষায় লেখা হতো, কী সমস্যা হতে পারতো?

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

প্র ০২ উপরের কোড সেলে P3-এর সব উত্তর ৩ (মাঝামাঝি) এবং তার SUS স্কোর ৫০.০। কেন "সব প্রশ্নে মাঝামাঝি উত্তর" দিলে ঠিক ৫০-এর কাছাকাছি একটি স্কোর আসা যৌক্তিক?

প্রতিটি আইটেমে স্কোর ৩ হলে, বিজোড় আইটেমে কন্ট্রিবিউশন হয় ৩-১=২, এবং জোড় আইটেমে হয় ৫-৩=২ — অর্থাৎ প্রতিটি আইটেম থেকেই ঠিক ২ (সর্বোচ্চ সম্ভাব্য ৪-এর ঠিক অর্ধেক) আসে। দশটি আইটেম থেকে মোট ২০, ২.৫ দিয়ে গুণ করলে ৫০.০ — এটাই স্কেলের গাণিতিক মধ্যবিন্দু, তাই "সম্পূর্ণ নিরপেক্ষ" মতামত সবসময় ঠিক ৫০-এর কাছাকাছি স্কোর দেবে, এটি সূত্রের একটি সরাসরি ফলাফল, কাকতালীয় নয়।

প্র ০৩ যদি গড় SUS স্কোর বেশি (যেমন ৮৫) কিন্তু টাস্ক সাকসেস রেট কম (যেমন ৪০%) হতো, এই দুটি সংখ্যা একসাথে কী গল্প বলতে পারতো?

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

অনুশীলন

  1. অনুমান করুন: কোড সেলে P3-এর উত্তর (সব ৩) পরিবর্তন করে সব আইটেমে ৫ দেওয়া হলে (দৃঢ়ভাবে একমত, সবগুলোতে) SUS স্কোর কত হবে বলে আপনার ধারণা — এটা কি সর্বোচ্চ ১০০ হবে, নাকি অন্য কিছু?

    সবগুলোতে ৫ দিলে সর্বোচ্চ স্কোর হবে না। বিজোড় আইটেমে (ইতিবাচক) ৫ দিলে কন্ট্রিবিউশন সর্বোচ্চ ৫-১=৪ (ভালো), কিন্তু জোড় আইটেমে (নেতিবাচক, যেমন "আমি মনে করি সিস্টেমটি অপ্রয়োজনীয়ভাবে জটিল") ৫ দেওয়া মানে "দৃঢ়ভাবে একমত যে এটি জটিল" — যা কন্ট্রিবিউশন ৫-৫=০ দেয় (সবচেয়ে খারাপ)। তাই "সবগুলোতে ৫" আসলে একটি অসংগত, খুব কম স্কোর দেবে — এটাই SUS-এর পাল্টে পাল্টে ইতিবাচক/নেতিবাচক লেখার আসল সুবিধা, অসাবধান উত্তরদাতাকে ধরে ফেলে।

  2. পরীক্ষা করুন: উপরের কোড সেলে P3-এর তালিকা [3, 3, 3, 3, 3, 3, 3, 3, 3, 3]-কে [5, 5, 5, 5, 5, 5, 5, 5, 5, 5]-এ পরিবর্তন করে Run চেপে আপনার অনুমান যাচাই করুন।

    প্রতিটি বিজোড় আইটেম (৫টি) থেকে কন্ট্রিবিউশন ৪, প্রতিটি জোড় আইটেম (৫টি) থেকে কন্ট্রিবিউশন ০ — মোট = (৫×৪) + (৫×০) = ২০, ২.৫ দিয়ে গুণ করলে SUS = ৫০.০ — ঠিক P3-এর আগের "সব ৩" উত্তরের মতোই ৫০.০ এসেছে, যদিও একেবারে ভিন্ন উত্তরের প্যাটার্ন থেকে। এটি নিশ্চিত করে যে সূত্রটি সত্যিই ইতিবাচক ও নেতিবাচক আইটেমকে ভারসাম্যপূর্ণভাবে বিবেচনা করছে, শুধু "সব বড় সংখ্যা = ভালো স্কোর" নয়।

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

আগের পাঠ
কগনিটিভ ওয়াকথ্রু