- PVSM.RU - https://www.pvsm.ru -
Недавно мне на глаза попался датасет на Kaggle [1] с данными о 45 тысячах фильмов с Full MovieLens Dataset. Данные содержали не только информацию об актерах, съемочной команде, сюжете и т.п., но и оценки, выставленные фильмам пользователями ресурса (26 миллионов оценок от 270 тыс.пользователей).
Стандартная задача для таких данных — это рекомендательная система. Но мне в голову почему-то пришло прогнозирование рейтинга фильма на основе информации, доступной до его выхода. Я не знаток кинематографа, и поэтому обычно ориентируюсь на рецензии, выбирая что посмотреть из новинок. Но ведь рецензенты тоже несколько biased — они-то смотрят гораздо больше разных фильмов, чем рядовой зритель. Поэтому спрогнозировать, как оценит фильм обычная публика, показалось занятным.
Итак, набор данных содержит следующую информацию:
Использованный в статье код (python) доступен на github [2].
Полный массив содержит данные о более чем 45 тысячах фильмов, но так как задача — спрогнозировать рейтинг, нужно убедиться в объективности оценок конкретного фильма. Например, в том что его оценили достаточно много людей.
У большинства фильмов довольно мало оценок:
Кстати, фильм с самым большим количеством оценок (14075) меня удивил — это “Начало” (Inception) [3]. А вот следующая тройка — “Темный рыцарь”, “Аватар” и “Мстители” выглядят вполне логично.
Ожидаемо, что количество оценок и бюджет фильма взаимосвязаны (меньше бюджет — меньше оценок). Поэтому удаление фильмов с малым количеством оценок делает модель biased в сторону более дорогих фильмов:
Оставим для анализа фильмы с 50+ оценками.
Кроме того, удалим фильмы, вышедшие до начала работы рейтингового сервиса (1996 год). Тут проблема в том, что современные фильмы оцениваются в среднем хуже, чем старые, просто потому что среди старых фильмов смотрят и оценивают лучшее, а среди современных — всё.
В итоге финальный массив содержит около 6 тыс. фильмов.
Будем использовать несколько групп фич:
Документальные фильмы получают самые высокие оценки. Это хороший повод заметить, что разные фильмы оценивают разные люди, и если бы документальные фильмы оценивали любители экшна, то возможно результаты были бы другие. То есть оценки смещены из-за изначальных предпочтений публики. Но для нашей задачи это не принципиально, так как мы хотим прогнозировать не условно объективную оценку (как если бы каждый зритель посмотрел все фильмы), а именно ту, которую фильму даст его аудитория.
Кстати, интересно что исторические фильмы при этом оценены гораздо ниже документальных.
Наиболее высокие оценки получают фильмы, вышедшие в декабре, сентябре и мае.
Вероятно, это можно объяснить так:
Оценка фильма мало зависит от бюджета
Для некоторых фильмов указан нулевой бюджет — вероятно, нет данных
Самые высокие оценки у самых коротких и самых длинных фильмов
Для некоторых фильмов указана нулевая длительность — вероятно, нет данных
Наша задача — прогнозирование рейтинга — задача регрессии. Протестируем три модели — линейная регрессия (как baseline), SVM и XGB. В качестве метрики качества выберем RMSE. На графике ниже показаны значения RMSE на валидационном сете для разных моделей и разных наборов фич (хотелось понять, стоило ли морочиться с ключевыми словами и с Оскарами). Все модели построены с базовыми значениями гиперпараметров.
Как видим, наилучший результат у XGB с полным набором фич (метаданные о фильме + ключевые слова + данные об Оскарах).
С помощью тюнинга гиперпараметров удалось добиться снижения RMSE с 0.708 до 0.706
Будем считать ошибки меньше 5% маленькими (таких около трети), а ошибки больше 20% — большими (таких примерно 10%). В остальных случаях (чуть больше половины) будем считать ошибку средней.
Интересно, что размер ошибки и рейтинг фильма связаны: модель реже ошибается на хороших фильмах и чаще на плохих. Выглядит логично: хорошие фильмы, как и любая другая работа, скорее делаются более опытными и профессиональными людьми. Про фильм Тарантино с участием Бреда Питта можно и заранее сказать, что скорее всего он получится хорошим. В то же время, малобюджетный фильм с малоизвестными актерами может быть как хорошим, так и плохим, и тяжело судить, не видев его.
Вот наиболее важные фичи модели (PCA переменные относятся к обработанным ключевым словам, описывающим сюжет фильма):
Две из этих фич относятся к “Оскарам”, на которые ранее были номинированы либо члены команды (режиссер, продюсер, сценарист, оператор), либо фильмы, в которых снимались актеры. Как говорилось выше, ошибка прогноза связана с оценкой фильма, и в этом смысле предыдущие номинации на “Оскар” могут быть хорошим разграничителем для модели. И действительно, фильмы, у которых в активе есть хотя бы одна номинация на “Оскар” (среди актеров или команды) имеют среднюю ошибку прогноза 8.3%, а те, у которых нет таких номинаций — 9.8%. Из топ-10 фич, использованных в модели, именно номинации на “Оскар” дают наилучшую связь с размером ошибки.
Поэтому возникла идея построить две отдельные модели: одну для фильмов, у которых актеры или команда номинировались на “Оскар”, и вторую для остальных. Идея была в том, что это может уменьшить общую ошибку. Однако эксперимент не удался: общая модель давала RMSE 0.706, а две отдельные — 0.715.
Поэтому оставим изначальную модель. Показатели ее точности по итогу такие: RMSE на тренинговой выборке — 0.688, на валидационной — 0.706, и на тестовой — 0.732.
То есть, наблюдается некоторый оверфиттинг. В самой модели уже были установлены параметры регуляризации. Еще одним способом уменьшения оверфиттинга мог бы стать сбор большего количества данных. Чтобы понять, поможет ли это, построим график ошибок для разных размеров тренинговой выборки — от 100 до максимально доступных 3 тыс. Из графика видно, что начиная примерно с 2,5 тыс точек в тренинговом сете, ошибки на тренинговом, валидационном и тестовом сете меняются мало, то есть увеличение выборки не окажет значительного эффекта.
Что еще можно попробовать для доработки модели:
Интересно, что самая большая ошибка прогноза (7 прогнозных баллов вместо 4.2 реальных) — у фильма “Бэтмэн и Робин” 1997 года. Фильм с Арнольдом Шварцнеггером, Джорджем Клуни и Умой Турман получил 11 номинаций (и одну победу) [4] премии “Золотая малина”, возглавил список 50 худших фильмов за всю историю от киножурнала Empire [5] и привел к отмене сиквела и перезапуску всей серии [6]. Ну что же, тут модель, пожалуй, ошиблась совсем как человек :)
Автор: Olga Makarova
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/329704
Ссылки в тексте:
[1] датасет на Kaggle: https://www.kaggle.com/rounakbanik/the-movies-dataset
[2] github: https://github.com/pro100olga/movie_rating_prediction
[3] “Начало” (Inception): https://ru.wikipedia.org/wiki/%D0%9D%D0%B0%D1%87%D0%B0%D0%BB%D0%BE_(%D1%84%D0%B8%D0%BB%D1%8C%D0%BC,_2010)
[4] 11 номинаций (и одну победу): https://en.wikipedia.org/wiki/18th_Golden_Raspberry_Awards
[5] список 50 худших фильмов за всю историю от киножурнала Empire: http://www.empireonline.com/features/50-worst-movies-ever/default.asp?film=1
[6] отмене сиквела и перезапуску всей серии: https://www.hollywoodreporter.com/heat-vision/batman-begins-secret-history-movies-almost-got-made-802032
[7] Источник: https://habr.com/ru/post/466967/?utm_source=habrahabr&utm_medium=rss&utm_campaign=466967
Нажмите здесь для печати.