Distribution ও Normality
এই পাঠে যা শিখবেন
- ৫টি গুরুত্বপূর্ণ distribution — কোথায় আসে, প্যারামিটার কী
- Real ডেটায় কোন distribution মানায় — সিদ্ধান্ত পদ্ধতি
- Normality test — QQ plot ও Shapiro-Wilk
- কখন normality দরকার, কখন না
১ · Distribution কী এবং কেন?
একটি probability distributionProbability Distributionএকটি random variable-এর সম্ভাব্য মানগুলো ও তাদের সম্ভাবনা বর্ণনাকারী mathematical function। Discrete (PMF) বা continuous (PDF) হতে পারে। বলে — "এই variable কী কী মান নিতে পারে এবং প্রতিটি মানের সম্ভাবনা কত"। histogram-এর mathematical idealization।
Real-world data-র প্রতিটি ধরন একটি specific generative process থেকে আসে — এবং সেই process থেকে আসে একটি characteristic shape।
Process bell-shape দেয় → Normal। অনেক success/failure trial → Binomial। ছোট ছোট event-এর rate → Poisson। Multiplicative growth → Log-normal। সমান সম্ভাব্য → Uniform।
২ · Normal distribution
Normal distributionNormal DistributionGauss (১৭৭৭-১৮৫৫) আবিষ্কৃত — দু'টি প্যারামিটার (mean, std)। সবচেয়ে গুরুত্বপূর্ণ distribution কারণ Central Limit Theorem অনেক sample-mean-কে normal-এ নিয়ে আসে। — bell-shape, symmetric, mean = median = mode।
$$f(x) = \frac{1}{\sigma \sqrt{2\pi}} \exp\left(-\frac{(x - \mu)^2}{2\sigma^2}\right)$$
৬৮-৯৫-৯৯.৭ rule: ৬৮% ডেটা $\mu \pm \sigma$-র মধ্যে; ৯৫% $\mu \pm 2\sigma$; ৯৯.৭% $\mu \pm 3\sigma$।
উদাহরণ: বাংলাদেশি প্রাপ্তবয়স্ক পুরুষের উচ্চতা — gene + nutrition-এর additive অনেক ছোট factor → normal-এর কাছাকাছি (mean ≈ ১৬৫ cm, σ ≈ ৭ cm)।
৩ · Log-normal distribution
যদি $\log(X)$ normal — তাহলে $X$ log-normal। Right-skewed, শুধু ধনাত্মক মান।
কোথায়:
- আয়, সম্পদ — multiplicative process।
- Stock price — daily return-এর accumulation।
- Internet traffic — file size, time-on-site।
- Daraz-এর order-value, Pathao ride-fare।
৪ · Uniform distribution
একটি interval $[a, b]$-এ সব মান সমান সম্ভাব্য। Histogram সমতল।
কোথায়: random number generator (Python-এ np.random.rand); roulette ball; Monte Carlo simulation-এর starting point।
৫ · Binomial distribution
$n$ independent trial, প্রতিটিতে success-probability $p$। Total success-এর distribution:
$$P(X = k) = \binom{n}{k} p^k (1-p)^{n-k}$$
উদাহরণ: Daraz-এ ১০০ জন user-কে notification পাঠালেন, প্রতিটির click probability ৫% (p = ০.০৫)। মোট click-এর distribution binomial(n=100, p=0.05)। গড় = $np$ = ৫।
৬ · Poisson distribution
Rare event-এর count — যখন event independent ও rate $\lambda$ constant।
$$P(X = k) = \frac{\lambda^k e^{-\lambda}}{k!}$$
উদাহরণ:
- bKash call center-এ মিনিটে কতটি কল।
- Pathao app-এ ঘণ্টায় কতটি crash।
- একটি hospital ICU-তে দিনে কতটি admission।
Binomial-এর limit (যখন $n$ বড়, $p$ ছোট, $np$ moderate) → Poisson।
৭ · Normality test — QQ plot
QQ plotQuantile-Quantile Plotডেটার quantile-এর সাথে theoretical distribution-এর quantile তুলনা — যদি লাইনে পড়ে, distribution মানায়। Visual ও দ্রুত।: ডেটার quantile-এর সাথে normal distribution-এর theoretical quantile। যদি বিন্দুগুলো সরলরেখায় — normal।
কোন pattern কী বলে:
- সরলরেখা → normal।
- S-shape (নিচে বাম-উপরে ডান বেঁকা) → heavy tail।
- উপরের right corner উপরে চলে যায় → right-skewed।
৮ · Shapiro-Wilk test
Formal hypothesis test — H0: ডেটা normal। যদি p < ০.০৫ → reject (normal নয়)।
৯ · Normality কখন দরকার?
দরকার:
- Small-sample t-test (n < ৩০)।
- Confidence interval based on t-distribution।
- ANOVA-এর residual normality assumption।
- Linear regression-এর residual।
দরকার নেই:
- Sample mean-এর CI (CLT due to large n)।
- Non-parametric test (Mann-Whitney, Wilcoxon)।
- Bootstrap-based inference।
- Machine learning models (most are distribution-free)।
১০ · scipy দিয়ে হাতে-কলমে
import numpy as np
from scipy import stats
np.random.seed(42)
# তিন ডেটাসেট
normal_data = np.random.normal(loc=170, scale=7, size=200) # উচ্চতা
lognormal_data = np.random.lognormal(mean=9.5, sigma=0.7, size=200) # আয়
uniform_data = np.random.uniform(0, 1, size=200) # random
for name, data in [("normal", normal_data),
("lognormal", lognormal_data),
("uniform", uniform_data)]:
stat, p = stats.shapiro(data)
skew = stats.skew(data)
verdict = "normal-ish" if p > 0.05 else "NOT normal"
print(f"{name:10s} | skew={skew:+.2f} | shapiro p={p:.4f} | {verdict}")
১১ · QQ plot তৈরি
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
np.random.seed(0)
income = np.random.lognormal(mean=10, sigma=0.8, size=300)
# Log নিলে normal হওয়ার কথা
log_income = np.log(income)
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
stats.probplot(income, dist="norm", plot=axes[0])
axes[0].set_title("আয় (raw) — bent")
stats.probplot(log_income, dist="norm", plot=axes[1])
axes[1].set_title("log(আয়) — straight")
plt.tight_layout()
plt.show()
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ কেন বাংলাদেশের পরিবার-আয় log-normal হয়, কিন্তু পুরুষের উচ্চতা normal? generative process-এ কী পার্থক্য?
এই প্রশ্নের উত্তরে statistics-এর সবচেয়ে গভীর insight লুকিয়ে — distribution-এর shape আসে generative mechanism থেকে।
উচ্চতা — additive process:
- Final height = base + gene_factor_1 + gene_factor_2 + nutrition + sleep + ...
- প্রতিটি factor একটি ছোট additive contribution।
- Central Limit Theorem অনুযায়ী — অনেক ছোট independent additive factor-এর sum → normal।
- তাই global-এ মানুষের উচ্চতা normal-এর কাছাকাছি।
আয় — multiplicative process:
- প্রতি বছরের আয় = গত বছর × (1 + growth_rate)।
- Growth rate ছোট random factor — কেউ ১০%, কেউ ৩০%, কেউ ০%।
- ১০ বছর পরে — এই multiplications log-scale-এ additive: $\log(\text{income}) = \log(\text{base}) + \sum \log(1 + g_i)$।
- CLT-এর কারণে log(income) → normal। অর্থাৎ income → log-normal।
আরও multiplicative process:
- Stock price — daily return-এর সংখ্যাবৃদ্ধি।
- City population — growth rate-এর accumulation।
- File size, web traffic — visitor multiply visitor।
- Pathao trip duration — traffic, distance, driver speed multiply হয়।
আরও additive process:
- Measurement error — sensor noise additive।
- IQ score — অনেক mental task average।
- Poll-এর margin error — sampling error additive।
হাইব্রিড — মাঝামাঝি:
- Body weight — উচ্চতা² × BMI। Lognormal-এর মতো।
- Reaction time — কিছুটা log-normal কারণ distraction multiplicative।
মূল উপলব্ধি: Distribution choose করার আগে generative mechanism নিয়ে ভাবুন — additive না multiplicative? Boolean trial না continuous? Rare event না common? এই বোধটাই data scientist-এর "intuition" — যা software বা model কখনো শেখাবে না।
প্র ০২ "Shapiro-Wilk p < ০.০৫" বলে আমার ১০০,০০০ row-এর ডেটা reject করা হলো। তবে histogram-এ মোটামুটি bell-shaped। কী করব? এই test বড় ডেটায় কেন unreliable?
এটি statistical practice-এর সবচেয়ে বহুল ভুল-প্রয়োগ — এবং একটি গুরুত্বপূর্ণ lesson।
সমস্যা — power-এর with-n বৃদ্ধি:
- Hypothesis test-এ — sample size যত বড়, test তত ছোট deviation detect করে।
- ৫০ point-এ Shapiro hardly detect করে।
- ১০,০০০ point-এ trivial deviation detect করে — যা practical-ভাবে অর্থহীন।
- ১,০০,০০০ point-এ — almost everything reject।
কেন এটা problem:
- Real-world data কখনোই perfectly normal নয়।
- "Useful approximation" আর "exact match" এক জিনিস নয়।
- Test বলবে "not normal", কিন্তু আপনার t-test অনেক ভাল কাজ করবে।
সমাধান — multi-pronged approach:
- (১) Visual first: histogram + QQ plot। যদি bell-shaped ও QQ মোটামুটি সরলরেখা — practical-ভাবে normal।
- (২) Effect size: Skewness ও excess kurtosis দেখুন। |skew| < ০.৫ ও |excess kurt| < ১ — practical-ভাবে fine।
- (৩) CLT lean: বড় sample-এ sample mean normal হয় regardless. তাই t-test, regression CI — সবই কাজ করবে।
- (৪) Robust alternative: Mann-Whitney U test (non-parametric); bootstrap CI।
Decision rule:
- n < ৩০ → Shapiro test ভরসা করুন।
- ৩০ ≤ n ≤ ৫০০০ → Shapiro + visual check।
- n > ৫০০০ → Shapiro ignore। Visual + skew/kurt + domain sense।
অন্যান্য normality test:
- Kolmogorov-Smirnov: বড় sample-এ Shapiro-র চেয়ে কম over-reject — কিন্তু কম powerful।
- Anderson-Darling: tail-এ বেশি sensitive — heavy tail detect-এ ভালো।
- Jarque-Bera: skew + kurt-ভিত্তিক — বড় sample-এ asymptotically reliable।
মূল উপলব্ধি: "Statistical significance ≠ practical significance" — এটা যেকোনো hypothesis test-এর core issue। বড় ডেটায় significance প্রায় guaranteed; data scientist-কে effect size + visual + domain bringing in দেখতে হবে।
প্র ০৩ Pathao customer support call/min — Poisson হিসেবে model করা হয়। কখন এই assumption ভেঙে পড়ে? Real world-এ কী পরিবর্তন করতে হবে?
Poisson distribution তিনটি core assumption-এ দাঁড়ানো — এবং প্রতিটি real world-এ ভাঙতে পারে।
Poisson-এর তিন assumption:
- Event independent (একটি call পরের call-কে প্রভাবিত করে না)।
- Rate constant time-জুড়ে।
- একই মুহূর্তে দু'টি event পাওয়া যায় না।
Real-world breakdown patterns:
-
(১) Time-of-day effect: সকাল ৮-১০টায় rush; রাত ২টায় quiet। Constant rate ভেঙে পড়ে।
সমাধান: Non-homogeneous Poisson — $\lambda(t)$ time-varying। বা hour-by-hour stratification। -
(২) Bursts/clustering: একটি app crash → হঠাৎ অনেক call একসাথে।
সমাধান: Negative Binomial distribution (over-dispersed)। Variance > mean detect করুন। -
(৩) Holidays/events: ঈদ, Daraz Big Sale → unusual peak।
সমাধান: Day-type indicator + Poisson regression। -
(৪) Self-serve diversion: Chatbot improvement → call rate ক্রমে কমে।
সমাধান: Time-trend + change-point detection।
কীভাবে detect:
- Mean ≈ variance? — Poisson-এর signature। যদি variance > mean — over-dispersion।
- QQ plot against Poisson — bend দেখুন।
- Autocorrelation: যদি independence ভঙ্গ — successive minutes-এ correlation।
Better models:
- Negative Binomial: over-dispersion handle করে।
- Poisson Regression: covariates (time, weekday, marketing campaign) যুক্ত।
- Hawkes Process: self-exciting — একটি event পরের event-এর rate বাড়ায়।
- Erlang A: abandoning callers handle করে।
Pathao-specific consideration:
- Friday বিকেলে ride-related call peak।
- রমজানে ইফতারের সময় delivery confusion → call burst।
- App update-এর পর প্রথম কয়েক ঘণ্টা — bug-related call।
মূল উপলব্ধি: Distribution choose করা একটি modeling choice — assumption test-এ পাশ করছে কিনা সেটাই key। Production-এ basic Poisson rarely fit করে; modifications দরকার।
প্র ০৪ "Data normalize করা" বলতে কী বোঝায় — এটি কি data-কে normal distribution-এ রূপান্তর? min-max scaling বা z-score-এর সাথে এর সম্পর্ক কী?
এটি practitioner-দের সবচেয়ে confusing শব্দ — "normalization" বিভিন্ন প্রসঙ্গে বিভিন্ন অর্থ।
৪টি ভিন্ন অর্থ:
- (১) Min-max scaling: সব মান $[0, 1]$ range-এ আনা। $x' = (x - \min)/(\max - \min)$। Image processing, neural network-এর input।
- (২) Z-score / standardization: $x' = (x - \mu)/\sigma$। Mean = ০, std = ১। SVM, PCA, k-means-এ অপরিহার্য। কিন্তু এটি distribution-কে normal করে না — শুধু center ও scale।
- (৩) Distribution normalization: Box-Cox বা log transform — যাতে distribution আসলেই normal হয়। Skewed data-তে।
- (৪) Database normalization: SQL-এর 1NF, 2NF, 3NF — সম্পূর্ণ আলাদা concept।
কোনটা কখন:
- Z-score: features আলাদা scale-এ (income BDT-তে, age বছরে) → distance-based algorithm-এ অপরিহার্য।
- Min-max: bounded output চাই (যেমন: pixel intensity 0-255 → 0-1)।
- Log-transform: long-tail data, multiplicative process।
- Box-Cox: power transform — λ data-driven বাছাই।
"Normalize" শুনলে — clarify করুন:
- "Min-max-এ আনব?" — bounded scale চাইলে।
- "Z-score করব?" — mean=0, std=1 চাইলে।
- "Log নেব?" — skewed হলে।
Common pitfall:
- Train-test leakage: scaler ফিট করুন শুধু train-এ, transform train ও test দু'টোতে।
- Tree-based model (RF, XGBoost) — scaling প্রায় অপ্রয়োজনীয়।
- Normalization changes interpretation — "১ unit বাড়লে y কত বাড়বে" আর সরাসরি বলা যায় না।
মূল উপলব্ধি: "Normalize" শব্দটি ambiguous — context-এ pin করুন। ML pipeline-এ আগে scaler বাছুন (z-score, min-max) তারপর সেটাই documentation-এ রাখুন।
অনুশীলন
-
Distribution বাছুন: প্রতিটি scenario-এ কোন distribution মানায়?
- (ক) Daraz-এ ১০০০ user-কে SMS পাঠালে কতজন click করবে।
- (খ) Pathao-এ একটি bike-এ ১ ঘণ্টায় কতটি ride accept।
- (গ) ঢাকায় বাড়িভাড়া।
- (ঘ) উচ্চতা।
- (ক) Binomial — n=১০০০ trial, success-fail।
- (খ) Poisson — rare event count, fixed time window।
- (গ) Log-normal — multiplicative process, +ve, right-skewed।
- (ঘ) Normal — additive gene + nutrition factor।
-
scipy-তে normality test: ১০০টি random number generate করুন (normal থেকে), Shapiro-Wilk চালান, p-value report করুন।
import numpy as np from scipy import stats np.random.seed(0) data = np.random.normal(0, 1, 100) stat, p = stats.shapiro(data) print(f"p = {p:.4f} → {'normal' if p > 0.05 else 'reject'}")সাধারণত p > ০.০৫ আসবে — সঠিকভাবেই normal হিসেবে accept।
-
ভাবুন: bKash-এর daily transaction amount পরীক্ষা করতে হবে। আপনি কোন ৩টি step নেবেন নির্ণয় করতে এটি কোন distribution অনুসরণ করে?
- Histogram + summary stats — skewness দেখুন।
- QQ plot against normal ও log-normal — দু'টি compare।
- Log-transform-এর পর Shapiro বা Anderson-Darling test।
সাধারণত financial transaction log-normal — log নিলে normal-এর কাছাকাছি।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পাঠ ১০ · Sampling ও CLT পরবর্তী পাঠ Normal কেন এত গুরুত্বপূর্ণ — Central Limit Theorem-এর কারণ।
- পাঠ ০৮ · Descriptive statistics আগের পাঠ Mean, median, std — distribution-এর summary statistics।
- পাঠ ১২ · t-test এই পাঠের সাথে সম্পর্কিত t-test-এ normality assumption — কখন গুরুত্বপূর্ণ, কখন নয়।
- সব AI Courses দেখুন ABCL TECH Python, ML, DL, NLP, CV, GenAI, RL, MLOps — সব AI কোর্স একসাথে।