Задача на этой неделе состояла в том, чтобы решить какую-то проблему непрерывной регрессии, используя данные, которые мы собрали с веб-сайтов. Я решил очистить IMDB и The Numbers с помощью BeautifulSoup и Selenium, чтобы собрать информацию о фильмах, включая кассовые сборы, бюджет, рейтинг и жанр. Моя цель состояла в том, чтобы построить модель, предсказывающую долю дохода, который фильм получит в Соединенных Штатах, по сравнению с его мировым доходом.

Изучение BeautifulSoup было определенно крутой кривой обучения для меня. В сочетании с причудами кода сайта IMDB это было унизительной (читай: приводящей в бешенство) задачей, пока я, наконец, не смог сделать это правильно. Было много успешных скрейпингов (ни разу не заблокировали!), а затем я вернулся к собранным данным и понял, что они были неполными.

Несмотря на мои первоначальные сомнения по поводу включения Selenium, я понял, что необходимо получить максимально большой набор данных. Я написал парсер, который просматривал жанровые страницы IMDB, которые в общей сложности содержали около 5 500 фильмов, каждый из которых имел 10 000 отзывов. Оттуда я извлек коды, уникальные для каждого фильма, чтобы подключить их к URL-адресу для доступа к отдельной странице каждого фильма.

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

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

Я начал с простой линейной регрессии, перешел к полиномиальной регрессии 2-й и 3-й степени и попытался упорядочить полиномиальные регрессии с помощью Лассо и Риджа. Даже при разработке признаков модели были не очень сильны.

Коэффициенты не имели никакого смысла. Например, одним из важнейших коэффициентов для полиномиальной регрессии 3-й степени был Китай * США, когда в фильме может быть только одна страна. Уравнения регрессии просто сильно соответствовали бы данным и выдавали баллы R2 для данных тестирования в отрицательных септиллионах (действительно плохо).

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

В конечном итоге случайные леса дали мне самый высокий R² с 0,277. Наиболее важными характеристиками были валовой доход в США, бюджет, количество оценок, год, время работы и рейтинг пользователей. В итоге оказалось, что более субъективные категории, такие как режиссер и жанр, не так сильно повлияли на долю дохода, как количественные характеристики.

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

Выводы:

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