پیش بینی طبقه بندی داده های نامتعادل
Imbalanced data classification prediction
طبقه بندی نامتعادل مربوط به آن دسته از مسائل طبقه بندی است که در آن کلاسها تفاوت بسیار چشمگیری در تعداد نمونه دارند. شکل زیر یک چارت از یک دیتای نامتعادلِ باینری کلاس است. البته تعداد کلاسها ممکن است بیش از دو (binary) باشد. اصطلاحاً اگر نمونه ها در بیش از دو کلاس به شکل نامتعادل توزیع شوند، به آن multi imbalanced classification گفته میشود.
حقیقت این است که اگر حتی مناسبترین مدل را هم برای پیش بینی انتخاب کنیم، ممکن است جواب خوب و معتبری دریافت نکنیم. با اینکه ممکن است دقت مدل بسیار هم بالا باشد!
اشتباهاتی که تازه کارها در مواجه با مسئله طبقه بندی داده های نامتعادل انجام میدهند:
- آنها از accuracy به عنوان یک معیار دقت مدل برای طبقه بندی استفاده میکنند.
اگر ۹۹% نمونهها به یک کلاس تعلق داشته باشد، مدل موفق به پیش بینی با ۹۹% دقت خواهد شد!
- مدل را روی داده های خام اجرا کردن.
این کار منجر به نتایج وحشتناک میشود.
- استفاده از الگوریتمهای استاندارد
تازه کارها از الگوریتمهای یادگیری ماشین با همان شکل اولیه و استاندارد برای آموزش دادهها استفاده میکنند.
راهکارها و تکنیک ها برای حل معضل دادههای نامتعادل:
- انتخاب معیارهای عملکرد که روی کلاس فرعی تمرکز میکنند.
- بکار بردن متدهایی از پردازش دیتا که تلاش میکنند کلاسها را دوباره متعادل کنند.
- انتخاب الگوریتمهای طبقه بندی مثل SMOTE که خطاهای misclassification را از بین میبرند.
اینجا میخواهیم درباره هر سه مورد توضیح دهیم.
ارزیابی مدل چالش برانگیز است. چون نیازمند تست کردن راههای مختلف پردازش دیتا، الگوریتمهای مختلف یادگیری و هایپر پارامترهای مختلف برای الگوریتمهای یادگیری با عملکرد خوب (accuracy score) است. بارها به شخصه در کلاسها شاهد این مسئله هستم که به محض اینکه از دانشپذیران پرسیده میشود، چطور تشخیص دهیم یک مدل دقیق تر است، پاسخ میدهند هر مدلی که accuracy بالاتری داشته باشد. در صورتیکه این جواب همیشه درست نیست! بنا به دلیلی که کمی قبلتر به آن اشاره کردیم وکمی جلوتر آنرا بیشتر توضیح خواهیم داد.
برای آموزش مدلها بطور معمول از train/test split و k-fold Cross-Validation استفاده میشود که هر دو روش موثر به نظر میرسند جز در مواردی که میخواهیم مدل طبقه بندی را روی دیتای نامتعادل ارزیابی کنیم. جالب است بدانید در بسیاری از موارد از جمله در مواجه با دیتای نامتعادل این روشها به شکست برمیخورند. دلیل این شکست هم پیش بینی نمونهها در کلاس اکثریت است. این در حالیکه بیزینس بیشتر علاقه مند به کلاس کمتر است. اگر بخواهیم بیشتر از نقطه نظر تکنیکی این را توضیح دهیم، تابع تصمیم الگوریتم یادگیری ماشین به طور عمده تحت تاثیر نمونههای آموزش (training samples) هست. و تابع تصمیم کلاس با تعداد نمونه بیشتر را ترجیح میدهد.
رویکردها:
ایده برای حل معضل دیتای نامتعادل، نمونه گیری تصادفی است که میتواند به کمک دو روش زیر توام انجام شود:
- Oversampling: برای کلاس با اعضای کمتر نمونه ایجاد میکند.
- Undersampling: از کلاس با نمونههای بیشتر نمونه حذف میکند.
در صورت در دست نبودن داده های نامتعادل، می توانیم دیتای نامتعادل از نوع کلاس باینری برای مثال با نسبت بالای عدم تعادل از ۹۹% برای کلاس اکثریت را با کدهای پایتون ایجاد کنیم. سپس با Oversampling تعداد نمونهها را در کلاس با نمونه های خیلی کم افزایش دهیم. اما از آنجائیکه oversampling منجر به ایجاد کپیهایی از کلاس فرعی میشود، ممکن است منجر به overfitting شود.
حالا undersampling دقیقاً برعکس oversampling کار میکند. در واقع دادههایی که بر اثر oversampling در کلاس اصلی ایجاد شدند را از کلاس اکثریت پاک میکند. چون تعداد زیادی داده از کلاس اکثریت پاک میشود، امکان ایجاد underfitting بسیار زیاد هست.
تکنیکهای مختلف Sampling:
در بسیاری از حالتها، oversampling بیشتر نسبت به undersampling ترجیح داده میشود. چون پاک کردن دیتا در بسیاری از موارد مطلوب نیست. از آنجائیکه آنها اطلاعات مهمی را در خود دارند. به روشهای مرسوم sampling برای کلاس بندی دیتای نامتعادل میپردازیم:
- Synthetic Minority Oversampling Technique (SMOTE)
توجه داشته باشیم که oversampling اگر با کپی کردن همان نمونههای موجود در کلاس با حداقل نمونه صورت بگیرد، اطلاعاتی به دادهها اضافه نمیکند. لذا به جای ایجاد کپی از نمونههای موجود از کلاس فرعی مثل Random Over Sampler، SMOTE نمونههای جدیدی طی interpolation ایجاد میکند. مکانیزم روش SMOTE را در شکل زیر میبینیم:
روش تولید دیتا توسط SMOTE:
- انتخاب یک نمونه تصادفی در کلاس فرعی
- تعیین نزدیکترین همسایگیها برای دیتای بطور تصادفی انتخاب شده (KNN, e.g. k=5)
- انتخاب یکی از همسایگیها
- محاسبه فاصله بین دیتا و همسایگی آن
- نتیجه یک بردار در بازه [۰,۱] خواهد بود.
برای تازه های دنیای تکنولوژی و هوش مصنوعی به اینستاگرام ما به نشانی ai.academy97 بپیوندید.
۲٫ Adaptive Synthetic (ADASYN)
این روش مشابه SMOTE است. تنها با یک فرق: نمونههای ایجاد شده برای نمونههایی که در گروه همگن نیستند.
۳٫ روشهای مشابه زیادی برای sampling داریم که ترکیبی از oversampling و undersampling هستند. برای مثال:
- SMOTE & Tomek Links (SMOTE Tomek)
- SMOTE & Edited Nearest Neighbors (SMOTE ENN)
نتیجه
سناریوهای زیادی در حوزه پروژههای مربوط به دادههای نامتعادل وجود دارند. متداولترین آنها پیش بینی مشتریان رویگردان (customer churn)، تشخیص تراکنشها (detect fraudulent transaction) در موسسات مالی، تشخیص ایمیلهای spam و … است. ما در این مقاله به بررسی تکنیکهای sampling که برای تشخیص بهتر کلاس minor در مسئله کلاس بندی مفید هستند، پرداختیم. هدف از به کارگیری این الگوریتمها، حذف و ایجاد نمونه ها در کلاسهای اکثریت و اقلیت به ترتیب، دستیابی به عملکرد بهتری از مدلهای کلاس بندی است. شایان ذکر است، Accuracy همیشه محک خوبی برای سنجش مدل نیست. از جمله در مواجه با دادههای نامتعادل. از اینرو باید f1 score, precision, recall را به عنوان متریکهای مدل چک کنیم.
منابع
- Imbalanced classification with python, Jason Brownlee, 2020
- Imbalanced data classification: Oversampling and Undersampling, Debmalya Mondal, Feb 2023