Примечание. Этот блог не предназначен для использования в качестве гипер-технического блога. Однако, если вы парень или девушка, увлекающиеся подобными вещами, вот код этого проекта на моем GitHub!

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

Как бы то ни было, проект завершен, моя презентация завершена, а холодная открыта. Итак, я хочу задокументировать последние пару недель моего мистического путешествия к просветлению и техническому мастерству.

В этом проекте нам дали в значительной степени свободу действий. Единственными направлениями были:

  1. Найдите какой-то набор данных с помощью веб-скрейпинга
  2. Предсказать какую-то целевую переменную для собранных данных с помощью линейной регрессии.

Я знаю, что слово scrounge имеет негативный оттенок. Это потому, что я решил собирать данные с MobyGames.com. Для тех из вас, кто не знаком, Moby Games - это самая старая, самая большая и самая точная база данных видеоигрсогласно Moby Games. У меня есть сомнения.

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

Мне нравилось очищать данные. Тогда я возненавидел это. Потом мне снова понравилось. Этот цикл повторялся несколько раз, но я оказался на стороне любви (оууу). Используя BeautifulSoup, я написал пару скребков. Один очистил главный список игр и собрал все URL-адреса отдельных игр, а другой фактически взял данные с каждой из этих страниц.

Отдельный скребок страницы приходилось переоснащать много раз. Отсюда цикл любви-ненависти. Несмотря на громкие заявления Moby Games, страницы были непоследовательными, содержали разные поля и в целом не подходили для универсального парсера. Однако я преодолел эту монументальную невзгода и написал скребок, который работал на всех 8000 страницах.

Итак, очистка прошла отлично! Вот и я с DataFrame в руке. DataFrame, содержащий все данные для всех современных игр для домашних консолей - по крайней мере, я так думал.

Не поймите меня неправильно: мне удалось собрать все данные из Moby Games, но, к сожалению, только 250 записей содержали мою целевую переменную: совокупный рейтинг критиков.

Итак, у меня остался набор данных из 250 строк. Не так хорошо, как 8000 - но, по крайней мере, это было что-то. Конечно, после очистки данных я обнаружил, что из тех 250 игр, которые действительно содержали оценки критиков, около 160 из них имели хороший набор функций без каких-либо NaN. («не число» - еще одно отсутствующее значение от Moby Games).

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

Один из многих основных принципов этой сказки: линейная регрессия не очень хороша, когда дело касается группы категориальных переменных.

Тогда я проявил творческий подход. У меня не было числовых функций, которые можно было бы использовать в качестве входных данных, , но это не означало, что я не мог использовать их принудительно. Рейтинги ESRB можно рассматривать как порядковые значения, если прищуриться. Они варьируются от ориентированных на детей до более зрелых, и организация ESRB устанавливает минимальный возраст для каждого рейтинга. Так родилась моя функция «Целевой возраст».

Моя функция "Богородица" сработала… технически. Он действительно дал мне модель с небольшой предсказательной силой. Эта модель берет целевой возраст игры и предсказывает оценку критиков.

Моя модель лучше, чем случайное предположение по 100-балльной шкале, так что ура мне! (Жду звонка от ваших рекрутеров, Google). В среднем оно отклоняется примерно на 9,7 пункта в любом направлении. Впечатляет, правда?

Ну нет.

Я также построил «фиктивную модель», которая просто предполагает оценку 77,5 (средний балл) независимо от характеристик игры. Эта модель в среднем отклонялась на 9,9 пункта в любом направлении. Не нужно быть специалистом по обработке данных, чтобы увидеть, что 9.7 не является значительным улучшением, но это было что-то.

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

Характеристики важнее алгоритмов.

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

Нам уже представили Project 3, так что пора приступить. Я не уверен на 100%, чем буду заниматься дальше, но знаю одно:

Я буду тщательно проверять свой следующий источник данных.