نمونه گیری (Sampling) از مجموعه داده های بزرگ — راهنمای کاربردی

در «یادگیری ماشین» (Machine Learning) و «داده‌کاوی» (Data Mining)، اغلب نیاز به آموزش دادن مدل با یک «مجموعه داده» (Data Set) بسیار بزرگ حاوی هزاران و یا حتی میلیون‌ها رکورد است. هر چه اندازه مجموعه داده بزرگ‌تر باشد، «معناداری آماری» (Statistical Significance) آن و اطلاعاتی که در بر دارد افزایش می‌یابد. اما کمتر پیش می‌آید که افراد از خود بپرسند: «آیا چنین مجموعه داده عظیمی واقعا مفید است؟» و «آیا می‌توان با استفاده از یک مجموعه داده کوچک‌تر و قابل مدیریت‌تر به نتایج بهتری دست پیدا کرد؟». انتخاب یک مجموعه داده که به اندازه مناسبی کوچک و حاوی حجم مناسبی از اطلاعات باشد، می‌تواند به کاربر برای صرفه‌جویی در هزینه و زمان کمک شایان توجهی کند. در این مطلب به روش نمونه گیری (Sampling) از مجموعه داده‌های بزرگ پرداخته خواهد شد.

اما پیش از آن، برای درک بهتر مفهوم، می‌توان یک آزمایش ساده ذهنی انجام داد. فرض می‌شود که فرد در یک کتابخانه است و می‌خواهد کتاب «کمدی الهی» (Divine Comedy)، اثر «دانته آلیگیری» (Dante Alighieri) را به طور کامل بیاموزد. در این حالت، دو راه برای او وجود دارد:

۱. برداشتن اولین ویرایشی که از این کتاب پیدا می‌شود و آغاز مطالعه آن

۲. برداشتن هر تعداد ویرایش موجودی از این کتاب و مطالعه همه آن‌ها

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

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

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

چارچوب آماری

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

به بیان آماری، هدف آن است که نمونه، توزیع احتمالی جامعه را با یک سطح معناداری مناسب حفظ کند. به بیان دیگر، اگر نگاهی به نمودار «بافت‌نگار» (Histogram | هیستوگرام) ترسیم شده از نمونه شود، باید مشابه بافت‌نگار جامعه باشد. راهکارهای متعددی برای انجام این کار و رسیدن به این هدف وجود دارد. ساده‌ترین راه آن است که یک زیر نمونه تصادفی با توزیع یکنواخت انتخاب و بررسی شود که معنادار است یا نه. در این مرحله، اگر نمونه به اندازه قابل قبولی معنادار بود، نگهداری می‌شود. در غیر این صورت، نمونه دیگری گرفته می‌شود و روال بیان شده تا جایی که سطح خوبی از معناداری حاصل شود، تکرار می‌شود.

چند متغیری و چندگانه یکنواخت

اگر یک مجموعه داده حاوی N متغیر وجود داشته باشد، می‌توان آن را به صورت یک نمودار بافت‌نگار N متغیری ترسیم کرد و بنابراین، می‌توان هر زیر نمونه‌ای از آن را دریافت کرد. انجام این عملیات، اگرچه به لحاظ آکادمیک صحیح محسوب می‌شود، اما انجام آن در واقعیت بسیار دشوار است، به ویژه اگر مجموعه داده ترکیبی از متغیرهای «عددی» (Numerical) و «طبقه‌ای» (Categorical) باشد. به همین دلیل است که رویکرد ساده‌تری ترجیح داده می‌شود که معمولا تخمین قابل قبولی ارائه می‌کند. آنچه قرار است انجام شود، در نظر گرفتن هر متغیر به صورت مستقل، از دیگر متغیرها است. اگر هر یک از بافت‌نگارهای یکنواخت از ستون‌های نمونه، قابل مقایسه با بافت‌نگار متناظر از ستون‌های جامعه باشند، می‌توان فرض کرد که نمونه دارای «سوگیری» (Bias) نیست. سپس، مقایسه بین نمونه و جامعه به صورت زیر انجام می‌شود:

۱. دریافت یک متغیر از نمونه.

۲. مقایسه توزیع احتمال آن با توزیع احتمال متغیر مشابهی از جامعه.

۳. تکرار همه متغیرها.

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

مقایسه نمونه و جامعه

همانطور که پیش از این بیان شد، برای هر متغیری باید توزیع احتمال آن روی مجموعه داده نمونه با توزیع احتمال جامعه مقایسه شود. بافت‌نگار متغیرهای طبقه‌ای را می‌توان با استفاده از «آزمون خی‌دوی» (Chi-Squared Test | آزمون کی دو) مقایسه کرد، در حالیکه تابع توزیع تجمعی متغیرهای عددی با استفاده از «آزمون کولموگروف–اسمیرنف» (Kolmogorov-Smirnov Test) قابل قیاس است. 

هر دو آزمون آماری تحت یک «فرض صفر» (Null Hypothesis) کار می‌کنند که دارای توزیعی مشابه با جامعه است. از آنجا که نمونه با ستون‌های متعدد ساخته شده و هدف معنی‌دار بودن آن‌ها است، می‌توان همه فرضیه‌های صفر را رد کرد اگر p-مقدار (p-value) در حداقل یکی از آزمون‌ها کمتر از سطح اطمینان متداول ۵٪ باشد. به بیان دیگر، هدف آن است که هر ستون، آزمون معنی‌دار بودن را به منظور پذیرش نمونه به عنوان نمونه معتبر، پاس کند. 

مثال

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

شبیه‌سازی داده‌ها

در ادامه، حجم زیادی از داده‌ها شبیه‌سازی می‌شوند. یک دیتافریم (DataFrame) با یک میلیون رکورد و دو ستون ساخته می‌شود. اولین ۵۰۰۰۰۰ رکورد از توزیع نرمال هستند، در حالیکه ۵۰۰۰۰۰ رکورد بعدی توزیع یکنواخت دارند. این متغیر به طور قابل توجهی دارای سوگیری است و به بیان مفهوم معناداری که پس از این انجام خواهد شد، کمک می‌کند. فیلد دیگر، متغیر فاکتور است که با استفاده از ۱۰ حرف اول الفبا که دارای توزیع یکنواخت هستند، ساخته شده است. در ادامه، کد مربوط به ساخت مجموعه داده بیان شده، آورده شده است.

set.seed(100)
N = 1e6
dataset = data.frame(
# x1 variable has a bias. The first 500k values are taken
# from a normal distribution, while the remaining 500k
# are taken from a uniform distribution
x1 = c(
rnorm(N/2,0,1) ,
runif(N/2,0,1)
),

# Categorical variable made by the first 10 letters
x2 = sample(LETTERS[1:10],N,replace=TRUE)
)

ساخت یک مجموعه داده و بررسی معناداری آن

اکنون، می‌توان یک نمونه با ۱۰۰۰۰ رکورد را از مجموعه داده اصلی ساخت و معناداری آن را بررسی کرد. باید به خاطر داشت که متغیرهای عددی باید با آزمون کولموگروف–اسمیرنف بررسی شوند، در حالی که متغیرهای طبقه‌ای نیاز به آزمون خی‌دوی پیرسون دارند. برای هر آزمون، p-value در یک لیست نام‌دار برای بررسی نهایی ذخیره می‌شود. اگر همه p-value بزرگ‌تر از ٪۵ باشند، می‌توان گفت که نمونه دارای سوگیری نیست.

sample_size = 10000
set.seed(1)
idxs = sample(1:nrow(dataset),sample_size,replace=F)
subsample = dataset[idxs,]
pvalues = list()
for (col in names(dataset)) {
if (class(dataset[,col]) %in% c(“numeric”,”integer”)) {
# Numeric variable. Using Kolmogorov-Smirnov test

pvalues[[col]] = ks.test(subsample[[col]],dataset[[col]])$p.value

} else {
# Categorical variable. Using Pearson’s Chi-square test

probs = table(dataset[[col]])/nrow(dataset)
pvalues[[col]] = chisq.test(table(subsample[[col]]),p=probs)$p.value

}
}

pvalues

P-مقدارها برابرند با:

هر یک از این موارد، بزرگ‌تر از ٪۵ هستند، بنابراین می‌توان گفت که نمونه به لحاظ آماری معنادار است. اما اگر به جای انتخاب تصادفی رکوردها،  ۱۰۰۰۰ رکورد اول انتخاب شوند چه می‌شود؟ همانطور که پیش‌تر بیان شد، اولین نیمه از متغیر X1 دارای توزیع متفاوتی نسبت به کل مجموعه داده است، بنابراین چنین نمونه‌ای نمی‌تواند نماینده کل جامعه باشد. اگر آزمون‌ها تکرار شوند، p-مقدارها عبارتند از:

همانطور که انتظار می‌رفت، X1 به دلیل سوگیری جامعه، دارای p-مقدار بسیار ناچیزی است. در این مورد، باید به تولید نمونه‌های تصادفی تا جایی ادامه داد که همه p-مقدارهای بزرگ‌تر از حداقل سطح اطمینان، پذیرفته شده باشند. 

نتیجه‌گیری

در این مطلب، روش مناسبی برای نمونه‌گیری آماری که در آن، نمونه به لحاظ آماری معنادار باشد تا بتواند نماینده‌ای از جامعه محسوب شود، آموزش داده شد. آنچه بیان شد، در «یادگیری ماشین» (Machine Learning) به کاربر کمک می‌کند. زیرا، استفاده از مجموعه داده‌های کوچک‌تر به «آموزش دیدن» (Train) سریع‌تر مدل کمک می‌کند. اگرچه، همه چیز به شدت وابسته به سطح معناداری است که کاربر انتخاب می‌کند. برای نوع خاصی از مسائل، افزایش دادن سطح اطمینان و یا صرف‌نظر کردن از متغیرهایی که p-مقدار آن‌ها مناسب نیست، مفید خواهد بود. همچون همیشه، یک اکتشاف داده مناسب، پیش از آموزش دادن مدل می‌تواند به ما در تصمیم‌گیری اینکه چطور یک نمونه‌گیری را به درستی انجام دهیم کمک کند.

اگر نوشته بالا برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

مجموعه آموزش‌های آمار و احتمالات

 

منبع [+]

پاسخی بگذارید

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