حل مسئله ماشین لرنینگ

پروژه یکم – آیا مشتری خرید خود را نهایی میکند؟

آیا مشتری خرید خود را نهایی می‌کند؟

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

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

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

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

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

میتونید دیتاست اصلی رو از اینجا دانلود کنید ولی ما به جهت اینکه بیشتر بتونیم تمرین کنیم، در دیتاست یه تغییراتی داده‌ایم که می‌تونید از اینجا بهش دسترسی پیدا کنید. دقت کنید که این دیتاست حاوی ۱۲۳۳۰ سطر و ۱۸ ستون است.

لینک حل پروژه در گوگل کولب

تسک های پروژه:

۱) در ابتدا سعی کنید با کمک کتابخانه‌های موجود ( تابع describe ) شهود کلی از هر کدام از ویژگی‌ها بدست آورید. ( میانگین، کمینه، بیشینه و … ویژگی‌های عددی را بدست آورید.

برای این کار ابتدا باید فایل CSV را بخوانیم.

چگونه یک فایل CSV را بخوانیم؟

رفرنس : داکیومنت پایتون

با دستور زیر میتونیم در Google colab یک فایل CSV رو بخونیم. به طوری که باید از Choose file فایل CSV رو که توی کامپیوترمون داریم رو انتخاب کنیم:

یا اگر توی محیط jupyter باشیم نحوه خوندن فایل CSV به صورت زیر خواهد بود:

  • ابتدا کتابخانه های numpy و pandas را import کنید:

import numpy as np
import pandas as pd

فایل dataset باید در محل دایرکتوری اجرای برنامه موجود باشد. سپس با دستور زیر می توانید فایل را در یک متغیر قرار دهید:

store_csv=pd.read_csv(“dataset.csv”)

استفاده از تابع Describe برای مشاهد کردن دیتا:

برای مشاهده کردن مقداری از دیتا از دستور Describe استفاده می کنیم:

store_csv.describe()

مقادیر حداقل و حداکثر در داده ها مشخص شده است.

با دستور زیر اطلاعات بهتری میتوان از داده ها بدست آورد:

store_csv.info()

۲) در این مرحله می‌بایست داده‌های گمشده (Missing Values) را پر کنیم.

با دستور زیر تعداد داده های miss شده از هر متغیر را بدست می آوریم:

store_csv.isnull().sum()

تعداد داده های miss شده از هر متغیر

پرکردن مقادیر گم شده:

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

  • با نوشتن کدهای زیر ابتدا کتابخانه random را import میکنیم
  • سپس داده هایمان را به دیتا فریم تبدیل کرده و در df1 میریزیم
  • بعد با استفاده از یک حلقه ۱۸ ستون موجود را بررسی کرده و در صورت وجود مقدار Miss شده آنرا پر میکنیم.

import random
df1=pd.DataFrame(store_csv)
i=0
while i<18 :
df1.iloc[:,i]=df1.iloc[:,i].fillna(random.choice(df1.iloc[:,i].values.tolist()))
  i +=1

حال اگر دستور زیر را اجرا کنیم ، متوجه خواهیم شد که تعداد داده های miss شده وجود ندارد.

df1.isnull().sum()

استراتژی دوم پر کردن با استفاده از داده‌های با بیشترین تکرار است. (mode)

برای جرای این استراتژی این بار کد های زیر را اجرا میکنیم :

store_csv=pd.read_csv(“dataset.csv”)
df2=pd.DataFrame(store_csv)
df2.isnull().sum() # number of missing values in each property

تا اینجا داده ها را در یک متغیر به نام df2 ریختیم و تعداد داده های miss شده آن را مشاهده کردیم.

حال با دستورات زیر مقادیر miss شده را با مقدار mode جایگذاری میکنیم:

import random
i=0
while i<18 :
df2.iloc[:,i].fillna(df2.iloc[:,i].mode()[0],inplace=True)
i+=1
testing the code
df2.isnull().sum()

۳) در این مرحله، توزیع دیتاست آموزشی را در تمامی ویژگی‌ها بر اساس برچسب رسم کنید.

در این مرحله با فراخوانی train_test_split با نسبت ۲۰ درصد و ۸۰ درصد داده های آموزش و تست را جدا میکنیم و توزیع دیتاست آموزشی را در تمام ویژگی ها بر اساس برچسب رسم میکنیم.

from sklearn.model_selection import train_test_split
store_csv=pd.read_csv(“dataset.csv”)
df3=pd.DataFrame(store_csv)
train_set ,test_set= train_test_split(df3,test_size=0.2,random_state=42)
train_set.shape
test_set.shape
train_set.head()

۴) حالا میخواهیم ویژگی‌های categorical را به داده‌های عددی تبدیل کنیم. با استفاده از الگوریتم‌های مختلف، این کار را انجام دهید.

حال میخواهیم دیتاهای Categorical  را به داده های Numerical تبدیل کنیم. ابتدا آنها را پیدا کرده و در متغیر موسوم به cat_features میریزیم.

store_csv=pd.read_csv(“dataset.csv”)
df4=pd.DataFrame(store_csv)
cat_features=[x for x in df4.columns if df4[x].dtype==”object”]
print(cat_features)

سپس به سه روش از جمله  Label Encoder  و OneHotEncoder   داده های غیر عددی را به عددی تبدیل میکنیم.

cat_data =pd.DataFrame(df4, columns=[‘Month’, ‘VisitorType’, ‘Weekend’])
for i in range(3):
cat_data.iloc[:,i]=cat_data.iloc[:,i].astype(‘category’)
cat_data.iloc[:,i]=cat_data.iloc[:,i].cat.codes

cat_data

روش label encode :

from sklearn.preprocessing import LabelEncoder
encoder=LabelEncoder()
cat_data =pd.DataFrame(df4, columns=[‘Month’, ‘VisitorType’, ‘Weekend’])
for i in range(3):  
cat_data.iloc[:,i]=cat_data.iloc[:,i].astype(‘str’)  
cat_data.iloc[:,i] = encoder.fit_transform(cat_data.iloc[:,i])
cat_data

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

اما این دو سوال را اینجا می نویسم تا در فرصت مناسب و پس از کسب تجربه کافی آن ها را حل نمایم.

دانلود فایل پایتون:

۵) ماتریس correlation را برای ویژگی‌های مختلف و برچسب دیتاست آموزشی بدست آورید.

۶) حالا بر اساس دیتاست بدست آمده، مدل‌های SVM، KNN و Logistic Regression را امتحان کرده و معیارهای دقت مدل‌های خود را گزارش کنید.

دیدگاهتان را بنویسید

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