پیش پردازش و آنالیز داده

معرفی رویکردهای گوناگون فهم داده و لزوم آن

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

معرفی علم آمار و تقسیم‌بندی آن

علم آمار شاخه‌ای از ریاضیات است که به جمع‌آوری، تحلیل، تفسیر و ارائه داده‌ها می‌پردازد. در علم داده، آمار زبان مشترک بین داده و دانش است. علم آمار به دو شاخه اصلی تقسیم می‌شود: آمار توصیفی (Descriptive Statistics) که داده را خلاصه و توصیف می‌کند – مثل میانگین، میانه و واریانس – و آمار استنباطی (Inferential Statistics) که از روی نمونه‌ای از داده، نتیجه‌گیری درباره کل جامعه انجام می‌دهد و شامل آزمون فرضیه‌ها و مدل‌سازی آماری است. در تحلیل داده، شما هم نیاز به توصیف داده دارید (برای گزارش‌دهی و درک اولیه) و هم به استنباط (برای پیش‌بینی و تصمیم‌گیری). یادگیری اصول آمار، نه یک گزینه، بلکه یک ضرورت برای هر کسی است که می‌خواهد در حوزه داده و هوش مصنوعی حرفه‌ای شود.

معرفی آمار توصیفی

آمار توصیفی ابزاری قدرتمند برای درک یک نگاهه (at-a-glance) به داده‌های شماست. این شاخه از آمار سه دسته اصلی اطلاعات را به شما می‌دهد: شاخص‌های گرایش مرکزی (مثل میانگین، میانه و مد) که نشان می‌دهد داده‌ها به چه مقداری تمایل دارند، شاخص‌های پراکندگی (مثل دامنه، واریانس و انحراف معیار) که نشان می‌دهد داده‌ها چقدر از مرکز خود فاصله دارند، و شاخص‌های شکل توزیع (چولگی و کشیدگی) که شکل کلی داده را توصیف می‌کنند. در پایتون، کتابخانه‌های pandas و scipy.stats ابزارهای بسیار خوبی برای محاسبه آمار توصیفی دارند. فرض کنید یک فایل اکسل با ۱۰۰۰ سطر داده مشتری دارید – آمار توصیفی در کمتر از یک ثانیه به شما می‌گوید میانگین سن مشتریان چقدر است، آیا داده‌های پرتی وجود دارد و توزیع درآمدها متقارن است یا چوله. در این دوره، تمام این مفاهیم را با کدنویسی عملی فرا خواهید گرفت.

گشتاورهای آماری

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

گشتاور اول – میانگین (Mean): موقعیت مرکزی داده را نشان می‌دهد.

گشتاور دوم – واریانس (Variance): پراکندگی داده‌ها حول میانگین را اندازه می‌گیرد (هرچه واریانس بیشتر باشد، داده‌ها پراکنده‌ترند).

گشتاور سوم – چولگی (Skewness): عدم تقارن توزیع را نشان می‌دهد – آیا دم راست بلندتر است (چولگی مثبت) یا دم چپ (چولگی منفی).

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

درک این چهار گشتاور معادل درک زبان ریاضی پشت هر توزیع داده است. در این دوره، یاد می‌گیرید چطور با توابع scipy.stats مثل()skew و ()kurtosis، این گشتاورها را روی داده‌های واقعی محاسبه و تفسیر کنید.

میانگین / میانه

میانگین (Mean) و میانه (Median) دو شاخص اصلی گرایش مرکزی هستند، اما هرکدام داستان متفاوتی از داده روایت می‌کنند. میانگین از تقسیم جمع همه مقادیر بر تعداد آنها به دست می‌آید و به تمام داده‌ها حساس است – به همین دلیل در حضور داده‌های پرت (Outliers) به شدت منحرف می‌شود. مثلاً اگر میانگین درآمد یک محله را محاسبه کنید ولی یک میلیاردر در آن محله زندگی کند، میانگین درآمد کل محله به شدت بالا می‌رود در حالی که وضعیت واقعی مردم عادی را نشان نمی‌دهد. میانه، مقدار وسط داده‌های مرتب شده است، و به داده‌های پرت حساس نیست و نماینده بهتری برای توزیع‌های چوله یا دارای پرت است. قانون سرانگشتی: برای داده‌های متقارن و بدون داده پرت از میانگین استفاده کنید. برای داده‌های چوله یا حاوی داده پرت، از میانه استفاده کنید. در این دوره با مثال‌های واقعی یاد می‌گیرید چگونه این دو شاخص را با numpy و pandas محاسبه و تفسیر کنید.

واریانس

واریانس (Variance) معیاری است برای سنجش پراکندگی داده‌ها حول میانگین. به زبان ساده، واریانس به ما می‌گوید “داده‌ها چقدر از میانگین فاصله دارند؟” فرمول واریانس، میانگین مجذور فاصله هر نقطه از میانگین است – یعنی هرچه داده‌ها از میانگین دورتر باشند، واریانس بیشتر می‌شود. واریانس صفر یعنی همه داده‌ها دقیقاً یکسان هستند. اما مشکل اصلی واریانس این است که واحد آن (مثلاً دلار مربع، کیلوگرم مربع) با واحد داده اصلی مطابقت ندارد – به همین دلیل بیشتر از انحراف معیار (Standard Deviation) استفاده می‌شود که برابر جذر واریانس است و واحد یکسانی با داده دارد. در پایتون، می‌توانید واریانس را با np.var(data) و انحراف معیار را با np.std(data) یا با توابع scipy.stats محاسبه کنید. در این دوره یاد می‌گیرید چطور از این شاخص‌ها برای سنجش ریسک در داده‌های مالی، کیفیت فرآیندهای صنعتی و اعتبارسنجی مدل‌ها استفاده کنید.

چولگی

چولگی (Skewness) یا گشتاور سوم، اندازه‌ای است برای سنجش عدم تقارن توزیع داده‌ها. یک توزیع متقارن (مثل توزیع نرمال) چولگی صفر دارد. اما در دنیای واقعی، بیشتر داده‌ها متقارن نیستند: توزیع درآمد معمولاً چولگی مثبت (Positive Skewness) دارد – یعنی دم سمت راست بلندتر است و میانگین بزرگتر از میانه، چون تعداد کمی افراد خیلی پولدار هستند. برعکس، توزیع نمرات یک آزمون سخت شاید چولگی منفی (Negative Skewness) داشته باشد – یعنی دم سمت چپ بلندتر است و میانگین کوچکتر از میانه، چون تعداد کمی خیلی نمره پایین گرفته‌اند. چولگی شدید (بالای ۱ یا زیر ۱-) نشان می‌دهد داده شما از نرمال بودن فاصله زیادی دارد. در پایتون، تابع scipy.stats.skew(data) چولگی را محاسبه می‌کند. شناخت چولگی به شما کمک می‌کند تصمیم بگیرید آیا نیاز به تبدیل Box-Cox دارید یا کدام الگوریتم برای داده شما مناسب‌تر است.

کشیدگی توزیع

کشیدگی (Kurtosis) یا گشتاور چهارم، شکل توزیع را از نظر نوک تیزی (peakness) و ضخامت دنباله‌ها (tail thickness) توصیف می‌کند. کشیدگی که معمولاً با “کشیدگی اضافی (Excess Kurtosis)” گزارش می‌شود:
توزیع مزوکورتیک (Mesokurtic، کشیدگی ~ ۰): مثل توزیع نرمال – دنباله‌ها متوسط.

توزیع لپتوکورتیک (Leptokurtic، کشیدگی > ۰): دنباله‌ها ضخیم‌تر و نوک تیزتر از توزیع نرمال – یعنی احتمال داده‌های پرت بیشتر است (مثل بازده بازار سهام).

توزیع پلاتیکورتیک (Platykurtic، کشیدگی < ۰): دنباله‌ها نازک‌تر و پهن‌تر – احتمال داده‌های پرت کمتر است (مثل قد افراد).

در پایتون، تابع scipy.stats.kurtosis(data) کشیدگی اضافی را محاسبه می‌کند (مقدار مثبت یعنی ضخیم‌تر از نرمال). کشیدگی بالا یعنی واریانس زیادی توسط داده‌های پرت توضیح داده می‌شود – یک علامت هشدار مهم در تحلیل داده!

همبستگی داده‌ها

همبستگی (Correlation) معیاری برای اندازه‌گیری رابطه خطی بین دو متغیر است. ضریب همبستگی از ۱- تا ۱+ متغیر است:
همبستگی مثبت ( +۱ ): وقتی متغیر x زیاد می‌شود، y هم زیاد می‌شود (مثل سن و تجربه کاری).

همبستگی منفی ( -۱ ): وقتی متغیر x زیاد می‌شود، y کم می‌شود (مثل سرعت خودرو و زمان رسیدن).

همبستگی نزدیک به صفر ( ~۰ ): هیچ رابطه خطی معناداری بین دو متغیر وجود ندارد.

رایج‌ترین نوع همبستگی ضریب پیرسون (Pearson Correlation) است. ماتریس همبستگی دیدن روابط بین تمام جفت‌متغیرها را در یک جدول ممکن می‌کند و برای شناسایی llinearityMultico (وقتی ویژگی‌های ورودی با هم همبستگی بالایی دارند) فوق‌العاده مفید است. در پایتون با ()df.corr به راحتی ماتریس همبستگی محاسبه می‌شود. در این دوره یاد می‌گیرید چطور نقشه حرارتی (heatmap) همبستگی رسم کنید و از آن برای انتخاب ویژگی‌های مناسب برای مدل‌سازی استفاده کنید.

معرفی توزیع‌های آماری و آشنایی با پکیج Scipy

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

توزیع نرمال

توزیع نرمال (Normal Distribution) یا توزیع گاوسی (Gaussian) مهم‌ترین و رایج‌ترین توزیع آماری در طبیعت و علوم داده است. این توزیع به شکل زنگوله است، متقارن با میانگین (µ) و انحراف معیار (σ) و اکثر داده‌ها حول میانگین متمرکزند – قانون ۶۸-۹۵-۹۹.۷: حدود ۶۸٪ داده‌ها در بازه µ±σ، ۹۵٪ در µ±۲σ و ۹۹.۷٪ در µ±۳σ قرار دارند. در پایتون، با scipy.stats.norm می‌توانید:
norm.pdf(x, mu, sigma): چگالی احتمال را محاسبه کنید.norm.cdf(x, mu, sigma): احتمال تجمعی را به دست آورید.norm.rvs(mu, sigma, size=n): داده تصادفی با توزیع نرمال تولید کنید.نکته کاربردی: بسیاری از الگوریتم‌های یادگیری ماشین (مثل رگرسیون خطی، LDA و آنالیز مؤلفه‌های اصلی) فرض می‌کنند که داده‌ها توزیع نرمال دارند. اگر داده شما نرمال نبود، تکنیک‌هایی مثل Box-Cox transform به کمک شما می‌آیند.

توزیع یونیفرم

توزیع یونیفرم (Uniform Distribution) یا توزیع یکنواخت، ساده‌ترین توزیع آماری است. در این توزیع، همه مقادیر در یک بازه مشخص دقیقاً احتمال یکسان دارند – مثل پرتاب یک تاس سالم که احتمال آمدن هر عدد ۱⁄۶ است. در حالت پیوسته (مثل یک نرم‌افزار که زمان انتظار بین ۰ تا ۱۰ دقیقه یکسان است) از scipy.stats.uniform استفاده می‌شود. در حالت گسسته (مثل تاس) از scipy.stats.randint. توابع اصلی:
uniform.rvs(loc=0, scale=10, size=1000): تولید ۱۰۰۰ عدد تصادفی بین ۰ و ۱۰.uniform.pdf(x, loc=0, scale=10): محاسبه چگالی احتمال.توزیع یکنواخت در شبیه‌سازی، تست فرضیه‌ها و به عنوان پیش‌فرض برای “عدم اطلاعات قبلی” در آمار بیزی کاربرد دارد. در این دوره یاد می‌گیرید چطور از توزیع یکنواخت برای تولید داده‌های مصنوعی و اعتبارسنجی الگوریتم‌ها استفاده کنید.

توزیع برنولی

توزیع برنولی (Bernoulli Distribution) اساس ساده‌ترین نوع آزمایش تصادفی است – فقط دو نتیجه ممکن دارد: موفقیت (Success / 1) یا شکست (Failure / 0). پرتاب یک سکه‌ی سالم (سر = ۱ با احتمال ۰.۵) یک نمونه از توزیع برنولی است. این توزیع یک پارامتر دارد: احتمال موفقیت (p) ، جایی که احتمال شکست برابر ۱-p است. در پایتون با scipy.stats.bernoulli:
bernoulli.rvs(p, size=n): تولید n نمونه از متغیرهای دودویی.bernoulli.pmf(k, p): محاسبه احتمال k (که می‌تواند ۰ یا ۱ باشد).توزیع برنولی نقش اساسی در کلاس‌های مدل‌سازی مختلف ایفا می‌کند و پایه‌ی ساخت بیش از ۸۰٪ الگوریتم‌های طبقه‌بندی را تشکیل می‌دهد. در این دوره نشان می‌دهیم چگونه این توزیع ساده، پشت صحنه مدل‌های پیچیده‌ای مثل Logistic Regression قرار دارد.

توزیع باینومیال

توزیع باینومیال (Binomial Distribution) تعمیم طبیعی توزیع برنولی است: اگر یک آزمایش برنولی (با احتمال موفقیت p) را n بار تکرار کنیم، تعداد موفقیت‌ها از توزیع باینومیال پیروی می‌کند. مثلاً اگر ۱۰ بار سکه بیندازید، توزیع تعداد سکه‌هایی که رو می‌آید یک توزیع باینومیال است با n=۱۰ و p=۰.۵. آماردان‌ها از باینومیال برای مدل‌سازی متغیرهای فرکانس نرخ‌های تبدیل، خطاهای محصولات و رویدادهای رقیق استفاده می‌کنند. توابع اصلی در scipy.stats.binom:
binom.pmf(k, n, p): احتمال دقیقاً k موفقیت.binom.cdf(k, n, p): احتمال k موفقیت یا کمتر.binom.rvs(n, p, size=n): تولید نمونه تصادفی.در حوزه تحلیل داده و بازاریابی، توزیع باینومیال به شما کمک می‌کند بفهمید “اگر ۱۰۰۰ بازدیدکننده با نرخ تبدیل ۲٪ داشته باشید، احتمال بدست آوردن چند فروش چقدر است؟” کاربرد این توزیع در دنیای واقعی بی‌نهایت است

توزیع مالتی نومیال

توزیع مالتی‌نومیال (Multinomial Distribution) تعمیم توزیع باینومیال برای حالتی است که بیش از دو نتیجه ممکن وجود دارد – مثلاً پرتاب یک تاس ۶ وجهی، یا توزیع رنگ چشم (قهوه‌ای، آبی، سبز). این توزیع به طور کامل توسط تعداد آزمایش‌ها (n) و احتمال هر دسته (p₁, p₂, …, pk) مشخص می‌شود. توابع موجود در scipy.stats.multinomial:

multinomial.pmf(x, n, p): احتمال مشاهده تعداد دقیق مشخص در هر دسته.

multinomial.rvs(n, p, size=1): تولید نمونه تصادفی از نتایج.

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

توزیع پوآسون

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

این توزیع فقط یک پارامتر دارد: λ (Lambda) که میانگین تعداد رویدادها در بازه است (واریانس هم برابر λ است).

در scipy.stats.poisson:
poisson.pmf(k, mu): احتمال دقیقاً k رویداد.

poisson.cdf(k, mu): احتمال حداکثر k رویداد.

poisson.rvs(mu, size=100): تولید ۱۰۰ نمونه تصادفی.

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

توزیع نمایی

توزیع نمایی (Exponential Distribution) زمان بین رویدادهای متوالی در یک فرآیند پوآسون را مدل می‌کند – مثل زمان بین دو تماس ورودی در یک مرکز تماس، یا عمر مفید یک قطعه الکترونیکی تا زمان خرابی. این توزیع یک ویژگی منحصر به فرد به نام خاصیت بی‌حافظگی (Memoryless Property) دارد: احتمال اینکه یک قطعه بیشتر از t ساعت کار کند، به میزان عمر قبلی آن بستگی ندارد.

در scipy.stats.expon:
expon.pdf(x, scale=1/lambda): چگالی احتمال.

expon.cdf(x, scale=1/lambda): احتمال تجمعی.

expon.rvs(scale=1/lambda, size=100): تولید ۱۰۰ نمونه تصادفی.

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

معرفی آزمون اثبات توزیع آماری

آزمون اثبات توزیع آماری (Goodness-of-Fit Tests) مجموعه‌ای از روش‌های آماری هستند که مشخص می‌کنند آیا داده‌های شما از یک توزیع نظری خاص (مثل نرمال، پوآسون و…) پیروی می‌کند یا خیر. این آزمون‌ها برای اعتبارسنجی مفروضات مدل‌ها و تعیین بهترین توزیع برازش، ضروری هستند. مهم‌ترین آزمون‌ها عبارتند از:

آزمون کولموگروف-اسمیرنوف (Kolmogorov-Smirnov test): در scipy.stats.kstest(data, ‘norm’) مقایسه می‌کند توزیع تجربی و تئوری تا چه اندازه به هم نزدیکند.

آزمون شاپیرو-ویلک (Shapiro-Wilk test): scipy.stats.shapiro(data) مخصوص آزمون نرمال بودن به خصوص برای نمونه‌های کوچک.

آزمون اندرسون-دارلینگ (Anderson-Darling test): scipy.stats.anderson(data, ‘norm’) حساسیت بیشتری به دنباله‌ها دارد.

این آزمون‌ها یک p-value برمی‌گردانند. اگر p-value از سطح معنی‌داری (معمولاً ۰.۰۵) کمتر باشد، فرض صفر “داده از آن توزیع پیروی می‌کند” را رد می‌کنیم. در این دوره یاد می‌گیرید چطور این آزمون‌ها را اجرا، تفسیر و از آنها برای بهترین انتخاب توزیع در پروژه‌هایتان استفاده کنید.

بررسی آزمون جنسون شنون

فاصله جنسون‑شنون (Jensen‑Shannon Divergence) یکی از قدرتمندترین معیارهای اندازه‌گیری شباهت بین دو توزیع احتمال است. این معیار بهبود یافته واگرایی کولبک-لیبلر (KL divergence) است و مشکلات آن را برطرف می‌کند – همیشه متقارن است، همیشه بین ۰ و ۱ (یا log(۲)) قرار دارد و حتی اگر توزیع‌ها با هم همپوشانی نداشته باشند، مقدار معنی‌داری برمی‌گرداند. اگر مقدار JS مقدار ۰ باشد یعنی دو توزیع کاملاً یکسان هستند و هرچه به ۱ نزدیکتر شود یعنی تفاوت بیشتر است. کاربردهای عملی JS divergence در علم داده عبارتند از:
مقایسه توزیع بازه‌های آموزشی و تستی در مدل‌های یادگیری ماشین (برای جلوگیری از drift).

ارزیابی مدل‌های مولد مانند GANها.

تشخیص تغییر مفهوم در داده‌های جریانی (Concept Drift).

در پایتون، می‌توانید JS divergence را از ماژول scipy.spatial.distance با تابع jensenshannon(p, q) محاسبه کنید.

در این دوره با مثال‌های عملی نشان می‌دهیم چطور از این معیار قدرتمند برای تحلیل تشابه توزیع‌ها و اطمینان از یکسان بودن داده‌های آموزش و تست استفاده کنید.

برای مشاهده برنامه کلاس های آموزش هوش مصنوعی، اینجا کلیک کنید.

اشتراک گذاشتن این مطلب با دیگران