Descriptive statistics
এই পাঠে যা শিখবেন
- Mean, median, mode — কখন কোনটা ব্যবহার করতে হয়
- Std, variance, IQR — spread পরিমাপের তিন উপায়
- Skewness ও kurtosis — distribution-এর shape বুঝা
- pandas
.describe()দিয়ে এক লাইনে সব stats
১ · কেন descriptive stats?
ভাবুন — Daraz-এর গত মাসের ১০ লাখ অর্ডারের একটি CSV ফাইল আপনার সামনে। সরাসরি প্রতিটি সারি দেখা অসম্ভব। আপনি জানতে চান — "গড় অর্ডার-ভ্যালু কত? সবচেয়ে বড় আর সবচেয়ে ছোট কত? অধিকাংশ অর্ডার কোন range-এ?"। এই প্রশ্নগুলোর উত্তর দেয় descriptive statisticsDescriptive Statisticsডেটাকে সংক্ষিপ্ত সংখ্যায় বর্ণনা করার পদ্ধতি — central tendency, spread, ও shape। Inferential statistics-এর বিপরীত (যা sample থেকে population সম্পর্কে inference করে)।।
১) কোথায় কেন্দ্র? — mean, median, mode।
২) কতটা ছড়ানো? — std, variance, IQR, range।
৩) আকার কী? — skewness (অপ্রতিসাম্য), kurtosis (চূড়াশীর্ণতা)।
এই তিন প্রশ্নের উত্তর জানলে — যেকোনো column সম্পর্কে আপনার মোটামুটি ধারণা হয়ে যাবে। বাকি analysis তো এই ভিত্তির উপরই।
২ · Mean — সরল গড়
MeanArithmetic Meanসব মান যোগ করে সংখ্যা দিয়ে ভাগ। Outlier-এর প্রতি sensitive — একটি বিশাল বা ক্ষুদ্র মান গড়কে টেনে নিতে পারে। হলো "সব যোগ, সংখ্যা দিয়ে ভাগ":
$$\bar{x} = \frac{1}{n} \sum_{i=1}^{n} x_i$$
উদাহরণ: ৫ জন bKash এজেন্টের দৈনিক transaction (BDT): ১২,০০০, ১৫,০০০, ১৮,০০০, ১৪,০০০, ১১,০০০।
Mean $= (১২ + ১৫ + ১৮ + ১৪ + ১১) / ৫ = ৭০ / ৫ = ১৪$ হাজার।
৩ · Median — মধ্যবর্তী মান
MedianMedianডেটাকে sort করার পর ঠিক মাঝখানের মান। Outlier-এর প্রতি robust — তাই asymmetric distribution-এ mean-এর চেয়ে নির্ভরযোগ্য। হলো sort করার পর ঠিক মাঝের সংখ্যা। যদি সংখ্যা even হয় — মাঝের দু'টির গড়।
উপরের উদাহরণে sort: ১১, ১২, ১৪, ১৫, ১৮ — মাঝের সংখ্যা ১৪ হাজার।
কখন median ব্যবহার করবেন?
- আয়, সম্পদ, বাড়ির দাম — সব right-skewed। mean বিভ্রান্তিকর।
- Order value, click-count, time-on-page — log-normal-এর কাছাকাছি।
- যেকোনো small-n ডেটা যেখানে একটি অস্বাভাবিক মান থাকতে পারে।
৪ · Mode — সর্বাধিক frequent
ModeModeযে মানটি ডেটায় সবচেয়ে বেশিবার এসেছে। Categorical ডেটার জন্য একমাত্র central tendency। একাধিক mode থাকলে — bimodal বা multimodal distribution। = সবচেয়ে frequent মান। Categorical ডেটার (যেমন: জেলা, পেমেন্ট পদ্ধতি) জন্য একমাত্র central tendency।
Pathao-এর payment method: cash, bKash, Nagad, card — যদি cash সর্বাধিক, তাহলে mode = "cash"। Numerical ডেটায় mode কম useful — কারণ continuous values খুব কমই পুনরাবৃত্ত।
৫ · Variance ও Standard Deviation
Spread পরিমাপের সবচেয়ে জনপ্রিয় উপায় — varianceVarianceপ্রতিটি মান কতটা mean থেকে দূরে — সেই দূরত্ব-এর বর্গের গড়। Std-এর বর্গ। Sample variance-এ n−1 দিয়ে ভাগ (Bessel's correction)। ও standard deviation:
$$\sigma^2 = \frac{1}{n-1} \sum_{i=1}^{n} (x_i - \bar{x})^2 \quad,\quad \sigma = \sqrt{\sigma^2}$$
অর্থ: std মানে — মানগুলো গড়ে কতটা mean থেকে দূরে। ছোট std মানে ডেটা mean-এর কাছাকাছি, বড় std মানে ছড়ানো।
উপরের bKash এজেন্ট-এ:
$\sigma^2 = [(11-14)^2 + (12-14)^2 + (14-14)^2 + (15-14)^2 + (18-14)^2] / 4 = [9 + 4 + 0 + 1 + 16] / 4 = 7.5$
$\sigma = \sqrt{7.5} \approx 2.74$ হাজার।
৬ · Range ও IQR
Range = max − min। সরল কিন্তু outlier-এ ভাঙে। উপরের উদাহরণে range = ১৮ − ১১ = ৭ হাজার।
IQRInterquartile Range (IQR)৭৫তম percentile (Q3) − ২৫তম percentile (Q1)। মাঝের ৫০% ডেটার spread। Outlier-resistant — boxplot-এর ভিত্তি। = Q3 − Q1 = ৭৫তম percentile − ২৫তম percentile। মাঝের ৫০% ডেটার spread। Outlier-resistant।
Outlier rule: $Q_1 - 1.5 \cdot \text{IQR}$-এর নিচে বা $Q_3 + 1.5 \cdot \text{IQR}$-এর উপরে — outlier হিসেবে চিহ্নিত। boxplot-এর "whisker" এই rule অনুসরণ করে।
৭ · Skewness — অপ্রতিসাম্য
SkewnessSkewnessdistribution কোন দিকে হেলে আছে — তার পরিমাপ। +ve = right tail (ধনাত্মক skew, mean > median); -ve = left tail। Symmetric distribution-এ skewness = 0। জানায় distribution কোন দিকে হেলে। যদি একটি দীর্ঘ "লেজ" ডান দিকে — right-skewed (ধনাত্মক)। যদি বাম দিকে — left-skewed (ঋণাত্মক)।
Right-skewed উদাহরণ: বাংলাদেশের পরিবারগুলোর মাসিক আয়। অধিকাংশ ১০-৩০ হাজারে, কিছু পরিবার লাখে, কিছু কোটিতে। Mean > median।
Left-skewed উদাহরণ: মৃত্যুর বয়স — অধিকাংশ ৭০+ এ মারা যান, কিছু শিশুকালে।
৮ · Kurtosis — চূড়াশীর্ণতা
KurtosisKurtosisdistribution-এর "চূড়া কতটা চূড়াকার এবং tail কতটা ভারী"। Normal-এর kurtosis = 3 (excess kurtosis = 0)। Heavy-tail (leptokurtic) finance/insurance-এ critical — extreme event-এর সম্ভাবনা। বলে — distribution-এর চূড়া কতটা তীক্ষ্ণ এবং tail কতটা ভারী। Normal distribution-এর kurtosis = 3 (excess kurtosis = 0)।
- Leptokurtic (kurtosis > 3): চূড়া উঁচু, লেজ ভারী — extreme event বেশি। Stock return, insurance claim।
- Mesokurtic (≈3): normal-এর মতো।
- Platykurtic (< 3): চ্যাপ্টা — extreme value বিরল।
.describe() এক লাইনে আটটি sufficient stats দেয়।৯ · pandas-এ হাতে-কলমে
চলুন একটি simulated bKash transaction ডেটায় সব stats দেখি।
import pandas as pd
import numpy as np
# bKash এজেন্ট-এর দৈনিক transaction (BDT, simulated, right-skewed)
np.random.seed(42)
tx = np.random.lognormal(mean=9.5, sigma=0.7, size=200).round(0)
df = pd.DataFrame({"daily_tx": tx})
print(df.describe().round(0))
print(f"\nMean : {df['daily_tx'].mean():.0f}")
print(f"Median : {df['daily_tx'].median():.0f}")
print(f"Mode : {df['daily_tx'].mode().iloc[0]:.0f}")
print(f"Std : {df['daily_tx'].std():.0f}")
print(f"IQR : {df['daily_tx'].quantile(0.75) - df['daily_tx'].quantile(0.25):.0f}")
print(f"Skew : {df['daily_tx'].skew():.2f}")
print(f"Kurt : {df['daily_tx'].kurtosis():.2f}")
১০ · একাধিক group তুলনা
import pandas as pd
import numpy as np
np.random.seed(0)
data = pd.DataFrame({
"city": np.random.choice(["Dhaka", "Chittagong", "Sylhet"], 300),
"order_bdt": np.random.lognormal(7.5, 0.6, 300).round(0)
})
# প্রতিটি শহরে মূল stats
summary = data.groupby("city")["order_bdt"].agg(
count="count", mean="mean", median="median",
std="std", iqr=lambda x: x.quantile(0.75) - x.quantile(0.25)
).round(0)
print(summary)
groupby + agg — প্রতিটি শহরের আলাদা summary। Daraz-এর মতো কোম্পানি প্রতিদিন এই pattern ব্যবহার করে — শহরভিত্তিক, বয়সভিত্তিক, ক্যাটেগরিভিত্তিক analysis।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ বাংলাদেশের "মাথাপিছু আয়" রিপোর্টে সাধারণত mean ব্যবহার হয়। এটি কেন বিভ্রান্তিকর হতে পারে? Median বা trimmed mean কি বেশি সঠিক?
এটি statistics-এর সবচেয়ে বহুল আলোচিত উদাহরণ — এবং দুঃখজনকভাবে public communication-এ সবসময় ভুল হয়।
সমস্যা — আয় বণ্টন right-skewed:
- বাংলাদেশে অধিকাংশ পরিবার মাসিক ১৫-৪০ হাজার টাকা আয় করে।
- কিছু পরিবার ১-৫ লাখ। কিছু কোটি টাকা।
- একজন কোটিপতির আয় ১,০০,০০০ গরিব পরিবারের গড়কেও তুলে ধরে।
- ফলে — "মাথাপিছু আয় ১৭৭০ ডলার" বললেও — অধিকাংশ পরিবার এর অনেক নিচে।
Median বেশি সঠিক:
- "৫০% মানুষ এই মান-এর নিচে আয় করে" — clear ও সঠিক ছবি।
- USA-তে "median household income" বহুল ব্যবহৃত — কারণ এটি typical experience capture করে।
- বাংলাদেশে BBS-এর HIES survey-এ median income দেওয়া হয়, কিন্তু news-এ rarely highlighted।
Trimmed mean:
- উপরে ৫% ও নিচে ৫% ফেলে দিয়ে mean — outlier-resistant।
- Olympics judging score, statistical surveys-এ ব্যবহৃত।
- Median-এর চেয়ে কিছুটা বেশি information ব্যবহার করে।
আরও বিকল্প — distributional view:
- Quintiles: "নিচের ২০% মানুষ মোট আয়ের কত %?" — Gini coefficient-এর ভিত্তি।
- Histogram বা CDF: মানুষ পুরো বণ্টন দেখলে নিজেই বুঝতে পারে।
- Geometric mean: log-normal data-র জন্য prefer।
Public communication-এর দায়িত্ব: "গড়" সবসময় mean বুঝায় না। যিনি ডেটা দেখান — তার উচিত skewness মাথায় রাখা ও সঠিক metric বাছা। এটাই data literacy-র মূল।
প্র ০২ Pathao-এর আপনার মাসিক ride data দেখাচ্ছে: mean = ৩৫০ BDT, median = ২২০ BDT, mode = ১২০ BDT। এই তিনটি সংখ্যা থেকে কী পড়া যায়? শুধু একটি সংখ্যা দিলে কোনটি বেছে নিতেন?
এই pattern (mean > median > mode) — distributional analysis-এর ক্লাসিক sign।
যা পড়া যায়:
- Right-skewed distribution: mean > median > mode — তিনটি আলাদা মান। এটি শক্তিশালী indication যে এই data heavily right-skewed।
- সর্বাধিক সাধারণ ride: ১২০ BDT (mode) — হয়তো বাড়ি থেকে metro station বা কাছের মার্কেট।
- ৫০% ride: ২২০ BDT-র নিচে (median) — ছোট ও মাঝারি ride।
- গড়: ৩৫০ BDT — কয়েকটি দীর্ঘ ride (যেমন: airport, intercity) পুরো গড়কে টেনে নিয়েছে।
একটি সংখ্যা দিলে — কোনটি?
- "গ্রাহক সাধারণত কত খরচ করে?" — median (২২০)। Typical experience।
- "কোম্পানির গড় revenue per ride?" — mean (৩৫০)। মোট revenue হিসাবের জন্য।
- "সবচেয়ে frequent ride কত?" — mode (১২০)। Pricing strategy-র জন্য।
আমার বাছাই: Public communication-এ — median। কারণ একজন user-এর "typical experience" এটাই। "Pathao-এ গড় ride ৩৫০ টাকা" শুনলে নতুন user মনে করবে এটাই দাম — কিন্তু ৫০% ride আসলে ২২০-এর নিচে।
আদর্শ answer — তিনটি দেওয়া: "অর্ধেক ride ২২০-এর নিচে; সবচেয়ে frequent ১২০; গড় ৩৫০ (দীর্ঘ ride-এর কারণে)।" — পূর্ণ ছবি।
মূল উপলব্ধি: একটি সংখ্যা একটি story বলে — তিনটি একটি truth। যদি আপনি বুঝান, ব্যবসায়িক siliconer (যেমন CEO) সাধারণত এই subtlety care করেন না — তাই data scientist হিসেবে আপনাকেই সঠিক metric বেছে দিতে হবে।
প্র ০৩ Std ও IQR দু'টোই spread পরিমাপ করে। কখন কোনটা — এবং দু'টোর মধ্যে গাণিতিক সম্পর্ক কী normal distribution-এ?
এটি practitioner-দের একটি common confusion। দুই metric-এর মধ্যে নির্বাচনে data-র shape ও use-case গুরুত্বপূর্ণ।
Std কখন:
- Distribution মোটামুটি symmetric/normal — height, weight, IQ, exam score।
- আপনি statistical test (t-test, ANOVA) করবেন — সব std-ভিত্তিক।
- মডেল পরবর্তী stage-এ standardization (z-score) দরকার।
IQR কখন:
- Distribution skewed বা outlier-prone — income, transaction amount, rides per user।
- আপনি boxplot draw করবেন — IQR-ই whisker rule-এর ভিত্তি।
- Robust description দরকার — outlier-এ ভাঙবে না।
Normal-এ গাণিতিক সম্পর্ক:
- পুরোপুরি normal distribution-এ — IQR ≈ 1.349 × σ।
- অর্থাৎ — যদি std = ১০, তাহলে IQR ≈ ১৩.৫।
- উল্টোটা: σ ≈ IQR / 1.349।
Robust std estimate:
- "Median Absolute Deviation" (MAD) — outlier-resistant std proxy: $\sigma \approx 1.4826 \times \text{MAD}$।
- Outlier-heavy data-তে preferred।
Practical rule:
- EDA-এর শুরুতে দু'টোই দেখুন। যদি std ≈ 1.349 × IQR — distribution মোটামুটি normal।
- যদি std অনেক বেশি — outlier আছে, std overestimate করছে।
- যদি std অনেক কম — heavily clustered, কিছু outlier দূরে।
মূল উপলব্ধি: Std math-friendly কিন্তু fragile; IQR robust কিন্তু কম মার্জিত। Production data scientist দু'টিই reach-এ রাখেন — ঠিক যেমন ছুতার hammer ও screwdriver দু'টিই।
প্র ০৪ আপনি একটি e-commerce ক্লায়েন্টকে monthly report দিচ্ছেন। তারা প্রতিদিন একটি customer dashboard দেখে। কোন ৫টি descriptive stat highlight করবেন? প্রতিটির justification কী?
Dashboard design-এ KPI selection — data scientist-এর সবচেয়ে গুরুত্বপূর্ণ communication skill।
আমার বাছাই — ৫টি stat:
- Median order value (BDT): "Typical order কত?" — pricing ও positioning-এর জন্য সবচেয়ে গুরুত্বপূর্ণ। Mean বিভ্রান্ত করবে।
- Total revenue (sum): "ব্যবসা কেমন?" — board-room metric। Sum হলো আসল bottom line।
- Daily active users (count of unique): Engagement-এর primary metric। Trend গুরুত্বপূর্ণ।
- ৯০-percentile delivery time: "৯০% delivery কত সময়ে?" — customer experience-এর reliability metric। Mean delivery time অসত্য — কারণ একটি দেরিতে delivery অনেককে frustrate করে।
- Cart abandonment rate: "শতকরা কতজন cart-এ যোগ করে কিন্তু কিনে না?" — funnel optimization-এর key signal।
কেন এগুলো — context-অনুযায়ী:
- Mean নয় কেন? — order value heavily right-skewed, একটি ১ লাখ টাকার ফোন দিনের গড় বদলে দেয়।
- ৯০-percentile কেন? — delivery promise টিকিয়ে রাখা business-critical। p50 ভালো হলেও p90 খারাপ হলে angry customers।
- Cart abandonment কেন? — সম্ভাব্য revenue-র সবচেয়ে বড় leak।
যা যোগ করতে পারেন (depending on biz):
- Repeat purchase rate: 30-day retention।
- Average basket size: items per order।
- Refund/return rate: product-quality signal।
- NPS: qualitative customer satisfaction।
Anti-pattern এড়ান:
- Vanity metrics: "total signups" without "active users"।
- "Average rating" without distribution — ৪.৫ মানে অনেকগুলো ৫ + কয়েকটি ১।
- একই KPI এ অনেক stat — clutter।
মূল কথা: Dashboard "less is more"। ৫টি ভালোভাবে বেছে নেওয়া metric — ৫০টি random metric-এর চেয়ে অনেক বেশি কার্যকর। বাছাইতে context, skewness, ও business priority — সবই মাথায় রাখুন।
অনুশীলন
-
হিসাব করুন: ৭ জন ছাত্রের পরীক্ষার নম্বর: ৬০, ৭৫, ৮০, ৬৫, ৯০, ৭০, ৩০।
- Mean, median, mode কত?
- Range ও std কত? (শূন্য দশমিকে)
- ৩০-কে outlier হিসেবে ফেললে কোন stat সবচেয়ে বেশি বদলাবে?
- Sum = ৪৭০, mean = ৪৭০/৭ ≈ ৬৭.১
- Sort: ৩০, ৬০, ৬৫, ৭০, ৭৫, ৮০, ৯০। Median = ৭০। Mode = nan (সব unique)।
- Range = ৯০ − ৩০ = ৬০।
- Std ≈ ১৯.৭ (n−1 দিয়ে ভাগ)।
- ৩০ ফেললে — mean বেশি বদলাবে (≈ ৭৩.৩); median সামান্য (৭২.৫)। Std অনেক কমে আসবে। এটাই median-এর robustness।
-
pandas-এ চেষ্টা: উপরের সংখ্যাগুলো একটি Series-এ ঢুকিয়ে
.describe()ও.skew()চালান। কী দেখলেন?import pandas as pd s = pd.Series([60, 75, 80, 65, 90, 70, 30]) print(s.describe()) print(f"skew = {s.skew():.2f}")Output-এ skew ঋণাত্মক হবে (left-skewed) — কারণ ৩০ একটি দূরবর্তী ছোট মান। mean < median এই skew-র লক্ষণ।
-
ভাবুন: bKash dashboard-এ আপনি ৫টি descriptive stat দেখাতে চান প্রতিদিনের transaction-এর উপর। কোন ৫টি বাছবেন এবং কেন?
প্র ০৪-এর উত্তরে details আছে। সংক্ষেপে — total volume (sum), median tx, p99 tx (large transfer detect), unique active users, ও failed-tx rate। প্রতিটির আলাদা business purpose।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পাঠ ০৯ · Distribution ও Normality পরবর্তী পাঠ Normal, log-normal, binomial — কোন ডেটা কোন distribution অনুসরণ করে।
- পাঠ ০৭ · API ও web scraping আগের পাঠ Stats শুরুর আগে — কীভাবে real-world ডেটা সংগ্রহ করবেন।
- পাঠ ১৫ · A/B testing এই পাঠের সাথে সম্পর্কিত Descriptive stats-এ ভিত্তি — কিন্তু decision নিতে inference লাগে।
- সব AI Courses দেখুন ABCL TECH Python, ML, DL, NLP, CV, GenAI, RL, MLOps — সব AI কোর্স একসাথে।