Изучение пересечения фильмов и машинного обучения

Авторы: Виджей Сринивасан, Джош Пейпермастер, Блейк Адамс, Адит Джайн, Джейкоб Гримм и Вэнс Воан

Резюме (tl; dr)

Мы хотели построить модель для прогнозирования кассовых сборов неизданного фильма. Мы сделали это, извлекая данные о ранее выпущенных фильмах и обучая нашу модель прогнозированию доходов. Мы получили наши данные из Kaggle:

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

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

С помощью библиотеки повышения градиента XGBoost и некоторой настройки гиперпараметров мы смогли получить довольно точную модель регрессии с R² score = 0,78.

Вступление

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

Сбор / предварительная обработка данных

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

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

Мы столкнулись с некоторыми проблемами при использовании такого большого набора, потому что было много недостающих данных, которые нам пришлось отфильтровать. Из 45 000 записей только 16% имели ненулевой доход (наша целевая переменная), а 19% имели ненулевой бюджет, который, как мы полагали, будет одним из лучших предикторов. После того, как мы их отбросили, у нас осталось всего около 5000 записей.

Первоначальный набор данных не включал данные о фильмах, выпущенных после середины 2017 года, поэтому мы пошли искать другие наборы данных, которые содержали более свежие данные. Мы нашли еще один набор данных Kaggle, в котором использовались TMDb и MovieLens, чтобы убедиться, что мы получаем информацию из одних и тех же источников. В этом наборе были фильмы до 2020 года, поэтому мы решили сделать его тестовым, а исходный - нашим обучающим. Нам также пришлось выполнить полную предварительную обработку нового набора данных, чтобы он соответствовал оригиналу. Затем нам нужно было найти правильное разделение данных, скорректировав годы отсечения для каждого набора, и в итоге мы создали разделение поездов / тестов 80/20 и 90/10.

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

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

Исследовательский анализ данных

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

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

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

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

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

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

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

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

Модели / производительность

Регрессор XGBoost

  • После использования GridSearchCV и дальнейшей ручной настройки модели мы достигли значения r-квадрат 0,7788.
  • Используя следующие гиперпараметры: n_estimators = 10000, learning_rate = 0,01, colsample_bytree = 0,9, max_depth = 6, min_child_weight = 0,6, подвыборка = 0,9

Линейная регрессия

  • Значение R-квадрат 0,707

Регрессор SGD

  • Значение R-квадрат 0,681

Регрессор AdaBoost

  • Значение R-квадрат 0,606

KerasRegressor (последовательный NN)

  • Значение R-квадрат 0,3778
  • 3 скрытых слоя, 100 эпох, размер партии 10

Движение вперед

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

  • Был ли фильм выпущен в праздничные выходные?
  • Можем ли мы включить переменную, которая оценивает «звездную мощь», количественно отражая качество актеров / актрис в фильме?
  • Можем ли мы включить дополнительную информацию о маркетинговой стратегии фильма? Например, цвета, использованные в афише фильма, продолжительность трейлера фильма или спонсорство?

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