Прогнозирование доходов от фильмов с помощью AdaBoost, XGBoost и LightGBM
Что определяет успех фильма?
Мстители Marvel: Финал недавно свергли Аватар как самый кассовый фильм в истории, и хотя не было никаких сомнений в том, что этот фильм станет очень успешным, я хочу понять, что делает его дали фильму успех.
Я отвечу на следующие вопросы:
- Какие переменные позволяют прогнозировать абсолютный доход в первую очередь?
- Если ограничить проблему двоичным случаем "провал" или "успех", насколько точны прогнозы доходов?
Я использую данные из Базы данных фильмов, предоставленные через 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% успешных фильмов ошибочно предсказываются как провальные. Это указывает на то, что модель имеет тенденцию прогнозировать значения, превышающие фактические.
Заключение
- Какие функции позволяют прогнозировать доход от фильмов в первую очередь? популярность, бюджет, отношение_год_бюджета, год_выпуска, время выполнения, длина_заголовка, длина_заголовка и неделя_выпуска
- Насколько хорошо модель может предсказывать провальные и успешные фильмы? Преобразование абсолютных значений в систему двоичных классов (провал или успех) приводит только к точности 68% в наборе перекрестной проверки.
Ограничения
- Относительно небольшой размер обучающей выборки. Более крупная обучающая выборка может привести к более точной модели.
- Выбор функций. Добавление других переменных, которые содержат оценки пользователей, оценки критиков, контент социальных сетей или даже данные из рекомендательных систем, таких как Netflix, может оказаться полезным при попытке повысить точность.
- Линейная регрессия. Согласно этому исследованию, использование линейной регрессии в качестве основного регрессора в трех различных применяемых моделях дает хорошие результаты при прогнозировании фильмов с более низким доходом, но хуже при прогнозировании фильмов с более высоким доходом.
- Преобразование регрессии в вывод классификации. Я просто преобразую результат регрессии в случай двоичного класса и вычисляю точность. Однако моя модель оптимизирована только для показателей абсолютного дохода, а не для двух классов. Если мы заинтересованы в прогнозировании провала или успеха, было бы лучше использовать классификаторы и алгоритмы глубокого обучения для получения высокой точности.
Этот проект был моим завершающим проектом для программы Udacity's Data Scientist Nanodegree. В моем Jupyter Notebook есть много других интересных идей о наборе данных о фильмах. Посетите мой GitHub для получения подробного кода.
Хотите читать больше качественных историй на Medium? Рассмотрите возможность подписки на членство, которое поддерживает меня и других авторов Medium.
Вы когда-нибудь задумывались, как на самом деле работают алгоритмы AdaBoost и XGBoost? Ознакомьтесь с моим подробным руководством по упаковке, ускорению, AdaBoost, случайным лесам и XGBoost.