পাঠ ৩৩ · ৩৫-এর মধ্যে · মডিউল ৭
Home / AI Courses / Math for AI & ML / হাইপোথিসিস টেস্টিং ও p-value

হাইপোথিসিস টেস্টিং ও p-value

Hypothesis testing & p-values
১১ মিনিট পড়া মাঝারি · Intermediate NumPy কোডসহ সম্পূর্ণ বাংলায়

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

  • নাল ও অল্টারনেটিভ হাইপোথিসিস কীভাবে ঠিকভাবে সেট আপ করতে হয়
  • টেস্ট স্ট্যাটিসটিক ও p-value-এর নিখুঁত সংজ্ঞা, এবং কেন এটি একটি শর্তাধীন সম্ভাবনা
  • সিগনিফিক্যান্স লেভেল ও সিদ্ধান্ত নেওয়ার নিয়ম
  • p-value নিয়ে সবচেয়ে বেশি ছড়ানো ভুল ব্যাখ্যাটি এবং কেন সেটি ভুল
  • NumPy দিয়ে একটি সম্পূর্ণ হাইপোথিসিস টেস্ট হাতে-কলমে হিসাব করা

১ · কেন শুধু "সংখ্যাটা আলাদা" যথেষ্ট নয়

ধরুন আপনার মডেলের নতুন ভার্সন (B) পুরনো ভার্সনের (A) চেয়ে ১০০ জন ব্যবহারকারীর মধ্যে ২ জন বেশি সঠিক উত্তর দিয়েছে। এটা কি প্রকৃত উন্নতি, নাকি নিছক কাকতালীয় (random) ফলাফল? পাঠ ২৯-এ আমরা দেখেছি স্যাম্পল মিন প্রকৃত মিনের চারপাশে ওঠানামা করে — তাই শুধু দুটো সংখ্যা পাশাপাশি রেখে সিদ্ধান্ত নেওয়া বিপজ্জনক। হাইপোথিসিস টেস্টিং হলো এই "পার্থক্যটা কি বাস্তব, নাকি স্রেফ শব্দ (noise)?" প্রশ্নের একটি কঠোর, গাণিতিক উত্তর দেওয়ার পদ্ধতি — এবং এটি সরাসরি পাঠ ২৪-এর সম্ভাবনার স্বতঃসিদ্ধ ও শর্তাধীন সম্ভাবনার উপর দাঁড়িয়ে আছে।

২ · নাল হাইপোথিসিস বনাম অল্টারনেটিভ হাইপোথিসিস

প্রতিটি হাইপোথিসিস টেস্ট শুরু হয় দুটি প্রতিদ্বন্দ্বী বিবৃতি দিয়ে। নাল হাইপোথিসিসNull Hypothesis, $H_0$"কোনো প্রভাব নেই" বা "কোনো পার্থক্য নেই" — এই ডিফল্ট ধারণা যা আমরা খণ্ডন করার চেষ্টা করি। ($H_0$) হলো "কোনো পার্থক্য নেই" ধরনের রক্ষণশীল ধারণা — যেমন "কয়েনটি ফেয়ার, $p=0.5$" বা "মডেল A ও B-এর প্রকৃত অ্যাকুরেসি সমান"। অল্টারনেটিভ হাইপোথিসিসAlternative Hypothesis, $H_1$যা আমরা প্রমাণ করতে চাই — $H_0$-এর বিপরীত। ($H_1$) হলো আমরা যা সন্দেহ করছি — যেমন "কয়েনটি ফেয়ার নয়, $p \neq 0.5$"। গুরুত্বপূর্ণ কথা: আমরা কখনো সরাসরি $H_1$ "প্রমাণ" করি না, বরং শুধু $H_0$-কে প্রত্যাখ্যান করার জন্য যথেষ্ট প্রমাণ আছে কি না তা যাচাই করি।

কেন এইভাবে গঠন করা

এটি অনেকটা আদালতের "নির্দোষ প্রমাণিত না হওয়া পর্যন্ত নির্দোষ" নীতির মতো — $H_0$ (নির্দোষ/কোনো পার্থক্য নেই) ততক্ষণ বহাল থাকে যতক্ষণ না ডেটা তার বিরুদ্ধে যথেষ্ট শক্তিশালী প্রমাণ দেয়।

৩ · টেস্ট স্ট্যাটিসটিক ও p-value-এর সংজ্ঞা

প্রথমে ডেটা থেকে একটি সংখ্যা বের করা হয় যাকে বলে টেস্ট স্ট্যাটিসটিকTest Statisticপর্যবেক্ষিত ডেটা থেকে গণনা করা একটি সংখ্যা, যা $H_0$-এর অধীনে একটি পরিচিত বিতরণ অনুসরণ করে। — এটি এমনভাবে তৈরি করা হয় যাতে $H_0$ সত্য হলে এর বিতরণ আমরা জানি। এরপর আসে এই পাঠের কেন্দ্রীয় সংজ্ঞা:

p-value-এর সংজ্ঞা

p-value হলো — $H_0$ সত্য ধরে নিলে, পর্যবেক্ষিত ডেটার সমান বা তার চেয়ে চরম (extreme) কিছু দেখার সম্ভাবনা। প্রতীকে লিখলে, যদি $T$ টেস্ট স্ট্যাটিসটিক ও $t_{obs}$ আমাদের পর্যবেক্ষিত মান হয়, তাহলে (দুই-পার্শ্বীয় টেস্টে) $$p = P(|T| \geq |t_{obs}| \mid H_0 \text{ সত্য})$$ লক্ষ করুন — এটি একটি শর্তাধীন সম্ভাবনা (পাঠ ২৪), এবং শর্তটি সবসময় $H_0$-এর উপর, ডেটার উপর নয়।

৪ · একটি সম্পূর্ণ উদাহরণ — কয়েনটি কি ফেয়ার?

পাঠ ৩০-এ আমরা coin-flip MLE দেখেছিলাম, যেখানে $n$ বার ফ্লিপে $k$ বার হেড পেলে $\hat p = k/n$। এখন প্রশ্ন করি — এই $\hat p$ কি এতটাই আলাদা $0.5$ থেকে যে কয়েনটি ফেয়ার নয় বলে সন্দেহ করা যায়? ধরা যাক $n=100$ বার ফ্লিপে $k=62$ বার হেড পাওয়া গেছে।

সেটআপ: $H_0: p = 0.5$ (কয়েন ফেয়ার), $H_1: p \neq 0.5$। $H_0$-এর অধীনে হেডের সংখ্যা $X \sim \text{Binomial}(n, 0.5)$, যার গড় $\mu = np = 50$ ও স্ট্যান্ডার্ড ডেভিয়েশন $\sigma = \sqrt{np(1-p)} = \sqrt{25} = 5$ (বড় $n$-এর জন্য Binomial-কে Normal দিয়ে আসন্নীকরণ করা যায় — এই যুক্তির গভীর ভিত্তি পাঠ ২৯-এর কেন্দ্রীয় সীমা উপপাদ্য)। টেস্ট স্ট্যাটিসটিক (z-score): $$z = \frac{k - \mu}{\sigma} = \frac{62 - 50}{5} = 2.4$$ দুই-পার্শ্বীয় p-value হলো $z$-এর মান $2.4$-এর চেয়ে বড় বা $-2.4$-এর চেয়ে ছোট হওয়ার সম্ভাবনা: $$p = 2 \times P(Z \geq 2.4) = 2 \times \big(1 - \Phi(2.4)\big) \approx 0.0164$$ যেখানে $\Phi$ হলো স্ট্যান্ডার্ড নরমাল CDF।

Python · NumPy
import numpy as np
from math import erf, sqrt

n = 100          # মোট coin flip
k = 62           # হেড-এর সংখ্যা
p0 = 0.5         # H0-এর অধীনে সম্ভাবনা

# H0-এর অধীনে প্রত্যাশিত mean ও std (Binomial -> Normal আসন্নীকরণ)
mu = n * p0
sigma = np.sqrt(n * p0 * (1 - p0))

# টেস্ট স্ট্যাটিসটিক (z-score)
z = (k - mu) / sigma

# স্ট্যান্ডার্ড নরমাল CDF, erf ফাংশন দিয়ে
def norm_cdf(x):
    return 0.5 * (1 + erf(x / sqrt(2)))

# দুই-পার্শ্বীয় (two-sided) p-value
p_value = 2 * (1 - norm_cdf(abs(z)))

print("z =", round(z, 4))
print("p-value =", round(p_value, 4))

alpha = 0.05
print("H0 প্রত্যাখ্যান?" , "হ্যাঁ" if p_value < alpha else "না")

    
$p \approx 0.0164 < 0.05$ — তাই আমরা $H_0$ প্রত্যাখ্যান করি এবং সিদ্ধান্ত নিই যে কয়েনটি সম্ভবত ফেয়ার নয়। কিন্তু লক্ষ করুন — এটি "কয়েনটি অফেয়ার" প্রমাণ করে না, শুধু বলে যে যদি এটি ফেয়ার হতো, তাহলে এত চরম ফলাফল দেখার সম্ভাবনা কম ছিল।

৫ · সিগনিফিক্যান্স লেভেল ও সিদ্ধান্তের নিয়ম

টেস্ট করার আগেই একটি থ্রেশহোল্ড ঠিক করা হয়, যাকে বলে সিগনিফিক্যান্স লেভেলSignificance Level, $\alpha$$H_0$ সত্য হলেও ভুলবশত প্রত্যাখ্যান করার সর্বোচ্চ গ্রহণযোগ্য সম্ভাবনা। সচরাচর $0.05$। ($\alpha$), সাধারণত $0.05$। সিদ্ধান্তের নিয়ম সহজ:

  • যদি $p < \alpha$ — $H_0$ প্রত্যাখ্যান করো ("স্ট্যাটিস্টিক্যালি সিগনিফিক্যান্ট")।
  • যদি $p \geq \alpha$ — $H_0$ প্রত্যাখ্যান করার মতো যথেষ্ট প্রমাণ নেই (এর মানে $H_0$ সত্য প্রমাণিত হলো — তাও নয়)।

৬ · সবচেয়ে সাধারণ ভুল ব্যাখ্যা

p-value "$H_0$ সত্য হওয়ার সম্ভাবনা" নয়। $p=0.0164$ মানে এই নয় যে "কয়েনটি ফেয়ার হওয়ার সম্ভাবনা মাত্র ১.৬৪%"। p-value সবসময় একটি শর্তাধীন সম্ভাবনা — $H_0$ সত্য ধরে নিলে ডেটা দেখার সম্ভাবনা, উল্টোটা নয় ($P(\text{ডেটা}\mid H_0)$, $P(H_0\mid\text{ডেটা})$ নয়)। এই দুটি গুলিয়ে ফেলা এত সাধারণ যে একে নিজের নামই দেওয়া হয়েছে — the prosecutor's fallacy। $H_0$-এর প্রকৃত সম্ভাবনা বের করতে বেয়সিয়ান পদ্ধতি (পাঠ ২৮) লাগবে, একটিমাত্র p-value নয়।

ধোঁয়া অ্যালার্ম বাজলে এর মানে এই নয় যে "আগুন লাগার সম্ভাবনা ৯৯%" — এর মানে হলো "যদি আগুন না-ও লাগে, তাহলেও অ্যালার্ম বাজার সম্ভাবনা কম"। p-value ঠিক এভাবেই কাজ করে — এটি প্রমাণের শক্তি মাপে, সিদ্ধান্তের সত্যতার সম্ভাবনা নয়।

৭ · বাস্তব প্রয়োগ — A/B টেস্টিং

মডেল A ও মডেল B-এর মধ্যে তুলনা করার সময়ও ঠিক এই একই যন্ত্র ব্যবহার হয়: $H_0$ হলো "দুটি ভার্সনের প্রকৃত অ্যাকুরেসি/কনভার্শন রেট সমান", টেস্ট স্ট্যাটিসটিক গণনা করা হয় দুই গ্রুপের পার্থক্য থেকে, এবং p-value বলে দেয় এই পার্থক্য নিছক নমুনা-শব্দ (sampling noise) দিয়ে ব্যাখ্যা করা যায় কি না। প্রতিটি প্রোডাক্ট টিমের A/B টেস্টিং ড্যাশবোর্ডের পেছনে ঠিক এই গণিতটাই আছে।

মূল কথা · Key takeaway

হাইপোথিসিস টেস্টিং একটি নিশ্চিত উত্তর দেয় না — এটি একটি সুশৃঙ্খল উপায়ে বলে দেয় ডেটা $H_0$-এর বিরুদ্ধে কতটা শক্তিশালী প্রমাণ দিচ্ছে। ছোট p-value মানে "প্রমাণ শক্তিশালী", "সিদ্ধান্ত নিশ্চিত সত্য" নয় — এই পার্থক্যটি মাথায় রাখলেই এই পুরো টুলটি সঠিকভাবে ব্যবহার করা যায়।

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

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

প্র ০১ যদি $n=10$ বার ফ্লিপে $k=6$ বার হেড পেতাম (একই অনুপাত $0.6$, কিন্তু ছোট নমুনা), তাহলে p-value কি $0.0164$-এর মতোই ছোট হতো?

না — অনেক বড় হতো। $\sigma = \sqrt{10 \times 0.5 \times 0.5} \approx 1.58$, তাই $z = (6-5)/1.58 \approx 0.63$, যা $2.4$-এর চেয়ে অনেক ছোট এবং p-value বেশ বড় ($\approx 0.53$) হবে। ছোট নমুনায় একই অনুপাত অনেক কম প্রমাণ বহন করে — কারণ নমুনা-শব্দের (sampling noise) পরিমাণ $\sigma$ নমুনার আকারের সাথে সম্পর্কিত ($\sigma \propto 1/\sqrt{n}$, পাঠ ২৯)। বড় নমুনায় একই ছোট পার্থক্যও পরিসংখ্যানগতভাবে সিগনিফিক্যান্ট হতে পারে।

প্র ০২ একজন গবেষক $\alpha=0.05$-এর কাছাকাছি $p=0.049$ পেয়ে "সফল" ঘোষণা করলেন। এটি কেন সমস্যাজনক হতে পারে?

$\alpha=0.05$ একটি প্রায়-স্বেচ্ছাচারী (arbitrary) কনভেনশন, কোনো জাদুকরী সীমারেখা নয়। $p=0.049$ ও $p=0.051$-এর মধ্যে বাস্তবিক পার্থক্য প্রায় শূন্য, অথচ একটিকে "সিগনিফিক্যান্ট" ও আরেকটিকে "নন-সিগনিফিক্যান্ট" বলা হলে ভুল দ্বিমুখী সিদ্ধান্তের অনুভূতি তৈরি হয়। এছাড়া বহু প্যারামিটার/বহু টেস্ট চালিয়ে সবচেয়ে ছোট p-value বেছে নেওয়া (p-hacking) মিথ্যা পজিটিভের সম্ভাবনা অনেক বাড়িয়ে দেয়।

প্র ০৩ এক-পার্শ্বীয় (one-sided) টেস্ট ও দুই-পার্শ্বীয় (two-sided) টেস্টের মধ্যে পার্থক্য কী, এবং কোনটি কখন ব্যবহার করবেন?

দুই-পার্শ্বীয় টেস্ট ($H_1: p \neq 0.5$) দুই দিকের বিচ্যুতিই (বেশি বা কম) সন্দেহজনক ধরে নেয়। এক-পার্শ্বীয় টেস্ট ($H_1: p > 0.5$) শুধু একটি নির্দিষ্ট দিকের বিচ্যুতিতেই আগ্রহী — যেমন "নতুন মডেল পুরনোটির চেয়ে ভালো কি না" (শুধু ভালো হওয়ার প্রশ্ন, খারাপ হওয়া নয়)। এক-পার্শ্বীয় টেস্টে একই ডেটায় p-value ছোট হয় (এখানে অর্ধেক, $\approx 0.0082$), কিন্তু দিকনির্দেশ আগে থেকেই ঠিক করে রাখতে হয় — ফলাফল দেখে পছন্দমতো দিক বেছে নেওয়া বৈধ নয়।

অনুশীলন

  1. নিজে হিসাব করুন: কোড সেলে $n=200$, $k=115$ বসিয়ে নতুন $z$ ও p-value হাতে হিসাব করুন, তারপর Run চেপে মিলিয়ে দেখুন। $H_0$ প্রত্যাখ্যাত হয় কি না?

    $\mu = 100$, $\sigma = \sqrt{200 \times 0.25} \approx 7.07$, $z = (115-100)/7.07 \approx 2.12$, $p \approx 2(1-\Phi(2.12)) \approx 0.034$। যেহেতু $p < 0.05$, $H_0$ প্রত্যাখ্যাত হয়।

  2. ব্যাখ্যা করুন: একজন সহকর্মী বললেন "আমাদের A/B টেস্টে $p=0.03$ পেয়েছি, মানে নতুন ভার্সন ৯৭% নিশ্চিতভাবে ভালো"। এই বাক্যে ঠিক কোন ভুলটি আছে এবং সঠিক ব্যাখ্যা কী হবে?

    এটি p-value-কে "$H_0$ মিথ্যা হওয়ার সম্ভাবনা"-র সাথে গুলিয়ে ফেলছে। সঠিক ব্যাখ্যা: "যদি দুই ভার্সনের প্রকৃত পারফরম্যান্স সমান হতো (অর্থাৎ $H_0$ সত্য হতো), তাহলে আমরা যে পার্থক্য পর্যবেক্ষণ করেছি তার সমান বা তার চেয়ে চরম পার্থক্য দেখার সম্ভাবনা মাত্র ৩%"। এটি "নতুন ভার্সন ৯৭% নিশ্চিত ভালো" থেকে সম্পূর্ণ আলাদা একটি বিবৃতি।

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

পূর্ববর্তী পাঠ
রেগুলারাইজেশন as MAP