A/B টেস্টিং ও অ্যানালিটিক্স-ভিত্তিক ইভালুয়েশন
এই পাঠে যা শিখবেন
- A/B টেস্টিং ও অ্যানালিটিক্স-ভিত্তিক ইভালুয়েশন কী, এবং কীভাবে এটি অন্যান্য ইভালুয়েশন মেথডের পরিপূরক
- দুটো কনভার্সন/কমপ্লিশন রেট তুলনা করার জন্য টু-প্রোপরশন z-টেস্ট গণনা করতে পারা
- কেন স্যাম্পল সাইজ পরিসংখ্যানগত তাৎপর্যকে সরাসরি প্রভাবিত করে
- অ্যানালিটিক্স-ভিত্তিক ইভালুয়েশনের সীমাবদ্ধতা — এটি "কী" বলে, "কেন" বলে না
১ · A/B টেস্টিং ও অ্যানালিটিক্স-ভিত্তিক ইভালুয়েশন কী
A/B টেস্টিংA/B Testingএকটি এক্সপেরিমেন্টাল মেথড যেখানে ব্যবহারকারীদের র্যান্ডমলি দুটো (বা তার বেশি) ডিজাইন ভ্যারিয়েন্টের একটিতে ভাগ করে দিয়ে, তাদের আচরণগত ডেটা (কনভার্সন, কমপ্লিশন রেট, ক্লিক) তুলনা করে কোন ভ্যারিয়েন্ট বেশি কার্যকর তা নির্ধারণ করা হয়। L30–L31-এর ইউজেবিলিটি টেস্টিং সাধারণত অল্প কয়েকজন (৫–১০ জন) পার্টিসিপ্যান্ট নিয়ে গভীর, কোয়ালিটেটিভ ইনসাইট দেয় — কেন কোনো সমস্যা হচ্ছে। A/B টেস্টিং এর বিপরীত দিক — অনেক (শত থেকে হাজার) ব্যবহারকারীর প্রকৃত আচরণ থেকে কোনটা ভালো কাজ করছে তার সংখ্যাগত প্রমাণ দেয়, কিন্তু কেন তা সরাসরি বলে না। দুটো মেথড একসাথে ব্যবহার করাই সবচেয়ে শক্তিশালী — একটি A/B টেস্টে B ভ্যারিয়েন্ট জিতলে, কেন জিতলো তা বুঝতে একটি ছোট থিংক-অ্যালাউড স্টাডি (L31) চালানো যায়।
অ্যানালিটিক্স-ভিত্তিক ইভালুয়েশন আরও বিস্তৃত — শুধু A/B টেস্ট নয়, বরং সাধারণভাবে প্রোডাকশন সিস্টেমের ব্যবহারের ডেটা (ফানেল-ড্রপঅফ, পেজ-ভিউ, ক্লিক-হিটম্যাপ, সেশন রেকর্ডিং) বিশ্লেষণ করে ইউজেবিলিটি সমস্যা খুঁজে বের করা। যেমন একটি চেকআউট ফানেলে যদি ৪০% ব্যবহারকারী একটি নির্দিষ্ট ধাপে ছেড়ে চলে যান, সেটি একটি স্পষ্ট সংকেত যে সেখানে কিছু একটা ভুল আছে — যদিও কেন তা জানতে গুণগত রিসার্চ লাগবে।
২ · দুটো প্রোপরশন তুলনা করা — টু-প্রোপরশন z-টেস্ট
ধরুন একটি চেকআউট বাটনের দুটো ডিজাইন টেস্ট করা হচ্ছে — ভ্যারিয়েন্ট A (পুরনো ডিজাইন) ও ভ্যারিয়েন্ট B (নতুন ডিজাইন)। প্রতিটি ভ্যারিয়েন্টে $n$ জন ভিজিটর দেখানো হয়েছে, এবং কতজন সফলভাবে কনভার্ট করেছে (কনভার্সন কাউন্ট) রেকর্ড করা হয়েছে। প্রশ্ন হলো — কনভার্সন রেটের পার্থক্য কি সত্যিকারের, নাকি নিছক দৈবক্রমে হয়েছে?
এর জন্য প্রথমে দুটো গ্রুপ মিলিয়ে একটি পুলড প্রোপরশন বের করতে হয় —
$$\hat{p} = \frac{x_A + x_B}{n_A + n_B}$$
তারপর এই পুলড প্রোপরশন থেকে স্ট্যান্ডার্ড এরর গণনা করা হয় —
$$SE = \sqrt{\hat{p}(1-\hat{p})\left(\frac{1}{n_A}+\frac{1}{n_B}\right)}$$
এবং শেষে z-স্কোর —
$$z = \frac{p_B - p_A}{SE}$$
সাধারণ ৯৫% কনফিডেন্স লেভেলে, যদি $|z| > 1.96$ হয় তাহলে পার্থক্যটিকে পরিসংখ্যানগতভাবে তাৎপর্যপূর্ণ ধরা হয়
— অর্থাৎ এই পার্থক্য নিছক দৈবক্রমে হওয়ার সম্ভাবনা কম। নিচের কোড সেলে এই সূত্রগুলো সরাসরি বাস্তবায়ন করা
হয়েছে — কোনো স্ট্যাটিসটিক্স লাইব্রেরি ব্যবহার না করে, শুধু math মডিউল দিয়ে।
import math
def norm_cdf(x):
"""স্ট্যান্ডার্ড নরমাল ডিস্ট্রিবিউশনের কিউমুলেটিভ ডিস্ট্রিবিউশন ফাংশন --
math.erf ব্যবহার করে সরাসরি, কোনো statistics/scipy শর্টকাট ছাড়া।"""
return 0.5 * (1 + math.erf(x / math.sqrt(2)))
def two_proportion_ztest(n_A, x_A, n_B, x_B):
p_A = x_A / n_A
p_B = x_B / n_B
p_pool = (x_A + x_B) / (n_A + n_B)
se = math.sqrt(p_pool * (1 - p_pool) * (1 / n_A + 1 / n_B))
z = (p_B - p_A) / se
p_value = 2 * (1 - norm_cdf(abs(z))) # two-tailed
significant = abs(z) > 1.96 # 95% confidence level
return p_A, p_B, p_pool, se, z, p_value, significant
# --- টেস্ট ১: পাইলট স্টাডি -- ছোট স্যাম্পল ---
n_A1, x_A1 = 400, 92 # ভ্যারিয়েন্ট A: পুরনো "Buy Now" বাটন
n_B1, x_B1 = 380, 106 # ভ্যারিয়েন্ট B: নতুন, বেশি কনট্রাস্টের বাটন
p_A1, p_B1, pool1, se1, z1, pv1, sig1 = two_proportion_ztest(n_A1, x_A1, n_B1, x_B1)
print("--- টেস্ট ১: পাইলট (n_A=400, n_B=380) ---")
print(f"p_A = {p_A1:.4f} p_B = {p_B1:.4f} পার্থক্য = {p_B1 - p_A1:+.4f}")
print(f"pooled p = {pool1:.4f} SE = {se1:.5f}")
print(f"z = {z1:.3f} p-value = {pv1:.4f} তাৎপর্যপূর্ণ (95%)? {sig1}")
print()
# --- টেস্ট ২: একই কনভার্সন রেট, কিন্তু ৪ গুণ বড় স্যাম্পল ---
n_A2, x_A2 = 1600, 368 # p_A এখনও 0.2300
n_B2, x_B2 = 1520, 424 # p_B এখনও 0.2789
p_A2, p_B2, pool2, se2, z2, pv2, sig2 = two_proportion_ztest(n_A2, x_A2, n_B2, x_B2)
print("--- টেস্ট ২: একই রেট, বড় রোলআউট (n_A=1600, n_B=1520) ---")
print(f"p_A = {p_A2:.4f} p_B = {p_B2:.4f} পার্থক্য = {p_B2 - p_A2:+.4f}")
print(f"pooled p = {pool2:.4f} SE = {se2:.5f}")
print(f"z = {z2:.3f} p-value = {pv2:.4f} তাৎপর্যপূর্ণ (95%)? {sig2}")
৩ · অ্যানালিটিক্সের সীমাবদ্ধতা
A/B টেস্ট ও অ্যানালিটিক্স ডেটা শক্তিশালী কিন্তু অন্ধ — এটি বলতে পারে ভ্যারিয়েন্ট B-এর কনভার্সন রেট বেশি, কিন্তু কেন তা বলে না। হয়তো নতুন বাটনের রং বেশি কনট্রাস্ট করেছে (M8/L35-এ ভিজ্যুয়াল ডিজাইনে বিস্তারিত), অথবা হয়তো টেক্সট বদলে যাওয়ায় প্রত্যাশা বদলেছে — অ্যানালিটিক্স শুধু ফলাফল দেখায়, কার্যকারণ নয়। এই কারণেই L31-এর থিংক-অ্যালাউড ও অবজারভেশনাল মেথডের সাথে A/B টেস্টিং মিলিয়ে ব্যবহার করা সবচেয়ে ভালো — সংখ্যা দিয়ে "কী" এবং কোয়ালিটেটিভ পর্যবেক্ষণ দিয়ে "কেন" উত্তর দেওয়া।
একটি প্রোপরশনের পার্থক্য দেখেই সিদ্ধান্ত নেওয়া বিপজ্জনক — সবসময় জিজ্ঞাসা করুন এই পার্থক্য কি পরিসংখ্যানগতভাবে তাৎপর্যপূর্ণ, নাকি নিছক দৈবক্রমিক শব্দ (noise)। z-স্কোর ও স্যাম্পল সাইজ দুটোই একসাথে দেখা ছাড়া A/B টেস্টের ফলাফল বিশ্বাস করা উচিত নয়।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ একজন প্রোডাক্ট ম্যানেজার একটি A/B টেস্টের প্রথম দিনের ডেটা দেখে বলেন, "B ভ্যারিয়েন্ট ৫% বেশি কনভার্সন দিচ্ছে, আজই এটা সবার জন্য চালু করে দিই!" এই সিদ্ধান্তে সমস্যা কী?
প্রথম দিনের ডেটা প্রায় নিশ্চিতভাবেই একটি খুব ছোট স্যাম্পল — উপরের কোড সেলে দেখানো হয়েছে যে একই পার্থক্য ছোট স্যাম্পলে ($z=1.57$) তাৎপর্যপূর্ণ নাও হতে পারে, যদিও বড় স্যাম্পলে ($z=3.14$) একই পার্থক্য স্পষ্টভাবে তাৎপর্যপূর্ণ। সিদ্ধান্ত নেওয়ার আগে z-স্কোর গণনা করে দেখা উচিত পার্থক্যটি পরিসংখ্যানগতভাবে নির্ভরযোগ্য কিনা, নইলে নিছক দৈবক্রমিক শব্দের ভিত্তিতে ভুল সিদ্ধান্ত নেওয়ার ঝুঁকি থাকে।
প্র ০২ একটি A/B টেস্টে দেখা গেলো ভ্যারিয়েন্ট B-এর কনভার্সন রেট পরিসংখ্যানগতভাবে তাৎপর্যপূর্ণভাবে বেশি। এই ফলাফল কি নিজে থেকেই বলে দেয় B ডিজাইনটি "বেশি ইউজেবল"? কেন বা কেন নয়?
না, সরাসরি নয়। কনভার্সন রেট বেশি হওয়ার অনেক কারণ থাকতে পারে যা প্রকৃত ইউজেবিলিটির সাথে সম্পর্কিত নয় — যেমন একটি ডার্ক প্যাটার্ন (M12/L53-এ বিস্তারিত) যা ব্যবহারকারীকে চাপ দিয়ে দ্রুত সিদ্ধান্ত নিতে বাধ্য করছে, বা একটি বিভ্রান্তিকর ডিজাইন যা দুর্ঘটনাক্রমে ক্লিক বাড়াচ্ছে। কনভার্সন একটি ব্যবসায়িক মেট্রিক, ইউজেবিলিটির সরাসরি প্রতিশব্দ নয় — এটি একটি কোয়ালিটেটিভ পরীক্ষা (L31) বা SUS (L34) দিয়ে যাচাই করা দরকার।
প্র ০৩ উপরের কোড সেলের z-স্কোর সূত্রে $SE$ (স্ট্যান্ডার্ড এরর) হর-এ (denominator) থাকে। যদি $n_A$ ও $n_B$ দুটোই বাড়ানো হয়, $SE$-এর কী হয়, এবং এর ফলে $z$-এর কী হয়?
$SE$-এর সূত্রে $\frac{1}{n_A}+\frac{1}{n_B}$ অংশটি $n$ বাড়ালে ছোট হয়, তাই $SE$ কমে যায় (স্কয়ার রুটের কারণে $\sqrt{n}$-এর হারে)। যেহেতু $z = \frac{p_B-p_A}{SE}$, এবং $SE$ ছোট হচ্ছে (হর ছোট হচ্ছে), $z$-এর পরম মান বেড়ে যায় — ঠিক যেমন কোড সেলে দেখা গেছে ($z$ ১.৫৭ থেকে ৩.১৪-এ বেড়েছে যখন স্যাম্পল ৪ গুণ হয়েছে)। এটাই কেন বড় স্যাম্পল সাইজ একই পার্থক্যকে বেশি "আত্মবিশ্বাসের সাথে" শনাক্ত করতে পারে।
অনুশীলন
-
অনুমান করুন: কোড সেলের টেস্ট ১-এ যদি ভ্যারিয়েন্ট B-এর কনভার্সন কাউন্ট $x_{B1}=106$
থেকে বেড়ে $x_{B1}=140$ হতো (একই $n_B=380$), z-স্কোর কি ১.৯৬-এর চেয়ে বেশি হবে বলে আপনার ধারণা?
হ্যাঁ — $p_B$ বেড়ে $140/380 ≈ 0.368$ হবে, যা $p_A=0.230$ থেকে অনেক বেশি পার্থক্য (~১৩.৮ পার্সেন্টেজ পয়েন্ট, আগের ৪.৯ পয়েন্টের প্রায় তিনগুণ), তাই সংখ্যাগত পার্থক্য বাড়ার সাথে সাথে z-স্কোরও বাড়বে এবং সহজেই ১.৯৬ ছাড়িয়ে যাবে, এমনকি একই ছোট স্যাম্পল সাইজেও।
-
পরীক্ষা করুন: উপরের কোড সেলে
x_B1 = 106-কেx_B1 = 140-এ পরিবর্তন করে Run চেপে আপনার অনুমান যাচাই করুন।$x_{B1}=140$-এ p_B = ০.৩৬৮৪, pooled p ≈ ০.২৯৭৪, SE ≈ ০.০৩২৭, z ≈ ৪.২২৭ — যা ১.৯৬-এর অনেক বেশি, তাই p-value অত্যন্ত ছোট (< ০.০০০১) এবং ফলাফল স্পষ্টভাবে তাৎপর্যপূর্ণ — ঠিক যেমন অনুমান করা হয়েছিল, বড় সংখ্যাগত পার্থক্য ছোট স্যাম্পলেও শনাক্তযোগ্য তাৎপর্য তৈরি করে।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- কগনিটিভ ওয়াকথ্রু পরবর্তী পাঠ যখন সত্যিকারের ব্যবহারকারী পরীক্ষা করার সুযোগ নেই, তখন একজন এক্সপার্ট কীভাবে ধাপে ধাপে টাস্ক যাচাই করেন।
- ইউজেবিলিটি পরিমাপ — মেট্রিক্স, SUS ও টাস্ক সাকসেস রেট M7 A/B টেস্টের কনভার্সন-রেট মেট্রিকের পাশাপাশি সাবজেক্টিভ সন্তুষ্টি কীভাবে গণনা করতে হয়।
- কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৫৭টি পাঠ কগনিটিভ সাইকোলজি থেকে অ্যাক্সেসিবিলিটি পর্যন্ত সম্পূর্ণ HCI কারিকুলাম।