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

Веб-сайт проекта: Веб-сайт анализа фильмов

Введение

Фильмы - это, пожалуй, высшая форма искусства. Эти медиа-творения обычно оставляют следы вопросов и воображения в умах зрителей, которые сознательно или бессознательно пытаются понять все, что происходит «под капотом» и «за пределами большого экрана». Киноиндустрия - это многомиллиардный бизнес, и отчасти это связано с тем, что каждый год выходит много фильмов. У каждого из этих фильмов разные бюджеты, названия, актеры и съемочные группы, но у всех общая цель - получить прибыль. Успех фильма зависит от различных факторов, и определение правильного фактора может помочь спрогнозировать прибыльность фильма.

Цели

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

Набор данных, используемый для анализа

Набор данных состоял из двух файлов CSV с несколькими столбцами в формате JSON. Первый набор данных включал название фильма, идентификатор фильма, актерский состав и съемочную группу. Во втором файле CSV были столбцы, включая жанр, язык оригинала, ключевые слова, название фильма, исходное название, идентификатор фильма, домашнюю страницу, производственные компании, даты выпуска, бюджет, доход и т. Д. Данные содержали 4803 наблюдения и 24 столбца.

Соавторы

Этот проект является проектом с открытым исходным кодом для заключительного этапа стажировки в Hamoye Data Science. Мы - команда из 21 человека, в которую входят специалисты по данным, рассказчики данных и инженеры по данным; каждому члену команды была отведена определенная роль.

Изучение набора данных

Из-за избыточности функций двух файлов CSV мы выполнили слияние похожих столбцов - идентификатора фильма и заголовка - в наборах данных. После слияния количество функций было сокращено до 22. В данных были некоторые отклонения, так как некоторые столбцы имели минимальное значение нуля - 21,6% нулей в столбце доходов, 29,7% нулей в столбце среднего количества голосов, 1,3% нулей в столбце столбец подсчета голосов и 1,3% нулей в столбце даты выпуска - что маловероятно; в некоторых столбцах также отсутствовали значения, такие как время выполнения. Кроме того, разница в популярности была высокой, учитывая среднее и максимальное значение, это указывает на выбросы в столбце. Впоследствии были рассмотрены нулевые значения, отсутствующие данные времени выполнения и значения DateTime.

На рубеже веков рентабельность резко выросла благодаря технологическому прогрессу в кино, рекордному количеству просмотров на нескольких платных платформах, таких как Netflix и т. Д. Выручка и прибыль достигли своего пика в 2014 году, когда выручка возглавила диаграмму с колоссальными 24,13 миллиарда долларов. Есть интересная закономерность с увеличением бюджета и доходов. Этот анализ показывает очевидную корреляцию между бюджетом и продажами, а также рост доходов от фильмов с увеличением бюджета и времени. Чем выше бюджет, тем дороже продается фильм. Поэтому существует огромная тенденция к завышению стоимости фильмов.

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

Корреляция между доходом и другими переменными:

Корреляция между бюджетом и другими переменными:

Считается, что самые популярные бренды продуктов являются общими, а самые популярные жанры фильмов в большей степени зависят от предпочтений населения. Здесь научная фантастика стала самым популярным жанром, несмотря на кажущуюся бесконечно малую ценность 96 по сравнению с 1207 фильмами в драматическом жанре. Среди трех наиболее численно доминирующих жанров только Action добрался до 6-го места, а Family и Adventure вошли в тройку лидеров.

Статистика из набора данных:

  • Пиковые периоды для фильмов - это праздничные дни - с конца мая до начала июля и с конца ноября по декабрь.
  • Согласно набору данных, доминирующими жанрами являются драма, комедия и боевик.
  • Анимационные фильмы стоят почти вдвое больше, чем неультфильмы, но приносят более чем вдвое прибыль.
  • Такие режиссеры, как Джеймс Кэмерон и Джордж Лукас, создали фильмы с высоким рейтингом, с относительно меньшими бюджетами, чем их коллеги, а также сумели получить лучшую прибыль, чем они.
  • За прошедшие годы в киноиндустрии в съемочной группе работало больше людей, чем актеров. За кадром всегда работает больше людей. Это может объяснить, почему размер съемочной группы более положительно влияет на размер бюджета, чем размер актерского состава.
  • В фильмах с высокой прибылью в этом наборе данных следует часто обращать внимание на то, что это в основном приключенческие фильмы и научно-фантастические фильмы.

Модель Задача 1

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

Наш подход

Чтобы добиться этого, мы определили функцию, которая выполняет итерацию по каждому списку в столбце жанров, проверяет, присутствует ли в этом списке анимация, и возвращает «Animated», иначе она возвращает «Not_Animated» - это метки для обучения.
Кроме того, мы определили функцию, которая выполняет итерацию по команде в каждом фильме и возвращает название должности каждого члена команды для этого фильма. Поскольку в качестве аргумента мы имели дело с текстовыми данными, мы использовали обработку естественного языка модуля пространственного анализа для анализа текста. Чтобы использовать простор, мы должны определить некоторые термины, которые включают:

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

CountVectorizer

Векторизатор счетчика принимает в качестве аргумента текст (документ) и возвращает числовое значение частоты появления каждого слова в документе. Гиперпараметры CountVectorizer, которые помогли ускорить процесс:

  • Stop_words; Это слова, которые не должны учитываться при подсчете. Такие слова, как продюсер, режиссер, редактор и т. Д., Являются общими для всех фильмов и будут появляться часто и, таким образом, иметь очень большое количество, поэтому мы включили их в stop_words, чтобы другие менее часто встречающиеся слова имели решающее значение для процесса обучения. учитывая лучшие веса.
  • Лемматизаторы; лемматизация просто означает сокращение каждого слова до его леммы, такие слова, как «бег», «бег», «бег», считались бы отдельными словами, но с функцией лемматизатора все они будут считаться как одно.
  • Ngram_range; этот гиперпараметр сообщает CountVectorizer, как следует подсчитывать слова, т.е. если слова следует считать как биграммы, монограммы и т. д., мы использовали диапазон ngram (1,1), что означает подсчет только монограмм.

TfidfVectorizer

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

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

Полиномиальный наивный байесовский классификатор:

Реализуя стоп-слова, лемматизаторы и CountVectorizer, все они инкапсулированы в конвейер научного обучения, мы обучили модель NB, которая имела следующие показатели производительности;

Классификатор опорных векторов (SVC):

SVC был обучен с использованием выходных данных TifdfVectorizer, а также с использованием документов, содержащих не менее 7 названий должностей. Полученные метрики:

Модель Задача 2

Определить наличие разрыва между крупными киностудиями и независимыми киностудиями после кластеризации.

Наш подход

Внедрен метод кластеризации Kmeans и Deep Embedded Clustering для анализа кластеризации.

Кластеризация K-средних

Первым шагом к этому подходу было использование анализа главных компонентов для сжатия набора данных и существенного облегчения работы с ним. Новый фрейм данных по-прежнему на 80% состоит из объясненных отклонений и, как следствие, делает его приемлемым для работы.

Перед тем, как приступить к кластеризации K-средних, мы построили простую дендрограмму на новом фрейме данных, используя spacy, чтобы получить в некоторой степени точную визуализацию того, как точки данных были сгруппированы в зависимости от их расстояния.

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

Затем мы приспособили алгоритм кластеризации K-средних к кадру данных, используя оптимальное количество кластеров. Новый столбец, содержащий кластер, которому принадлежит каждая строка данных, был затем добавлен к исходному набору данных для дальнейшего анализа сегментации.

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

Глубокая встроенная кластеризация (DEC)

Первый шаг к этому подходу был аналогичен подходу K-средних, за исключением использования t-SNE (t-распределенное стохастическое соседнее вложение) для уменьшения размерности вместо PCA. Подобно PCA, t-SNE - еще один алгоритм машинного обучения без учителя для уменьшения размерности. t-SNE обычно используется для встраивания многомерных данных в двух- или трехмерное пространство для визуализации данных.

Для этого подхода количество кластеров оценивается путем исследования коэффициентов силуэта различных исполнений модели K-средних.

Коэффициент силуэта измеряет, насколько похожа запись данных на свой кластер (сплоченность) по сравнению с другими кластерами. Значение силуэта находится в диапазоне от -1 до +1, где высокое значение указывает, что запись данных хорошо соответствует своему кластеру и плохо совпадает с соседними кластерами, а лучшая оценка силуэта была присвоена 2 кластерам.

Недавно был опубликован метод глубокой встроенной кластеризации (DEC), который сочетает в себе автокодеры с K-средними и другими методами машинного обучения для кластеризации, а не уменьшения размерности.

Подход реализован

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

Результаты оценки модели DEC показали, что модель DEC предсказывала более четко разделяемые кластеры кадра данных по сравнению с методом K-средних.

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

Kubeflow Pipeline

Компонент Kubeflow Pipelines - это автономный набор кода, который выполняет один шаг в рабочем процессе машинного обучения.

Ниже приводится сводка шагов, которые мы предприняли при создании и использовании компонента:

  • Написал программу, содержащую логику компонента.
  • Контейнеризация программы с использованием образа Python Docker.
  • Написал спецификацию компонента в формате YAML, описывающую компонент для системы Kubeflow Pipelines.
  • Затем использовал SDK Kubeflow Pipelines для загрузки нашего компонента, использования его в конвейере и запуска этого конвейера.

Шаг 1. Настройте среду, установив следующие пакеты python

  • Установите или обновите SDK конвейеров.
  • Импортируйте пакеты kfp и kfp.components.
  • Создайте эксперимент по выпуску в конвейере Kubeflow

Шаг 2: Создание компонентов Python на основе функций. Код нашего компонента был определен как отдельная функция Python.

  1. Предварительная обработка: компонент предварительной обработки включает преобразование необработанного набора данных в понятный формат. Здесь значения NaN были заменены пустой строкой. Столбцы JSON были проанализированы.
  2. Исследовательский анализ данных: компонент исследовательского анализа данных относится к критически важному процессу выполнения начальных исследований данных для обнаружения закономерностей, выявления аномалий, проверки гипотез и проверки предположений с помощью сводной статистики и графических представлений.
  3. Кластерный анализ: метод сокращения PCA был использован для разделения набора данных на 2 группы, а алгоритм кластеризации K-средних был использован для кластеризации групп - основных киностудий и независимых.
  4. Обучение модели. Для прогнозирования жанра фильмов использовались модели логистической регрессии, SVM-классификатора и полиномиального наивного байесовского классификатора.
  5. Проверка модели.
  6. Матрица неточностей: есть матрица, описывающая эффективность модели классификации.

Шаг 3. Создайте компонент конвейера из отдельной функции

Мы использовали kfp.components.create_component_from_func для возврата фабричной функции, которую можно использовать для создания экземпляров класса kfp.dsl.ContainerOp для конвейера. Мы также указали базовый образ контейнера для запуска этой функции.

Шаг 4: Создайте конвейер Kubeflow

Мы определили конвейер с помощью декоратора @ dsl.pipeline. Функция конвейера определена и включает в себя несколько параметров, которые будут передаваться в наши различные компоненты на протяжении всего выполнения. Kubeflow Pipelines создаются декларативно. Это означает, что код не запускается, пока конвейер не скомпилирован.

NB: хотя это отличный метод для локального использования, вы также можете использовать облачное хранилище для постоянного хранилища.

Шаг 5: Скомпилируйте и запустите конвейер

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

● Полный ациклический график рабочего процесса

Вывод

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

Репозиторий Github: Github - Movie Analysis.

Члены команды: Гаурав Джайн (PL), Кехинде Эгбетокун (APL), Шивам Ратор (QA), Идову Кила, Чигози, Дамилола, Бэзил, Ануолувапо, Эммануэль Огунведе, Олувафеми Оджо, Олувасеун, Квадиери Белло , Чиньеака, Аянлово, Неха, Джессика, Бигг, Ганият, Эммануэль Океке и Ибуно