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

Kaggle описывает себя как «… платформу для соревнований по прогнозному моделированию и аналитике, в которой компании и исследователи публикуют данные, а статистики и майнеры данных соревнуются за создание лучших моделей для прогнозирования и описания данных».

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

Отсутствие оплаты компенсируется шансом выиграть денежные призы, некоторые из которых весьма значительны - 1,5 миллиона долларов для главного конкурса прямо сейчас.

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

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

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

Учитывая соблазн значительных денежных призов, соревнования (что неудивительно) чрезвычайно конкурентны, и призы получают лишь немногие избранные. Это, конечно, означает, что подавляющая часть конкурентов не получит никакого финансового вознаграждения за свои (часто значительные) усилия. Но они все равно сохраняются ... почему?

В чем привлекательность?

В дополнение к соревнованиям с денежными призами Kaggle также предлагает ряд «обучающих» соревнований, которые не предполагают финансового вознаграждения, но предоставляют опыт обучения начинающим специалистам по данным. Чтобы понять, о чем идет речь, я записался на самые распространенные тренировочные соревнования - на «Титаник».

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

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

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

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

Учимся на тонущем корабле

Я решил начать с нуля и не «разветвлять» существующее ядро, хотя кое-какие идеи у меня возникли во время просмотра. План в целом состоял из нескольких линий:

  1. Изучите данные, сделайте несколько диаграмм, чтобы прочувствовать их.
  2. Постарайтесь разобраться с недостающими данными осмысленно.
  3. Создайте несколько новых функций.
  4. Создайте какую-нибудь прогностическую модель и сделайте несколько прогнозов.
  5. Отправьте мои результаты и посмотрите, где я приземлился.

Я бы сделал это на предпочитаемом мной языке R (другой вариант - Python) - здесь код не публикуется, хотя вы можете бесплатно ознакомиться с публикацией на Kaggle, если вам интересно.

Разбираемся с данными

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

Некоторые вещи кажутся очевидными из этих нескольких сюжетов:

  1. У мужчин дела шли не так хорошо.
  2. Дети (0–15 лет) имели больше шансов выжить, чем взрослые.
  3. В наборе данных отсутствует много возрастов.
  4. Путешественники-одиночки не очень хорошо себя чувствовали, как и те, у кого семьи из четырех и более человек.
  5. Путешественники первого класса имели гораздо больше шансов выжить в третьем классе.

Неплохая отправная точка и немного полезной информации для моей модели.

Работа с недостающими данными

Просматривая сводки, я заметил, что по нескольким функциям не хватает данных:

  • Как показано на графиках, в ряде случаев возраст отсутствует;
  • В некоторых случаях тарифы отсутствуют;
  • Назначение каюты во многих случаях отсутствует; и
  • Некоторым людям не хватало места посадки.

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

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

Создание новых функций

Целью здесь было создание новых функций из существующих данных, которые могут оказаться полезными в прогнозной модели. Несколько идей:

  • Беззастенчиво заимствованный из другого ядра, я извлек заголовки из строк символов имени, создав новую функцию со значениями вроде Mrs, Mr, Dr и некоторыми странными, такими как Jonhkeer;
  • Разделение возрастов на группы - аналогично исходной таблице;
  • Разделение размеров семьи примерно на маленькие, средние и большие ведра; и
  • Отображение SoloTravelers как 1 или 0, полученное из числа родительских детей и братьев и сестер.

Вы уловили идею. Было еще несколько возможных вариантов, но сначала я не хотел все усложнять.

Построение модели

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

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

В моей модели в качестве входных переменных использовались возраст, пол, класс пассажира, титул, стоимость проезда и мои группировки по размеру семьи. Далее прогнозы.

Прогнозировать и представить

Создав мою случайную модель леса, сделать прогнозы на основе «тестовых» данных - несложная задача. Затем наступает момент истины ... пора представить свои прогнозы в Kaggle и посмотреть, где я окажусь во всех важных списках лидеров ...

Отбросив в сторону чувство неадекватности и надвигающейся неудачи, я отправил файл с прогнозами и подождал несколько секунд, пока сервер определит мою судьбу… Правильно на 76,07%!

«Неплохо, - подумал я.

Затем появилась таблица лидеров .. 6231-е из 8300. Ох. Баггер.

Мастеринг

За этим последовал в основном бесполезный процесс переделки моей модели и повторной отправки, чтобы посмотреть, смогу ли я улучшить свой результат. С четвертой попыткой ситуация немного улучшилась, когда я набрал еще 1,7%, чего было достаточно, чтобы поднять меня до нижних 4000. Далеко не впечатляюще, но, по крайней мере, на правой стороне среднего. Маленькие победы ..

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

Последние мысли

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

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

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

Блокнот здесь, если вам интересно - https://www.kaggle.com/adambarnes/titanic-first-random-forest/notebook