سعید میرشکاری
سعید میرشکاری
خواندن ۸ دقیقه·۱ سال پیش

معضل داده‌های نامتوازن: به‌ روش افزایش حجم نمونه‌ها


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

فهرست مطالب

- درک داده‌های نامتوازن
- پیامدهای عدم توازن
- راهکار افزایش حجم نمونه‌ها
- تکنیک‌های افزایش حجم نمونه‌ها
- افزایش حجم تصادفی
- (تکنیک تولید مصنوعی تقلبی از کلاس اقلیت) SMOTE
- (تکنیک تولید مصنوعی تطبیقی تقلبی از کلاس اقلیت) ADASYN
- انتخاب تکنیک مناسب افزایش حجم نمونه‌ها
- اجرای افزایش حجم نمونه‌ها در پایتون
- ارزیابی تأثیر افزایش حجم نمونه‌ها
- نمونه‌های واقعی
- مشکلات افزایش حجم نمونه‌ها
- نتیجه

درک داده‌های نامتوازن

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


دلیل این مشکل به شرح زیر است:

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

- **ارزیابی گمراه‌کننده**: معیارهای ارزیابی سنتی مانند دقت (accuracy) می‌توانند در داده‌های نامتوازن به اشتباه به ارزیابی‌های گمراه‌کننده منجر شوند. یعنی یک مدل می‌تواند با پیش‌بینی کلاس اکثریت دقت بالا داشته باشد، اما این در بسیاری از موارد در برنامه‌های واقعی ارزش زیادی ندارد.


پیامدهای عدم توازن

پیامدهای کار با داده‌های نامتوازن ممکن است جدی باشند:


- **مدل‌های ناکارآمد**: مدل‌های آموزش دیده بر روی داده‌های نامتوازن ممکن است دچار مشکل در تشخیص وقوع رویدادهای کمیاب یا نادر شوند. در مواردی مانند تشخیص کلاهبرداری از کارت اعتباری، این می‌تواند به خسارت‌های مالی قابل توجهی منجر شود.


- **پیش‌بینی با تعصب**: مدل ممکن است با دقت بالا کلاس اکثریت را پیش‌بینی کند، اما در کلاس اقلیت عملکرد نامناسبی داشته باشد و احتمالاً بینش‌های مهمی را از دست دهد.


- **افتراق اطلاعات**: ممکن است کلاس اقلیت اطلاعات ارزشمندی را داشته باشد که در صورت عملکرد نامناسب مدل در آن از دست می‌رود.


**راهکار افزایش حجم نمونه‌ها**

افزایش حجم نمونه‌ها (oversampling) یک تکنیک قدرتمند برای حل مشکل عدم توازن در داده‌ها است. این تکنیک شامل افزایش تعداد نمونه‌ها در کلاس اقلیت با تولید نمونه‌های مصنوعی یا تکرار نمونه‌های موجود است. این کار باعث تعادل در توزیع کلاس‌ها می‌شود و مشکلات مرتبط با داده‌های نامتوازن را کاهش می‌دهد.


ایده اصلی در افزایش حجم نمونه‌ها این است که مدل را با نمونه‌های بیشتری از کلاس اقلیت تأمین کنیم تا بتواند به بهترین شکل بین کلاس‌ها تمایز ایجاد کند.


تکنیک‌های افزایش حجم نمونه‌ها

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


**1. افزایش حجم تصادفی (Random Oversampling)**

در افزایش حجم تصادفی، نمونه‌های تصادفی از کلاس اقلیت تکرار می‌شوند تا توزیع کلاس به تعادل برسد. این تکنیک ساده‌ترین روش افزایش حجم نمونه‌ها است اما ممکن است به اورفیتینگ (overfitting) منجر شود، چرا که توزیع داده اصلی را در نظر نمی‌گیرد.


**2. (تکنیک تولید مصنوعی تقلبی از کلاس اقلیت)**SMOTE

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


**3. (تکنیک تولید مصنوعی تطبیقی تقلبی از کلاس اقلیت)**ADASYN

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


**انتخاب تکنیک مناسب افزایش حجم نمونه‌ها**

انتخاب تکنیک مناسب افزایش حجم نمونه‌ها به داده‌ها و مشکل موردنظر بستگی دارد. موارد زیر را در نظر بگیرید:


- **اندازه داده‌ها**: اگر دارای داده‌های بزرگی هستید، افزایش حجم تصادفی ممکن است کافی باشد. برای داده‌های کوچکتر، SMOTE یا ADASYN ممکن است مناسب‌تر باشند.


- **توزیع داده**: توزیع داده‌های خود را در نظر بگیرید. اگر کلاس اقلیت خوشه‌ای باشد، SMOTE یا ADASYN ممکن است موثرتر باشند. اگر پختگی داشته باشد، افزایش حجم تصادفی هم ممکن است عملکرد خوبی داشته باشد.


- **منابع محاسباتی**: SMOTE و ADASYN نسبت به افزایش حجم تصادفی محاسباتی گران‌تری دارند. اطمینان حاصل کنید که منابع محاسباتی لازم را دارید.


انجام افزایش حجم نمونه‌ها در پایتون

بیایید به پایتون برویم و افزایش حجم نمونه‌ها را با استفاده از کتابخانه imbalanced-learn پیاده‌سازی کنیم، که ابزارهایی برای کار با داده‌های نامتوازن فراهم می‌کند.


```python

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

from sklearn.datasets import make_classification

from imblearn.over_sampling import RandomOverSampler, SMOTE, ADASYN


# تولید یک مجموعه داده نامتوازن مصنوعی

X, y = make_classification(n_classes=2, class_sep=2,

weights=[0.1, 0.9], n_informative=3,

n_redundant=1, flip_y=0, n_features=20,

n_clusters_per_class=1, n_samples=1000,

random_state=10)


# نمایش توزیع کلاس‌ها

plt.hist(y, bins=3)

plt.title("توزیع کلاس‌ها")

plt.show()


# اعمال تکنیک‌های افزایش حجم نمونه‌ها

ros = RandomOverSampler(random_state=42)

X_resampled, y_resampled = ros.fit_resample(X, y)


# نمایش توزیع متعادل کلاس‌ها پس از افزایش حجم تصادفی

plt.hist(y_resampled, bins=3)

plt.title("توزیع کلاس‌ها پس از افزایش حجم تصادفی")

plt.show()

```

قبل
قبل
بعد
بعد


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


ارزیابی تأثیر افزایش حجم نمونه‌ها

برای درک تأثیر افزایش حجم نمونه‌ها، ارزیابی عملکرد مدل شما بسیار مهم است. معیارهای سنتی مانند د


قت ممکن است در داده‌های نامتوازن گمراه‌کننده باشند. به جای آن، بر روی موارد زیر تمرکز کنید:


- **ماتریس اشتباهات (Confusion Matrix)**: تحلیل واقعی‌ها، غلط‌های واقعی، غلط‌های پیش‌بینی شده و واقعی‌های پیش‌بینی شده را تجزیه و تحلیل کنید.


- **دقت (Precision)**: نسبت تعداد واقعی‌های مثبت به کل مثبت‌های پیش‌بینی شده.


- **بازخوانی (Recall)**: نسبت تعداد واقعی‌های مثبت به کل مثبت‌های واقعی.


- **امتیاز F1 (F1-Score)**: میانگین هندسی دقت و بازخوانی که تعادلی بین دو معیار ایجاد می‌کند.


- **مساحت زیر منحنی مشخصه عملکرد مخصوصیت (AUC-ROC)**: توانایی مدل در تمیز کردن بین کلاس‌ها را اندازه‌گیری می‌کند.


بیایید تأثیر افزایش حجم نمونه‌ها با استفاده از این معیارها ارزیابی کنیم:


```python

from sklearn.model_selection import train_test_split

from sklearn.ensemble import RandomForestClassifier

from sklearn.metrics import confusion_matrix, classification_report, roc_auc_score


# تقسیم داده‌های افزایش حجم نمونه‌ها به دسته‌های آموزش و آزمایش

X_train, X_test, y_train, y_test = train_test_split(X_resampled, y_resampled, test_size=0.2, random_state=42)


# آموزش یک دسته‌بند تصادفی جنگلی بر روی داده‌های افزایش حجم نمونه‌ها

clf = RandomForestClassifier(random_state=42)

clf.fit(X_train, y_train)


# پیش‌بینی در مجموعه آزمایشی

y_pred = clf.predict(X_test)


# ارزیابی مدل

conf_matrix = confusion_matrix(y_test, y_pred)

classification_rep = classification_report(y_test, y_pred)

roc_auc = roc_auc_score(y_test, clf.predict_proba(X_test)[:, 1])


print("ماتریس اشتباهات:")

print(conf_matrix)

print("\nگزارش طبقه‌بندی:")

print(classification_rep)

print(f"\nAUC-ROC: {roc_auc:.2f}")

```


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


نمونه‌های واقعی

افزایش حجم نمونه‌ها در موارد واقعی می‌تواند کاربردهای متعددی داشته باشد:


- **تشخیص کلاهبرداری**: تشخیص تراکنش‌های کلاهبرداری در داده‌های مالی، جایی که تراکنش‌های کلاهبرداری نسبت به تراکنش‌های معتبر کمیاب هستند.


- **تشخیص بیماری‌های کمیاب**: تشخیص بیماری‌های کمیاب در مجموعه داده‌های پزشکی، جایی که شیوع بیماری کم است.


- **تشخیص نقص**: کشف الگوهای عجیب در ترافیک شبکه برای امنیت سایبری، جایی که نفوذهای شبکه به صورت نادر رخ می‌دهند.


- **پیش‌بینی انصراف مشتری**: پیش‌بینی انصراف مشتری در خدمات مبتنی بر اشتراک، جایی که اکثر مشتریان انصراف نمی‌دهند.


**پیامدهای افزایش حجم نمونه‌ها**

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


- **اورفیتینگ (Overfitting)**: افزایش حجم نمونه‌ها ممکن است به اورفیتینگ منجر شود، که در آن مدل در داده‌های آموزش خوب عمل می‌کند اما در داده‌های دیده نشده بد.


- **تلف شدن اطلاعات**: افزایش حجم نمونه‌ها ممکن است تعصبی به مدل وارد کند و اطلاعات ارزشمندی که در داده‌های اصلی وجود دارد را دور بیاندازد. انعطاف‌پذیری در این مورد مهم است.


- **محاسبات گران‌تر**: برخی از تکنیک‌های افزایش حجم نمونه‌ها مانند SMOTE و ADASYN محاسباتی گرانتری دارند، به ویژه بر روی مجموعه داده‌های بزرگ.


نتیجه‌گیری

داده‌های نامتوازن یک چالش متداول در دانش داده و یادگیری ماشین هستند.

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

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


افزایش حجمیادگیری ماشینیعلوم داده
جزییات بیشتر راجع به کار‌های من را می‌توانید اینجا بخوانید: saeedmirshekari.com
شاید از این پست‌ها خوشتان بیاید