تشخیص داده پرت
دیتاست

۳ الگوریتم تشخیص داده‌ پرت که هر متخصص علوم داده‌ای به آن‌ها نیاز دارد

0

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

به طور قطع می‌توانم بگویم مشکلاتی از این قبیل برای شما هم پیش‌ آمده است:

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

تشخیص داده پرت

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

برای نمونه، نگاهی به فهرست مقابل بیندازید:

[۱,۳۵,۲۰,۳۲,۴۰,۴۶,۴۵,۴۵۰۰]

اعداد ۱ تا ۴۵۰۰ این دیتاست، داده پرت هستند.

دلایل وجود داده پرت

معمولاً، داده‌‌های پرت به دلایلی که در ادامه به آن‌ها اشاره خواهیم کرد، شکل می‌گیرند:

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

برخی دلایل آن عبارتند از:

۱- مدل‌های خطی

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

تشخیص داده پرت

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

حالا می‌خواهیم ببینیم اگر یک داده پرت اضافه کنیم، چه اتفاقی می‌افتد:

تشخیص داده پرت

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

  • پرسپترون
  • رگرسیون خطی و رگرسیون لجیستیک
  • شبکه‌های عصبی
  • کی نزدیک‌ترین همسایه (KNN)

۲- جانهی داده‌ها

تشخیص داده پرت

عکس از Ehimetalor Akhere Unuabona، منتشر شده در Unsplash

یکی از مشکلات رایجی که ممکن است پیش بیاید، فقدان داده‌ها است  و در مواجه با آن می‌توانید دو رویکرد اتخاذ کنید:

۱- نمونه‌ها را به همراه ردیف‌های گمشده حذف کنید.

۲- (مقادیر) را با استفاده از روش‌های آماری جایگزین داده‌های گمشده کنید.

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

 

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

راه‌حل اول: DBSCAN
تشخیص داده پرت

تصویر از ویکی‌پدیا

خوشه بندی مکانی داده های دارای نویز بر مبنای چگالی ( به اختصار DBSCAN) همانند k-میانگین، یک الگوریتم خوشه‌بندی بدون نظارت است. از این الگوریتم می‌توان برای تشخیص داده‌های پرت استفاده کرد.

 

یکی از دلایل محبوبیت DBSCAN این است که می‌تواند خوشه‌های غیرخطی قابل تفکیک Non-linearly separable clusters
را پیدا کند، در حالی‌که الگوریتم‌ k-میانگین و مدل‌ مخلوط گوسی قادر به انجام این کار نیستند. زمانی‌که خوشه‌ها به اندازه کافی متراکم هستند و به وسیله نواحی با چگالی پایین از یکدیگر جدا شده‌اند، الگوریتم DBSCAN عملکرد خوبی دارد.

مروری بر نحوه عملکرد الگوریتم DBSCAN

الگوریتم DBSCAN، خوشه‌ها را نواحی‌ای پیوسته با چگالی بالا در نظر می‌گیرد. نحوه عملکرد این الگوریتم بسیار ساده است:

۱- برای هر یک از نمونه‌ها، تعداد نمونه‌هایی که در فاصله ε (اپسیلون) از آن قرار دارند را محاسبه می‌کند. این ناحیه، همسایگی ε نمونه نامیده می‌شود.

۲- چنان‌چه تعداد نمونه‌هایی که در همسایگی ε نمونه قرار دارند بیشتر از min-samples باشد، این نمونه، نمونه مرکزی در نظر گرفته می‌شود. نمونه مرکزی به نمونه‌ای اطلاق می‌شود که در ناحیه‌ای با چگالی بالا قرار دارد ( ناحیه‌ای که نمونه‌های زیادی در آن قرار دارند).

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

۴- نمونه‌هایی که نمونه مرکزی نیستند و یا در همسایگی ε نقطه مرکزی قرار ندارند، داده‌پرت در نظر گرفته می‌شوند.

الگوریتم DBSCAN در عمل

API کتابخانه Scikit-Learn استفاده از الگوریتم DBSCAN را بسیار آسان کرده است. در ادامه می‌توانید نمونه‌ای از این الگوریتم را مشاهده کنید:

یک نمونه اولیه از DBSCAN می‌سازیم و همسایگی ε را برابر با ۰.۰۵ قرار می‌دهیم و حداقل‌ نمونه‌های لازم برای این‌که یک نمونه، نمونه مرکزی در نظر گرفته شود برابر ۵ است.

همان‌گونه که پیش از این نیز گفتیم، الگوریتم DBSCAN، یک الگوریتم بدون نظارت است و به همین دلیل، در هنگام کار با این الگوریتم نیازی به برچسب‌گذاری نیست. برچسب‌هایی که الگوریتم DBSCAN تولید کرده است را می‌توانیم با اجرای دستور مقابل مشاهده کنیم:

همان‌گونه که مشاهده می‌کنید، مقدار برخی از برچسب‌ها برابر با ۱- است، این داده‌ها، داده‌ پرت هستند.

الگوریتم DBSCAN متد پیش‌بینی ندارد، بلکه فقط یک متد fit-predict دارد؛ به عبارت دیگر این الگوریتم نمی‌تواند نمونه‌های جدید را خوشه‌بندی کند. در عوض می‌توانیم از یک کلاسیفایر متفاوت برای آموزش و پیش‌بینی استفاده کنیم. برای مثالی که ذکر کردیم می‌توانیم از KNN استفاده کنیم:

در این قسمت کلاسیفایر KNN را با نمونه‌های مرکزی و همسایه‌های آن‌ها آموزش می‌دهیم.

اما مشکلی که با آن مواجه می‌شویم این است که در داده‌هایی که به KNN داده‌ایم، داده پرت وجود ندارد و همین مسئله موجب می‌شود KNN خوشه‌ای را برای نمونه‌های جدید انتخاب کند، حتی اگر نمونه جدید یک داده پرت باشد.

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

 

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

راه‌حل دوم: IsolationForest

تشخیص داده های پرت

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

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

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

۳- ناهنجاری معمولاً با سایر نمونه‌ها فاصله زیادی دارد، در نتیجه، به طور متوسط ( در تمامی درخت‌های تصمیم) زودتر از نمونه‌های معمولی جدا می‌شود.

IsolationForest در عمل

API کتابخانه Scikit-learn موجب شده پیاده‌سازی کلاس IsolationForest آسان شود. در ادامه مثالی از این الگوریتم آورده‌ایم:

برای اندازه‌گیری خطا نیز از میانگین قدر مطلق خطا استفاده خواهیم کرد. برای داده‌ها هم از یکی از دیتاست‌های Gitub جیسون برون‌لیجیسون برون‌لی Jason Brownlee استفاده می‌کنیم:

 

پیش از آموزش الگوریتم IsolationForest ، داده‌ها را به مدل استاندارد رگرسیون خطی Vanilla Linear Regression model آموزش می‌دهیم و MAE را به دست می‌آوریم:

امتیاز نسبتاً خوبی است! حالا باید ببینیم آیا Isolation Forest می‌تواند با حذف ناهنجاری‌ها، این امتیاز را افزایش دهد یا خیر!

ابتدا، IsolationForest مقداردهی اولیه می‌کنیم:

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

این الگوریتم در واقع یک Random Forest تصادفی شده است، بنابراین تمامی ابرپارمترهای یک Random Forest را می‌توان در این الگوریتم به کار برد.

در گام بعد، داده‌ها را به الگوریتم آموزش می‌دهیم:

مقادیر پیش‌بینی شده‌ای که برابر با ۱- هستند را حذف می‌کنیم. این مقادیر داده‌ پرت به شمار می‌آیند.

سپس X و Y را با داده‌هایی که در آن‌ها داده پرت وجود ندارد، دوباره مقداردهی می‌کنیم:

در این مرحله مدل رگرسیون خطی را با داده‌ها آموزش می‌دهیم و MAE را محاسبه می‌کنیم:

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

 

راه‌حل سوم: نمودار جعبه‌ای و روش توکی

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

تشخیص داده پرت

Boxplotها برای نمایش داده‌های عددی در چارک‌ها، جعبه‌ای با خطوط ترسیم می‌کند. این روش بسیار ساده و در همان حال برای نشان دادن داده‌های پرت بسیار مؤثر است.

خطوط (whiskers) بالا و پایین محدوده یک توزیع را مشخص می‌کنند و هر چیزی که در بالا و یا پایین این خطوط قرار بگیرد، داده‌ پرت در نظر گرفته می‌شود. در تصویر بالا، تمامی داده‌هایی که بالای (به طور تقریبی) ۸۰ و پایین (به طور تقریبی) ۶۲ قرار بگیرد، داده‌ پرت است.

نحوه عملکرد Boxplot

در قدم اول، نمودار جعبه‌ای، دیتاست را به ۵ بخش تقسیم می‌کنید:

تشخیص داده پرت

 

 

  • مینیمم: پایین‌ترین نقطه داده‌های موجود در توزیع به استثنای داده‌های پرت.
  • ماکسیمم: بالاترین نقطه‌ داده‌های موجود در توزیع به استثنای داده‌های پرت.
  • میانه (چارک دوم/پنجاه‌مین صدک): مقدار میانی دیتاست.
  • صدک اول (چارک اول/بیست‌و‌پنجمین صدک): میانه نیمه پایین دیتاست.
  • صدک سوم ( چارک سوم/هفتاد‌و‌پنجمین صدک): میانه نیمه بالایی دیتاست.

 

اهمیت دامنه بین چارکی در این است که داده‌های پرت را مشخص می‌کند. IQR به شکل زیر است:

 

در نمودارهای جعبه‌ای، فاصله ۱.۵ برابری IQR محاسبه می‌شود و نقطه‌داده‌هایی که در قسمت فوقانی دیتاست قرار دارند، را در بر می‌گیرد. به همین ترتیب، فاصله ۱.۵ برابری IQR نقطه‌داده‌هایی که در قسمت پایین دیتاست مشاهده می‌شوند، محاسبه می‌شود. به بیان دقیق‌تر:

  • اگر نقاط مشاهده شده پایین از (Q1 – ۱.۵ * IQR) یا خط پایینی نمودار جعبه‌ای باشند، داده پرت به حساب می‌آیند.
  • اگر نقاط مشاهده‌شده بالای (Q3 +1.5 * IQR) یا خط فوقانی نمودار جعبه‌ای باشند، داده‌ پرت به حساب می‌آیند.

تشخیص داده پرت

نمودار جعبه‌ای در عمل

در این قسمت می‌خواهیم ببینیم چگونه می‌توان با استفاده از نمودارهای جعبه‌ای در پایتون، داده‌های پرت را تشخیص داد:

اکنون نمودار جعبه‌ای داده‌ها را ترسیم می‌کنیم:

تشخیص داده پرت

همان‌گونه که در نمودار جعبه‌ای فوق نشان داده شده است، میانه برابر با ۵۰ است و سه تشخیص داده پرت در داده‌های ما وجود دارد. برای حذف کردن این نقاط:

تشخیص داده پرت

در اینجا من یک آستانه تعیین کرده‌ام، بنابراین تمامی نقاط کمتر از ۵۰- و بیشتر از ۱۵۰ حذف خواهند شد و در پایان یک توزیع متوازن خواهیم داشت.

روش توکی برای تشخیص داده‌های پرت

روش توکی نمونه غیر بصری نمودار جعبه‌ای است: این روش مشابه نمودار جعبه‌ای است با این تفاوت که در این روش داده‌های مصورسازی نمی‌شوند.

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

در عوض می‌توانیم الگوریتمی را کدنویسی کنیم که نمونه‌هایی را که تشخیص می‌دهد تشخیص داده پرت هستند به ما نشان دهد.

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

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

۱- برای هر یک از ویژگی‌ها،

  • صدک اول
  • صدک سوم
  • IQR

را محاسبه می‌کند.

۲- سپس فاصله داده‌ پرت Outlier step را تعریف می‌کند؛ این فاصله همانند نمودارهای‌های جعبه‌ای برابر با ۱.۵*IQR است.

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

  • نقطه مشاهده شده کمتر از Q1 منهای فاصله داده پرت باشد
  • نقطه مشاهده شده بیشتر از Q3 به اضافه فاصله داده پرت باشد

۴- سپس مشاهداتی که k داده‌ پرت دارند را انتخاب می‌کند ( در این مورد k برابر با ۲ است).

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

مقاله قبلی

علی‌بابا در بازار زیرساخت‌های ابری از آی‌بی‌ام سبقت گرفت

مقاله بعدی

شما همچنین ممکن است دوست داشته باشید

بیشتر در دیتاست

نظرات

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *