Когда фильм действительно тухлый или свежий?

Сайты с обзорами фильмов, такие как IMDb и Rotten Tomatoes, стали частью жизни многих киноманов.

Зрители фильмов могут легко определить, какой фильм смотреть, и сравнить определенные фильмы, посмотрев на одно число - рейтинг фильма от 0% до 100%.

Но… задумывались ли вы, как определяются эти рейтинги?

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

Глядя на IMDb и Rotten Tomatoes, мы видим, что на обоих сайтах-агрегаторах фильмов не указывается, как рассчитывается процентный рейтинг их фильмов.

Страница справки IMDb:

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

О странице Rotten Tomatoes:

Оценка Tomatometer представляет собой процент положительных отзывов профессиональных критиков о том или ином фильме или телешоу. Оценка Tomatometer рассчитывается для фильма или телешоу после получения не менее пяти отзывов.

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

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

Построение модели оценки фильма

Нас больше всего интересовали ответы на два ключевых вопроса.

  1. При расчете рейтинга аудитории «Гнилые помидоры» подчеркивают определенные аспекты обзоров фильмов больше, чем другие?
  2. Есть ли связь между рейтингом аудитории Rotten Tomatoes и его рейтингом Tomatometer?

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

Этап 1: определение набора данных

Мы вручную отобрали около 150 фильмов с оценкой аудитории от 0 до 100%. Мы стремились добиться равномерного распределения рейтингов фильмов по квартилям. Ниже показано распределение фильмов, попадающих в каждый из квартильных диапазонов. Для единообразия мы будем называть фильмы в диапазоне 0–25% первым квартилем, 26–50% - вторым, 51–75% - третьим и, наконец, 76–100% - четвертым квартилем.

Распределение по томатометру и рейтинги аудитории в наборе данных: наблюдения

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

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

Достаточно интересно, хотя наш набор данных был построен на основе оценки аудитории, мы замечаем меньшую степень дисперсии оценок Tomatometer по квартилям.

Мы считаем, что это связано с тем, что рейтинг Tomatometer составлен законными, аккредитованными кинокритиками и телевизионными критиками. Профессия этих критиков - сравнивать и оценивать фильмы, и, таким образом, они могут определить, что в киноиндустрии считается «плохим» или «хорошим» фильмом. Поскольку они гораздо более опытны в оценке фильмов, мы полагаем, что эти критики, вероятно, придерживаются более сильного мнения о фильмах и склонны оценивать фильм либо очень высоко, либо низко в зависимости от своего мнения.

Далее, какая информация о фильме нас интересовала больше всего?

  • Оценка аудитории. Эта оценка представляет собой процент всех пользователей, которые оценили фильм… положительно »3,5 / 5 звезд и выше положительно. Любой пользователь Rotten Tomatoes может дать оценку аудитории, а не только фильму или телекритику.
  • Обзоры аудитории. Письменные обзоры
    сопровождаются рейтингом звезд, который дает любой пользователь Rotten Tomatoes.
  • URL страницы фильма "Гнилые помидоры". Мы больше отслеживали URL-адрес для служебных целей на случай, если мы когда-нибудь захотим вернуться на страницу, чтобы собрать дополнительную информацию.

Этап 2: Сбор данных

Поскольку для доступа к API-интерфейсу Rotten Tomatoes требовалось одобрение, мы перешли на BeautifulSoup для создания набора данных.

В процессе сбора наших данных было два основных шага.

  1. Очистка веб-страниц. Мы итеративно разработали несколько классов Python, которые помогли нам получить правильные атрибуты фильма, упомянутые ранее. Одной из самых важных частей нашего класса был параметр разбивки на страницы, где мы могли указать, сколько страниц обзоров аудитории нам нужно.
  2. Итеративная запись данных в выходной файл: выходной файл JSON итеративно записывался для защиты от возможного сбоя сценария и удаления ранее очищенных данных. Это было особенно полезно во время начальных тестов, чтобы помочь нам отладить и оптимизировать процесс.
class TextReviews():
def __init__(self, url, limit=1):
  self.page = AudienceReviews(url)
  self.limit = limit
  self.reviews = []
# helper function to page for reviews, outputs as an array of reviews
 def getReviews(self):
  for i in range(self.limit):
   self.reviews += self.page.getReviews()
   next_page = self.page.nextPage()
if next_page:
    self.page = AudienceReviews(next_page)
   else:
    break
# return ''.join(self.reviews)
  return self.reviews

Отрывок из score.py, который мы использовали для очистки обзоров аудитории от Rotten Tomatoes.

Мы создали CSV-файл нашего списка фильмов и каждого из соответствующих URL-адресов. Мы извлекли нужные нам данные из каждого фильма в формат данных JSON, как показано слева. Мы также добавили каждый фильм в соответствующий квартиль рейтинга.

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

Этап 3: Создание классификатора

Теперь нам нужно было создать наш классификатор, чтобы преобразовать строку обзоров аудитории в рейтинг (мы решили оценивать его по квартилям 1,2,3,4, а не назначать точную оценку, чтобы повысить точность).

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

Чтобы упростить работу с векторизатором, преобразователем и классификатором, мы использовали класс конвейера scikit-learn, который ведет себя как составной классификатор. Используя обычный TF IDF с наивным байесовским классификатором, мы получили точность 28% - очень низкий уровень. Мы поняли, что это произошло потому, что наша классификация не была двоичной, она была мультиклассовой, что означает, что в ней использовалось несколько взаимоисключающих меток. Поэтому мы перешли на классификатор OneVsRest, по-прежнему используя TF IDF. Наши результаты по точности были намного лучше.

Точность классификатора

ТОМАТОМЕТР

Как показывает наш график, наш классификатор наиболее точно предсказывал фильмы, которые попали бы во 2-й и 3-й квартили рейтинга Tomatometer.

РЕЙТИНГ АУДИТОРИИ

Как показывает наш график, наш классификатор наиболее точно предсказал фильмы, которые попадут в 1-й квартиль рейтингов аудитории.

Мы полагали, что обзоры аудитории всегда будут точно предсказывать рейтинг аудитории, поэтому мы были очень удивлены этими результатами. Таким образом, мы подтвердили нашу гипотезу о том, что рейтинги фильмов не отражают фактическое мнение широкой публики. Это привело нас к мысли, что, возможно, Rotten Tomatoes включает в рейтинг аудитории другие факторы, которые они не раскрывают.

ТОМАТОМЕТР VS. РЕЙТИНГ АУДИТОРИИ

Для первого и четвертого квартилей наш классификатор дал более точные прогнозы рейтинга аудитории. Однако для второго и третьего квартилей наш классификатор более точно предсказал рейтинг Tomatometer. Наш классификатор показал нам, что, используя обзоры аудитории на Rotten Tomatoes, мы не всегда могли точно предсказать ни рейтинг аудитории, ни рейтинг этих фильмов с помощью Tomatometer. Итак, очевидно, что при определении рейтингов, отображаемых на веб-сайте Rotten Tomatoes, учитываются и другие факторы.

Резюме

Из нашего исследования мы можем определить, что рейтинги фильмов на Rotten Tomatoes, а также, скорее всего, на других веб-сайтах, неточно отражают мнение широкой публики о фильме. Хотя мы ожидали, что Tomatometer не будет соответствовать рейтингу, полученному в обзоре аудитории, мы были удивлены, увидев, что оценка аудитории также не отражает отзывы аудитории.

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

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

Если интересно, не стесняйтесь проверить наш код здесь. Наш репозиторий содержит весь исходный код, необходимый для запуска парсера и анализа Rotten Tomatoes.

Финальный проект DIS-вычислительного анализа больших данных, осень 2018 г.

Следуйте за нами на Medium: Робин Росс, Саника Бапат, Эстер Л.