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

Какво определя успеха на филма?

Отмъстителите на Марвел: Краятнаскоро детронираАватар като най-касовия филм в историята и въпреки че няма съмнение, че този филм ще стане много успешен, искам да разбера какво прави всеки даде на филма успех.

Въпросите, на които ще отговоря са:

  1. Кои променливи са особено предсказуеми за абсолютните стойности на приходите?
  2. Ограничавайки проблема до случай на двоичен „провал“ или „успех“, колко точни са прогнозите за приходите?

Използвам данни от The Movie Database, предоставени чрез kaggle. Наборът от данни е разделен на набор от влак и тест, като наборът от влакове съдържа 3000 филма, а тестовият набор включва 4398. Има 22 функции както в обучаващия, така и в тестовия набор, включително бюджет, жанрове, принадлежи_към_колекцията, време на изпълнение, ключови думии още. Наборът от данни за влака също съдържа целевата променлива приходи.

Проучвателен анализ на данни

Трудности:

  • Преди да направя какъвто и да е проучвателен анализ на данни, трябваше да преобразувам JSON-изглеждащи данни в текстов формат в действителните типове данни, които по природа бяха списъци с речници. Много полезна функция за постигане на това беше literal_eval() от пакета ast.
  • В този набор от данни има много категориални характеристики, включително държави на производство, продуцентски компании, актьорски съставиекипаж. Би било невъзможно да се включат всичките им връщания, така че реших да използвам произволен лимит от 30-те най-добри връщания за всеки от тези типове функции.
  • Променливата популярност в набора от данни се основава на различни показатели като потребителски гласове и показвания на ден. Тъй като тази функция става по-мощна след пускането на филм, тази променлива вероятно не трябва да се включва в модел, който има за цел да прави надеждни бъдещи прогнози за филми, които са в процес на подготовка.
  • Имаше много липсващи стойности, особено в променливата бюджет, но също и в подпроменливата за пол за cast и crew. Тъй като бюджетът изглеждаше много важен показател, базиран на първоначалното графика спрямо цифрата приходи, реших да премахна всички филми, които имат 0 като бюджет. Реших да не включвам съотношения между половете в моя модел поради несъответствието на данните.

Прозрения:

Предистории и продължения:Може би не е изненадващо, че филми, които са предистории или продължения на свързани филми, печелят средно по-високи приходи от отделните филми.

Бюджет:Графиките ясно показват, че приходите са положително свързани с бюджета. Човек всъщност би се надявал, че голяма инвестиция ще донесе по-голяма възвръщаемост.

Актьорски състав: Първите шест актьори в набора от данни за влака изглежда правят пари, като някои – като Самюел Л. Джаксън – повече от други.

Дата на пускане на пазара:Броят на филмите, както и приходите се увеличиха с течение на времето, но през 70-те години на миналия век имаше някои филми, които генерираха много приходи, което доведе до скок в цифрите на приходите. Подобно събитие се случи през 2017/2018 г.

Предварителна обработка на данни

Добавих 30-те най-добри връщания на променливите актинг, екип, продуцентски компании, страни на производствоиключови думикато фиктивни променливи към набора от данни. Също така създадох нови функции, които отчитат броя на различните връщания на проба (производителни компании, страни на производство, говорими езици), както и броя на буквите (заглавие, слоган). Тъй като бюджетътувеличава извънредния труд поради инфлацията, добавих променливо съотношение бюджет_към_година.

За да събера данните в еднакви интервали, приложих логаритмичната функция към променливите бюджет, популярностиприходии мащабирах всички данни с помощта на MinMaxScaler() между 0 и 1. преобразува датата на пусканев 4 различни променливи: година на пускане, месец на пускане, седмица на пусканеиделничен ден на пускане. Не използвах никаква обработка на естествен език на променливите общ преглед, заглавиеилислоган и пренебрегнах съдържанието на думата.

След почистване на данни и инженеринг имам 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) е алгоритъм за усилване, който се основава на Gradient Descent и е по-ефективен от алгоритъма 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 може да се окаже ценно, когато се опитвате да подобрите точността.
  • Линейна регресия. Използването на линейна регресия като основен регресор в трите различни приложени модела се справя добре при прогнозиране на филми с по-ниски приходи, но по-лошо при прогнозиране на филми с по-високи приходи, според тази „изследователска статия“.
  • Преобразуване на регресия в изход за класификация. Аз просто трансформирам регресионния си изход в случай на двоичен клас и изчислявам точността. Моят модел обаче е оптимизиран само за абсолютните стойности на приходите, а не за двата класа. Ако се интересуваме от прогнозиране на флопа срещу успеха, би било по-добре да използваме класификатори и алгоритми за дълбоко обучение, за да постигнем висока точност.

Този проект беше моят проект Capstone за програмата Data Scientist Nanodegree на Udacity. Има много други интересни прозрения за набора от данни за филми в моя бележник на Jupyter. Разгледайте моя GitHub за подробен код.

Искате ли да четете повече, висококачествени истории на Medium? Обмислете да се регистрирате за членство, което подкрепя мен и други писатели на Medium.



Някога чудили ли сте се как всъщност работят алгоритмите AdaBoost и XGBoost? Вижте моето задълбочено ръководство за пакетиране, усилване, AdaBoost, произволни гори и XGBoost.