পাঠ ০৯ · ৩০-এর মধ্যে · মডিউল ২
Home / AI Courses / ডেটা সায়েন্স / Distribution ও Normality

Distribution ও Normality

Distributions & normality testing
৭ মিনিট পড়া শুরু · Beginner scipy কোডসহ

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

  • ৫টি গুরুত্বপূর্ণ 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।

Distribution → process

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।
কেন log-normal? — ভাবুন আপনার বেতন প্রতি বছর ১০-৩০% হারে বাড়ে। এটা multiplicative — additive নয়। ১০ বছর পর বেতনের distribution log-normal হবে। Income Bangladesh-এ — log-নিলে normal-এর মতো দেখায়, log না নিলে heavily skewed।

৪ · 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।

Distribution zoo — কোন process কোন shape Normal height, error Log-normal income, price Uniform random() Binomial clicks/100 Poisson calls/min, ICU adm কোনটি বাছবেন — দ্রুত গাইড Continuous, symmetric → Normal Continuous, +ve, skewed → Log-normal Count of "yes" in n trials → Binomial Rare event count, fixed time → Poisson No info, equal odds → Uniform
পাঁচটি সবচেয়ে বহুল-ব্যবহৃত distribution এবং প্রতিটির signature shape। কোন process কোন shape দেয় — সেই intuition data scientist-এর key tool।

৭ · 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 নয়)।

বড় sample (n > ৫০০০) — Shapiro-Wilk প্রায়ই reject করবে যদিও deviation trivial। তাই বড় ডেটায় visual check (QQ plot) বেশি reliable। ছোট ডেটায় (n < ৫০) test-এর power কম — significant deviation miss করে।

৯ · 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 দিয়ে হাতে-কলমে

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

    
Output-এ — normal_data-র p > ০.০৫ (normal হিসেবে accept), lognormal ও uniform reject। Skewness দেখুন — log-normal-এ ধনাত্মক skew, baki দু'টি ~০।

১১ · QQ plot তৈরি

Python · matplotlib + scipy
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()

    
Raw income-এ QQ plot বাঁকানো — log নিলে সোজা। এটাই log-normal-এর definition এবং কেন বাংলাদেশের আয়-ডেটায় log-transform প্রায়ই করা হয়।

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

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

প্র ০১ কেন বাংলাদেশের পরিবার-আয় 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-এ রাখুন।

অনুশীলন

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

  3. ভাবুন: bKash-এর daily transaction amount পরীক্ষা করতে হবে। আপনি কোন ৩টি step নেবেন নির্ণয় করতে এটি কোন distribution অনুসরণ করে?
    1. Histogram + summary stats — skewness দেখুন।
    2. QQ plot against normal ও log-normal — দু'টি compare।
    3. Log-transform-এর পর Shapiro বা Anderson-Darling test।

    সাধারণত financial transaction log-normal — log নিলে normal-এর কাছাকাছি।

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

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