KAGGLE COM НА РУССКОМ

KAGGLE COM НА РУССКОМ Edu.Vsu.Ru

Специализация в Data Science подразумевает коллективную работу над проектами. Для этого необходимы навыки коммуникации и решения реальных задач. Один из лучших способов их развить – участие в соревнованиях. Оно позволяет не только обновить портфолио и попробовать себя в различных областях науки о данных, но и научиться эффективно взаимодействовать с другими специалистами.

это платформа, на которой собраны соревнования, курсы, базы данных, туториалы с кодом и обсуждения для решения реальных проблем с помощью Data Science. Существует несколько типов соревнований:

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


KAGGLE COM НА РУССКОМ

С чего начать?

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

Изучите данные

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

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

Присоединитесь к сообществу

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

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

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

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

Отправьте результаты

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

Как продолжить

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

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

Обзор последних соревнований


KAGGLE COM НА РУССКОМ

SIIM-FISABIO-RSNA COVID-19 Detection

Дедлайн для регистрации команд: 2 августа 2021 г.

Дата окончания: 9 августа 2021 г.

Призы: 1 место – $30,000, 2 место – $20,000, 3 место – $10,000, специальный приз для студенческой команды.

В этом соревновании вам предстоит выявить и локализовать аномалии COVID-19 на рентгенограммах грудной клетки. Цель классифицировать рентгенограммы как отрицательные для пневмонии или типичные, неопределенные или атипичные для COVID-19.

CommonLit Readability Prize

Дедлайн для регистрации команд: 26 июля 2021 г.

Дата окончания: 2 августа 2021 г.

Призы: 1 место – $20,000, 2 место – $15,000, 3 место – $10,000.

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

Google Smartphone Decimeter Challenge

Дедлайн для регистрации команд: 28 июля 2021 г.

Дата окончания: 4 августа 2021 г.

Призы: 1 место – $5,000, 2 место – $3,000, 3 место – $2,000.

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

Дедлайн для регистрации команд: 21 июля 2021 г.

Дата окончания: 28 июля 2021 г.

Призы: 1 место – $6,000, 2 место – $5,000, 3 место – $4,000.

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

Hungry Geese

Дата окончания: 26 июля 2021 г.

Призы: мерч Kaggle (футболки, кружки и т. д.) достанется лучшей команде в ежемесячной таблице лидеров.

Хочу подтянуть знания по математике, но не знаю, с чего начать. Что делать?

Если базовые концепции языка программирования можно достаточно быстро освоить самостоятельно, то с математикой могут возникнуть сложности. Чтобы помочь освоить математический инструментарий, «Библиотека программиста» совместно с преподавателями ВМК МГУ разработала курс по математике для Data Science, на котором вы:

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


KAGGLE COM НА РУССКОМ

*фарм — (от англ. farming) — долгое и занудное повторение определенных игровых действий с определенной целью (получение опыта, добыча ресурсов и др.).

Введение

Несколько слов про курс от его создателей:

В рамках курса проходят два соревнования Kaggle Inclass. Оба очень интересные, в них неплохо работает построение признаков. Первое — идентификация пользователя по последовательности посещенных сайтов. Второе — предсказание популярности статьи на Медиуме. Главная польза — от двух домашних заданий, где надо проявить смекалку и побить бейзлайны в этих соревнованиях.

Вспоминаю себя полтора года назад, пройден курс (еще первая версия) от Andrew Ng, закончена специализация от МФТИ, прочитана гора книг — теоретических знаний полна головушка, но при попытке решить любую базовую боевую задачу — возникает ступор. Нет, как решать задачу — понятно, какие алгоритмы применять — тоже понятно, но вот код пишется очень тяжело, с поминутным заходом на хелп sklearn / pandas, и т.д. Почему так — нет наработанных пайплайнов и ощущения кода «на кончиках пальцев».

Так дело не пойдет, подумал автор, и ушел на Kaggle. Сразу с боевого соревнования начинать было страшно, и первой ласточкой стало Getting started соревнование «House Prices: Advanced Regression Techniques», на котором и оформился тот подход к эффективной прокачке, который описан в этой статье.

В том, что будет описано дальше, нет никакого know-how, все техники, методы и приемы — очевидны и предсказуемы, но это не умаляет их эффективности. По крайней мере, следуя им, автору удалось взять плашку Kaggle Competition Master за полгода и три соревнования в соло режиме и, на момент написания данной статьи, входить в top-200 мирового рейтинга Kaggle. Кстати, это отвечает на вопрос, почему автор вообще позволил себе смелость написать статью такого рода.

В двух словах что вообще такое Kaggle


KAGGLE COM НА РУССКОМ

Kaggle — одна из наиболее известных платформ для проведения соревнований по Data Science, В каждом соревновании организаторы выкладывают описание задачи, данные для решения этой задачи, метрику, по которой будет оцениваться решение — и устанавливают сроки и призы. Участникам дается от 3 до 5 попыток (по воле организаторов) в день на «сабмит» (посылку своего варианта решения).

Данные делятся на тренировочную выборку (train) и тестовую (test). Для тренировочной части известно значение целевой переменной (target), для тестовой — нет. Задача участников создать модель, которая, будучи обучена на тренировочной части данных выдаст максимальный результат на тестовой.

Каждый участник делает предсказания для тестовой выборки — и отсылает результат на Kaggle, далее робот (которому известна целевая переменная для теста) оценивает присланный результат, который отображается на лидерборде.

Но не все так просто — тестовые данные, в свою очередь, делятся в определенной пропорции на публичную (public) и приватную (private) часть. В течение соревнования присланное решение оценивается, согласно установленной организаторами метрике, на публичной части данных и выкладывается на лидерборд (т.н. паблик лидерборд) — по которому участники могут оценивать качество своих моделей. Окончательное решение (обычно два — по выбору участника) оценивается на приватной части тестовых данных — и результат попадает на приватный лидерборд, который доступен только после окончания соревнования и по которому, собственно, и оцениваются финальные результаты, раздаются призы, плюшки, и медальки.

Таким образом, в течение соревнования участникам доступна только информация как их модель повела себя (какой результат — или скор она показала) на публичной части тестовых данных. Если, в случае сферического коня в вакууме, приватная часть данных совпадает по распределению и статистикам с публичной — все прекрасно, если же нет — то модель, которая показала себя хорошо на паблике может не сработать на приватной части, то есть заоверфититься (переобучиться). И вот тут-то возникает то, что на жаргоне называется «полетом», когда люди с 10 места на паблике улетают вниз на 1000-2000 мест на приватной части из-за того, что выбранная ими модель переобучилась и не смогла выдать необходимую точность на новых данных.


KAGGLE COM НА РУССКОМ

Как этого избежать? Для этого, в первую очередь, необходимо построить правильную схему валидации, то, чему учат на первых уроках практически на всех курсах по DS. Т.к. если ваша модель не может выдать правильный прогноз на данных, которых она никогда не видела — то какую бы навороченную технику вы бы не применяли, сколь сложные нейронные сети не строили — в продакшен такую модель выпускать нельзя, т.к. ее результаты ничего не стоят.

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

Форум он и на Kaggle форум, народ пишет, обсуждает и делится идеями. А вот кернелы — это уже интереснее. По сути, это возможность запускать свой код, который имеет непосредственный доступ к данным соревнования в облаке Kaggle (аналог амазоновского AWS, гугловского GCE, и т.д.) На каждый кернел выделяются ограниченные ресурсы, поэтому если данных не очень много, то работать с ними вы можете прямо из браузера на сайте Kaggle — пишете код, запускаете на выполнение, сабмитите результат. Два года назад Kaggle был приобретен компанией Google, так что неудивительно, что «под капотом» данный функционал использует Google Cloud Engine.

Пользуясь случаем еще раз хочу сказать Спасибо коллегам из ods.ai — Артуру Степаненко (arthur), Константину Лопухину (kostia), Сергею Фиронову (sergeif) за советы и поддержку в этом соревновании. Вообще было много интересных моментов, Константин Лопухин (kostia), взявший первое место вместе с Paweł Jankiewicz, потом выложил то, что в чатике назвали «эталонное унижение в 75 строк» — кернел в 75 строк кода, выдающий результат в золотую зону лидерборда. Это, конечно, надо видеть 🙂

Ладно, отвлеклись, так вот — народ пишет код и выкладывает кернелы с решениями, интересными идеями и прочим. Обычно в каждом соревновании через пару недель появляется один-два прекрасных EDA (exploratory data analysis) кернела, с подробнейшим описанием датасета, статистик, характеристик и т.д. И парочка бейзлайнов (базовых решений), которые, конечно, показывают не самый лучший результат на лидерборде, но их можно использовать в качестве отправной точки для создания своего решения.

Почему Kaggle?


KAGGLE COM НА РУССКОМ

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

Небольшое отступление вообще на тему соревновательного DS. Очень часто, в статьях, разговорах и прочем общении звучит мысль, что это все туфта, к реальным задачам опыт в соревнованиях не имеет никакого отношения, и народ там занимается тем, что тюнит 5-й знак после запятой, что есть маразм и оторвано от реальности. Давайте разберемся в этом вопросе немного подробнее:

Как практикующие DS-специалисты, в отличие от академии и науки, мы, в нашей работе, должны и будем решать задачи бизнеса. То есть (тут отсылка к CRISP-DM) для решения поставленной задачи необходимо:

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

Что можно «фармить» на Kaggle


KAGGLE COM НА РУССКОМ

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

Главное, что надо помнить — эти три цели абсолютно разные, для их достижения требуются разные подходы, и не надо их смешивать особенно на начальном этапе!

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

Пройдемся кратко по целям снизу вверх:

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

Рекомендую первой целью выбрать «опыт» и придерживаться его до момента, когда вы почувствуете, что готовы работать над двумя/тремя целями одновременно.

Есть еще два момента, которые стоит упомянуть (Владимир Игловиков (ternaus) — спасибо за напоминание).

Первое — это конвертация усилий, вложенных в Kaggle в новое, более интересное и/или высокооплачиваемое место работы. Как бы ни были нивелированы сейчас плашки Kaggle, но для понимающих людей строчка в резюме «Kaggle Competition Master», да и другие ачивки все-таки чего-то да стоят.

В качестве иллюстрации этого момента можно привести два интервью (раз, два) с нашими коллегами Сергеем Мушинским (cepera_ang) и Александром Буслаевым (albu)

А также мнение Валерия Бабушкина (venheads):

Валерий Бабушкин — Head of Data Science в X5 Retail Group (текущая численность подразделения 30 человек + 20 вакансий с 2019 года)

Руководитель группы аналитики Яндекс Советника

Kaggle Competition Master является отличной прокси метрикой для оценки будущего участника команды. Конечно в связи с последними событиями в виде команд по 30 человек и неприкрытых паровозов требуется чуть более тщательное изучение профиля чем раньше, но это все равно дело нескольких минут. Человек, добившийся звания мастера, с большой долей вероятности умеет писать как минимум среднего качества код, сносно разбирается в машинном обучении, умеет чистить данные и строить стабильные решения. Если лычкой мастера еще нельзя похвастаться, то сам факт участия это тоже плюс, как минимум кандидат знает про существования Кагла и не поленился и потратил время на его освоение. А если было запущено что-то кроме публичного кернела и полученное решение превзошло его результаты (что довольно легко проверить), то это повод для детальной беседы по поводу технических деталей, что гораздо лучше и интереснее, чем классические вопросы по теории, ответы на которые дают меньше понимания как человек будет в будущем справляться с работой. Единственная чего следует опасаться и с чем я сталкивался, что некоторые люди думают что работа DS это примерно как Кагл, что в корне не верно. Еще многие думают что DS = ML, что тоже является ошибкой

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

Для примера список работ наших коллег по итогам нескольких соревнований

Авторы (в алфавитном порядке):

Andrei O., Ilya, albu, aleksart, alex.radionov, almln, alxndrkalinin, cepera_ang, dautovri, davydov, fartuk, golovanov, ikibardin, kes, mpavlov, mvakhrushev, n01z3, rakhlin, rauf, resolut, scitator, selim_sef, shvetsiya, snikolenko, ternaus, twoleggedeye, versus, vicident, zfturbo

Как избежать боли от потери медали

Поясню. Практически в каждом соревновании ближе к его окончанию на паблик выкладывается кернел с решением, которое сдвигает весь лидерборд вверх, ну а вас, с вашим решением, соответственно вниз. И каждый раз на форуме начинается БОЛЬ! Как же так, вот у меня было решение на серебро, а теперь я даже на бронзу не тяну. Что за дела, верните все взад.

Помните — Kaggle — соревновательный DS. В том, на каком месте лидерборда вы находитесь — зависит только от вас. Не от того парня, что выложил кернел, не от того сошлись звезды или нет, а только от того сколько усилий вы приложили к решению и все ли возможные пути к его улучшению вы использовали.

Если паблик кернел сбивает вас с вашего места на лидерборде — это не ваше место.

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

Тем более, что этот момент будет присутствовать только на ранней стадии вашего соревновательного процесса. Чем опытнее вы станете — тем меньше на вас будут оказывать влияние выложенные кернелы и звезды. В одном из последних соревнований (Talking Data, в котором наша команда заняла 8-е место) тоже выложили такой кернел, но он удостоился всего одной строчки в нашем командном чате от Павла Плескова (ppleskov): «Парни, я заблендил его с нашим решением, стало только хуже — выбрасываем». То есть весь полезный сигнал, который вытаскивал из данных этот кернел был уже вытащен нашими моделями.

И еще насчет медалей — помните:

«пояс без техники нужен только для поддержания штанов»(С)

Где, на чем и как писать код.


KAGGLE COM НА РУССКОМ

Тут моя рекомендация — python 3.6 на jupyter notebook под ubuntu. Python уже давно стал стандартом де-факто в DS, учитывая наличие огромного количества библиотек и коммьюнити, jupyter, особенно с наличием jupyter_contrib_nbextensions очень удобен для быстрого прототипирования, анализа и обработки данных, ubuntu — удобна сама по себе, плюс часть обработки данных иногда проще делать в bash 🙂

После установки jupyter_contrib_nbextensions сразу рекомендую включить:

И ваша жизнь станет намного проще и приятней.

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

Есть прямо противоположный подход, когда участники стараются использовать jupyter notebook как можно реже и только в случае необходимости, предпочитая, сразу писать пайплайны скриптами. (адептом такого варианта является, например, (Владимир Игловиков (ternaus))

И есть те, кто пытается совместить jupyter с какой-либо IDE, например pycharm.

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

Но при любом варианте возьмите за правило

сохранять код для каждого сделанного сабмита/OOF (см.ниже).

(*) OOF — out of folds, техника получения предсказаний модели для тренировочной части датасета используя кросс-валидацию. Незаменима для дальнейшей сборки нескольких решений в ансамбль. Преподается опять же на курсах или легко гуглится.

Как? Ну тут есть как минимум три варианта:

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


KAGGLE COM НА РУССКОМ

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

Итак, переходим к фреймворку


KAGGLE COM НА РУССКОМ

Примечание

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

В общем если хотите начинать с картинок — то вам нужны другие фреймворки и другие руководства.

Основная цель

Ваша задача написать пайплайны (оформленные в виде jupyter notebooks + модули) для следующих задач:

В кернелах обычно все эти задачи собраны в единый код, что и понятно, но очень рекомендую для каждой из этих подзадач завести отдельный ноутбук и отдельный модуль (набор модулей). Так вам потом будет проще.

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

Данные передаются между модулями либо в виде CSV, либо feather/pickle/hdf — что вам удобнее и к чему вы привыкли или лежит душа.

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

В остальных случаях — основные данные хранятся в hdf/feather, что-то маленькое (типа набора выбранных атрибутов) — в CSV. Повторюсь — шаблонов нет, кто к чему привык, с тем и работайте.

Начальный этап

Идем в любое Getting started соревнование (как уже упоминалось, автор начинал с House Prices: Advanced Regression Techniques), и начинаем создавать наши ноутбуки. Читаем паблик кернелы, копируем куски кода, процедуры, подходы, и т.д. и т.п. Прогоняем данные через пайплайн, сабмитим — смотрим на результат, улучшаем и так по кругу.

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

Примерный список того, что должно быть уже готовым и работающим на 100% перед переходом к следующему этапу:

Идем в бой


KAGGLE COM НА РУССКОМ

Пока нет рабочей валидационной схемы — дальше не идем!!!

Помним — наша цель на данном этапе — получить опыт! Наполнить наши пайплайны рабочими подходами и методами, заполнить наши модули работающим кодом. Не заморачиваемся на медалях — вернее как, здорово, если получится сразу занять свое место на лидерборде, но если нет — не паримся. Мы пришли сюда не на пять минут, медали и плашки никуда не уйдут.

Вот соревнование закончено, вы где-то там, казалось бы все — хватаемся за следующее?

Что вы делаете дальше:

И тут начинается ваш персональный АД!

И самое страшное:

И вот только после этого переходим к следующему соревнованию.

Нет, я не охренел. Да, можно и проще. Вам решать.

Почему ждать 5 дней, а не читать сразу, ведь на форуме можно позадавать вопросы? На данном этапе (на мой взгляд) лучше читать уже сформированные треды с обсуждениями решений, вопросы, которые у вас могут возникнуть — либо кто-то уже задаст, либо их лучше пока вообще не задавать, а искать ответ самим )

Зачем все это делать именно так? Ну, еще раз — задача данного этапа наработать базу решений, методов и подходов. Боевую рабочую базу. Чтобы в следующем соревновании вы не тратили время, а сразу сказали — ага, тут может зайти mean target encoding, и кстати, у меня и правильный код для этого через фолды в фолдах есть. Или о! помнится тогда заходил ансамбль через scipy.optimize, а кстати у меня и код уже готов.

Выходим на рабочий режим


KAGGLE COM НА РУССКОМ

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

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

Что примерно должно быть в пайплайнах к концу данного этапа:

Автор сделал метаклассы отдельно для линейных и tree-based моделей, с единым внешним интерфейсом, чтобы нивелировать различия в API у разных моделей. Зато теперь можно в едином ключе одной строчкой запускать, например, LGB или XGB над одним обработанным набором данных.

Подытожим

Любой спорт, а соревновательный DS — это тоже спорт, это много-много пота и много-много работы. Это не хорошо и не плохо, это факт. Участие в соревнованиях (если грамотно подойти к процессу) очень хорошо прокачивает технические скиллы, плюс более-менее качает спортивный дух, когда очень не хочется что-то делать, прямо ломает всего — но встаешь к ноутбуку, переделываешь модель, запускаешь на обсчет, чтобы таки выгрызть этот несчастный 5-й знак после запятой.

Так что решайте Kaggle — фармите опыт, медали и фан!

Пара слов про пайплайны автора


KAGGLE COM НА РУССКОМ

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

def do_cat_dummy(data, attrs, prefix_sep=’_ohe_’, params=None):
# do something
return _data, new_attrs

На вход передаем датасет, атрибуты для работы, префикс для новых атрибутов и дополнительные параметры. На выходе получаем новый датасет с новыми атрибутами и список этих атрибутов. Далее это новый датасет сохраняется в отдельный pickle/feather.

Что это дает — мы получаем возможность быстро собрать датасет для обучения из предсгенеренных кубиков. Например для категорий делаем сразу три обработки — Label Encoding / OHE / Frequency, сохраняем в три отдельных feather, и далее на этапе моделирования просто играемся этими блоками, одним элегантным движением создавая различные датасеты для обучения.

Если надо собрать другой датасет — меняем pickle_list, перезагружаем, и работаем с новым датасетом.

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

def do_cat_le(data, attrs, params=None, prefix=’le_’):
def do_cat_dummy(data, attrs, prefix_sep=’_ohe_’, params=None):
def do_cat_cnt(data, attrs, params=None, prefix=’cnt_’):
def do_cat_fact(data, attrs, params=None, prefix=’bin_’):
def do_cat_comb(data, attrs_op, params=None, prefix=’cat_’):
def do_proj_num_2cat(data, attrs_op, params=None, prefix=’prj_’):

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

def do_iter_num(data, attrs_op, params=None, prefix=’comb_’):

Плюс разные дополнительные специфические преобразователи.

Для обработки текстовых данных используется отдельный модуль, включающий в себя различные методы препроцессинга, токенизации, лемматизирования/стемминга, перевода в частотную таблицу, ну и т.д. и т.п. Все стандартно, используя sklearn, nltk и keras.

Временные ряды обрабатываются также отдельным модулем, с функциями преобразования исходного датасета как для обычных задач (регрессии/классификации), так и для sequence-to-sequence. Спасибо François Chollet, что допилил таки keras, чтобы построение моделей seq-2-seq не походило на вудуистский ритуал вызова демонов.

То есть для работы с LGB мы создаем модель

model_to_use = ‘lgb’
model = KudsonLGB(task=’classification’)

model_to_use = ‘xgb’
metric_name= ‘auc’
task=’classification’

model = KudsonXGB(task=task, metric_name=metric_name)

И все функции далее оперируют с model.

Данный пайплайн был в очередной раз протестирован в недавнем соревновании от Home Credit, внимательное и аккуратное применение всех блоков и модулей принесло 94-е место и серебро.

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

Про командную работу


KAGGLE COM НА РУССКОМ

Тут не все так однозначно, решать Kaggle в команде или соло — во многом зависит от человека (и от команды), но мой совет для тех, кто только начинает — попробуйте начать соло. Почему? Попробую объяснить свою точку зрения:

Полезные советы от капитана очевидность и обещанная карта грабель


KAGGLE COM НА РУССКОМ

Приведенные советы отражают опыт автора, не являются догмой, и могут (и должны) проверяться собственными экспериментами

Ну и напоследок:

Полезные ссылки

http://ods.ai/ — для тех, кто хочет присоединиться к лучшему DS коммьюнити 🙂
https://mlcourse.ai/ — сайт курса ods.ai
https://www. Kaggle.com/general/68205 — пост про курс на Kaggle

В целом еще очень рекомендую в том же режиме, что описан в статье, просмотреть цикл видео mltrainings — много интересных подходов и техник.

Видео

Более подробно методы и подходы к решению задач на Kaggle можно узнать из второго курса специализации, «How to Win a Data Science Competition: Learn from Top Kagglers»

Оцените статью