Hypothesis testing — t-test
এই পাঠে যা শিখবেন
- Null vs alternative hypothesis — formal framework
- ৩ ধরনের t-test — কখন কোনটা
- p-value-র সঠিক interpretation ও সাধারণ ভুল
- Effect size (Cohen's d) — practical significance
১ · Hypothesis testing-এর framework
Hypothesis testingHypothesis TestingFisher, Neyman, Pearson (১৯২০-৩০)-এর কাজ — একটি default claim (H0) reject করার জন্য সিদ্ধান্ত procedure। Falsificationist epistemology-র গাণিতিক রূপ। = একটি default claim (H0) "reject" বা "fail to reject" করার আনুষ্ঠানিক পদ্ধতি।
Null hypothesis ($H_0$): "কোনো difference নেই", "কোনো effect নেই"।
Alternative hypothesis ($H_1$): "Difference আছে", "effect আছে"।
Logic: $H_0$ সত্য ধরে — observed data কতটা likely? যদি data $H_0$-এর অধীনে very unlikely হয় ($p < 0.05$) — $H_0$ reject।
$H_0$ = "নির্দোষ" (presumption of innocence)। Evidence beyond reasonable doubt → reject $H_0$ ("guilty"). Insufficient evidence → "fail to reject" (not "innocent")।
২ · One-sample t-test
Use case: sample mean কি hypothesized value-এর সমান?
উদাহরণ: Pathao দাবি করে — average ride duration ১৫ মিনিট। আপনার ৩০টি ride-এর sample-এ mean = ১৭.৫ min। দাবি কি সত্য?
Test statistic:
$$t = \frac{\bar{x} - \mu_0}{s / \sqrt{n}}$$
$H_0: \mu = 15$, $H_1: \mu \neq 15$. $|t|$ যথেষ্ট বড় হলে — reject।
৩ · Two-sample t-test (independent)
Use case: দু'টি independent group-এর mean সমান?
উদাহরণ: ঢাকা ও চট্টগ্রামের Daraz user-দের গড় order value কি ভিন্ন?
$$t = \frac{\bar{x}_1 - \bar{x}_2}{\sqrt{\frac{s_1^2}{n_1} + \frac{s_2^2}{n_2}}}$$
দু'টি variant:
- Equal variance (Student's t): দু'টি group-এর variance equal assume।
- Unequal variance (Welch's t): Welch's correction — robust। সাধারণত prefer।
৪ · Paired t-test
Use case: একই subject-এর দু'টি measurement (before-after)।
উদাহরণ: bKash app-এর redesign-এর আগে ও পরে — same user-দের session time।
কেন paired? Subject-এর individual variation cancel — যা between-subject t-test-এ noise হিসেবে আসে। Paired test অনেক বেশি powerful।
Math: প্রতিটি subject-এর difference $d_i = x_{1i} - x_{2i}$ — তারপর one-sample t-test on $d_i$ vs ০।
৫ · p-value — সঠিক ব্যাখ্যা
p-valuep-value"যদি null সত্য হয়, observed data বা আরও extreme পাওয়ার probability"। Hypothesis-এর probability নয়। ০.০৫ threshold Fisher-এর arbitrary convention।: "$H_0$ সত্য হলে — observed data বা আরও extreme পাওয়ার probability"।
৫টি common ভুল:
- "p = ০.০৩ মানে $H_1$-এর probability ৯৭%" — ভুল।
- "p < ০.০৫ মানে effect বড়" — ভুল। শুধু non-zero।
- "p > ০.০৫ মানে কোনো effect নেই" — ভুল। হয়তো sample ছোট।
- "p = ০.০৪৯ ও p = ০.০৫১ — সম্পূর্ণ ভিন্ন result" — ভুল। প্রায় একই।
- "১০টি test-এ একটি p < ০.০৫ → finding!" — ভুল। Multiple testing problem।
৬ · Effect size — Cohen's d
Cohen's dCohen's dJacob Cohen (১৯৮৮)-এর effect size measure — দু'টি mean-এর difference, pooled std-এ standardized। ০.২ small, ০.৫ medium, ০.৮ large। = mean difference / pooled std।
$$d = \frac{\bar{x}_1 - \bar{x}_2}{s_\text{pooled}}$$
Cohen's rule of thumb:
- d ≈ ০.২ — small effect।
- d ≈ ০.৫ — medium।
- d ≈ ০.৮ — large।
কেন? p-value sample size-এর সাথে rapid grow করে। ১,০০,০০০ sample-এ trivial difference (০.১% conversion)-ও p < ০.০০১। Effect size scale-invariant — আসল magnitude।
৭ · Type I ও Type II error
- Type I (α): $H_0$ সত্য কিন্তু reject — false positive। ০.০৫ standard।
- Type II (β): $H_0$ মিথ্যা কিন্তু fail to reject — false negative।
- Power: $1 - β$ = "$H_0$ মিথ্যা হলে correctly reject করার probability"।
Sample size বাড়ালে — power বাড়ে, β কমে। Type I fixed (α)।
৮ · scipy দিয়ে t-test (one-sample)
import numpy as np
from scipy import stats
# Pathao দাবি — গড় ride duration ১৫ মিনিট
# আমাদের sample
np.random.seed(42)
ride_times = np.random.normal(loc=17, scale=4, size=30)
t_stat, p_val = stats.ttest_1samp(ride_times, popmean=15)
print(f"Sample mean : {ride_times.mean():.2f} min")
print(f"Sample std : {ride_times.std(ddof=1):.2f}")
print(f"t-statistic : {t_stat:.3f}")
print(f"p-value : {p_val:.4f}")
if p_val < 0.05:
print("→ Reject H0: গড় সম্ভবত ১৫ থেকে ভিন্ন")
else:
print("→ Fail to reject H0")
৯ · Two-sample (Welch's) t-test
import numpy as np
from scipy import stats
np.random.seed(0)
# ঢাকা ও চট্টগ্রাম Daraz orders
dhaka_orders = np.random.normal(loc=520, scale=180, size=120)
ctg_orders = np.random.normal(loc=460, scale=170, size=100)
t_stat, p_val = stats.ttest_ind(dhaka_orders, ctg_orders,
equal_var=False) # Welch's
# Cohen's d
def cohens_d(x1, x2):
n1, n2 = len(x1), len(x2)
pooled_std = np.sqrt(((n1-1)*x1.var(ddof=1) + (n2-1)*x2.var(ddof=1)) / (n1+n2-2))
return (x1.mean() - x2.mean()) / pooled_std
d = cohens_d(dhaka_orders, ctg_orders)
print(f"Dhaka mean : {dhaka_orders.mean():.0f} (n={len(dhaka_orders)})")
print(f"CTG mean : {ctg_orders.mean():.0f} (n={len(ctg_orders)})")
print(f"t : {t_stat:.3f}")
print(f"p : {p_val:.4f}")
print(f"Cohen's d : {d:.3f} ({'small' if abs(d)<0.5 else 'medium' if abs(d)<0.8 else 'large'})")
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ "p = ০.০৩ মানে hypothesis ৯৭% সত্য" — এই ভুলটা কেন এত সাধারণ? সঠিক ব্যাখ্যা কী এবং Bayesian দৃষ্টিতে কী হবে?
এটি statistics-এর সবচেয়ে বহুল-ভুল interpretation — এমনকি অনেক professor-এর course slide-এও দেখা যায়।
সঠিক ব্যাখ্যা:
- p-value = $P(\text{data or more extreme} \mid H_0 \text{ true})$।
- আমরা যা চাই: $P(H_0 \text{ true} \mid \text{data})$ — সম্পূর্ণ ভিন্ন!
- দু'টোকে confuse করা — "prosecutor's fallacy" নামে পরিচিত।
কেন ভুল হয়:
- Conditional probability mentally hard — মস্তিষ্ক "if A given B" ও "if B given A" mix করে।
- Notation similar — দু'টোই "৩%" sound করে।
- Education-এ shortcut — "p < ০.০৫ → significant" শুধু rule, gloss without insight।
Bayes' theorem-এ সঠিক link:
$P(H_0 \mid \text{data}) = \dfrac{P(\text{data} \mid H_0) \cdot P(H_0)}{P(\text{data})}$
- আপনি p পান $P(\text{data} \mid H_0)$।
- $P(H_0 \mid \text{data})$ পেতে — prior $P(H_0)$ চাই।
- Frequentist framework prior reject — তাই এই inversion সম্ভব না।
উদাহরণ — শক্তিশালী illustration:
- একটি rare disease test, ৯৯% accurate।
- আপনি positive। "৯৯% probability disease আছে?"
- না — কারণ disease ০.১% population-এ। Bayes দিয়ে — actually probability ~৯%।
- একই reasoning p-value-এ।
Bayesian alternative:
- Bayesian framework-এ — prior set করুন।
- Posterior probability $P(H \mid \text{data})$ directly compute।
- Bayes Factor — দু'টি hypothesis-এর evidence-এর ratio।
- Modern science Bayesian-এ shift হচ্ছে — কিন্তু slow।
Practical impact:
- Replication crisis (২০১০s) — এই misinterpretation-এর fallout।
- Many "significant" findings replicate করেনি।
- p-hacking, publication bias — সব এই misunderstanding-এ rooted।
Communicate কীভাবে:
- "p = ০.০৩ — যদি কোনো effect না থাকতো, এই pattern দেখার probability ৩%।"
- "৯৭% সত্য" বলবেন না।
- Effect size ও CI সাথে present করুন।
মূল উপলব্ধি: p-value useful কিন্তু subtle। Misinterpret সর্বত্র — তাই সচেতন থাকা data scientist-এর দায়িত্ব।
প্র ০২ আপনি ১,০০,০০০ user-এর A/B test-এ p < ০.০০১ পেলেন। কিন্তু conversion rate-এর difference ০.১%। এটি কি launch করবেন? Effect size-এর ভূমিকা কী?
এটি real-world product analytics-এর সবচেয়ে সাধারণ পরিস্থিতি — এবং সবচেয়ে বেশি ভুল decision হয়।
Statistical vs Practical significance:
- Statistical: p < ০.০৫ — pattern noise নয়, real।
- Practical: magnitude meaningful কি — business-এ matter করে?
- Two completely different concepts।
বড় sample-এ p-value-র behavior:
- $t = \frac{\bar{x}_1 - \bar{x}_2}{SE}$, $SE \propto 1/\sqrt{n}$।
- $n = 100$ → trivial difference reject না।
- $n = 100,000$ → ০.০১% difference-ই p < ০.০০১।
- Big-data era-এ — significance প্রায় guaranteed।
Decision framework:
-
Effect size compute:
- Cohen's h (proportion-এর জন্য) বা Cohen's d।
- Relative lift: ০.১% / ৫% baseline = ২%।
- Absolute change: ০.১ percentage point।
-
Business cost-benefit:
- ১০ লাখ MAU হলে — ০.১% lift = ১০০০ extra conversions/month।
- Per conversion BDT ৫০০ → ৫,০০,০০০ extra revenue/month।
- Implementation cost: ২ developer-week।
- Worth it? — yes।
-
Risk assessment:
- Side effects? — Engagement-এর অন্য metric ক্ষতিগ্রস্ত?
- Long-term effect — শুধু novelty?
- User-experience harm?
Daraz/Pathao realities:
- Daraz: ০.১% conversion lift = মাসে কোটি BDT — launch।
- Small startup: ০.১% lift, ৫০০০ users — ৫ extra/month — skip।
- Same percent, different business meaning।
Pre-registration practice:
- Test শুরুর আগে — "Minimum Detectable Effect" (MDE) define।
- "Lift ১% এর কম হলে launch করব না — যাই p-value হোক।"
- এতে post-hoc justification এড়ানো যায়।
Reporting template:
- "Treatment: ৫.১%, Control: ৫.০%। Lift: +০.১pp (+২%)।"
- "৯৫% CI on lift: [+০.০৪%, +০.১৬%]।"
- "p < ০.০০১। Statistically robust, practically modest।"
- "Recommendation: launch given low implementation cost।"
Anti-patterns:
- "p < ০.০৫ ⇒ launch" — naive।
- "Big lift ⇒ launch" without significance check — risky।
- "আমার gut বলে launch" — ignore data।
মূল উপলব্ধি: p-value gateway, not destination। Effect size + business context together — সঠিক decision।
প্র ০৩ Paired t-test কেন two-sample t-test-এর চেয়ে বেশি powerful? কখন paired design ব্যবহার করতে পারেন না?
Paired design — experimental statistics-এর সবচেয়ে elegant trick — যদি সম্ভব হয়।
কেন বেশি powerful — variance decomposition:
- Two-sample-এ variance = between-subject + within-subject (treatment effect)।
- Between-subject variance massive (people very different)।
- এটা noise — treatment-এর signal-কে dilute করে।
Paired design — between-subject cancel:
- Subject $i$-এর before-after difference $d_i$।
- Subject-level variation $d_i$-এ থাকে না — automatically cancel।
- Treatment effect পরিষ্কার দেখা যায়।
সংখ্যায়:
- উদাহরণ: ১০০ user-এর session time before/after redesign।
- Two-sample: between-subject SD = ১০ min, n=১০০ → SE ≈ ১.৪।
- Paired: difference SD = ৩ min, n=১০০ → SE ≈ ০.৩।
- Paired ৪.৭× more powerful — same data!
Paired design সম্ভব কখন:
- Same subject, two time points (before-after intervention)।
- Matched pairs (twin study, matched control)।
- Repeated measures (each subject all conditions)।
- Crossover trial (each user uses both A and B)।
সম্ভব না কখন:
- Carry-over effect: A test-এর পর B test — A-র effect leftover। যেমন: drug trial — washout period দরকার, কিন্তু কিছু drug long half-life।
- Order effect: Learning, fatigue। Sequential test-এ second one always advantage।
- Destructive test: Material testing — same sample twice test করতে পারবেন না।
- Network effect: Social media A/B — A user-রা B user-দের influence।
- One-time event: Birth, college graduation — একবারই হয়।
Practical examples:
- Paired-friendly: bKash app redesign — same user before-after।
- Paired-friendly: Pathao driver-এর fuel-saving training — same driver before-after।
- Two-sample only: Daraz price experiment — same user দু'দাম দেখাতে পারেন না।
- Two-sample only: ভ্যাকসিন trial — placebo group ভিন্ন মানুষ।
Hybrid:
- Crossover RCT — each subject both treatments, random order।
- Order-effect minimize — washout + counterbalancing।
- Best of both world যখন viable।
মূল উপলব্ধি: Paired design — when feasible — sample size dramatic-ভাবে কমিয়ে দেয়। Experiment design-এর সবচেয়ে গুরুত্বপূর্ণ early decision।
প্র ০৪ "Multiple comparisons" সমস্যা কী? আপনি Daraz-এ ২০টি product feature test করছেন — কীভাবে false positive control করবেন?
Multiple testing problem — modern data science-এর "silent killer"। অনেক "discovery" আসলে noise।
সমস্যা:
- প্রতিটি test α = ০.০৫ → ৫% false positive rate।
- ২০টি test → প্রায় ১টি false positive expected (যদিও কোনো true effect না থাকে)।
- $P(\text{at least one false positive}) = 1 - 0.95^{20} \approx 64\%$।
- "Significant!" — কিন্তু আসলে chance।
Famous examples:
- Dead salmon fMRI study (Bennett, ২০১০) — multiple comparison correction না করায় mort fish-এ "brain activity" detect।
- Spurious correlation site (tylervigen.com) — চিনির খরচ ও nuclear physics PhD!
Correction methods:
- (১) Bonferroni: α/k। ২০ test → α = ০.০০২৫ each। সরল কিন্তু conservative।
- (২) Holm: Bonferroni-এর step-down — কম conservative। প্রথমে smallest p-value α/k সাথে compare, পরের α/(k-1), ...
- (৩) FDR (Benjamini-Hochberg): "False Discovery Rate" — শতকরা false positive control। Many discovery context-এ powerful। Genomics-এ standard।
- (৪) Pre-registration + family-wise error: Test-এর "family" আগে define। Confirmatory vs exploratory পৃথক।
Daraz scenario:
- ২০ feature test — কোনটি launch?
- Bonferroni: প্রতিটি feature p < ০.০০২৫ → conservative (oversee small lift)।
- FDR: expected false discovery rate ≤ ৫% — practical balance।
- Pre-registered: ৩টা confirmatory + ১৭টা exploratory। Confirmatory-এ Bonferroni; exploratory-এ FDR।
আরও safety:
- Holdout validation — winning feature পরের period-এ replicate কি?
- Effect size threshold — Cohen's d > ০.২ ছাড়া skip।
- Sequential testing (group sequential, alpha-spending) — peeking penalty।
"Garden of Forking Paths" (Gelman):
- Even one analysis-এ — many implicit decisions (subgroup, transformation, threshold)।
- প্রতিটি decision implicit comparison।
- Pre-register → bind your hands।
Industry practice:
- Booking.com, Netflix — pre-registered tests, FDR control।
- Pharma — primary endpoint pre-specified, secondary downweighted।
- Bangladesh fintech (bKash, Nagad) — usually informal; gap-area।
Dashboard caution:
- "Daily metric anomaly alert" — Bonferroni-অভাবে false alarm flood।
- Monitoring system → alpha spending threshold।
মূল উপলব্ধি: Multiple testing — silent contributor to "irreproducible research"। Awareness + correction → trustworthy data science।
অনুশীলন
-
Test বাছুন: প্রতিটি scenario-এ কোন t-test?
- (ক) Pathao redesign-এর আগে ও পরে — same ১০০ user-এর session time।
- (খ) ঢাকা vs চট্টগ্রাম Daraz user — order value compare।
- (গ) bKash দাবি — average withdrawal ২,০০০ BDT। আপনার ৫০ sample-এর mean ২,২০০।
- (ক) Paired t-test — same subjects, before-after।
- (খ) Two-sample (Welch's) — independent groups।
- (গ) One-sample t-test — vs hypothesized ২,০০০।
-
scipy practice: দু'টি independent group simulate করুন (mean ৫০ vs ৫২, std ৫, n ৫০ each) এবং Welch's t-test চালান। Cohen's d-ও।
import numpy as np from scipy import stats np.random.seed(0) g1 = np.random.normal(50, 5, 50) g2 = np.random.normal(52, 5, 50) t, p = stats.ttest_ind(g1, g2, equal_var=False) d = (g2.mean()-g1.mean()) / np.sqrt(((g1.var(ddof=1)+g2.var(ddof=1))/2)) print(f"t={t:.2f}, p={p:.4f}, d={d:.2f}")সাধারণত p < ০.০৫ ও d ≈ ০.৪ (small-medium)। বড় sample-এ p shrink, d unchanged।
-
ভাবুন: ১,০০,০০০ user-এর A/B test-এ p < ০.০০১ কিন্তু effect ০.১%। আপনি কী recommend করবেন?
প্র ০২-এ details। সংক্ষেপে: business cost-benefit calculate। Implementation cost কম + revenue impact বড় হলে launch। Statistical-only signal নয়।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পাঠ ১৩ · Chi-square ও ANOVA পরবর্তী পাঠ Categorical ও multi-group test — t-test-এর extension।
- পাঠ ১১ · Confidence interval আগের পাঠ CI ও t-test — দু'টি একই গাণিতিক ভিত্তিতে।
- পাঠ ১৫ · A/B testing এই পাঠের সাথে সম্পর্কিত t-test বাস্তবে — A/B test-এর ভিত্তি।
- সব AI Courses দেখুন ABCL TECH Python, ML, DL, NLP, CV, GenAI, RL, MLOps — সব AI কোর্স একসাথে।