AI ফিচারের জন্য A/B টেস্টিং ও অনলাইন ইভালুয়েশন
এই পাঠে যা শিখবেন
- A/B টেস্টিং কী এবং কেন AI ফিচারে এটি ল্যাব টেস্টের পরিপূরক
- একটি ভালো অনলাইন এক্সপেরিমেন্টের শর্ত — র্যান্ডমাইজেশন, স্যাম্পল সাইজ, একক ভ্যারিয়েবল, গার্ডরেল মেট্রিক
- pooled proportion, standard error ও একটি z-score-এর মতো অনুপাত ম্যানুয়ালি গণনা করা
- পরিসংখ্যানগত তাৎপর্য (statistical significance) বনাম বাস্তব-জীবনের গুরুত্ব (practical significance)
১ · A/B টেস্টিং কী এবং কেন দরকার
A/B টেস্টিংA/B Testingব্যবহারকারীদের এলোমেলোভাবে দুই (বা বেশি) গ্রুপে ভাগ করে ভিন্ন ভার্সন দেখিয়ে একটি নির্দিষ্ট মেট্রিকে পার্থক্য পরিমাপ করার এক্সপেরিমেন্টাল পদ্ধতি। হলো একটি এক্সপেরিমেন্টাল পদ্ধতি — ব্যবহারকারীদের এলোমেলোভাবে দুই গ্রুপে ভাগ করা হয়: একদল পুরনো ভার্সন (কন্ট্রোল, A) দেখেন, আরেকদল নতুন AI ফিচার (ভ্যারিয়েন্ট, B)। তারপর একটি নির্দিষ্ট মেট্রিক (যেমন কনভার্শন রেট, টাস্ক-কমপ্লিশন রেট) দুই গ্রুপে তুলনা করা হয়। যেহেতু কে কোন গ্রুপে পড়বে তা এলোমেলো, তাই পার্থক্য দেখা গেলে সেটি (আদর্শভাবে) নতুন ফিচারের কারণেই হয়েছে বলে ধরে নেওয়া যায় — অন্য কোনো লুকানো ফ্যাক্টরের কারণে নয়।
L39-এর ল্যাব ইউজেবিলিটি টেস্ট ছোট স্যাম্পলে (১০-১৫ জন) গভীর গুণগত অন্তর্দৃষ্টি দেয় — কেন কিছু কাজ করে না তা বোঝা যায়। A/B টেস্টিং তার বিপরীত — হাজার হাজার ব্যবহারকারীর উপর চালিয়ে বলা যায় ফিচারটি সত্যিই বাস্তব মেট্রিক (ব্যবহার, স্যাটিসফ্যাকশন, রেভিনিউ) বদলাচ্ছে কি না, যদিও এটি কেন প্রশ্নের উত্তর দেয় না।
২ · ভালো একটি A/B টেস্টের শর্ত
কে A পাবেন আর কে B পাবেন তা সম্পূর্ণ এলোমেলো হতে হবে — নয়তো গ্রুপ দুটো তুলনাযোগ্য থাকে না।
ছোট পার্থক্য নিশ্চিতভাবে ধরতে হলে যথেষ্ট বড় স্যাম্পল দরকার — নিচের ডেমোতে এটি সরাসরি দেখা যাবে।
শুধু "টার্গেট মেট্রিক" বাড়লেই চলবে না — নিশ্চিত করতে হবে অন্য গুরুত্বপূর্ণ মেট্রিক (যেমন এরর রেট, লোড টাইম) খারাপ হচ্ছে না।
এক্সপেরিমেন্ট চলাকালীন বারবার ফলাফল দেখে যেই মুহূর্তে সংখ্যা "ভালো দেখায়" তখনই থামিয়ে দেওয়া (peeking) মিথ্যা-পজিটিভ ফলাফলের সম্ভাবনা বাড়িয়ে দেয়। আগে থেকে ঠিক করা নমুনা-সাইজ বা সময়কাল শেষ না হওয়া পর্যন্ত সিদ্ধান্ত নেওয়া এড়ানো উচিত।
৩ · ম্যানুয়াল ডেমো — দুই-প্রপোরশন তুলনা
ধরা যাক একটি ইমেইল অ্যাপে A (পুরনো, নন-AI রিকমেন্ডেশন লিস্ট) বনাম B (নতুন, AI-জেনারেটেড "আপনার জন্য"
সাজেশন ফিচার) টেস্ট করা হচ্ছে, আর মেট্রিক হলো "ব্যবহারকারী সাজেশন গ্রহণ করলেন কি না" (কনভার্শন)। নিচের
কোডে scipy বা statistics-এর কোনো হাইপোথিসিস-টেস্ট ফাংশন ছাড়াই, শুধু
math.sqrt ও সাধারণ পাটিগণিত দিয়ে সরাসরি হিসাব করা হয়েছে।
import math
# A (কন্ট্রোল): পুরনো, নন-AI রিকমেন্ডেশন লিস্ট
# B (ভ্যারিয়েন্ট): নতুন AI-জেনারেটেড "আপনার জন্য" সাজেশন ফিচার
n_a, conversions_a = 200, 46 # A: ২০০ জনের মধ্যে ৪৬ জন কনভার্ট করেছেন
n_b, conversions_b = 200, 61 # B: ২০০ জনের মধ্যে ৬১ জন কনভার্ট করেছেন
p_a = conversions_a / n_a
p_b = conversions_b / n_b
raw_diff = p_b - p_a
print(f"A (কন্ট্রোল) কনভার্শন রেট: {p_a:.4f} ({p_a * 100:.1f}%)")
print(f"B (AI ভ্যারিয়েন্ট) কনভার্শন রেট: {p_b:.4f} ({p_b * 100:.1f}%)")
print(f"র-রেট পার্থক্য: {raw_diff:.4f} ({raw_diff * 100:.1f} পার্সেন্টেজ পয়েন্ট)")
# পুল্ড প্রপোরশন -- দুই গ্রুপ একসাথে ধরলে সামগ্রিক কনভার্শন রেট কত
pooled_p = (conversions_a + conversions_b) / (n_a + n_b)
# স্ট্যান্ডার্ড এরর -- ম্যানুয়ালি, শুধু math.sqrt ও সাধারণ পাটিগণিত দিয়ে
se = math.sqrt(pooled_p * (1 - pooled_p) * (1 / n_a + 1 / n_b))
# z-স্কোরের মতো একটি অনুপাত -- পার্থক্যটি কতগুলো স্ট্যান্ডার্ড এরর দূরে
z_like = raw_diff / se
print(f"\nপুল্ড প্রপোরশন: {pooled_p:.4f} ({pooled_p * 100:.2f}%)")
print(f"স্ট্যান্ডার্ড এরর (SE): {se:.4f} ({se * 100:.2f}%)")
print(f"z-স্কোরের মতো অনুপাত: {z_like:.3f}")
threshold = 1.96 # প্রচলিত ৯৫% কনফিডেন্স থ্রেশহোল্ড
if abs(z_like) >= threshold:
print(f"\n|z| ({abs(z_like):.3f}) >= {threshold} -- প্রচলিত ৯৫% থ্রেশহোল্ডে পার্থক্যটি \"পরিসংখ্যানগতভাবে তাৎপর্যপূর্ণ\" বলে গণ্য হয়")
else:
print(f"\n|z| ({abs(z_like):.3f}) < {threshold} -- প্রচলিত ৯৫% থ্রেশহোল্ডে এই নির্দিষ্ট রানে পার্থক্যটি তাৎপর্যপূর্ণ প্রমাণ করা যাচ্ছে না")
৪ · ফলাফল ব্যাখ্যা ও সতর্কতা
- পরিসংখ্যানগত ≠ বাস্তব-জীবনের গুরুত্ব — অনেক বড় স্যাম্পলে (লাখো ব্যবহারকারী) এমনকি ০.৫ পার্সেন্টেজ পয়েন্টের পার্থক্যও "তাৎপর্যপূর্ণ" প্রমাণ হতে পারে, কিন্তু তা বাস্তবে ব্যবসার জন্য গুরুত্বপূর্ণ নাও হতে পারে — দুটো প্রশ্ন আলাদা।
- নভেলটি এফেক্ট — একটি নতুন AI ফিচার শুধু "নতুন" হওয়ার কারণে প্রথম কয়েক সপ্তাহ বেশি ব্যবহৃত হতে পারে, তারপর আগ্রহ কমে যেতে পারে — তাই স্বল্প-মেয়াদি A/B ফলাফল দীর্ঘ-মেয়াদি প্রবণতার প্রতিনিধি নাও হতে পারে (L43-এ লংগিচুডিনাল ইভালুয়েশনে বিস্তারিত)।
- গার্ডরেল ভুলে যাওয়া — টার্গেট মেট্রিক বাড়লেও ট্রাস্ট বা স্যাটিসফ্যাকশনের মতো মেট্রিক (L42-এ বিস্তারিত) একইসাথে যাচাই করা জরুরি।
A/B টেস্টিং একটি শক্তিশালী টুল, কিন্তু শুধু "কোন সংখ্যাটা বড়" দেখলেই চলবে না — পার্থক্যটি নিছক র্যান্ডম ওঠানামা কি না তা স্ট্যান্ডার্ড এরর দিয়ে যাচাই করা, যথেষ্ট স্যাম্পল সাইজ নিশ্চিত করা, আর গার্ডরেল মেট্রিক নজরে রাখা — এই তিনটি ছাড়া A/B ফলাফল বিভ্রান্তিকর সিদ্ধান্তে নিয়ে যেতে পারে।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ উপরের ডেমোতে z-score-এর মতো অনুপাত ১.৯৬-এর নিচে থাকা মানে কি ফিচার B আসলে খারাপ? তাহলে সঠিক সিদ্ধান্ত কী?
না — এর মানে এই নয় B খারাপ, বরং এই নির্দিষ্ট স্যাম্পল সাইজে B সত্যিই ভালো কি না তা নিশ্চিতভাবে বলা যাচ্ছে না। সঠিক সিদ্ধান্ত সাধারণত হয় এক্সপেরিমেন্ট আরও বড় স্যাম্পলে বা আরও লম্বা সময় ধরে চালানো, যতক্ষণ না পরিসংখ্যানগতভাবে স্পষ্ট উত্তর পাওয়া যায় — তাড়াহুড়ো করে সিদ্ধান্ত নেওয়া নয়।
প্র ০২ A/B টেস্টিং কেন L39-এর ল্যাব ইউজেবিলিটি টেস্টকে সম্পূর্ণ প্রতিস্থাপন করতে পারে না?
A/B টেস্টিং বলে কী ঘটছে (একটি মেট্রিক বেড়েছে কি কমেছে) কিন্তু কেন তা প্রায়ই বলে না। ব্যবহারকারী কেন একটি সাজেশন গ্রহণ করলেন না — তিনি বুঝতে পারেননি, নাকি বিশ্বাস করেননি, নাকি প্রাসঙ্গিক মনে হয়নি — এই প্রশ্নের উত্তর সাধারণত থিংক-অ্যালাউড বা ইন্টারভিউয়ের মতো গুণগত পদ্ধতি থেকেই পাওয়া যায়।
প্র ০৩ কেন শুধু "টার্গেট মেট্রিক" (যেমন কনভার্শন) না দেখে গার্ডরেল মেট্রিকও (যেমন ট্রাস্ট বা এরর রেট) একসাথে দেখা জরুরি?
একটি AI ফিচার স্বল্প-মেয়াদে কনভার্শন বাড়াতে পারে (যেমন আক্রমণাত্মক সাজেশন) কিন্তু একইসাথে ব্যবহারকারীর ট্রাস্ট বা দীর্ঘ-মেয়াদি স্যাটিসফ্যাকশন কমিয়ে দিতে পারে — যা শুধু টার্গেট মেট্রিক দেখলে ধরা পড়বে না। গার্ডরেল মেট্রিক এই ধরনের "লুকানো ক্ষতি" ধরতে সাহায্য করে (M3, L42-এ বিস্তারিত)।
অনুশীলন
-
চিন্তা করুন: যদি একই কনভার্শন রেট (A: ২৩%, B: ৩০.৫%) বজায় রেখে স্যাম্পল সাইজ চারগুণ
বাড়ানো হয় (প্রতি গ্রুপে ৮০০ জন), তাহলে z-স্কোরের মতো অনুপাতটি কি বাড়বে, কমবে, নাকি একই থাকবে বলে
আপনার ধারণা?
অনুমান করা যায় অনুপাতটি বাড়বে, কারণ বড় স্যাম্পলে স্ট্যান্ডার্ড এরর ছোট হয় (নমুনা বেশি হলে অনিশ্চয়তা কমে), আর হর ছোট হলে ভগ্নাংশ (raw_diff / se) বড় হয় — কিন্তু ঠিক কতটা বাড়বে তা যাচাই না করে বলা কঠিন।
-
যাচাই করুন: উপরের কোডে
n_a, conversions_a = 800, 184এবংn_b, conversions_b = 800, 244(একই রেট, চারগুণ স্যাম্পল) সেট করে Run চেপে দেখুন।রেট অপরিবর্তিত থাকে (২৩.০% ও ৩০.৫%), কিন্তু স্ট্যান্ডার্ড এরর কমে ≈২.২১%-এ নেমে আসে (আগের প্রায় অর্ধেক), আর z-স্কোরের মতো অনুপাত বেড়ে ≈৩.৩৯-এ পৌঁছায় — যা ১.৯৬ থ্রেশহোল্ড স্পষ্টভাবে পার করে যায়! এটাই প্রমাণ করে একই পার্থক্য, শুধু বড় স্যাম্পল সাইজেই "পরিসংখ্যানগতভাবে তাৎপর্যপূর্ণ" প্রমাণ করা সম্ভব হতে পারে — এটাই কেন স্যাম্পল সাইজ পরিকল্পনা এত গুরুত্বপূর্ণ।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- উইজার্ড-অফ-ওজ ও প্রোটোটাইপিং টেকনিক পরবর্তী পাঠ A/B টেস্টের জন্য ফিচার বানানোর আগেই কীভাবে ইন্টারঅ্যাকশন ডিজাইন যাচাই করবেন।
- AI সিস্টেমের জন্য ইউজেবিলিটি টেস্টিং আগের পাঠ ছোট স্যাম্পলে গুণগত (qualitative) ইউজেবিলিটি টেস্টিং — A/B টেস্টের পরিপূরক পদ্ধতি।
- কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৫৭টি পাঠ ট্রাস্ট ক্যালিব্রেশন, এক্সপ্লেইনেবিলিটি, হিউম্যান-ইন-দ্য-লুপ ডিজাইন, ইভালুয়েশন পদ্ধতি ও ইন্ডাস্ট্রি ফ্রেমওয়ার্ক — সব একসাথে।