পাঠ ১২ · ৩০-এর মধ্যে · মডিউল ২
Home / AI Courses / ডেটা সায়েন্স / Hypothesis testing — t-test

Hypothesis testing — t-test

One-sample, two-sample & paired t-tests
৮ মিনিট পড়া মাঝারি · Intermediate scipy কোডসহ

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

  • 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।
ASA (American Statistical Association) ২০১৬-তে p-value misuse-এর বিরুদ্ধে formal warning জারি করেছে। "Statistical significance" শব্দটি drop করার আন্দোলনও আছে। Effect size + CI + p-value তিনটি একসাথে report — সঠিক practice।

৬ · 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 (α)।

কোন t-test? — সিদ্ধান্ত flow Mean compare করব কতটি group? ১টি One-sample t-test vs hypothesized value ২টি Same subject? হ্যাঁ Paired t-test before-after, matched না Two-sample t-test Welch's preferred
কোন t-test বাছবেন — তিনটি প্রশ্নের উত্তরে। Sample-এর structure (group সংখ্যা, dependence) চিহ্নিত করলেই সঠিক test।

৮ · scipy দিয়ে t-test (one-sample)

Python · scipy.stats
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

Python · scipy + Cohen's d
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'})")

    
Output-এ — significant difference (p < ০.০৫) থাকলেও Cohen's d দেখুন। d ≈ ০.৩৫ মানে small-medium effect — practically significant কি না business team-এর সিদ্ধান্ত।

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

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

প্র ০১ "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:

  1. Effect size compute:
    • Cohen's h (proportion-এর জন্য) বা Cohen's d।
    • Relative lift: ০.১% / ৫% baseline = ২%।
    • Absolute change: ০.১ percentage point।
  2. Business cost-benefit:
    • ১০ লাখ MAU হলে — ০.১% lift = ১০০০ extra conversions/month।
    • Per conversion BDT ৫০০ → ৫,০০,০০০ extra revenue/month।
    • Implementation cost: ২ developer-week।
    • Worth it? — yes।
  3. 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।

অনুশীলন

  1. 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 ২,০০০।
  2. 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।

  3. ভাবুন: ১,০০,০০০ user-এর A/B test-এ p < ০.০০১ কিন্তু effect ০.১%। আপনি কী recommend করবেন?

    প্র ০২-এ details। সংক্ষেপে: business cost-benefit calculate। Implementation cost কম + revenue impact বড় হলে launch। Statistical-only signal নয়।

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

কোড রানার কাজ না করলে? ব্রাউজারে কাজ না করলে Google Colab ব্যবহার করুন — Google-এর ফ্রি অনলাইন Python পরিবেশ, শুধু Gmail অ্যাকাউন্ট লাগে।
পূর্ববর্তী পাঠ
পাঠ ১১ · Confidence interval