مارک پلاس

تکنولوژی نوین اینترنتی

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

دسته‌بندی‌ها

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

⚖️ پردازش داده‌های نامتوازن (Imbalanced Data Processing)


📖 مقدمه

در دنیای واقعی، اغلب با داده‌هایی روبه‌رو هستیم که توزیع کلاس‌هایشان مساوی نیست. به این وضعیت، عدم توازن داده‌ها (Imbalanced Data) می‌گویند. مثلاً در تشخیص تقلب در تراکنش‌های بانکی، بیش از ۹۹٪ تراکنش‌ها عادی و کمتر از ۱٪ آن‌ها تقلبی هستند.

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


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

مشکلنتیجه
🔸 مدل بیشتر به کلاس غالب توجه می‌کنددقت (accuracy) بالا ولی F1 پایین
🔸 طبقه‌بندی نادرست کلاس‌های نادرمدل ارزش عملیاتی ندارد
🔸 ارزیابی اشتباه عملکرد مدلمعیارهایی مثل accuracy گمراه‌کننده هستند

📊 مثال از داده‌های نامتوازن

text
کلاس "سالم" → 950 نمونه کلاس "بیمار" → 50 نمونه

اگر مدل همیشه بگوید "سالم"، 95٪ دقت دارد اما هیچ بیماری را شناسایی نمی‌کند!


🛠️ راهکارهای مقابله با داده‌های نامتوازن

1. بازنمونه‌گیری (Resampling)

🔄 متعادل کردن تعداد نمونه‌ها با:

  • Oversampling (افزایش نمونه‌های کلاس اقلیت)

  • Undersampling (کاهش نمونه‌های کلاس غالب)

📌 ابزار: imbalanced-learn در پایتون

python
from imblearn.over_sampling import SMOTE X_res, y_res = SMOTE().fit_resample(X, y)

2. استفاده از الگوریتم‌های حساس به عدم‌توازن

  • Tree-based models مثل Random Forest و XGBoost که پارامتر class_weight دارند

  • الگوریتم‌هایی با قابلیت وزن‌دهی متفاوت به کلاس‌ها

python
from sklearn.ensemble import RandomForestClassifier model = RandomForestClassifier(class_weight="balanced")

3. استفاده از معیارهای ارزیابی مناسب

معیارمزیت
Precision / Recallتمرکز بر دقت کلاس اقلیت
F1-scoreمیانگین متوازن Precision و Recall
ROC-AUC / PR-AUCمناسب برای ارزیابی کلی در داده‌های نامتوازن
Confusion Matrixبررسی کامل عملکرد مدل روی هر کلاس

4. استفاده از تکنیک‌های ترکیبی (Ensemble)

مدل‌هایی مانند:

  • EasyEnsemble

  • BalancedBaggingClassifier
    که به طور خاص برای داده‌های نامتوازن طراحی شده‌اند


5. ایجاد داده‌های مصنوعی (Synthetic Data)

تولید داده‌ی جدید با الگوریتم‌هایی مثل:

  • SMOTE (Synthetic Minority Oversampling Technique)

  • ADASYN: ایجاد داده با تمرکز روی نقاط دشوار


📈 مثال کاربردی با پایتون

python
from sklearn.datasets import make_classification from imblearn.over_sampling import SMOTE from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import classification_report X, y = make_classification(n_samples=1000, weights=[0.9, 0.1], n_classes=2) X_train, X_test, y_train, y_test = train_test_split(X, y) # استفاده از SMOTE smote = SMOTE() X_res, y_res = smote.fit_resample(X_train, y_train) model = LogisticRegression() model.fit(X_res, y_res) y_pred = model.predict(X_test) print(classification_report(y_test, y_pred))

📦 کتابخانه‌های مفید برای داده‌های نامتوازن

کتابخانهکاربرد
imbalanced-learnبازنمونه‌گیری و الگوریتم‌های ترکیبی
scikit-learnپشتیبانی از class_weight
XGBoost, LightGBMپشتیبانی قوی از داده‌های نامتوازن
TensorFlow / Kerasامکان وزن‌دهی به loss برای کلاس‌ها

✅ جمع‌بندی

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

محتوای مرتبط

پست‌های مرتبط