تکنیکی ساده برای حل چالش داده های Outlier

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




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

curl https://github.com/trangel/stats-with-python/blob/master/data/db-readability-length.csv > db-readability-length.csv

برای بررسی دیتاست، کتابخانه های زیر را وارد محیط ژوپیتر نوت بوک می‌کنیم.

import pandas as pd
import numpy as np

دیتاست دانلود شده را import می‌کنیم.

df = pd.read_csv('./db-readability-length.csv', index_col=0)
df.head()

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

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

df['Readability'].hist(bins=50, figsize=(10,5))


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

چگونه داده های پرت را می‌توانیم حذف کنیم؟!

پاسخ: اگر داده ها را بین بازه 5 تا 95 درصد در نظر بگیریم، می توانیم داده های پرت را بی تاثیر کنیم. با توجه به توزیع نرمال بودن، با استفاده از این روش در صورتی که ابتدا و انتهای مجموعه داده، داده های پرت داشته باشیم، حذف خواهند شد. بنابراین حذف این داده ها، باعث افزایش کیفیت و دقت شاخص های آماری می شوند.

X = df['Readability'].values
X = X.reshape(len(X))
df2 = df[df['Readability'].between(np.percentile(X,5), np.percentile(X,95), inclusive=True )]

حال بیایید نمودار دیتاست جدید را رسم کنیم.

bins = np.arange(-20,50,1)
df2['Readability'].hist(bins=bins, figsize=(10,5))

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


منبع:

https://github.com/trangel/stats-with-python