طراحی یک سیستم توصیه گر فیلم بر روی مجموعه داده MovieLens

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

تعریف و هدف سیستم های توصیه گر

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

تاریخچه سیستم های توصیه گر

سیستم توصیه گر اولین بار توسط چه کسی و چه زمانی اختراع شد؟
در مورد اولثن استفاده ابهاماتی وجود دارد اما برخی اولین پیاده سازی مفهوم سیستم توصیه گر  را در سال 1970 در سیستمی به نام Grundy می دانند، یک کتابداری مبتنی بر کامپیوتر که پیشنهاداتی را در مورد اینکه کاربر چه کتاب هایی را بخواند به او ارائه می کرد. این امر در اوایل دهه 1990 با راه اندازی Tapestry، اولین سیستم تجاری توصیه کننده به صورت جدی تر دنبال شد.

کاربرد های سیستم های توصیه گر

سیستم های توصیه گر کاربردهای فراوانی دارند که برخی از زمینه های کاربردی آن به شرح زیر است:

  • سیستم توصیه گر در مدیا و سرگرمی:پیشنهاد فیلم ،کتاب،بازی یا موسیقی
  • سیستم توصیه گر در تجارت الکترونیک: برای توصیه محصول ها و خدمات  یا آگهی های مرتبط.
  • سیستم توصیه گر در صنعت آموزش: پیشنهاد دوره های غیرحضوری یا فیلم های آموزشی
  • سیستم توصیه گر در پزشکی: انتخاب پزشک متناسب با شرایط (مکان، نوع بیماری، زمان و مراحل) بیمار، انتخاب دارو و یا استفاده در اپلیکیشن های مرتبط با حوزه سلامتی
  • سیستم توصیه گر در ارتباط با مشتری: برای ارائه ی راهکارهایی برای بهبود رضایت مشتری و  حل مشکلات تولیدکننده و مصرف کننده در زنجیره تأمین.

 

مثال آموزشی طراحی یک سیستم توصیه گر فیلم با پایتون 

مجموعه داده ای که ما در این پروژه استفاده خواهیم کرد مربوط به MovieLens است. در این سیستم ما از مدل فیلتر مشارکتی مورد-محور استفاده می کنیم. فیلترینگ مشارکتی مبتنی بر روشی است كه توسط آمازون تهیه شده است و در سیستم های توصیه كننده استفاده می شود تا اساساً توصیه هایی را بر اساس شباهت بین موارد مختلف در یك مجموعه داده به كاربران ارائه دهد. توصیه ها بر اساس رتبه بندی کاربر برای آن مورد خاص محاسبه می شود.
کار خود را با وارد کردن به دیتا به محیط کاری شروع می کنیم. این پروژه در محیط Jupyter Notebook انجام شده است. امتیاز هر کاربر به فیلم را در r_cols و اطلاعات هر فیلم را در m_cols می ریزم.

import pandas as pd
r_cols = ['user_id', 'movie_id', 'rating']
ratings = pd.read_csv('ml-100k/u.data', sep='t', names=r_cols, usecols=range(3), encoding="ISO-8859-1")
m_cols = ['movie_id', 'title']
movies = pd.read_csv('ml-100k/u.item', sep='|', names=m_cols, usecols=range(2), encoding="ISO-8859-1")
 

اکنون ، ما باید دو فریم داده را با هم ادغام کنیم تا یک فریم داده کامل که شامل رتبه بندی کاربر برای هر فیلم مشخص است را بدست آوریم.

ratings = pd.merge(movies, ratings)
 

بیایید نگاهی به اطلاعات درون این مجموعه داده بیاندازیم.

ratings.head(5)
 

گام بعدی این است که یک ماتریس ایجاد کنیم که در این ماتریس مشخص است هر کاربر به هر فیلم چه امتیازی داده است. این جدول برای ما ایده این است که کدام کاربر چه فیلم هایی را تماشا کرده و چه نوع امتیازی داده است.

movieRatings = ratings.pivot_table(index=['user_id'],columns=['title'],values='rating')
movieRatings.head() 

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

starWarsRatings = movieRatings['Star Wars (1977)']
starWarsRatings.head() 

 

ما برای پیدا کردن همبستگی دوتایی بین همه ستون ها با توجه به فیلم جنگ ستارگان از تابع ()corr   که در کتابخانه pandas قرار دارداستفاده خواهیم کرد.

similarMovies = movieRatings.corrwith(starWarsRatings) 

یکی از روش های تمیز کردن داده حذف داده های خالی است.

similarMovies = similarMovies.dropna() 

Data frame جدید شامل ضریب همبستگی هر فیلم در مقابل فیم جنگ ستارگان است.

df = pd.DataFrame(similarMovies)
df.head(10)
 

از این اطلاعات نمی توانی دانش مناسبی استخراج کنیم.  علت آن است که بعضی از افراد هیچی فیلمی را رتبه بندی نکرده اند یا بعضی از فیلم ها توسط افراد کمی امتیاز دهی شده اند. برای همین باید بر روی داده ها عملیات دیگیری انجام دهیم.

import numpy as np
movieStats = ratings.groupby('title').agg({'rating': [np.size, np.mean]})
movieStats.head() 

نمونه هایی که کمتر از ۱۰۰ نفر به آن امیتاز داده اند را حذف می کنیم. براین کار دستورات زیر را وارد می کنیم.

popularMovies = movieStats['rating']['size'] >= 100 # Ignore movies rated by less than 100 people
movieStats[popularMovies].sort_values([('rating', 'mean')], ascending=False)[:15] 

این داده را به مجموعه داده مشابهت با فیلم جنگ ستارگان join می کنیم.

df = movieStats[popularMovies].join(pd.DataFrame(similarMovies, columns=['similarity']))
df.head(5)
 

در اخر نمونه ها را بر اساس مقدار مشابهت به صورت نزولی مرتب می کینم.

df.sort_values(['similarity'], ascending=False)[:5]
 

ارزیابی نتیجه پیاده سازی سیستم توصیه گر فیلم در پایتون

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

 

مقالات سیستم های توصیه گر

برای کسانی که علاقه مند به مقالات جدیدتر در زمینه سسیستم توصیه گر هستند مقالات زیر را نیز توصیه می کنیم.

 Review of Movie Recommendation System -2022 مرور بر سیستم های توصیه گر

Machine Learning Based Movie Recommendation System-2021 سیستم های توصیه گر مبتنی بر یادگیری ماشین

Movie Recommender System Based on Percentage of View-2019  سیستم توصیه گر فیلم بر اساس درصد بازدید

 

 

دیدگاه‌ خود را بنویسید

Your email address will not be published. Required fields are marked *