Создайте свою собственную систему рекомендаций фильмов с помощью Python
Опубликовано: 2021-03-09Вам интересно, как Netflix предлагает фильмы, которые так сильно совпадают с вашими интересами? Или, может быть, вы хотите построить систему, которая тоже может делать такие предложения своим пользователям?
Если вы ответили «да», то вы попали в нужное место, так как эта статья научит вас создавать систему рекомендаций фильмов с помощью Python.
Однако, прежде чем мы начнем обсуждать «как», мы должны быть знакомы с «что».
Оглавление
Система рекомендаций: что это такое?
Системы рекомендаций стали неотъемлемой частью нашей повседневной жизни. От интернет-магазинов, таких как Amazon и Flipkart, до платформ социальных сетей, таких как YouTube и Facebook, каждая крупная цифровая компания использует системы рекомендаций, чтобы предоставить своим клиентам персонализированный пользовательский опыт.
Вот некоторые примеры рекомендательных систем в вашей повседневной жизни:
- Предложения, которые вы получаете от Amazon при покупке продуктов, являются результатом системы рекомендаций.
- YouTube использует рекомендательную систему, чтобы предлагать видео на ваш вкус.
- У Netflix есть известная система рекомендаций, которая предлагает шоу и фильмы в соответствии с вашими интересами.
Рекомендательная система предлагает пользователям продукты, используя данные. Эти данные могут касаться введенных пользователем интересов, истории и т. д. Если вы изучаете машинное обучение и искусственный интеллект, вам необходимо изучить рекомендательные системы, поскольку они становятся все более популярными и продвинутыми.
Типы рекомендательных систем
Существует два типа рекомендательных систем:
1. Совместные системы рекомендаций
Система совместных рекомендаций предлагает элементы в соответствии с похожими пользователями для этого элемента. Он группирует пользователей со схожими интересами и вкусами и соответствующим образом предлагает их продукты.
Например, предположим, что вам и еще одному пользователю понравился Sholay. Теперь, после просмотра Sholay и лайка, другому пользователю понравился Golmaal. Поскольку у вас и другого пользователя схожие интересы, система рекомендаций предложит вам посмотреть Golmaal на основе этих данных. Это совместная фильтрация.
2. Системы рекомендаций на основе контента
Система рекомендаций на основе контента предлагает элементы на основе данных, которые она получает от пользователя. Это может быть основано на явных данных («Нравится», «Поделиться» и т. д.) или неявных данных (история просмотров). Система рекомендаций будет использовать эти данные для создания пользовательского профиля и предлагать элементы на основе этого профиля.
Создание базовой системы рекомендаций фильмов
Теперь, когда мы рассмотрели основы рекомендательных систем, давайте приступим к созданию системы рекомендаций фильмов.
Мы можем начать создавать систему рекомендаций фильмов на основе Python, используя полный набор данных MovieLens . Этот набор данных содержит более 26 миллионов оценок, 750 000 приложений тегов, которые применяются к более чем 45 000 фильмам. Данные генома тега, представленные в этом наборе данных, имеют более 12 миллионов оценок релевантности.
Мы используем полный набор данных для создания базовой системы рекомендаций фильмов. Однако вы можете использовать меньший набор данных для этого проекта. Во-первых, нам нужно импортировать все необходимые библиотеки:
Базовая система рекомендаций фильмов на основе Python будет предлагать фильмы в зависимости от их популярности и жанра. Эта система работает на основе представления о том, что популярные фильмы, получившие одобрение критиков, с высокой вероятностью могут понравиться широкой аудитории. Имейте в виду, что такая система рекомендаций фильмов не дает персонализированных предложений.
Чтобы реализовать это, мы отсортируем фильмы по их популярности и рейтингу и передадим аргумент жанра, чтобы получить лучшие фильмы жанра:
Вход
мд = пд. read_csv('../input/movies_metadata.csv')
мд.голова()
Выход
взрослый | принадлежит_к_коллекции | бюджет | жанры | видео | я бы | imdb_id | original_title | обзор | доход | заглавие | |||||||
Ложь | ('id'L 10194, 'имя': 'Коллекция Истории игрушек') | 30000000 | [{'id': 16, 'name': 'Анимация'}… | Ложь | 862 | tt0114709 | Игрушечная история | Под предводительством Вуди игрушки Энди живут счастливо… | 373554033 | Игрушечная история | |||||||
1 | Ложь | NaN | 65000000 | {{'id': 12, 'name': 'Приключение'}… | Ложь | 8844 | tt0113497 | Джуманджи | Когда братья и сестры Джуди и Питер… | 262797249 | Джуманджи | ||||||
2 | Ложь | («id»: 119050, «name»: «Сварливые старики») | 0 | {{'id': 10749, 'name': 'Romance'}… | Ложь | 15602 | tt0113228 | Сварливые старики | Семейная свадьба возрождает древний… | 0 | Сварливые старики | ||||||
3 | Ложь | NaN | 16000000 | {{'id': 35, 'name': 'Comedy'}… | Ложь | 31357 | tt0114885 | В ожидании выдоха | Обманули, обидели и наступили… | 81452156 | В ожидании выдоха |
Вход
md['жанры'] = md['жанры'].fillna('[]').apply(literal_eval).apply(lambda x: [i['name'] for i in x] if isinstance(x, list ) еще [])
Формула нашей карты
Для создания чарта лучших фильмов мы использовали рейтинги TMDB. Мы будем использовать формулу взвешенного рейтинга IMDB для создания нашей диаграммы, которая выглядит следующим образом:
Взвешенный рейтинг (WR) = (iaouaouaouaouaou)
Здесь v обозначает количество голосов, полученных фильмом, m — минимальное количество голосов, которое фильм должен получить в чарте, R — средний рейтинг фильма, а C — среднее количество голосов за весь отчет. .
Построение диаграмм
Теперь, когда у нас есть набор данных и формула, мы можем начать строить диаграмму. Мы добавим в наши чарты только те фильмы, которые набрали не менее 95% голосов. Мы начнем с создания диаграммы топ-250.
Вход
voice_counts = md[md['vote_count'].notnull()]['vote_count'].astype('int')
voice_averages = md[md['vote_average'].notnull()]['vote_average'].astype('int')
C = voice_averages.mean()
С
Выход
5.244896612406511
Вход
m = количество_голосов.квантиль (0,95)
м
Выход
434,0
Вход
md['year'] = pd.to_datetime(md['release_date'], errors='coerce').apply(lambda x: str(x).split('-')[0] if x != np. nan иначе np.nan)
Вход
квалифицированный = md[(md['vote_count'] >= m) & (md['vote_count'].notnull()) & (md['vote_average'].notnull())][['title', 'год ', 'счет_голосов', 'среднее_голосование', 'популярность', 'жанры']]
квалифицированный ['vote_count'] = квалифицированный ['vote_count']. astype ('int')
квалифицированный ['vote_average'] = квалифицированный ['vote_average']. astype ('int')
квалифицированный .форма
Выход
(2274, 6)
Как видите, чтобы попасть в наш чарт, фильм должен набрать минимум 434 голоса. Вы, наверное, заметили, что средний рейтинг, который должен иметь фильм, чтобы попасть в наш чарт, составляет 5,24.
Вход
определение взвешенного_рейтинга (х):
v = х['счетчик_голосов']
R = х['усредненное_голосование']
возврат (v/(v+m) * R) + (m/(m+v) * C)
Вход
квалифицированный ['wr'] = квалифицированный. применить (взвешенный_рейтинг, ось = 1)
Вход
квалифицированный = квалифицированный.sort_values('wr', по возрастанию=False).head(250)
Имея все это на месте, давайте построим диаграмму:
Лучшие фильмы в целом
Вход
квалифицированный.голова(15)
Выход
заглавие | год | количество_голосов | voice_average | популярность | жанры | вр | |
15480 | Зарождение | 2010 | 14075 | 8 | 29.1081 | [Действие, Триллер, Научная фантастика, Мистика, А… | 7.917588 |
12481 | Темный рыцарь | 2008 г. | 12269 | 8 | 123,167 | [Драма, Боевик, Криминал, Триллер] | 7.905871 |
22879 | Межзвездный | 2014 | 11187 | 8 | 32.2135 | [Приключения, Драма, Научная фантастика] | 7,897107 |
2843 | Бойцовский клуб | 1999 г. | 9678 | 8 | 63,8696 | [Драма] | 7,881753 |
4863 | Властелин колец: Братство кольца | 2001 г. | 8892 | 8 | 32.0707 | [Приключения, Фэнтези, Боевик] | 7,871787 |
292 | Криминальное чтиво | 1994 г. | 8670 | 8 | 140,95 | [Триллер, Криминал] | 7,868660 |
314 | Побег из Шоушенка | 1994 г. | 8358 | 8 | 51,6454 | [Драма, Криминал] | 7.864000 |
7000 | Властелин колец: Возвращение короля | 2003 г. | 8226 | 8 | 29.3244 | [Приключения, Фэнтези, Боевик] | 7,861927 |
351 | Форрест Гамп | 1994 г. | 8147 | 8 | 48.3072 | [Комедия, драма, мелодрама] | 7.860656 |
5814 | Властелин колец: Две башни | 2002 г. | 7641 | 8 | 29.4235 | [Приключения, Фэнтези, Боевик] | 7.851924 |
256 | Звездные войны | 1977 г. | 6778 | 8 | 42.1497 | [Приключения, Боевик, Научная фантастика] | 7.834205 |
1225 | Назад в будущее | 1985 г. | 6239 | 8 | 25,7785 | [Приключения, Комедия, Научная фантастика, Семейный] | 7.820813 |
834 | Крестный отец | 1972 г. | 6024 | 8 | 41.1093 | [Драма, Криминал] | 7.814847 |
1154 | Империя наносит ответный удар | 1980 г. | 5998 | 8 | 19.471 | [Приключения, Боевик, Научная фантастика] | 7.814099 |
46 | Se7en | 1995 г. | 5915 | 8 | 18.4574 | [Криминал, Тайна, Триллер] |
Вуаля, вы создали базовую систему рекомендаций фильмов на основе Python!
Теперь мы сузим предложения нашей рекомендательной системы до основанных на жанрах, чтобы они могли быть более точными. Ведь не обязательно, чтобы «Крестный отец» нравился всем одинаково.
Сужение жанра
Итак, теперь мы изменим нашу рекомендательную систему, чтобы она больше соответствовала жанру:
Вход
s = md.apply(lambda x: pd.Series(x['жанры']), ось=1).stack().reset_index(уровень=1, drop=True)
s.name = 'жанр'
gen_md = md.drop('жанры', ось=1).присоединиться(и)
Вход
def build_chart (жанр, процентиль = 0,85):
df = gen_md[gen_md['жанр'] == жанр]
voice_counts = df[df['vote_count'].notnull()]['vote_count'].astype('int')
voice_averages = df[df['vote_average'].notnull()]['vote_average'].astype('int')
C = voice_averages.mean()
m = количество_голосов.квантиль (процентиль)
квалифицированный = df[(df['vote_count'] >= m) & (df['vote_count'].notnull()) & (df['vote_average'].notnull())][['title', 'год ', 'количество_голосов', 'среднее_голосование', 'популярность']]
квалифицированный ['vote_count'] = квалифицированный ['vote_count']. astype ('int')
квалифицированный ['vote_average'] = квалифицированный ['vote_average']. astype ('int')
квалифицированный ['wr'] = квалифицированный.apply(лямбда x: (x['vote_count']/(x['vote_count']+m) * x['vote_average']) + (m/(m+x[' voice_count']) * C), ось = 1)
квалифицированный = квалифицированный.sort_values('wr', по возрастанию=False).head(250)
вернуть квалифицированный
Теперь мы создали рекомендательную систему, которая сортирует фильмы в жанре мелодрамы и рекомендует лучшие из них. Мы выбрали романтический жанр, потому что он не очень часто фигурировал в нашем предыдущем чарте.
Лучшие фильмы в мелодраме
Вход
build_chart('Романтика').head(15)
Выход
заглавие | год | количество_голосов | voice_average | популярность | вр | |
10309 | Dilwale Dulhania Le Jayenge | 1995 г. | 661 | 9 | 34.457 | 8.565285 |
351 | Форрест Гамп | 1994 г. | 8147 | 8 | 48.3072 | 7,971357 |
876 | Головокружение | 1958 г. | 1162 | 8 | 18.2082 | 7.811667 |
40251 | Ваше имя. | 2016 | 1030 | 8 | 34.461252 | 7.789489 |
883 | В джазе только девушки | 1959 г. | 835 | 8 | 11.8451 | 7.745154 |
1132 | Синема Парадизо | 1988 г. | 834 | 8 | 14.177 | 7,744878 |
19901 | Бумажный человек | 2012 | 734 | 8 | 7.19863 | 7.713951 |
37863 | Синг Стрит | 2016 | 669 | 8 | 10.672862 | 7.689483 |
882 | Квартира | 1960 г. | 498 | 8 | 11,9943 | 7.599317 |
38718 | Служанка | 2016 | 453 | 8 | 16.727405 | 7,566166 |
3189 | Огни города | 1931 г. | 444 | 8 | 10,8915 | 7,558867 |
24886 | Как он выглядит | 2014 | 262 | 8 | 5.71127 | 7.331363 |
45437 | В мгновение ока | 2017 | 146 | 8 | 20.82178 | 7.003959 |
1639 | Титаник | 1997 г. | 7770 | 7 | 26.8891 | 6,981546 |
19731 | Мой парень - псих | 2012 | 4840 | 7 | 14.4881 | 6.970581 |
Теперь у вас есть система рекомендаций фильмов, которая предлагает лучшие фильмы в соответствии с выбранным жанром. Мы рекомендуем протестировать эту рекомендательную систему и с другими жанрами, такими как боевик, драма, саспенс и т. д. Поделитесь тремя лучшими фильмами в вашем любимом жанре, которые предлагает рекомендательная система, в разделе комментариев ниже.
Узнайте больше о системе рекомендаций фильмов
Как вы, должно быть, уже заметили, создать систему рекомендаций фильмов на основе Python довольно просто. Все, что вам нужно, — это немного знаний в области науки о данных и немного усилий для создания полнофункциональной рекомендательной системы.
Однако что, если вы хотите создать более совершенные рекомендательные системы? Что, если вы хотите создать рекомендательную систему, которую могла бы использовать крупная корпорация?
Если вы хотите узнать больше о рекомендательных системах и науке о данных, мы рекомендуем пройти курс по науке о данных. С курсом вы изучите все фундаментальные и продвинутые концепции науки о данных и машинного обучения. Кроме того, вы будете учиться у отраслевых экспертов, которые будут сопровождать вас на протяжении всего курса, чтобы помочь вам избежать сомнений и путаницы.
В upGrad мы предлагаем несколько курсов по науке о данных и машинному обучению. Вы можете выбрать любого из следующих в зависимости от ваших интересов:
- Диплом PG в области науки о данных
- Магистр наук в области науки о данных
- Сертификация PG в науке о данных
- Диплом PG в области машинного обучения и искусственного интеллекта
- Магистр наук в области машинного обучения и искусственного интеллекта
Помимо этих курсов, мы предлагаем множество других курсов по науке о данных и машинному обучению. Будьте уверены, чтобы проверить их!
Последние мысли
Теперь вы знаете, как построить систему рекомендаций фильмов. После того, как вы создали систему, обязательно поделитесь ею с другими и покажите им свой прогресс. Рекомендательные системы имеют широкий спектр приложений, поэтому изучение их, несомненно, даст вам преимущество в отрасли.
Совместная фильтрация — это тип рекомендательной системы, которая подходит к построению модели на основе предпочтений пользователя. История пользователей действует как набор данных для совместной фильтрации. Совместная фильтрация бывает двух типов, которые перечислены ниже: Фильтрация на основе контента собирает данные от пользователя и предлагает соответствующие элементы. Некоторые из его преимуществ, а также недостатки, упомянуты ниже: Алгоритм совместной фильтрации становится основным алгоритмом во многих популярных приложениях. Все больше и больше компаний сосредотачиваются на предоставлении богатого персонализированного контента. Например, вы, вероятно, видели это сообщение на многих веб-сайтах электронной коммерции . Клиенты, которые покупают это, также покупают.Что такое коллаборативная фильтрация и каковы ее виды?
1. Совместная фильтрация на основе пользователей. Идея этого типа совместной фильтрации заключается в том, что мы берем пользователя в качестве предпочтения, скажем, «А», и находим других пользователей, имеющих аналогичные предпочтения, а затем предоставляем «А» те предпочтения этих пользователей, которые он еще не сталкивался.
Совместная фильтрация на основе элементов: здесь вместо поиска пользователей с похожими предпочтениями мы находим фильмы, похожие на вкус «А», и рекомендуем те фильмы, которые он еще не смотрел. Каковы преимущества и недостатки фильтрации на основе контента?
Преимущества
1. В отличие от совместной фильтрации, модели не нужно собирать данные о других пользователях с похожими предпочтениями, поскольку она принимает предложения от самого основного пользователя.
2. Модель может порекомендовать вам одни из лучших фильмов в соответствии с вашими предпочтениями, которые смотрели лишь немногие другие.
Недостатки
1. Этот метод требует большого количества информации об определенной области, поэтому качество функций, которые он предоставляет, более или менее такое же, как у функций, созданных вручную.
2. Его возможности рекомендовать фильмы ограничены, поскольку он работает только в соответствии с существующими интересами пользователей. Какие популярные приложения используют алгоритмы совместной фильтрации?
Ниже приведены некоторые из приложений, пользующихся популярностью во всем мире:
1. YouTube использует этот алгоритм вместе с некоторыми другими мощными алгоритмами для предоставления видеорекомендаций на главной странице.
2. Веб-сайты электронной коммерции, такие как Amazon, Flipkart и Myntra, также используют этот алгоритм для предоставления рекомендаций по продуктам.
3. Платформы потокового видео являются самым ярким примером, которые используют пользовательский рейтинг, средний рейтинг и связанный контент для предоставления персонализированных предложений.