نحوه کار Recommender system ها

نوشته امروز ترجمه مقاله آقای Luigi Bungaro در خصوص سیستم های پیشنهاد دهنده یا همان Recommender system ها می باشد.پیش نیاز درک این نوشته شامل دانش زبان پایتون، دانش کار با کتابخانه pandas و همچنین پیش زمینه قبلی از Recommender system ها می باشد.متاسفانه یکی از مشکلات مقاله این است که بسیاری از مفاهیم به صورت کلی توضیح داده شده است. شما می توانید به منظور درک بهتر محتوای اصلی مقاله را همزمان با این ترجمه مشاهده نمایید.نویسنده مقاله اشاره کرده است که مقاله وی برگرفته از یک دوره آنلاین است. نویسنده به منظور عمیق تر شدن مخاطب لینک آن را نیز مشخص نموده است.امروزه ما اغلب عبارت Recommender systems یا سیستم های توصیه گر را می شنویم و به این دلیل است که اغلب توسط شرکت ها برای مقاصد مختلف استفاده می شوند. از جملهبرای افزایش فروش ( پیشنهاد آیتم ها در هنگام خرید --> مانند سایت آمازون: خریداران این محصول، محصولات زیر را هم خریده‌اند. )یا در "پیشنهادات خود به مشتریان" در نهایت تجربه بهتری از مشتری داشته باشند. ( پیشنهاد فیلم -> Netflix)یا همچنین در تبلیغات، افراد مناسب و را براساس preferences similarities هدف قرار می دهند.سیستم های پیشنهادی اساساً سیستمهایی هستند که می توانند چیزهایی را براساس آنچه دیگران انجام داده اند به افراد توصیه کند.در اینجا نمونه ای از پیشنهاد فیلم برگرفته از یک دوره آنلاین وجود دارد.نحوه کار Recommender System ها به چه صورت است؟همانطور که قبلاً نیز گفتیم، سیستم های توصیه کننده برای توصیف آیتم ها به کاربران مفید هستند. ما دو نوع Recommender system داریم:مدلی که شباهت ها را بین users پیدا می کند. ( User-based )مدلی که شباهت ها را بین items پیدا می کند. ( Item-based )این سیستم ها مبتنی بر شباهت ها هستند، بنابراین محاسبه همبستگی بین داده ها، بین user ها برای مورد اول و item ها در مورد دوم است.همبستگی مقادیر عددی است که بین منفی یک و مثبت یک است که ارتباط بین دو متغییر را نشان می دهد.در correlation = 0 به معنای عدم همبستگی است. هنگامی که بزرگ تر 0 است یعنی همبستگی مثبت است و هنگامی که از صفر کم تر است، همبستگی منفی است.در اینجا یک تجسم گرافیکی ( بر گرفته از ویکی پدیا ) از ضریب همبستگی نسبی از 2 متغیر (x ، y):می توانیم ببینیم که همبستگی 1 یا -1 به شیب داده ها اشاره نمی کند بلکه فقط به چگونگی ارتباط داده ها بین یکدیگر اشاره دارد. روشهای مختلفی برای محاسبه ضریب همبستگی وجود دارد که یکی از آنها روش پیرسون است:بنابراین، همبستگی کواریانس بین دو متغیر X و Y و ضرب واریانس آنهاست.همچنین روش های دیگری برای انجام آن وجود دارد. مانند Scatter diagram یا Spearman’s Rank Correlation coefficient یا روش Least squaresدر مدلمان از item based استفاده خواهیم کرد. زیرا ما فکر می کنیم که یک سیستم user based می تواند توسط افراد تحت تأثیر تغییر سلیقه فیلم در زمان قرار گیرد و همچنین به دلیل داشتن فیلم های کمتری نسبت به item ها، محاسبات ما را سریع تر نماید.بیایید دیتاست خودمان را وارد کنیم. نقطه شروع ما یک مجموعه داده ادغام‌شده خواهد بود. ( بیایید دو ردیف آن را با استفاده از head مشاهده کنیم )همانطور که مشاهده می کنید، دیتاست 100k ردیف دارد که مطابق با رتبه های ما است. اطلاعات در جدول به شرح ذیل می باشند: movie_idtitleuser_idratingقبل از محاسبه تمام همبستگی‌ها و آماده‌سازی داده‌های ما برای آن، اجازه دهید ملاحظات سریعی داشته باشیم: با این مدل ما یک روش ریاضی برای محاسبه دقت (accuracy) مدل نداریم، اما می توانیم از عقل سلیم و شهود (درک مستقیم) استفاده کنیم. به عنوان مثال، کاری که می توانیم انجام دهیم این است که در نظر داشته باشیم فیلم هایی که در لیست ما وجود دارند از قبل می دانیم با هم همبستگی دارند. برای مثال ما می‌توانیم به جنگ ستارگان یا سریال Trek فکر کنیم. ایده این است که اگر کسی قسمتی از این سریال را تماشا کرده است و میزان رتبه بندی نیز بالا بوده، انتظار داریم که او همچنین فیلم مشابه دیگر این مجموعه را دوست داشته باشد.پس بررسی خواهیم کرد که چه تعداد فیلم Star Trek را در مجموعه داده خود داریم.قبل از شروع با محاسبه همبستگی، ما باید کلیه rating های یک فیلم را در ستون ها داشته باشیم، ردیف ها نماینده user ها و داده های موجود در جدول ratings هستند.پس از تهیه این table جدید می توانیم ارتباط ( correlation ) ستون Star Trek را با سایرین محاسبه کنیم و برای این منظور می توانیم از تابع corrwith استفاده نماییم.با توجه به اینکه انتظار داشتیم دیگر فیلم های Star Trek را پیدا کنیم، به وضوح می توانیم ببینیم که با این نتیجه چیزی اشتباه است. بنابراین احتمالاً اشتباه است که ما همه فیلم ها را بررسی می کنیم، حتی فیلم هایی که فقط 1 rating دارند.بیایید سعی کنیم فیلم ها را با تعداد ratings بیشتر از 100 فیلتر کنیم.اکنون نتیجه واقع بینانه تر به نظر می رسد، زیرا می بینیم که قسمت های دیگری از سری Star Trek در نتیجه وجود دارد. بنابراین، ما همچنین می توانیم تست های دیگری را با فیلم دیگر انجام دهیم، اما در نظر می گیریم که نتیجه خوب است و اجازه دهید اکنون آن را در همه دیتاست پیاده سازی کنیم.ما از فیلتر min_periods برابر با 100 استفاده می کنیم. این کار را برای ما انجام می دهد و دیگر نیازی به فیلتر کردن نداریم. در این مورد از فرمول پیرسون استفاده می کنیم.در نتیجه :بنابراین ما برای همه فیلم ها ماتریس همبستگی را محاسبه کرده ایم. در نتیجه یک ماتریس 1664x1664 که در آن ستون ها و ردیف ها فیلم ها هستند و قطر ماتریس همه 1 خواهد بود زیرا هر فیلم با خود مرتبط است یا اگر فیلم با 100ratings فیلتر شده باشد، مقدار Nan است. (خود عدد 100 حساب نیست!)فهرست فیلمی که کاربر 0 تماشا کرده است:اکنون لیست کلیه فیلم ها با همه همبستگی های ضرب شده با rating ها (اعداد صحیح از 1 تا 5) را ایجاد می کنیم.ما برای اینکه فاقد فیلم های تکراری باشیم، groupby می کنیم و rating آنها را نیز جمع می کنیم:لیستی از فیلم هایی را که دیده ایم ایجاد می کنیم و سپس آن ها را پاک می نماییم.اکنون می توانیم خروجی را برای کاربر چاپ کنیم که نتایج را نشان می دهد:در اینجا خروجی فیلم تماشا شده است.