Создайте свою собственную систему рекомендаций фильмов с помощью 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. Платформы потокового видео являются самым ярким примером, которые используют пользовательский рейтинг, средний рейтинг и связанный контент для предоставления персонализированных предложений.