آموزش هوش مصنوعی

هیستوگرام چیست؟ نمایش توزیع داده و چرا میانگین به‌تنهایی کافی نیست

مقدماتی مطالعه در ۹ دقیقه بخش ۱۸ از ۱۸ در مبانی هوش مصنوعی و علم داده
mahdyar
هیستوگرام چیست؟ نمایش توزیع داده و چرا میانگین به‌تنهایی کافی نیست

هیستوگرام چیست و چرا باید پیش از گزارش هر میانگینی آن را ببینید؟ دو کلاس را تصور کنید که میانگین نمره‌ی هر دو ۱۵ است. در کلاس اول همه بین ۱۴ و ۱۶ گرفته‌اند. در کلاس دوم نیمی ۲۰ و نیمی ۱۰. میانگین یکسان است، اما این دو کلاس هیچ شباهتی به هم ندارند. هیستوگرام این تفاوت را در یک نگاه نشان می‌دهد.

در قسمت قبل تعداد و نسبت دسته‌ها را با نمودار میله‌ای و دایره‌ای نشان دادیم. حالا سراغ متغیرهای عددی می‌رویم. در این قسمت با همان داده‌ی پرندگان مینه‌سوتا، هیستوگرام و نمودار چگالی را یاد می‌گیریم. در پایان هم می‌بینیم چرا مقایسه‌ی توزیع‌ها برای پایش مدل هوش مصنوعی حیاتی است.

توزیع داده چیست و چرا مهم است؟

توزیع نشان می‌دهد مقادیر یک متغیر چطور پخش شده‌اند. کجا جمع شده‌اند، چقدر پراکنده‌اند و آیا دنباله‌ی بلندی به یک طرف دارند. در قسمت آمار دیدیم توزیع نرمال شکل زنگوله‌ای دارد. اما بسیاری از داده‌های واقعی این‌طور نیستند.

از نمودار پراکنش تا هیستوگرام

ساده‌ترین راه دیدن توزیع، رسم نقطه‌هاست. مثلاً نمودار پراکنش طول بدن پرندگان در برابر راسته‌شان نشان می‌دهد طول‌ها در هر راسته کجا قرار دارند. اما وقتی نقطه‌ها زیادند، روی هم می‌افتند و نمی‌شود فهمید کجا تراکم بیشتری دارد.

هیستوگرام این مشکل را حل می‌کند. بازه‌ی مقادیر را به چند بخش مساوی تقسیم می‌کند و تعداد نمونه‌های هر بخش را با ارتفاع ستون نشان می‌دهد. حالا تراکم دیده می‌شود، نه فقط موقعیت نقطه‌ها.

چهار چیزی که از هیستوگرام می‌خوانید

هر هیستوگرام چهار ویژگی توزیع را نشان می‌دهد:

  • مرکز: مقدار معمول کجاست و بیشتر داده حول چه عددی جمع شده است.
  • پراکندگی: داده در چه بازه‌ای پخش شده است.
  • شکل: متقارن است یا به یک طرف کشیده، یک قله دارد یا چند قله.
  • داده‌ی پرت: آیا نمونه‌هایی دور از بقیه وجود دارد؟

توزیع دوقله‌ای معمولاً نشانه‌ی دو گروه متفاوت در داده است. مثلاً زمان پاسخ پشتیبانی که یک قله در چند دقیقه و قله‌ی دیگر در یک روز دارد. احتمالاً پرسش‌ها دو مسیر کاملاً متفاوت دارند.

ساخت هیستوگرام با Matplotlib

در pandas، رسم هیستوگرام فقط یک خط است. با جرم بدن پرندگان شروع می‌کنیم. این ستون بیشینه‌ی جرم هر گونه را به گرم نشان می‌دهد.

تعداد بازه؛ تصمیمی که شکل را عوض می‌کند

با ده بازه، هیستوگرام نشان می‌دهد بیش از ۴۰۰ پرنده در ستون اول، یعنی زیر ۲۰۰۰ گرم، قرار دارند. تقریباً هیچ جزئیاتی دیده نمی‌شود. با سی بازه، تصویر کمی دقیق‌تر می‌شود.

python
import pandas as pd
import matplotlib.pyplot as plt

birds = pd.read_csv("birds.csv")
fig, axes = plt.subplots(1, 2, figsize=(11, 4))
birds["MaxBodyMass"].plot.hist(bins=10, ax=axes[0], title="10 bins")
birds["MaxBodyMass"].plot.hist(bins=30, ax=axes[1], title="30 bins")
plt.tight_layout()
plt.show()

قاعده‌ی ثابتی برای تعداد بازه نیست. بازه‌ی کم جزئیات را پنهان می‌کند و بازه‌ی زیاد نویز را بزرگ نشان می‌دهد. چند مقدار را امتحان کنید و آن را انتخاب کنید که الگو را بدون نویز نشان می‌دهد.

داده‌ی کشیده؛ فیلتر یا مقیاس لگاریتمی

جرم بدن پرندگان توزیع به‌شدت کشیده‌ای دارد. بیشتر پرنده‌ها سبک‌اند و چند پرنده‌ی سنگین محور را کش می‌دهند. دو راه برای دیدن جزئیات وجود دارد. راه اول فیلتر است؛ مثلاً فقط پرندگان بین ۱ و ۶۰ گرم را با ۴۰ بازه رسم کنید.

راه دوم مقیاس لگاریتمی است که همه‌ی داده را نگه می‌دارد. با np.log10 جرم را تبدیل کنید یا در Matplotlib محور را لگاریتمی کنید. داده‌هایی مثل درآمد، قیمت و تعداد بازدید تقریباً همیشه این شکل را دارند. نگاه لگاریتمی معمولاً ساختار پنهانشان را آشکار می‌کند.

بیشتر بخوانید: میانگین، میانه و انحراف معیار را که پشت شکل هر هیستوگرام است، در آمار و احتمال برای هوش مصنوعی مرور کنید.

هیستوگرام دوبعدی و مقایسه گروه‌ها

گاهی می‌خواهید توزیع دو متغیر را هم‌زمان ببینید یا توزیع یک متغیر را بین چند گروه مقایسه کنید. هیستوگرام برای هر دو نسخه‌ی مناسبی دارد.

هیستوگرام دوبعدی؛ تراکم دو متغیر

هیستوگرام دوبعدی صفحه را به خانه‌های شطرنجی تقسیم می‌کند و تعداد نمونه‌های هر خانه را با رنگ نشان می‌دهد. مثلاً جرم بدن در برابر طول بدن. خانه‌های پررنگ جایی‌اند که بیشترین پرنده‌ها قرار دارند.

python
small = birds[(birds["MaxBodyMass"] > 1) & (birds["MaxBodyMass"] < 60)]
plt.hist2d(small["MaxBodyMass"], small["MaxLength"], bins=20, cmap="Greens")
plt.colorbar(label="count")
plt.xlabel("Body mass (g)")
plt.ylabel("Length (cm)")
plt.show()

نتیجه یک نوار قطری پررنگ است. یعنی پرندگان سنگین‌تر معمولاً بلندترند. این همبستگی انتظار می‌رفت، اما هیستوگرام دوبعدی نشان می‌دهد کجا متمرکز است و کجا استثنا دارد.

مقایسه توزیع گروه‌ها؛ وضعیت حفاظت

داده‌ی پرندگان وضعیت حفاظت هر گونه را هم دارد؛ از «کمترین نگرانی» تا «منقرض‌شده». سؤال این است: آیا طول بال با وضعیت حفاظت رابطه دارد؟ برای پاسخ، هیستوگرام طول بال هر گروه را با رنگ جدا و شفافیت روی هم رسم می‌کنیم.

نتیجه نشان می‌دهد رابطه‌ی روشنی بین طول بال و وضعیت حفاظت نیست. اما هیستوگرام‌های هم‌پوشان خیلی زود شلوغ می‌شوند. وقتی گروه‌ها بیشتر از سه تا باشند، خواندنشان سخت است. اینجا نمودار چگالی به کمک می‌آید.

نمودار چگالی KDE؛ هیستوگرام نرم

نمودار چگالی یا KDE به جای ستون، یک منحنی هموار رسم می‌کند. هر نمونه یک تپه‌ی کوچک روی محور می‌سازد و جمع این تپه‌ها منحنی نهایی می‌شود. نمودار زیر مسیر خواندن و مقایسه‌ی توزیع را نشان می‌دهد.

چهار قدم خواندن و مقایسه توزیع داده با هیستوگرام و نمودار چگالی

KDE با seaborn

کتابخانه‌ی seaborn رسم KDE را ساده کرده است. با پارامتر hue توزیع هر گروه منحنی جدا با رنگ متفاوت می‌گیرد:

python
import seaborn as sns

sns.kdeplot(data=small, x="MinWingspan", hue="ConservationStatus",
            common_norm=False, fill=True, alpha=0.3)
plt.show()

common_norm=False مهم است. بدون آن، مساحت هر منحنی متناسب با تعداد نمونه‌های گروه می‌شود. گروه‌های کوچک عملاً دیده نمی‌شوند. با این پارامتر، شکل توزیع هر گروه جداگانه مقایسه می‌شود.

پهنای باند و هشدار نمونه‌ی کم

KDE یک پارامتر پنهان به نام پهنای باند دارد. پهنای کم منحنی پرپیچ‌وخم و پهنای زیاد منحنی بیش از حد صاف می‌سازد. این همان نقش تعداد بازه در هیستوگرام است.

هشدار مهم این است که KDE ظاهری مطمئن و صاف دارد، حتی وقتی فقط پنج نمونه پشتش باشد. برای گروه‌های کوچک، تعداد نمونه را در راهنمای نمودار بنویسید. یا کنار منحنی، نقطه‌های واقعی را هم نشان دهید.

کاربرد در هوش مصنوعی؛ پایش توزیع ورودی

همه‌ی این ابزارها یک کاربرد مستقیم در هوش مصنوعی دارند. مدل با داده‌ای با توزیع مشخص آموزش دیده است. اگر توزیع داده‌ی واقعی عوض شود، عملکرد مدل افت می‌کند، حتی اگر کد تغییری نکرده باشد.

رانش داده را با چشم ببینید

به تغییر توزیع ورودی در طول زمان رانش داده می‌گویند. مثلاً دستیار آموزشی روی پرسش‌های کوتاه آموزش دیده، اما پس از یک تغییر رابط کاربری، کاربران پرسش‌های طولانی‌تر می‌نویسند. هیستوگرام طول پرسش در داده‌ی آموزش و داده‌ی این هفته را روی هم رسم کنید.

اگر دو توزیع به‌وضوح جابه‌جا شده‌اند، وقت بررسی است. این کار ساده، پیش از آنکه کاربران از افت کیفیت شکایت کنند، مشکل را نشان می‌دهد.

توزیع احتمال پیش‌بینی

هیستوگرام احتمال‌هایی که مدل پیش‌بینی می‌کند هم آموزنده است. اگر بیشتر پیش‌بینی‌ها نزدیک ۰٫۵ باشند، مدل مطمئن نیست. اگر همه نزدیک صفر و یک باشند، مدل یا بسیار خوب است یا بیش از حد مطمئن. مقایسه‌ی این هیستوگرام برای پاسخ‌های درست و غلط نشان می‌دهد آستانه‌ی تصمیم کجا بهتر است.

تمرین عملی؛ سه نگاه به یک ستون

یک ستون عددی از داده‌ی پروژه‌ی خودتان انتخاب کنید و این نمودارها را بسازید:

  • سه هیستوگرام: با ۱۰، ۳۰ و bins="auto" و انتخاب بهترین.
  • مقیاس لگاریتمی: اگر داده کشیده است، نسخه‌ی لگاریتمی را هم رسم کنید.
  • مقایسه‌ی گروه‌ها: KDE این ستون را برای دو یا سه گروه با common_norm=False رسم کنید.
  • مقایسه‌ی زمانی: توزیع ماه اول و ماه آخر داده را روی هم بگذارید و رانش احتمالی را توضیح دهید.

برای هر نمودار یک جمله‌ی نتیجه بنویسید. اگر نمی‌توانید، شاید آن نمودار چیزی به گزارش اضافه نمی‌کند.

سخن پایانی

هیستوگرام توزیع یک متغیر عددی را نشان می‌دهد؛ مرکز، پراکندگی، شکل و داده‌ی پرت. تعداد بازه شکل آن را عوض می‌کند و برای داده‌ی کشیده، فیلتر یا مقیاس لگاریتمی کمک می‌کند. هیستوگرام دوبعدی رابطه‌ی دو متغیر و KDE مقایسه‌ی گروه‌ها را ساده می‌کند.

درس اصلی این قسمت همان جمله‌ی عنوان است. میانگین به‌تنهایی کافی نیست. پیش از گزارش هر عدد خلاصه، توزیعش را ببینید. در هوش مصنوعی هم مقایسه‌ی توزیع داده‌ی آموزش و داده‌ی واقعی، ساده‌ترین هشدار زودهنگام برای افت مدل است.

این آموزش بر پایه‌ی درس Visualizing Distributions از مجموعه‌ی آزاد Data Science for Beginners مایکروسافت (مجوز MIT) به فارسی بازنویسی و تکمیل شده است.

پرسش‌های پرتکرار

هیستوگرام چیست؟

هیستوگرام نموداری است که بازه‌ی مقادیر یک متغیر عددی را به چند بخش مساوی تقسیم می‌کند و تعداد نمونه‌های هر بخش را با ارتفاع یک ستون نشان می‌دهد. از روی آن شکل توزیع، مرکز، پراکندگی و داده‌ی پرت دیده می‌شود.

تفاوت هیستوگرام و نمودار میله‌ای چیست؟

نمودار میله‌ای مقدار دسته‌های جدا از هم را مقایسه می‌کند و ترتیب میله‌ها قابل تغییر است. هیستوگرام توزیع یک متغیر عددی پیوسته را نشان می‌دهد و ستون‌هایش به هم چسبیده‌اند، چون بازه‌ها پشت سر هم‌اند.

تعداد بازه یا bins در هیستوگرام را چطور انتخاب کنیم؟

قاعده‌ی ثابتی نیست. بازه‌ی کم جزئیات را پنهان می‌کند و بازه‌ی زیاد نویز را بزرگ نشان می‌دهد. چند مقدار مثل ۱۰، ۳۰ و ۵۰ را امتحان کنید. گزینه‌ی bins="auto" در numpy و matplotlib هم نقطه‌ی شروع معقولی می‌دهد.

نمودار چگالی KDE چیست؟

KDE یا تخمین چگالی کرنل نسخه‌ی نرم و پیوسته‌ی هیستوگرام است. به جای ستون، یک منحنی هموار نشان می‌دهد. برای مقایسه‌ی توزیع چند گروه روی هم، خواناتر از هیستوگرام‌های هم‌پوشان است.

دیدگاه‌ها

هنوز دیدگاهی ثبت نشده است. شروع‌کننده باشید — پرسش و اصلاح را با آغوش باز می‌پذیریم.

دیدگاه بگذارید

برای **پررنگ**، *مورب*، `کد` و لینک از Markdown استفاده کنید. لینک‌ها nofollow هستند.

پنج رقم داخل تصویر را وارد کنید. اعداد فارسی و انگلیسی پذیرفته می‌شوند.

تصویر کد امنیتی پنج‌رقمی

در حال دریافت کد امنیتی…

مهلت کد تمام شد. روی «کد جدید» بزنید.