التعامل مع مجموعات البيانات غير المتوازنة: التقنيات وأفضل الممارسات
فهم مجموعات البيانات غير المتوازنة وإتقان الأساليب لتدريب نماذج موثوقة في التصنيف.
تشكّل مجموعات البيانات غير المتوازنة تحديًا رئيسيًا في التعلم الآلي. فعندما تمثل إحدى الفئات 99% من الأمثلة بينما لا تمثل الأخرى سوى 1%، تميل الخوارزميات التقليدية إلى «الغش» بتنبؤها دائمًا بالفئة المهيمنة. يرشدك هذا المقال خطوة بخطوة إلى تحديد هذه المشكلة وقياسها وتصحيحها باستخدام تقنيات مثبتة.
1. ما هي مجموعة البيانات غير المتوازنة ولماذا تشكل مشكلة؟
تكون مجموعة البيانات غير متوازنة عندما يكون توزيع الفئات غير متساوٍ بشكل كبير. وتكثر الأمثلة الواقعية مثل: كشف الاحتيال المصرفي (0,1 % من المعاملات الاحتيالية)، التشخيص الطبي للأمراض النادرة، التنبؤ بتغير العملاء، تصفية البريد المزعج أو اكتشاف العيوب الصناعية. في جميع هذه الحالات، يحصل النموذج الذي يتنبأ دائمًا بالفئة الأكثر شيوعًا على دقة عالية بينما يكون عديم الفائدة تمامًا.
2. فخ الـaccuracy والمقاييس المناسبة
الـaccuracy مضللة لأنها تخفي الأخطاء على الفئة الأقلية. يجب تفضيل مصفوفة الالتباس، والدقة، والاستدعاء، ودرجة F1، والـbalanced accuracy، وCohen’s Kappa وخاصة PR-AUC (أكثر صلة من ROC-AUC عندما تكون الفئات غير متوازنة للغاية). نفضل الاستدعاء عندما تكون السلبيات الكاذبة مكلفة (مرض فائت) والدقة عندما تكون الإيجابيات الكاذبة كذلك (تنبيه احتيال غير ضروري).
3. تقنيات إعادة أخذ العينات
يقوم الـ oversampling بتكرار أو توليف أمثلة الفئة الأقلية (SMOTE، ADASYN، Borderline-SMOTE). يقوم الـ undersampling بحذف أمثلة الفئة الأغلبية (Random، Tomek links، NearMiss، ENN). غالبًا ما توفر التركيبات مثل SMOTETomek أو SMOTEENN أفضل حل وسط. انتبه: قد يؤدي الـ oversampling إلى الإفراط في التعلم وقد يسبب الـ undersampling فقدان معلومات قيمة.
4. المناهج على مستوى الخوارزمية
يمكن للخوارزميات دمج الاختلال مباشرة عبر المعاملات class_weight أو cost-sensitive learning. يتيح تعديل عتبة القرار (threshold moving) تحسين الاستدعاء أو الدقة وفقًا لاحتياجات العمل. تقلل Focal Loss، المستخدمة في deep learning، من تأثير الأمثلة السهلة وتركز التعلم على الحالات الصعبة.
5. الطرق التجميعية المتخصصة
تشمل الطرق التجميعية المتكيفة BalancedRandomForest و EasyEnsemble و RUSBoost و BalancedBagging. وهي تجمع بين إعادة أخذ العينات وتجميع النماذج لتحسين المتانة مع الحد من الإفراط في التعلم.
6. التحول إلى وضع كشف الشذوذ
عندما تمثل الفئة النادرة أقل من 1 % من البيانات، يصبح من المناسب التحول إلى مناهج كشف الشذوذ (Isolation Forest، One-Class SVM، autoencodeurs). تقوم هذه الطرق بنمذجة الفئة الأغلبية فقط وتشير إلى النقاط التي تبتعد عنها بشدة.
7. أفضل ممارسات التحقق
لا يجب تطبيق إعادة أخذ العينات أبدًا على مجموعة الاختبار أو التحقق. استخدم دائمًا خط أنابيب (imblearn.Pipeline) و stratified k-fold cross-validation. يتجنب ذلك أي تسرب للبيانات ويضمن تقييمًا صادقًا للأداء.
8. مثال عملي باستخدام Python و imbalanced-learn
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split, StratifiedKFold
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report
from imblearn.pipeline import Pipeline
from imblearn.over_sampling import SMOTE
from imblearn.under_sampling import RandomUnderSampler
X, y = make_classification(n_classes=2, weights=[0.95, 0.05],
n_informative=4, flip_y=0, n_samples=5000,
random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y,
test_size=0.2, random_state=42)
pipeline = Pipeline([
('over', SMOTE(random_state=42)),
('under', RandomUnderSampler(random_state=42)),
('clf', RandomForestClassifier(class_weight='balanced', random_state=42))
])
pipeline.fit(X_train, y_train)
y_pred = pipeline.predict(X_test)
print(classification_report(y_test, y_pred))
الخلاصة: عند التعامل مع مجموعة بيانات غير متوازنة، ابدأ دائمًا بتحليل توزيع الفئات واختيار المقاييس المناسبة. ثم اختبر تقنيات إعادة أخذ العينات، والأوزان، والطرق التجميعية ضمن خط أنابيب صارم. إليك قائمة تحقق عملية لتجنب نسيان أي شيء:
- تحليل توزيع الفئات من البداية
- استخدام stratified k-fold وخطوط أنابيب imblearn
- تفضيل الاستدعاء، F1 و PR-AUC على الدقة
- تجربة SMOTE ثم تعديل عتبة القرار
- مقارنة class_weight والطرق التجميعية
- التحول إلى كشف الشذوذ إذا كانت الأقلية < 1 %
- التحقق فقط على بيانات غير معاد أخذ عينات منها
💬 هل لديك سؤال أو ترغب في التعمق أكثر؟ انضم إلى المجتمع على Discord : https://discord.gg/GwhUKccQcM