Работаем c базовыми и ансамблевыми моделями машинного обучения и персептроном. Выводы: на кино можно зарабатывать , конечно, если кинопроизводители и дистрибьютеры будут эмитировать акции, облигации и иные финансовые инструменты и публиковать отчетность. Датасет и код проекта лежат в репозитории.
Когда обычным "зрительцам" говорят, что кино – это творческая деятельность, великое искусство, а разговаривая про презренные деньги, мы тем самым оскорбляем священный процесс творчества и саму личность "кинотворца", нам сообщают не всю правду.
Кинематограф предсказуем. С учетом исторических данных прошлых периодов прокатную судьбу каждого национального фильма на локальном рынке можно определить еще до начала съемок. И можно заранее подобрать характеристики проекта так, чтобы он был успешен у зрителя: неважно, это будет легкая коммерческая романтическая комедия или патриотический фильм-драма, или добротная научная фантастика.
Если в наличии имеется "портфель" кинопроектов из 20-30 кинокартин, то его судьбу предсказать проще, пользуясь аналогией c хорошо диверсифицированным и сбалансированным портфелем инвестиционных финансовых инструментов.
Решим сперва задачу классификации: будет ли фильм успешным в прокате, соберет ли два своих бюджета?
Есть определённые признаки успешного кино, например: комедии всегда коммерчески успешнее чем драмы, продолжительность идеального фильма стремится к 94 минутам, а если перед нами очередной "блокбастер" – риск неокупаемости повышается за счет ограниченной емкости российского рынка. Подробнее по факторам инвестиционного успеха можно почитать здесь.
Экспериментировать мы будем на "малом" датасете российского кинопроката, включающем прокатные данные и информацию по режиссерам и сценаристам с 2004 года. Датасет содержит 1660 записей российских фильмов национального производства, начиная с фильма "72 метра" Владимира Хотиненко, вышедшего в прокат 12 февраля 2004 года, заканчивая картиной "Зоськина заправка", вышедшей в прокат 13 апреля 2023 года.
Автор вывел космический броненосец на запасную орбиту подготовил большую 146-факторную модель, охватывающую расширенную творческую группу фильма: продюсеров, монтажеров, композиторов и основных актеров, - с помощью которой уже возможно подбирать будущие характеристики кинофильма и состав творческой группы.
Датасет предварительно вычищен, пропуски (бюджет) заполнены медианными значениями. Это на самом деле не очень хорошо для точности расчетов, но вот такие у нас скрытные продюсеры. Все данные собирались из открытых легальных источников и проходили перекрестную проверку в ручном режиме.
Структура датасета
Датасет включает следующие признаки: ID_kinopoisk -идентификационный номер кинофильма и столбцы значений:
- week – порядковый номер недели выхода фильма с начала года,
- month – порядковый номер месяца выхода фильма с начала года,
- screens – начальное количество экранов проката (экранных копий),
- budget – бюджет фильма (в миллионах рублей),
- age_R – возрастной рейтинг фильма от 0+ до 18+,
- time – общая длительность фильма в минутах,
- genre_box_buget – среднее соотношение сборы/бюджет по жанру,
- genre_avr_kinopoisk_R – средний зрительский рейтинг Кинопоиска по жанру,
- genre_avr_box – средние сборы по жанру,
- genre_avr_views – среднее количество просмотров для жанра проекта,
- genre2_box_buget – сборы/ бюджет для поджанра проекта,
- genre2_avr_kinopoisk_R – средний рейтинг для поджанра проекта,
- genre2_avr_box – средние сборы для поджанра проекта,
- genre2_avr_views – средние просмотры для поджанра проекта,
- dir_box_buget – среднее соотношение сборы/бюджет для режиссера,
- dir_avr_kinopoisk_R – средний рейтинг режиссера на Кинопоиске,
- dir_avr_box – средняя величина сборов проектов данного режиссера,
- dir_avr_views – средняя величина просмотров фильмов режиссера,
- skr1_box_buget – среднее соотношение сборы/бюджет для сценариста,
- skr1_avr_kinopoisk_R – средний зрительский рейтинг для сценариста,
- skr1_avr_box – средняя величина сборов по проектам сценариста,
- skr1_avr_views – среднее количество просмотров проектов сценариста,
- skr2_box_buget – соотношение сборы/бюджет второго сценариста,
- skr2_avr_kinopoisk_R – средний зрительский рейтинг второго сценариста,
- skr2_avr_box – среднее количество сборов проектов второго сценариста,
- skr2_avr_views – среднее количество просмотров проектов второго сценариста.
Прогнозируемыми величинами у нас будут соответственно:
Для классификации:
- rezult – фильм окупился в прокате – 1, не окупился – 0.
- rezult4 – фильм провалился – 0, не окупился – 1, окупился – 2, принес хорошую прибыль – 3
Метрики классификации у нас будут стандартные: accuracy, ROC-AUC в добавление посмотрим на precision, recall, f1-score.
На первом этапе для тестирования мы будем использовать базовые модели машинного обучения. На втором выйдем на ансамблевые модели ML в варианте для классификации с настройкой гиперпараметров. На третьем этапе добавим трэша и угара попытаемся использовать семплирование для выравнивания классов и задействуем MLP.
Регрессия и прогноз абсолютных значений по сборам, просмотрам и рейтингу "Кинопоиска»" будут рассмотрены в следующей публикации.
Этап первый: базовые алгоритмы машинного обучения
Не будем пороть горячку, используем базовый алгоритм логистической регрессии. Выборку делим на тренинговую и тестовую в пропорции 70/30 и зафиксируем разделение random_state=42. Воспроизводилось результатов и расчётов - это святое для науки и для финансов!
Логистическая регрессия у нас работает только с нормализованными данными. Не забудем из sklearn.preprocessing вытащить StandardScaler и отмасштабируем признаки в диапазон от 0 до 1.
Отберем 26 признаков и целевое значение (столбец result). Обучим и протестируем модель.
Результат вполне неплох, мы получили точность 0,9238 и в общем-то верно предсказали прокатную судьбу 461 из 499 кинокартин.
Согласитесь, если продюсер или председатель отборочной комиссии заранее будет знать, что он может точно предсказать судьбу 92 проектов из 100 положенных ему на стол, рисуется просто идеальная картина. Ответственный сотрудник может заранее сверлить дырочки под орден «За заслуги перед бюджетом», потому что вложения окупились и принесли прибыль. За дверью кабинета стоит очередь из частных инвесторов из России и дружественных государств.
Но, увы не все так просто. В исходном датасете у нас примерно 11,5% фильмов – окупились. Налицо явная несбалансированность в классах. Поэтому показатель accuracy для нас, увы, недостаточен. Если мы посмотрим на значения площади под кривой ROC = 0,9406 – он конечно лучше, чем гадание на кофейной гуще 0,5, но все же не так высок, как бы хотелось. Будем ориентироваться на показатели precision, recall, f1-score для класса (1) прибыльных картин.
precision |
recall |
f1-score |
support |
|
0 |
0.9352 |
0.9819 |
0.9580 |
441 |
1 |
0.7778 |
0.4828 |
0.5957 |
58 |
accuracy |
0.9238 |
499 |
||
macro avg |
0.8565 |
0.7323 |
0.7769 |
499 |
weighted avg |
0.9169 |
0.9238 |
0.9159 |
499 |
Попробуем другой базовый метод, "машину опорных векторов".
Точность этой модели повыше 0,9359. Мы верно предсказали судьбу 467 кинокартин из 499 Это, конечно, лучше, но ненамного. Надо что-то помощнее и эффективнее.
Применим "решающие деревья". Они не зависят от разброса значений признаков, их масштабов, выбросов так сильно, как другие алгоритмы. Другим плюсом идет то, что масштабирование и нормализация тренинговой и тестовой выборки не требуется.
Первый результат данной модели по точности не "айс" - всего 0,9158, и мы правильно определили только 457 кинокартин из 499.
Впрочем, «решающие деревья» можно затюнить подбором гиперпараметров. GridSearchCV нам в помощь. "Решёткой" мы пройдемся по criterion ("gini", "entropy", "log_loss"), splitter ("best", "random"), max_depth, min_samples_split, min_samples_leaf, max_feature и определим лучшее сочетание.
У нас получилось следующее: criterion = 'gini', max_depth = 5, max_features = 7, min_samples_leaf = 2, min_samples_split = 15, splitter = 'best'.
При данных гиперпараметрах достигнута общая точность = 0,9419. Мы определили судьбу 470 картин из 499.
Не "Оскар", конечно, но по precision, recall, f1-score для положительного (прибыльного) класса уже лучше, чтобы не выбрасывать в корзину потенциально успешные проекты.
Нам что-то нужно делать с несбалансированностью классов. Ведь мы хотим получить более детальную классификацию и отдельно выделять абсолютно провальные проекты и те фильмы, которые потенциально могут принести инвесторам хорошую прибыль.
Сс недостаточными метриками качества надо что-то делать, и помогут нам в этом деле боги тяжелого металла градиентного бустинга и ансамблевые модели машинного обучения.
Этап второй: ансамбли и многоклассовая классификация
Итак, в жюри киноконкурса у нас: AdaBoostClassifier, BaggingClassifier, ExtraTreesClassifier, GradientBoostingClassifier, RandomForestClassifier, матрешки StackingClassifier и VotingClassifier с вложенными в них LogisticRegression и RandomForestClassifier, HistGradientBoostingClassifier и творение сумрачного гения и от «Яндекса» - CatBoostClassifier.
Мы создаем блок моделей, обучаем их на базовых настройках на 70%-выборке и делаем прогнозы по двум классам. И получаем соответствующее метрики качества.
Конечно можно попробовать поиграть с настройками и вложениям ансамблей серии Bagging, Stacking и Voting, но оставим данный подход особо упоротым продвинутым специалистам - тем более GradientBoostingClassifier, HistGradientBoostingClassifier и CatBoostClassifier показали вполне себе неплохие результаты уже в базе.
Модель |
Accuracy |
Precision |
Recall |
F1_score |
AdaBoost |
0.9399 |
0.8043 |
0.6379 |
0.7115 |
Bagging |
0.9479 |
0.8478 |
0.6724 |
0.7500 |
ExtraTrees |
0.9339 |
0.9339 |
0.5172 |
0.6452 |
GradientBoosting |
0.9519 |
0.8400 |
0.7241 |
0.7778 |
RandomForest |
0.9519 |
0.8696 |
0.6897 |
0.7692 |
Stacking |
0.9439 |
0.8750 |
0.6034 |
0.7143 |
Voting |
0.9098 |
0.8421 |
0.2759 |
0.4156 |
HistGradientBoosting |
0.9499 |
0.8235 |
0.7241 |
0.7706 |
CatBoost |
0.9559 |
0.8462 |
0.7586 |
0.8000 |
CatBoost дал нам точную оценку 478 кинокартин из 499. roc_auc_score составил 0,9786.
Давайте для верности попробуем и HistGradientBoostingClassifier. Подберем гиперпараметры (learning_rate = 0.1, max_depth = 5, max_iter =100). Точность 0,9499. Количество верно предсказанных 474 из 499, ну и просто феноменальный roc_auc_score = 0,9801. Но этот показатель, как мы помним, для нас не так важен.
Ребята-создатели CatBoost и HistGradientBoosting – просто молодцы. Понятно, что почти четверть хороших проектов наш ИИ-отборщик может отправить в макулатуру, но на остальных проектах точно сделает прибыль. Ну а если сценарист и заявитель принесет не один, а четыре "гениальных" проекта, шансы на успех повышаются и у него. Ни Квентин Тарантино, ни Джордж Лукас не стартовали с первого поданного ими проекта.
И теперь, наверное, если у читателя в глубине души проснулся алчный киноделец, наверное, ему уже интересно, а как отбирать точно самые провальные и точно самые кассовые и успешные фильмы, которые принесут те самые "иксы" прибыли.
Для этого мы воспользуемся режимом многоклассовой классификации и значениями столбца rezult4 нашего "малого" датасета. Работать мы будем с CatBoostClassifier с настройками на 4 класса.
И сразу на модели получаем roc_auc = 0,9629 (естественно, с установкой multi_class='ovr') и общей точностью – 0,8938. Так же нам потребуется перевод меток классов в формат one-vs-all, для чего используем label_binarize. И получаем данные для всех 4-классов. Даже при первом взгляде, видим, что промежуточные классы – "провисают".
Очень точно определить грань между успехом и "почти успехом" и между провалом и "почти провалом" достаточно трудно. Все-таки есть субъективный человеческий фактор, позволяющий за счет управления прокатом, сдвижкой графика выхода картин управлять сборами. К нему мы отметим и другие возможные скрытые от нас факторы производственного процесса и процесса кинодистрибьюции, неведомые обычным зрителям.
Лучше всего модели удается определять крайности – совсем провальные картины и очень успешные. Рискнем также предположить, что вне зависимости от контекста – успешный фильм все-равно окупится в прокате, а неуспешный – провалится, как бы его ни "тянули за уши", предоставляя лучшие прокатные условия.
Напомним, 0 - фильм провалился в прокате, 1 - не окупился (не собрал два производственных бюджета), 2 - окупился, 3 - принес хорошую прибыль.
Полученная матрица ошибок и отчет о классификации все расставляет по местам. Промежуточные классы определяются не очень хорошо, а именно: собравшие хоть какую-то кассу, но не окупившиеся в прокате фильмы и окупившиеся в покате, но не принесшие прибыль.
precision |
recall |
f1-score |
support |
|
0 |
0.9470 |
0.9825 |
0.9644 |
400 |
1 |
0.5882 |
0.4878 |
0.5333 |
41 |
2 |
0.5455 |
0.2500 |
0.3429 |
24 |
3 |
0.6923 |
0.7941 |
0.7397 |
34 |
accuracy |
0.8938 |
499 |
||
macro avg |
0.6932 |
0.6286 |
0.6451 |
499 |
weighted avg |
0.8808 |
0.8938 |
0.8838 |
499 |
Если мы хотим стабильные инвестиции, прибыль и рост кинорынка, то игнорировать их нам нельзя, из потенциально "гиперуспешных" фильмов в силу их малого количества сложно собрать диверсифицированный портфель по жанрам и режиссерам. "Портфель" должен быть разбавлен чуть менее успешными, но все же прибыльными картинами.
Что дальше? Подбором гиперпараметров модели можно улучшить показатели, но на считанные проценты (как правило – доли процентов). Поэтому, как бы нам ни хотелось этого избежать, – придется использовать и синтетические данные, применять сэмплировнаие для выравнивания баланса классов.
Радует только то, что делать это мы будем на уже "знакомых" моделях и в качестве дополнительного бонуса попробуем для классификации нейросеть.
Этап третий: балансировка классов и нейросеть
Увеличим выборку с использованием библиотеки imbalanced-learn. Теперь у нас примерно равное количество классов в общей выборке. А заодно сравним как с новым датасетом справится уже хорошо знакомый CatBoostClassifier - и в пару к нему запустим обыкновенный MLP.
На увеличенной выборке со сбалансированными классами CatBoost показал феноменальные результаты по всем четырем классам с общей точностью в 0,9872. Теперь время ответить на вопрос – когда стоит "городить огород" то есть использовать другой подход к классификации?
Используем нейросеть, построенную на архитектуре библиотеки TensorFlow – последовательную полносвязную сеть из трех слоев: 1. полносвязный слой (Dense) и функцией активации ReLU , принимающий "на входе" входной тензор размерности 26 (по количеству признаков), полносвязный слой (Dense) с 64 нейронами и функцией активации ReLU, полносвязный слой (Dense) с 4 нейронами и функцией активации Softmax "на выходе". Скомпилируем ее при помощи следующих параметров: optimizer='adam' , loss='categorical_crossentropy' , metrics=['accuracy'].
Мы обучим данную нейросеть в течение 300 эпох. Чтобы не допустить ухудшения характеристик используем ModelCheckpoint, сохраняющую лучшие параметры настройки нейросети. Получим историю обучения и выберем эпоху обучения, где по показателю accuracy нейросеть настроена оптимально.
На графике функции потерь (loss) мы видим, что дальнейшее обучение после 200 эпохи уже бесполезно. График точности (accuracy) говорит нам, что после 170 эпохи наступает падение метрик. Но лучшее состояние модели ведь уже зафиксировали!
По метрике точности (0,9697) на сбалансированном по классам датасете нейросеть уступила CatBoost. Единственное утешение – это тот факт, что оба подхода показали практически безошибочное определение категории окупившихся в прокате и принесших прибыль.
Для 4-классовой классификации на 26-факторной модели CatBoost на сбалансированных данных обогнала MLP. Что конечно не исключает возможности того, что на другом датасете, если поработать с настройками обучения MLP мы можем получить лучшие результаты. Для быстрого скорринга кинопроектов ансамблевых моделей машинного обучения вполне достаточно.
Итак, наше базовое предположение доказано – мы можем прогнозировать успех или неуспех кинофильма, а также более тонкие градации в отношении российского национального кинематографа. И все это только за счет использования исторических данных проката по проектам и двум основным участникам творческой группы.
Развитие прогнозирования кинопроката
Предиктивная аналитика кинопроката очень развита в Китае, Индии и странах Азии – автор насчитал уже более 200 современных публикаций на данную тему.
Исследователи используют: исторические данные проката и творческой группы, как и в настоящей публикации; данные социальных сетей, комментарии, блоги и профессиональные экспертные ресурсы, обрабатываемые с помощью языковых моделей и средств обработки естественного языка; изображения – постеры и кадры из кинофильмов – с помощью "компьютерного зрения".
Некоторые исследователи даже используют оценку человеческих эмоций с помощью инструментальных средств психодиагностики – от МРТ до всевозможных видов и наборов полиграфа и иных средств инструментальной психодиагнстики.
В следующей публикации планируем осветить вопросы регрессии: чтобы получить хотя бы приблизительное значение по сборам, просмотрам, а для эстетов – даже значение зрительского рейтинга "Кинопоиска". Зачем это нужно?
Прямой связи между рейтингом "Кинопоиска" и сборами на самом деле нет, так же как нет абсолютно никакой связи между окупаемостью проекта и количеством всевозможных золотых статуэток у режиссера и творческой группы. Это совсем разные миры, разделенные красной гиперплоскостью ковровой дорожки.
Рискнем вызвать гнев киноинквизиторов, но не блещущие 7-8-балльными оценками и золотыми статуэтками Сарик Андреасян и Марюс Вайсберг – хорошие режиссеры с точки зрения исторической доходности и окупаемости. Жора Крыжовников, Дмитрий Дьяченко и примкнувший к ним Клим Шипенко – очень хорошие. В России есть минимум два десятка первоклассных режиссеров-профессионалов, которым можно доверить инвестиции и рассчитывать на стабильный успех.
Тем не менее, мы не хотим лишать работы кинокритиков, поэтому тоже отметим важность рейтингов, комментариев и экспертных отзывов, тем более их можно изучать с помощью средств обработки естественного языка и языковых моделей.
Выводы
Инвестиции в российское кино могут быть прибыльными. И для государства, и для частных инвесторов. Если использовать "портфельный принцип" инвестирования - средняя годовая доходность дает, конечно, не "иксы" прибыли как в случае с отдельными картинами, но в рисковом варианте доходить до 139% вполне возможно, как и "повторить" успех «Чебурашки».
Стабильность и предсказуемость кинопроката означает новые возможности и для федеральных целевых программ поддержки кинематографа, и для частно-государственного финансирования, и для эмиссии акций и облигаций российскими кинопроизводителями и кинодистрибьютерами.
Автор очень надеется, что опытные датасайентисты предложат пути усовершенствования в и поправки в расчётах, начинающие специалисты, школьники и студенты – смогут использовать датасет и материалы репозитория в научных и учебных целях.
Хороших и успешных в прокате российских кинофильмов!
Комментарии (13)
Antony_Rain Автор
27.05.2024 15:00+1Для того, чтобы фильм окупился в прокате, он должен собрать в кинотеатральной сети примерно 2 своих бюджета (для ряда картин есть и другие каналы монетизации - мерч, ТВ, платформы, продажа прав за рубеж и т.п.). Здесь финансовая успешность проекта = окупаемость в прокате. Поэтому, сборы X2 это 0.0% прибыли. Если больше X2 - супер.
Jury_78
27.05.2024 15:00Здесь финансовая успешность проекта = окупаемость в прокате.
Это как: Лучше быть здоровым и богатым, чем больным и бедным?
sunsexsurf
27.05.2024 15:00+1Модельки маленькие, тут гридсерч - куда ни шло (имею ввиду, что он долгий, взяли б хоть random search), но посмотрите на
optuna
- вроде как стандарт в индустрии вместо GSCV.Почему метрикой сразу с входа было не взять f1 - тоже не понял, но посчитал, что это ученическая статья (больше на новичков рассчитанная) и тогда ок.
Antony_Rain Автор
27.05.2024 15:00Вы правы, модель на большой датасет делается с random search и f1.
sunsexsurf
27.05.2024 15:00+1ну тогда и "машину опорных векторов" стоило бы перевести нормально. Он хоть и "support vector machine", но в русском все же "Метод опорных векторов".
Да, кстати, как быть с условным Ридли Скоттом, который сначала снимает "Гладиатора", а потом невнятную пургу "типа Чужой завет"?IMnEpaTOP
27.05.2024 15:00Чужой: Завет не провальный фильм. Сборы к бюджету 2,5:1. Даже если на рекламу потратились - по прокату вероятно вышел в ноль, а по стримингам и всякому мерчу получили прибыль.
Antony_Rain Автор
27.05.2024 15:00Франшизы - это отдельная песня: может наблюдаться как синергетический эффект, особенно если идет кроссплатформенная схема дистрибуции и несколько каналов монетизации (кино, сериал, видеоигра, книги, мерч, продакт-плейсмент и т.п.). Но после определенного периода она начинает угасать и попытки ее ребилда или ребута - сходни с попытками оживления трупа гальванизацией.
Antony_Rain Автор
27.05.2024 15:00Человеку свойственно ошибаться: и после 10 прибыльных фильмов подряд режиссер может снять "пургу". Поэтому для инвестиции в кино "портфельность" и "диверсификация" - must have. Есть явные признаки "неуспешности" и "пурги", например, режиссер работает не в своем привычном жанре, затянутое производство (больше 5 лет), раздутый бюджет для локальной истории и узкого рынка - и сотни других факторов "под капотом", которые иногда затруднительно формализовать. Тем не менее, для российского кинопроизводства вполне возможно поднять долю окупившихся в прокате фильмов с 11,5% до 25-30% и выше, как и сами валовые сборы в 2-2,5 раза по текущей кинотеатральной сети - просто за счет повышения качества контента
IMnEpaTOP
27.05.2024 15:00+1Поскольку старт карьеры в киноиндустрии весьма сложный, просьба в дальнейшем раскрыть тему, какие параметры предполагаемого фильма перспективны, а какие точно не перспективны для новичков сценаристов и режиссеров.
Думаю это будет весьма полезно для всех, если появиться просчитанный фундамент для дебютантов. Тогда и студии/продюсеры будут чаще давать возможности, да и дебютанты чаще смогут стартовать карьеру и получать опыт, которому в киношколе не научат.
Antony_Rain Автор
27.05.2024 15:00Перспективны скорее параметры самого новичка, включая его связи и амбиции. Впрочем, аналитика стартовых проектов тоже возможна, если например конкурсы типа "Питчинг дебютантов" и другие поделятся своими базами. Вопрос упирается в доступ к данным.
Jury_78
Может я что то не понял..., но как эти признаки определяют успешность?
farafonoff
если успешность=окупаемость в прокате, то наипрямейшим образом.
Jury_78
В признаках нет успешности.