Прогнозирование доходов от фильмов с помощью AdaBoost, XGBoost и LightGBM

Что определяет успех фильма?

Мстители Marvel: Финал недавно свергли Аватар как самый кассовый фильм в истории, и хотя не было никаких сомнений в том, что этот фильм станет очень успешным, я хочу понять, что делает его дали фильму успех.

Я отвечу на следующие вопросы:

  1. Какие переменные позволяют прогнозировать абсолютный доход в первую очередь?
  2. Если ограничить проблему двоичным случаем "провал" или "успех", насколько точны прогнозы доходов?

Я использую данные из Базы данных фильмов, предоставленные через kaggle. Набор данных разделен на поезд и тестовый набор с набором поездов, содержащим 3000 фильмов, и набором тестов, содержащим 4398. Как в обучающем, так и в тестовом наборе есть 22 функции, включая бюджет, жанры, own_to_collection, время выполнения, ключевые слова и многое другое . Набор данных поезда также содержит целевую переменную доход.

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

Проблемы:

  • Перед проведением любого исследовательского анализа данных мне пришлось преобразовать данные, похожие на JSON, в текстовом формате в фактические типы данных, которые по своей природе были списками словарей. Очень полезной функцией для этого была функция literal_eval() из пакета ast.
  • В этом наборе данных есть много категориальных характеристик, в том числе страны-производители, компании-производители, актеры и съемочная группа. Было бы невозможно включить все их доходности, поэтому я решил пойти с произвольным ограничением 30 лучших доходностей для каждого из этих типов функций.
  • Переменная популярность в наборе данных основана на различных показателях, таких как количество голосов пользователей и просмотров в день. Поскольку эта функция становится более мощной после выпуска фильма, эту переменную, вероятно, не следует включать в модель, которая направлена ​​на создание надежных прогнозов будущего для фильмов, которые находятся в разработке.
  • Было много пропущенных значений, особенно в переменной budget, но также и во вложенной переменной пола для cast и team. Поскольку бюджет казался очень важным показателем, основанным на первоначальном построении графика по сравнению с цифрой доход, я решил удалить все фильмы с нулевым бюджетом. Я решил не включать гендерные соотношения в мою модель из-за несогласованности данных.

Статистика:

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

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

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

Дата выхода. Количество фильмов, а также доход увеличились сверхурочно, однако в 1970-х годах были фильмы, которые принесли большой доход, что привело к резкому росту доходов. Аналогичное событие произошло в 2017/2018 году.

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

Я добавил к набору данных 30 лучших результатов по актерам, съемочной группе, производственным компаниям, производственным странам и ключевым словам в качестве фиктивных переменных. Я также создал новые функции, которые подсчитывали количество различных возвратов на выборку (производственные компании, страны-производители, разговорные языки), а также количество букв (title, tagline). Поскольку бюджет увеличивается сверхурочно из-за инфляции, я добавил переменное соотношение budget_to_year.

Чтобы распределить данные с одинаковыми интервалами, я применил логарифмическую функцию к переменным бюджет, популярность и доход и масштабировал все данные с помощью MinMaxScaler() между 0 и 1. I преобразовал дату выпуска в 4 различные переменные: год выпуска, месяц выпуска, неделю выпуска и день недели выпуска. Я не использовал обработку естественного языка для переменных overview, title или tagline и игнорировал содержание слова.

После очистки данных и инженерии у меня в тренировочном наборе есть 201 функция. Я разделил обучающий набор на X_train, y_train, X_cross и y_cross. Мой набор тестовых данных не содержит никаких функций дохода, и мои прогнозы включены только в мой Блокнот Jupyter.

Моделирование и оценка

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

AdaBoost

AdaBoost (Adaptive Boosting) - это метаоценка, которая начинается с подбора одного регрессора к данным, а затем добавляет дополнительные регрессоры, направленные на улучшение случаев с большими отклонениями от регрессора. Результаты всех регрессоров являются средними и приводят к окончательной модели.

Наиболее важными параметрами этого алгоритма являются n_estimators (должно быть большим для большей точности) и Learning_rate (должно быть меньше для большей точности). Я использовал GridSearchCV для определения оптимальных параметров: 100 000 для n_estimators и 0,001 для Learning_rate.

XGBoost

XGBoost (Extreme Gradient Boosting) - это алгоритм повышения, основанный на градиентном спуске и более эффективный, чем алгоритм AdaBoost. Он использует усиленные деревья и параллельное усиление, что делает его быстрым и точным. Базовый алгоритм усиленных деревьев похож на RandomForests.

Я посмотрел на ряд различных параметров и настроил следующее:

LightGBM

Последней моделью, которую я использовал, была LightGBM, которая также представляет собой древовидный алгоритм повышения градиента. Он улучшает скорость XGBoost и очень быстро дает высокоточные результаты. Более подробную информацию о различиях между LightGBM и XGBoost можно найти здесь.

Я добавил в свою модель следующие настроенные параметры:

Среднеквадратичная ошибка

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

1. Какие функции особенно важны для прогнозирования доходов от фильмов?

Используя очень полезный метод plot_importance из lightgbm package, функции, которые имеют наибольшее значение при прогнозировании дохода, - это популярность, бюджет, бюджет_год_рейти, год выпуска, время выполнения, длина заголовка, длина тега и неделя выпуска. Эти функции аналогичны наиболее важным функциям моделей AdaBoost и LightGBM.

2. Насколько хорошо модель может предсказывать провальные и успешные фильмы?

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

Прибыль = (1/2) * Доход - Бюджет

Расчет фактической и прогнозируемой прибыли для набора данных X_train и X_cross дает точность 78,9% для данных обучения и 68% для данных перекрестной проверки.

43,2% фильмов, которые потерпели неудачу, ошибочно предсказываются как успешные, в то время как 21,3% успешных фильмов ошибочно предсказываются как провальные. Это указывает на то, что модель имеет тенденцию прогнозировать значения, превышающие фактические.

Заключение

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

Ограничения

  • Относительно небольшой размер обучающей выборки. Более крупная обучающая выборка может привести к более точной модели.
  • Выбор функций. Добавление других переменных, которые содержат оценки пользователей, оценки критиков, контент социальных сетей или даже данные из рекомендательных систем, таких как Netflix, может оказаться полезным при попытке повысить точность.
  • Линейная регрессия. Согласно этому исследованию, использование линейной регрессии в качестве основного регрессора в трех различных применяемых моделях дает хорошие результаты при прогнозировании фильмов с более низким доходом, но хуже при прогнозировании фильмов с более высоким доходом.
  • Преобразование регрессии в вывод классификации. Я просто преобразую результат регрессии в случай двоичного класса и вычисляю точность. Однако моя модель оптимизирована только для показателей абсолютного дохода, а не для двух классов. Если мы заинтересованы в прогнозировании провала или успеха, было бы лучше использовать классификаторы и алгоритмы глубокого обучения для получения высокой точности.

Этот проект был моим завершающим проектом для программы Udacity's Data Scientist Nanodegree. В моем Jupyter Notebook есть много других интересных идей о наборе данных о фильмах. Посетите мой GitHub для получения подробного кода.

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



Вы когда-нибудь задумывались, как на самом деле работают алгоритмы AdaBoost и XGBoost? Ознакомьтесь с моим подробным руководством по упаковке, ускорению, AdaBoost, случайным лесам и XGBoost.