Рекомендательные системы для Netflix (and chill)

Вступление

Данный групповой проект был сделан Власенко Анастасией, Волковой Вероникой, Гончаровой Екатериной, Лактионовым Вадимом, Феофиловым Кириллом - группой №5.

Задание Ответственный
Дескриптивный анализ вся команда
Поиск дополнительных данных Волкова Вероника, Феофилов Кирилл
Рекомендательная система на основе коллаборативной фильтрации Лактионов Вадим, Гончарова Екатерина
Рекомендательная система на основе схожести фильмов Лактионов Вадим, Власенко Анастасия
Оформление отчётов Власенко Анастасия
Процесс работы Вконтакте, обмен гистами

Задачей нашей команды стало, используя датасеты по фильмам и отзывам на эти фильмы с Netflix, построить рекомендательные системы, которые могли бы использоваться сервисом для рекомендации (duh) фильмов пользователям. Работа включала в себя несколько этапов:

  • разведочный анализ (какие данные у нас есть, о чем они, что мы можем из них взять)

  • нахождение “полезных” признаков

  • построение рекомендательных систем

  • оценка точности предсказаний

Мы начнем работу с загрузки датасета по фильмам и сокращенный по рейтингам этих фильмов. В первой части мы хотим посмотреть на то, как связаны между собой компании, выпускающие фильмы и жанры фильмов ( = построить две разные сети).

Кластеры, которые содержат похожие фильмы, позволят нам предлагать пользователю то, что ему может понравиться. Предположим, что Пользователю 1 понравился фильм в жанрах Экшен, Драма, Комедия. Мы попробуем предложить ему фильм из того же кластера, куда попал первый фильм с расчётом на то, что он ему тоже понравится.

Разведочный анализ, выбор переменных

Для начала посмотрим, какие переменные будут полезны для нашего анализа.

Первая сеть: по жанрам

Начнем с построения самого простого графика, который потом преобразуем.

Первый граф выглядит очень хаотично и практически не читаем, поэтому нам нужно поработать над ним: отфильтруем его, оставим более сильные связи.

Это выглядит уже лучше! Данный граф дает нам представление о том, что жанры все же имеют тенденцию формировать между собой кластеры, более того часть из них собирается в тесный “клубок”, не взаимодействующий с другими узлами (отсутствуют брокеры).

Чтобы можно было говорить о каком-то анализе, раскрасим кластеры в разные цвета и подпишем их.

У нас получилось 9 кластеров, которые объединяют фильмы по жанрам. По большей части фильмы связаны одинаковым набором жанров, причем связь очень сильная. Например, в 9 кластере находятся 2 фильма, у которых абсолютно одинаковый набор жанров, ничем не отличающийся. Могут добавляться еще жанры, но бОльшая часть будет одинаковой. Также, рассчитав ассортативность, выяснили, что, действительно, узлы предпочитают формировать связь с похожими узлами, т.к. показатель ассортативности близок к единице (0.8381166).

Вторая сеть: по производителям

Построим изначальную сеть, опираясь на которую, будем делать дальнейший анализ.

Как можно заметить, сеть слишком плотная, и для того, чтобы более осознанно выделить кластеры, взвесим проекцию обычной проекции(подход Ньюмана, т.е взвесим силу связи между фильмами на популярность кинокомпании). После взвешивания удалим слабые связи. Это позволить просмотреть структуру сети более четко.

Мы можем попробовать удалить все связи, у которых сила чуть ниже или выше среднего(подбором, 0,13 - наиболее оптимальное)

Структура просматривается гораздо лучше. Осталось выделить кластеры.

Следующий шаг - выяснить, какой кластер к чему относится.

movie_id clust title
29 6 NA
125 6 Nighthawks
81 6 NA
87 6 NA
113 6 NA
165 6 NA
255 6 NA
12 6 NA
90 6 NA
143 6 The Game
199 6 The Deer Hunter
231 6 NA
249 6 NA
59 6 NA
68 6 NA
70 6 NA
130 6 NA
93 6 NA

Например, в 6 кластере, несмотря на то, что фильмы были выпущены сразу несколькими компаниями, их объединяет Univeral Pictures.

Рассчитаем ассортативность, т.е. того, насколько узлы склонны иметь связи с узлами, обладающими сходными свойствами.

## [1] 0.7394885

Ответ: почти 0,74. Значение близко к единице. Таким образом, узлы предпочитают формировать связь с похожими узлами.

Итак, мы получили сеть, в которой четко прослеживаются кластеры фильмов, похожих по кинокомпаниям, это значит, что данная сеть позволит нам в дальнейшем рекомендовать тому или иному пользователю фильмы из одного кластера.

Страны, в которых снимались фильмы

Изначально мы предположили, что будет полезно советовать пользователям фильмы, основываясь на стране, в которой они были сняты.

production_countries_sep n
United States of America 482
Sweden 3
Germany 31
Italy 9
Spain 7
Japan 12
United Kingdom 76
India 2
Argentina 2
Netherlands 4
Australia 13
Bhutan 1
Ireland 5
Canada 27
Malaysia 1
France 23
China 1
New Zealand 3
Belgium 3
Mexico 2
Switzerland 1
Norway 1
Czech Republic 3
South Korea 1
Russia 2
United Arab Emirates 1
Hong Kong 2
Poland 1

Как мы видим, большинство фильмов снято в США, что ведет к скошенности результатов, если бы мы взяли эту характеристику для системы.

Длительность фильма

Как связаны продолжительность фильма и его рейтинг среди зрителей?

Как мы можем видеть из графика, чаще всего хорошие оценки набирают фильмы от 80 до 130 минут, хотя и есть исключения в виде документальных фильмов, которые тоже собирают хорошие оценки от зрителей. Сервису стоит обратить внимание на то, что фильмы с меньшей продолжительностью могут нравиться пользователям меньше.Исходя из этого, делаем вывод, что продолжительность фильма - полезный признак.

Дополнительные данные

Мы нашли два датасета на сайте Kaggle, tmdb_5000_credits и IMDB_2280_Most_Voted_Movies - можно будет посмотреть отдельный рейтинг (IMDB Rating), режиссеров и просто добавить больше фильмов для расширенных возможностей.

Из боксплота мы видим, что режиссеров оценивают по-разному, что говорит о том, что включение этого признака в content-based систему поможет сделать рекомендации более точными, поскольку каждому пользователю могут нравиться разные стили режиссёров.

Рекомендательная система коллаборативной фильтрации

На первых шагах нам не требуются дополнительные данные, поскольку мы строим рекомендательную систему на основе оценок(коллаборативная фильтрация) по готовому датасету ratings_cut.

Оценка UBCF и IBCF

Для того, чтобы определить какой из методов (UBCF vs. IBCF) использовать, посмотрим на соответствующие оценки моделей.

Оценки для IBCF
x
RMSE 1.483838
MSE 2.201776
MAE 1.103531

И проделаем то же самое для UBCF.

Оценки для UBCF
x
RMSE 1.0647855
MSE 1.1337683
MAE 0.8611106

Оценки отклонений и ошибок в модели UBCF меньше, значит используем её.

Теперь мы можем рекоммендовать фильмы для любого пользователя, поставившего оценки и спрогнозировать будущие оценки фильмам. На вход пользователь предоставляет свой id, по дефолту мы советуем ему 5 фильмов и предсказываем рейтинг для них.

Проверка

Проверим для пользователя с id 2554698

Рекомендованные фильмы
recc_films(“2554698”)
Bowling for Columbine
Being John Malkovich
Seven Samurai
Lock, Stock and Two Smoking Barrels
Super Size Me
Предсказанные рейтинги
recc_ratings(“2554698”)
4.246181
4.242280
4.218941
4.212714
4.200664

Эти таблицы содержат в себе рекомендации конкретному пользователю с предсказывемой оценкой(насколько пользователю понравится фильм, на сколько он его оценит) - в дальнейшем мы планируем сделать рекомендации более точными, чтобы устранить случаи, когда пользователь остается недоволен фильмом. Однако несмотря на прелести процесса, может случиться так, что пользователь еще не занесен в систему, а значит, мы не знаем, что ему рекомендовать.

Холодный старт

Наша система, как и многие другие, может встретиться с проблемой того, что у нас нет данных о новом пользователе. В таком случае мы предлагаем только что зарегистрировавшемуся пользователю поставить оценки ряду фильмов, список которых постоянно обновляется, основываясь на недавних хитах (чтобы увеличить вероятность, что пользователь видел этот фильм) и фильмах, проверенных временем (= “классика кино”).

Content-based рекомендательная система

Перейдем ко второй рекомендательной системе, основанной на найденных нами “полезных” признаках. Для нашей системы мы решили использовать данные по режиссерам, среднему рейтингу фильма с imdb (более усредненное значение, так как выборка больше), продолжительности фильма и жанрам, в которых фильм снят.

Функция + проверка

На вход во второй системе пользователь подает свой id, на основе которого строятся все рекомендации.

Следующая таблица предлагает пользователю с id 111343 три фильма (мы предлагаем три фильма всем пользователям). Преложенные фильмы: драмы американского производства с рейтингом от 7.5. Таким образом, можно говорить о полезности результатов.

id 111343
title
Network
Midnight Cowboy
A Streetcar Named Desire

Если говорить обизначальных данных этого пользователя, он оценил следующие фильмы (в скобках оценка фильму):

  • Rabbit-Proof Fence (3)

  • American Beauty (5)

  • A Beautiful Mind (4)

  • Identity (4)

  • The Ice Storm (4)

  • The Last Samurai (3)

  • About Schmidt (4)

  • The Others (3)

  • Wonderland (4) и т.д.

Наш пользователь действительно любит драмы, “проверенные временем” - фильмы, вышедшие определенное время назад и успевшие зарекомендовать себя.

Проделаем то же самое для пользователя 2533015.Выданные фильмы - двухчасовые трагикокомедии начала 2000-х.

id 2533015
title
Chocolat
Sideways
Four Weddings and a Funeral

Подходят ли они пользователю? Посмотрим на его оценки. Поскольку у него очень много оцененных фильмов, посмотрим только на те, которым он поставил 5.

  • Bruce Almighty

  • Bowling for Columbine

  • Man on the Moon

  • Barbershop

  • Roger & me

Эти фильмы соответствуют тем, что система рекомендует пользователю. Успех!

А теперь давайте проверим на себе.

id 100
title
Robin Hood
Bad Boys II
Planet of the Apes

Чтобы проверить точность модели, мы предложили людям оценить 10 фильмов по шкале от 0 до 5, а затем вбили их в базу данных. Результаты оценки первого пользователя таковы:

  • Armageddon - 5

  • Stuart Little 2 - 4

  • Fantastic Four - 2

  • Mulan - 5

  • Sherlock Holmes - 5

  • Shrek 2 - 5

  • Spy Kids - 2

  • Speed - 2

  • Solaris - 3

  • First Knight - 4

По предварительной оценке, можно заметить, что пользователь любит приключенческий жанр, фантастику и экшн, посмотрим, что получится. Наша система выдала 3 фильма (Bad Boys II, Planet of the Apes, Sphere), которые, действительно, оказались похожими друг на друга. Они совмещают в себе те жанры, что любит наш пользователь. Кроме того, если посмотреть на хронометраж фильмов, можно увидеть, что все они идут 2+ часа. Из этого всего можно сделать вывод о том, что пользователю, вероятнее всего, понравятся фильмы, рекомендованные нашей системой.

id 101
title
The Hurricane
The Master
The Passion of the Christ

Второй пользователь дал оценку следующим фильмам:

  • Titanic - 5

  • The Great Gatsby - 3

  • A beautiful Mind - 5

  • Braveheart - 2

  • Sherlock Holmes - 5

  • Shrek 2 - 5

  • The American President -3

  • Coach Carter - 5

  • Solaris - 2

  • Pay It Forward -5

Большинство из них - фильмы достаточно серьезные: драмы, детективы. Что же выдала нам наша рекомендательная система? The Hurricane, The Master, The Passion of the Christ. В результате видим, что, опять же, полученные фильмы похожи друг на друга. Почитав к ним описание, видим, что они все относятся к жанру драма. Некоторые из них описывают автобиографические события.

Холодный старт 2.0

В качестве решения проблемы холодного старта в этой системе мы решили имплементировать хештеги. Если у нас пока нет данных о пользователе, то при регистрации ему будет предложен список трендовых хештегов, основанных на ключевых словах, использующихся для поиска фильма, и биграммах, чаще всего встречающихся в описаниях.

Частота встречаемости биграмм в бюджетно успешных фильмах
Сочетание слов Частота встречаемости
year old 5
christmas eve 4
los angeles 4
new york 3
north pole 3
peter pan 3
woman named 3
adams family’s 2
american woman 2
buddy cops 2

Таблица - наглядный пример хештегов. Мы можем использовать локации, праздники, времена года и пр.

That is it, folks.

К чему же мы пришли? Дальнейшее развитие проекта - большая загадка. На данный момент мы довольны тем, что у нас получилось: обе системы работают исправно, за исключением слишком специфичных случаев (как если бы во второй системе пользователю нравились вещи, которые не встречаются в одном фильме). Что касается личных предпочтений, мы бы выбрали content-based систему, поскольку она все-таки нацелена на более кастомизированный подход. В общем и целом, мы считаем, что проект выполнен успешно, цели достигнуты, и мы можем отпускать наше детище в свободное плавание.

Спасибо за внимание!