نوشته‌ها

انتخاب ویژگی‌ها

ممکن است داده‌های زیادی داشته باشیم. اما آیا همه آن‌ها مفید و مرتبط هستند؟ کدام ستون‌ها و ویژگی‌ها به احتمال زیاد در نتایج ما تأثیر می‌گذارند؟

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

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

اهمیت انتخاب ویژگی‌ها

جواب مثبت است. همانطور که در پست قبل گفته شد، زباله وارد کنید، زباله خارج می‌شود. اگر ویژگی‌های غیرمرتبط را در تحلیل خود بگنجانیم، ممکن است نتایج نادرست و بی‌ربطی بدست آوریم. کامپیوتر و الگوریتم ما از “نمونه‌های بد” یاد می‌گیرند که منجر به نتایج نادرست می‌شود.

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

مثال انتخاب ویژگی‌ها

فرض کنید ما بیش از 20 ویژگی داریم که مشتریان را توصیف می‌کنند. این ویژگی‌ها شامل سن، محدوده درآمد، مکان، جنسیت، داشتن فرزند یا نداشتن، سطح خرج کردن، خریدهای اخیر، بالاترین سطح تحصیلات، مالکیت خانه یا نه، و بیش از دوجین ویژگی دیگر است. با این حال، همه این‌ها ممکن است با تحلیل یا مدل پیش‌بینی ما مرتبط نباشند. اگرچه ممکن است همه این ویژگی‌ها تا حدودی تأثیر داشته باشند، تحلیل ممکن است بسیار پیچیده باشد تا مفید باشد.

چگونگی انتخاب ویژگی‌های مرتبط

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

دانش حوزه و انتخاب ویژگی‌ها

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

وابستگی ویژگی‌ها

علاوه بر این، نیاز به دانش حوزه دارد تا بدانیم کدام ویژگی‌ها به یکدیگر وابسته هستند. در مثال ما درباره کیفیت شکلات ، مواد موجود در شکلات ممکن است با یکدیگر واکنش نشان دهند و در نتیجه بر مقدار این مواد تأثیر بگذارند. وقتی مقدار یک ماده را افزایش می‌دهید، ممکن است مقدار دیگری را افزایش یا کاهش دهد.

انتخاب ویژگی‌های مناسب

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

اهمیت تخصص حوزه

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

منابع داده آنلاین

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

می‌توانید با مخزن یادگیری ماشین UCI شروع کنید (https://archive.ics.uci.edu/ml/datasets.html) که می‌توانید به مجموعه داده‌هایی درباره تجارت، مهندسی، علوم زندگی، علوم اجتماعی و علوم فیزیکی دسترسی پیدا کنید. می‌توانید داده‌هایی درباره ال نینو، رسانه‌های اجتماعی، شخصیت‌های دست‌نوشته، تشخیص درایو بدون حسگر، بازاریابی بانکی و موارد دیگر پیدا کنید. این کافی است تا زمان شما را برای ماه‌ها و سال‌ها پر کند اگر به تحلیل داده‌های بزرگ مقیاس جدی بپردازید.

منابع داده دیگر

همچنین می‌توانید مجموعه داده‌های جالب‌تری را در Kaggle (https://www.kaggle.com/datasets) پیدا کنید مانند داده‌هایی درباره بقای تایتانیک، خرید مواد غذایی، تشخیص‌های پزشکی، کیفیت هوا در تاریخ، بررسی‌های آمازون، آمار جرم و جنایت و قیمت مسکن.

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

منابع داده داخلی

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

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

ذخیره‌سازی و پردازش داده‌های داخلی

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

انواع فایل‌های داده

داده‌ها می‌توانند در فرمت‌ها و انواع فایل‌های مختلفی مانند CSV، SQLite، JSON و BigQuery ذخیره شوند. نوع فایلی که شرکت شما انتخاب کرده ممکن است بستگی به راحتی و زیرساخت‌های موجود داشته باشد. مهم است که بدانید چگونه با این نوع فایل‌ها کار کنید (اغلب در توضیحات شغلی ذکر می‌شوند) تا بتوانید تحلیل معناداری انجام دهید.

دریافت و پردازش داده‌ها

زباله وارد کنید، زباله خارج می کنید

این جمله توی تحلیل داده‌ها خیلی درسته. چون دقت تحلیل ما کاملاً به کیفیت داده‌هایی که استفاده می‌کنیم بستگی داره. اگه داده‌های بی‌کیفیت وارد کنیم، انتظار نداشته باشید که نتایج باکیفیتی بگیریم.

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

فایل‌های CSV

فایل‌های CSV شاید رایج‌ترین فرمت داده‌ای باشن که توی علوم داده و یادگیری ماشین باهاش مواجه می‌شید (خصوصاً وقتی از پایتون استفاده می‌کنید). CSV یعنی مقادیر جدا شده با کاما. مقادیر در ستون‌های مختلف با کاما جدا می‌شن. اینجا یه مثال هست:

Product, Price
cabbage,6.8
lettuce,7.2
tomato,4.2

این یه مثال ساده دو ستونی بود. توی پروژه‌های مدرن تحلیل داده، ممکنه چیزی شبیه این باشه:

RowNumber,CustomerId,Surname,CreditScore,Geography,Gender,Age,Tenure,....
1,15634602,Hargrave,619,France,Female,42,2,0,1,1,1,101348.88,1
2,15647311,Hill,608,Spain,Female,41,1,83807.86,1,0,1,112542.58,0
3,15619304,Onio,502,France,Female,42,8,159660.8,3,1,0,113931.57,1
...

داده‌های واقعی (خصوصاً در تجارت الکترونیک، شبکه‌های اجتماعی و تبلیغات آنلاین) ممکنه میلیون‌ها سطر و هزاران ستون داشته باشن.

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

import pandas as pd
dataset = pd.read_csv('Data.csv')

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

بعدش، مقادیر ورودی (X) و مقادیر خروجی (y) رو تنظیم می‌کنیم. اغلب، مقادیر y هدف‌های خروجی ما هستن. برای مثال، هدف معمول اینه که یاد بگیریم چطور مقادیر خاصی از X روی مقادیر y مربوطه تأثیر می‌ذارن. بعداً، اون یادگیری رو می‌تونیم روی مقادیر جدید X اعمال کنیم و ببینیم آیا اون یادگیری توی پیش‌بینی مقادیر y مفیده یا نه (که ابتدا ناشناخته هستن).

مقیاس‌بندی ویژگی‌ها

بعد از اینکه داده‌ها قابل خواندن و استفاده شدن، اغلب مرحله بعدی اینه که مطمئن بشیم مقادیر در مقیاس و اندازه مشابهی هستن. چون مقادیر در برخی ستون‌ها ممکنه در یک لیگ متفاوت نسبت به بقیه باشن. مثلاً، سن مشتریان می‌تونه بین 18 تا 70 باشه. اما محدوده درآمد بین 100000 تا 9000000 هست. تفاوت در محدوده‌های دو ستون تأثیر زیادی روی مدل ما داره. شاید محدوده درآمد تأثیر زیادی روی نتایج پیش‌بینی داشته باشه به جای اینکه هر دو، سن و درآمد، به صورت مساوی مورد توجه قرار بگیرن.

برای انجام مقیاس‌بندی ویژگی‌ها، یکی از روش‌ها استفاده از کد زیر هست:

from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)

هدف اینه که مقادیر رو در یک مقیاس مشابه قرار بدیم تا همه مقادیر از ستون‌ها یا ویژگی‌های مختلف به پیش‌بینی‌ها و خروجی‌ها کمک کنن.

تقسیم داده‌ها به مجموعه‌ی آموزشی و آزمایشی

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

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

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

اینجا، ما چیزی رو از scikit-learn (کتابخانه‌ی رایگان یادگیری ماشین برای زبان برنامه‌نویسی پایتون) وارد می‌کنیم و یه تقسیم روی مجموعه داده انجام می‌دیم. این تقسیم اغلب 80% مجموعه آموزشی و 20% مجموعه آزمایشی هست (test_size=0.2). مقدار random_state می‌تونه هر عددی باشه به شرط اینکه در بخش‌های بعدی پروژه‌تون ثابت بمونه.

شما واقعاً می‌تونید از نسبت‌های مختلف برای تقسیم مجموعه داده‌تون استفاده کنید. بعضی‌ها از نسبت 70-30 یا حتی 60-40 استفاده می‌کنن. فقط به خاطر داشته باشید که مجموعه آموزشی باید به اندازه کافی بزرگ باشه تا هر چیزی که معناداره رو یاد بگیره.

جمع‌بندی

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

مواردی هم هست که ما از قبل مقدار کافی از داده‌ها برای یادگیری معنادار داریم. اغلب نیازی به جمع‌آوری داده‌های بیشتر نداریم چون تأثیرش ممکنه ناچیز باشه (مثل بهبود دقت 0.0000001%) یا سرمایه‌گذاری‌های بزرگ در زمان، تلاش و پول نیاز داشته باشه. توی این موارد شاید بهتر باشه روی چیزی که از قبل داریم کار کنیم تا به دنبال چیزی جدید بگردیم.