Kaggle для начинающего дата-сайентиста: соревноваться нельзя учиться
Мало нам питона и матана — есть ещё, оказывается, и какой-то Каггл. Разбираемся, что это и зачем нужно
скриншот из игры until down / supermassive games
Kaggle — популярная платформа для соревнований по Data Science от Google. Пользователи (люди и организации) могут публиковать на ней свои наборы данных, создавать и исследовать модели машинного обучения, соревноваться друг с другом.
Типичная схема Kaggle-соревнования: организатор конкурса (как правило, крупная компания) публикует свои данные и описание проблемы, сроки, критерии правильного решения и приз, который получит победитель. А участники пробуют применить к данным разные методы, модели и алгоритмы, чтобы решить проблему.
Автор лучшего решения получает приз. Остальные участники — баллы в зависимости от места в таблице с результатами. Из этих баллов складывается общий рейтинг на платформе. Денег за рейтинг никто не даст, зато в резюме он может смотреться красиво. Оценка работ прозрачна: платформа автоматически проверяет решения по критериям, выставленным компанией-организатором.
Формат участия в соревновании зависит от условий, которые задаёт автор проблемы. Обычно разрешают участвовать и сольно, и командой — у каждого способа есть свои преимущества.
В Kaggle всё очень непросто:
Кажется, шансов у новичка — ноль. Так зачем же соревноваться тому, кто только начал изучать науку о данных?
К тому же очищенные, подготовленные и хорошо документированные Kaggle-датасеты не имеют ничего общего с задачами и данными, над которыми ежедневно работают дата-сайентисты.
С некоторых пор утверждает, что он data scientist. В предыдущих сезонах выдавал себя за математика, звукорежиссёра, радиоведущего, переводчика, писателя. Кандидат наук, но не точных. Бесстрашно пишет о Data Science и программировании на Python.
Чем полезен Kaggle
Хотя вам вряд ли достанется приз, а задачи сильно отличаются от «промышленного» Data Science, соревнования — это отличный инструмент обучения. Многие вообще считают Kaggle лучшим способом изучить науку о данных.
Чтобы обучение проходило эффективно, нужно понимать особенности платформы:
На Kaggle вы исследуете продвинутые алгоритмы, фреймворки, библиотеки и прокачаете soft skills — упорство, настойчивость и умение работать в команде. Наконец, попробуете решить важные для всего человечества проблемы. Сплошные плюсы.
OK, Kaggle! Как начать?
Выберите язык программирования. Самые популярные языки в Data Science и Kaggle-сообществе — Python и R. Если вы начинаете с нуля, то выберите Python, это универсальный язык, он поможет в решении самых разных задач. Для начала можно прочитать нашу статью про Python-минимум для дата-сайентиста.
Изучите основы Data Analysis. А конкретно — так называемый исследовательский (разведочный) анализ данных. Пригодятся навыки загружать и визуализировать данные, свободно в них ориентироваться. Все необходимые инструменты есть в Python-библиотеках Pandas и Seaborn. А потренироваться в преобразовании данных из таблицы Excel в формат датафреймов Pandas можно с помощью нашей статьи.
Попробуйте обучить свою первую модель на несложном датасете. Например, модель Random Forest из библиотеки scikit-learn — у нас есть об этом хорошая статья. Так вы познакомитесь с основными инструментами машинного обучения, привыкнете делить датасет на обучающую и тестовую части, узнаете про кросс-валидацию и метрики работы модели.
Поучаствуйте в соревнованиях начального уровня. На Kaggle их можно найти в категории Getting Started. В таких соревнованиях нет призового фонда и ограничений по датам, но по структуре они аналогичны Kaggle-соревнованиям с призами. А ещё по ним написано множество подробных руководств — это бесценно для начинающего дата-сайентиста.
Не бойтесь трудностей и стремитесь к знаниям. Пора приступать к настоящим соревнованиям — они потребуют существенно больше времени и усилий. Поэтому выбирайте с умом: в выполнении задания должны быть задействованы интересные и нужные вам методы и технологии.
Призы — это здорово, но гораздо ценнее и надёжнее те знания и навыки, которые двинут вперёд вашу карьеру дата-сайентиста.
Сверяйтесь со своими планами. Современный Data Science практически необъятен, поэтому выбирайте состязания, релевантные вашим устремлениям. Например, если вы планируете стать специалистом по компьютерному зрению, то соревнования по обработке естественного языка скорее отвлекут вас, чем принесут пользу.
Kaggle и «настоящий» Data Science
Посмотрим, чем соревнования отличаются от ежедневных задач дата-сайентиста.
| Соревнования Kaggle | Реальный Data Science | |
|---|---|---|
| Задачи | Всегда трудные | Могут быть лёгкими |
| Решения | Должны быть новыми | Могут быть известными |
| Эффективность | Только относительная | Может быть абсолютной |
| Данные | Подготовленные | Придётся наводить порядок и чистить |
Задачи. Компании выкладывают на Kaggle самые сложные и запутанные проблемы, которые не решить за один день. В реальном Data Science они могут быть простыми, да и бизнес диктует требование выбирать более лёгкие задачи с быстрым результатом.
Решения. На Kaggle решения должны быть новыми: для победы, как правило, проводят дополнительное исследование, серьёзно улучшают алгоритм, разрабатывают продвинутую модель.
На практике в Data Science для большинства задач (исследовательский анализ, очистка данных, A/B-тестирование, классические алгоритмы) уже есть проверенные решения и фреймворки. Каждый раз выдумывать что-то сложное и новое не требуется.
Эффективность. В Kaggle достаточно опередить только своих соперников. В жизни приходится побеждать всех — включая самого себя и своё предыдущее решение.
В Kaggle главное — выполнить формальные требования и обойти всех по заданному критерию. А в реальном Data Science важнее себестоимость и бизнес-результат.
Данные. Датасеты на соревнованиях Kaggle очищены и готовы для работы: удобный формат, ясное описание, логичная структура. Именно на подготовку уходит до 80% рабочего времени обычного дата-сайентиста.
Советы опытных кагглеров
Вот семь советов для тех, кто хочет получить максимум пользы от соревнований на Kaggle:
Совет 1: достигайте целей постепенно.
В каждый момент времени следующая цель должна быть одновременно и достаточно трудной, и достижимой. Например:
Такая стратегия позволит измерить свой прогресс и сохранить высокую мотивацию.
Совет 2: исследуйте самые популярные решения.
Одна из важных фишек Kaggle — участники могут публиковать краткое описание своего решения, так называемое kernel («ядро»). Изучение чужих решений может натолкнуть на новые идеи.
Совет 3: спрашивайте участников на форумах.
Не бойтесь задавать «глупые» вопросы. В конце концов, ничего страшного не случится. Максимум, что вам грозит, — тишина в ответ. Но, скорее всего, вы получите советы и поддержку опытных дата-сайентистов.
Совет 4: работайте сольно — так эффективнее прокачивать ключевые навыки.
В начале пути лучше работать одному — это поможет внимательнее относиться к ключевым задачам, включая исследовательский анализ, очистку данных, разработку признаков и обучение модели.
Совет 5: работайте в команде, чтобы расширить свои возможности.
Работа в команде — отличный способ учиться у опытных дата-сайентистов. Найти «сообщников» можно в чатах, комьюнити и пабликах, посвящённых Data Science, среди одногруппников по курсам или прямо на форумах Kaggle. Нетворкинг — это сила.
А когда вы отточите общие навыки машинного обучения, будет важно поучиться у экспертов в конкретной отрасли — это увеличит вашу ценность.
Совет 6: помните, что Kaggle — это только этап.
Вы не обязаны провести всю жизнь, соревнуясь с другими кагглерами. И если вы вдруг поймёте, что Kaggle вам «не зашёл», — не проблема. Для многих платформа стала всего лишь первой ступенью перед запуском собственного проекта или трудоустройством.
Совет 7: не переживайте из-за низкого рейтинга.
Порой новички слишком сильно беспокоятся из-за рейтинга в своём профиле. Боязнь конкуренции — серьёзная проблема не только для Kaggle, она часто мешает и в обычной жизни. А если вам всё-таки стыдно показывать низкий рейтинг на платформе — заведите тайный учебный аккаунт kisulya666 и тренируйтесь в нём. Со временем можно переключиться на основной аккаунт gromoverzhec777 и начать охоту за трофеями и рейтингом.
Заключение
Обучение на практике — один из лучших методов освоить любую отрасль знаний. А Kaggle — это в первую очередь прекрасная возможность попрактиковаться в решении задач, и лишь во вторую — денежные призы.
На нашем курсе «Профессия Data Scientist» вы найдёте не только команду для участия в Kaggle-соревнованиях, но и поддержку опытных наставников, и помощь в трудоустройстве.
Кассава, или маниок, — распространённое в Африке и Южной Америке сельскохозяйственное растение.
📊 Kaggle за 30 минут: практическое руководство для начинающих
Alex Maszański
Как начать?
Прежде чем начать покорение Kaggle, необходимо зарегистрироваться на сайте. Переходим по ссылке и нажимаем кнопку Register. У вас будет два варианта: зарегистрироваться через аккаунт Google или по адресу электронной почты. Получаем подтверждение на почту, логинимся – готово, теперь вы в Kaggle сообществе.
Следующий уровень – Участник (Contributor). Достичь его можно несколькими простыми действиями:
Ниже вы найдете подробное руководство о том, как совершить эти действия и получить значок Contributor.
Что есть на Kaggle?
Ниже панели поиска находятся теги, по которым вы можете отобрать «нотбуки», которые вас интересуют.
Стрелочка под названием – это тот самый Upvote, по количеству которых определяется релевантность. Рекомендую выбрать интересующий вас notebook, лайкнуть его, прокомментировать и нажать кнопку Copy and Edit. Таким образом вы сохраните его у себя в профиле (аналог форка на GitHub), сможете запустить ячейки внутри него и получить описанную выше плашку Kaggle Contributor.
Как принять участие в соревновании Kaggle?
Найдите приемлемое для вас соревнование. Потом нажмите Join Competition и согласитесь с условиями.
Итак, вы разобрались с интерфейсом. Классическая цель соревнования выглядит так: на основе имеющихся данных вам необходимо выбить лучший показатель метрики.
Чтобы составить решение прямо на сайте, вам нужно:
Теперь ваше решение появилось в турнирной таблице.
Самые простые соревнования для начинающих.
Почему стоит участвовать в соревнованиях Kaggle?
Если вы еще не пробовали Kaggle, самое время начать. Соревнования помогут вам научиться решать реальные задачи из области Data Science и выбрать одно из ее многочисленных направлений. В режиме непрерывной практики за неделю вы узнаете больше, чем за 3 месяца изучения теории. Более того, медали с соревнований будут плюсом при трудоустройстве: работодатели обязательно обратят внимание на ваш практический опыт. В следующей статье мы разберемся с одним из самых базовых соревнований Kaggle – House Prices.
Если вы только начинаете путь в профессию и еще не определились со специализацией, подумайте о применении методов науки о данных в медицинской отрасли: сейчас это одно из самых перспективных направлений. Образовательная онлайн-платформа GeekBrains проводит набор на факультет Data Science в медицине, на котором студенты научатся с нуля решать задачи в области медицины. Обучение длится 18 месяцев, плюс 6 месяцев занимает практика по медицинской специализации. По итогам получите 15 проектов в портфолио и гарантию трудоустройства.
Как начать работу в Kaggle: руководство для новичков в Data Science
Доброго времени суток, уважаемые хабровчане! Сегодня я хотел бы поговорить о том, как не имея особого опыта в машинном обучении, можно попробовать свои силы в соревнованиях, проводимых Kaggle.
Как вам уже, наверное, известно, Kaggle – это платформа для исследователей разных уровней, где они могут опробовать свои модели анализа данных на серьезных и актуальных задачах. Суть такого ресурса – не только в возможности получить неплохой денежный приз в случае, если именно ваша модель окажется лучшей, но и в том (а, это, пожалуй, гораздо важнее), чтобы набраться опыта и стать специалистом в области анализа данных и машинного обучения. Ведь самый важный вопрос, зачастую стоящий перед такого рода специалистами – где найти реальные задачи? Здесь их достаточно.
Мы попробуем поучаствовать в обучающем соревновании, не предусматривающем каких-либо поощрений, кроме опыта.
Для этого мною была выбрана задача распознавания рукописных цифр из выборки MNIST. Немного сведений из вики. MNIST (Mixed National Institute of Standards and Technology database) является основной базой при тестировании систем распознавания образов, а также широко используемой для обучения и тестирования алгоритмов машинного обучения. Она была создана перегруппировкой образов из оригинальной базы NIST, которая являлась достаточно сложной для распознавания. Кроме этого, были выполнены определенные преобразования (образы были нормализованы и сглажены для получения градаций серого цвета).
База MNIST состоит из 60000 образов для обучения и 10000 образов для тестирования. Написано большое количество статей, посвященных задаче распознавания MNIST, например (в данном случае авторы использовали иерархическую систему из сверточных нейронных сетей).
Оригинальная выборка представлена на сайте.
На Kaggle представлена полная выборка MNIST, организованная немного по-другому. Здесь обучающая выборка включает в себя 42000 образов, а выборка тестирования – 28000. Тем не менее, по содержанию они эквивалентны. Каждый образ MNIST представлен картинкой 28Х28 пикселей с 256 градациями серого цвета. Пример нескольких неоднозначных в идентификации цифр представлен на картинке ниже.
Для создания своей модели нейронной сети для распознавания цифр воспользуемся интерпретатором Рython c установленным пакетом nolearn 0.4, а также numpy и scipy (для удовлетворения всех зависимостей).
Здесь мне очень помогла вводная статья, написанная Adrian Rosebrock в своем блоге. В ней даются вводные сведения о нейронных сетях глубокого доверия и их обучении, хотя сам автор при тестировании использует обычный многослойный персептрон архитектуры 784-300-10 без какого-либо предобучения. Так поступим и мы. Кстати, весьма подробно и на примере разных классических выборок рассматривается процесс использования пакета на страничке nolearn.
Итак, следуя указаниям, которые даются в названных выше статьях, создадим свой многослойный персептрон, обучим его на загруженных и обработанных данных, а затем проведем тестирование.
Для начала создадим свой двухслойный персептрон архитектуры 784-300-10:
Здесь требуются некоторые пояснения. Первый параметр конструктора нейронной сети – список, содержащий количество входов и нейронов в каждом слое, learn_rates – скорость обучения, learn_rate_decays – множитель, задающий изменение скорости обучения после каждой эпохи, epochs – количество эпох обучения, verbose – флаг вывода подробного отчета процесса обучения.
После выполнения этой инструкции, необходимая модель будет создана и нам останется только загрузить данные. Kaggle предоставляет нам два файла: train.csv и test.csv, содержащие соответственно выборки для обучения и тестирования. Структура файлов простая – в первой строке содержится заголовок, далее следуют данные. Для train.csv каждая строка с данными предваряется соответствующей меткой – цифрой от 0 до 9, определяющей образ. В test.csv метка отсутствует.
Следующим этапом загрузим данные в массивы, воспользовавшись пакетом для работы с csv-файлами. Не забываем произвести нормировку:
После этого обучаем нашу нейронную сеть на подготовленных данных:
Сам процесс занимает некоторое время, определяемое количеством эпох обучения, заданным при конструировании нейронной сети. На каждой эпохе обучения на экран будут выводиться (при заданном параметре verbose) значения loss и err (значение функции потерь и ошибка).
После обучения все, что нам остается сделать – загрузить данные тестирования и сохранить предсказания для каждого образа из выборки тестирования в файл с расширением csv:
Дальше загружаем полученный файл в систему тестирования (см. рисунок) и ждем.
Готово! 176 место из более чем 500 участников. Для начала вполне неплохо. Теперь полученный результат можно попытаться улучшить, например, применив собственные разработки или модифицируя и подбирая параметры в nolearn. Благо времени достаточно: соревнование по MNIST’у неоднократно продлевали и теперь оно будет проходить до 31.12.2015. Удачи и спасибо, что прочитали эту статью.
Как правильно «фармить» Kaggle

*фарм — (от англ. farming) — долгое и занудное повторение определенных игровых действий с определенной целью (получение опыта, добыча ресурсов и др.).
Введение
Недавно (1 октября) стартовала новая сессия прекрасного курса по DS/ML (очень рекомендую в качестве начального курса всем, кто хочет, как это теперь называется, «войти» в DS). И, как обычно, после окончания любого курса у выпускников возникает вопрос — а где теперь получить практический опыт, чтобы закрепить пока еще сырые теоретические знания. Если вы зададите этот вопрос на любом профильном форуме, то ответ, скорее всего, будет один — иди решай Kaggle. Kaggle — это да, но с чего начать и как наиболее эффективно использовать эту платформу для прокачки практических навыков? В данной статье автор постарается на своем опыте дать ответы на эти вопросы, а также описать расположение основных грабель на поле соревновательного DS, чтобы ускорить процесс прокачки и получать от этого фан.
Несколько слов про курс от его создателей:
Курс mlcourse.ai — одна из масштабных активностей сообщества OpenDataScience. @yorko и компания (
60 чел.) демонстрируют, что классные навыки можно получить и вне стен университета и даже абсолютно бесплатно. Основная идея курса — оптимальное сочетание теории и практики. С одной стороны, изложение основных концепций происходит не без математики, с другой стороны — куча домашних заданий, соревнования Kaggle Inclass и проекты дадут, при определенном вложении сил с вашей стороны, отличные навыки машинного обучения. Нельзя не отметить соревновательную природу курса — ведется общий рейтинг студентов, что сильно мотивирует. Также курс отличается тем, что он проходит в действительно живом сообществе.
В рамках курса проходят два соревнования Kaggle Inclass. Оба очень интересные, в них неплохо работает построение признаков. Первое — идентификация пользователя по последовательности посещенных сайтов. Второе — предсказание популярности статьи на Медиуме. Главная польза — от двух домашних заданий, где надо проявить смекалку и побить бейзлайны в этих соревнованиях.
Отдав должное курсу и его создателям, продолжаем нашу историю.
Вспоминаю себя полтора года назад, пройден курс (еще первая версия) от Andrew Ng, закончена специализация от МФТИ, прочитана гора книг — теоретических знаний полна головушка, но при попытке решить любую базовую боевую задачу — возникает ступор. Нет, как решать задачу — понятно, какие алгоритмы применять — тоже понятно, но вот код пишется очень тяжело, с поминутным заходом на хелп sklearn / pandas, и т.д. Почему так — нет наработанных пайплайнов и ощущения кода «на кончиках пальцев».
Так дело не пойдет, подумал автор, и ушел на Kaggle. Сразу с боевого соревнования начинать было страшно, и первой ласточкой стало Getting started соревнование «House Prices: Advanced Regression Techniques«, на котором и оформился тот подход к эффективной прокачке, который описан в этой статье.
В том, что будет описано дальше, нет никакого know-how, все техники, методы и приемы — очевидны и предсказуемы, но это не умаляет их эффективности. По крайней мере, следуя им, автору удалось взять плашку Kaggle Competition Master за полгода и три соревнования в соло режиме и, на момент написания данной статьи, входить в top-200 мирового рейтинга Kaggle. Кстати, это отвечает на вопрос, почему автор вообще позволил себе смелость написать статью такого рода.
В двух словах что вообще такое Kaggle
Kaggle — одна из наиболее известных платформ для проведения соревнований по Data Science, В каждом соревновании организаторы выкладывают описание задачи, данные для решения этой задачи, метрику, по которой будет оцениваться решение — и устанавливают сроки и призы. Участникам дается от 3 до 5 попыток (по воле организаторов) в день на «сабмит» (посылку своего варианта решения).
Данные делятся на тренировочную выборку (train) и тестовую (test). Для тренировочной части известно значение целевой переменной (target), для тестовой — нет. Задача участников создать модель, которая, будучи обучена на тренировочной части данных выдаст максимальный результат на тестовой.
Каждый участник делает предсказания для тестовой выборки — и отсылает результат на Kaggle, далее робот (которому известна целевая переменная для теста) оценивает присланный результат, который отображается на лидерборде.
Но не все так просто — тестовые данные, в свою очередь, делятся в определенной пропорции на публичную (public) и приватную (private) часть. В течение соревнования присланное решение оценивается, согласно установленной организаторами метрике, на публичной части данных и выкладывается на лидерборд (т.н. паблик лидерборд) — по которому участники могут оценивать качество своих моделей. Окончательное решение (обычно два — по выбору участника) оценивается на приватной части тестовых данных — и результат попадает на приватный лидерборд, который доступен только после окончания соревнования и по которому, собственно, и оцениваются финальные результаты, раздаются призы, плюшки, и медальки.
Таким образом, в течение соревнования участникам доступна только информация как их модель повела себя (какой результат — или скор она показала) на публичной части тестовых данных. Если, в случае сферического коня в вакууме, приватная часть данных совпадает по распределению и статистикам с публичной — все прекрасно, если же нет — то модель, которая показала себя хорошо на паблике может не сработать на приватной части, то есть заоверфититься (переобучиться). И вот тут-то возникает то, что на жаргоне называется «полетом», когда люди с 10 места на паблике улетают вниз на 1000-2000 мест на приватной части из-за того, что выбранная ими модель переобучилась и не смогла выдать необходимую точность на новых данных.
Как этого избежать? Для этого, в первую очередь, необходимо построить правильную схему валидации, то, чему учат на первых уроках практически на всех курсах по DS. Т.к. если ваша модель не может выдать правильный прогноз на данных, которых она никогда не видела — то какую бы навороченную технику вы бы не применяли, сколь сложные нейронные сети не строили — в продакшен такую модель выпускать нельзя, т.к. ее результаты ничего не стоят.
Для каждого соревнования на Kaggle создается своя отдельная страничка на которой есть раздел с данными, с описанием метрики — и самое для нас интересное — форум и кернелы.
Форум он и на Kaggle форум, народ пишет, обсуждает и делится идеями. А вот кернелы — это уже интереснее. По сути, это возможность запускать свой код, который имеет непосредственный доступ к данным соревнования в облаке Kaggle (аналог амазоновского AWS, гугловского GCE, и т.д.) На каждый кернел выделяются ограниченные ресурсы, поэтому если данных не очень много, то работать с ними вы можете прямо из браузера на сайте Kaggle — пишете код, запускаете на выполнение, сабмитите результат. Два года назад Kaggle был приобретен компанией Google, так что неудивительно, что «под капотом» данный функционал использует Google Cloud Engine.
Более того было несколько соревнований (недавнее — Mercari), где с данными можно было работать вообще только через кернелы. Очень интересный формат, нивелирующий разницу в железе у участников и заставляющий включить мозг на предмет оптимизации кода и подходов, так как, естественно, в кернелах было жесткое ограничение по ресурсам, на тот момент — 4 cores / 16 GB RAM / 60 minutes run-time / 1 GB scratch and output disk space. Работая над этим соревнованием, автор узнал больше об оптимизации нейронных сетей, чем из любого теоретического курса. Немного не хватило до золота, финишировал соло 23-м, но опыта и удовольствия получил изрядно…
Пользуясь случаем еще раз хочу сказать Спасибо коллегам из ods.ai — Артуру Степаненко (arthur), Константину Лопухину (kostia), Сергею Фиронову (sergeif) за советы и поддержку в этом соревновании. Вообще было много интересных моментов, Константин Лопухин (kostia), взявший первое место вместе с Paweł Jankiewicz, потом выложил то, что в чатике назвали «эталонное унижение в 75 строк» — кернел в 75 строк кода, выдающий результат в золотую зону лидерборда. Это, конечно, надо видеть 🙂
Ладно, отвлеклись, так вот — народ пишет код и выкладывает кернелы с решениями, интересными идеями и прочим. Обычно в каждом соревновании через пару недель появляется один-два прекрасных EDA (exploratory data analysis) кернела, с подробнейшим описанием датасета, статистик, характеристик и т.д. И парочка бейзлайнов (базовых решений), которые, конечно, показывают не самый лучший результат на лидерборде, но их можно использовать в качестве отправной точки для создания своего решения.
Почему Kaggle?
На самом деле без разницы на какой платформе вы будете играть, просто Kaggle — одна из первых и наиболее раскрученных, с прекрасным коммьюнити и достаточно комфортным окружением (надеюсь они доработают кернелы на предмет стабильности и производительности, а то многие помнят тот ад, что творился в Mercari) Но, в целом, платформа очень удобна и самодостаточна, да и плашки ее пока еще ценятся.
Небольшое отступление вообще на тему соревновательного DS. Очень часто, в статьях, разговорах и прочем общении звучит мысль, что это все туфта, к реальным задачам опыт в соревнованиях не имеет никакого отношения, и народ там занимается тем, что тюнит 5-й знак после запятой, что есть маразм и оторвано от реальности. Давайте разберемся в этом вопросе немного подробнее:
Как практикующие DS-специалисты, в отличие от академии и науки, мы, в нашей работе, должны и будем решать задачи бизнеса. То есть (тут отсылка к CRISP-DM) для решения поставленной задачи необходимо:
Первым четырем пунктам из этого списка не учат нигде (поправьте меня, если появились такие курсы — запишусь не раздумывая), тут только перенимать опыт коллег, работающих в этой отрасли. А вот последний пункт — начиная с выбора модели и далее, можно и нужно прокачивать в соревнованиях.
В любом соревновании большую часть работы за нас выполнили организаторы. У нас есть описанная бизнес-цель, выбрана аппроксимирующая метрика, собраны данные — и наша задача построить из всего этого лего работающий пайплайн. И вот тут-то и прокачиваются навыки — как работать с пропусками, как готовить данные для нейронных сетей и деревьев (и почему нейронные сети требуют особого подхода), как грамотно построить валидацию, как не переобучиться, как подобрать гиперпараметры, как …… да еще десятка два «как», грамотное исполнение которых и отличает хорошего спеца от проходных людей в нашей профессии.
Что можно «фармить» на Kaggle
В основном, и это разумно, все новички приходят на Kaggle, чтобы получать и прокачивать практический опыт, но не стоит забывать, что помимо этого есть еще как минимум две цели:
Главное, что надо помнить — эти три цели абсолютно разные, для их достижения требуются разные подходы, и не надо их смешивать особенно на начальном этапе!
Не зря подчеркнуто «на начальном этапе», когда вы прокачаетесь — эти три цели сольются в одну и будут решаться параллельно, но пока вы только начинаете — не смешивайте их! Этим вы избежите боли, разочарования и обиды на этот несправедливый мир.
Пройдемся кратко по целям снизу вверх:
(*) блендинг паблик кернелов — техника фарма медалей, при которой выбираются выложенные кернелы с максимальным скором на паблик лидерборде, их предсказания усредняются (блендятся), результат сабмитится. Как правило такой метод приводит к жесткому оверфиту (переобучению на трейн) и полету на прайвете, но иногда позволяет получить сабмит чуть ли не в серебро. Автор, на начальном этапе, не рекомендует подобный подход (читай ниже про пояс и штаны).
Рекомендую первой целью выбрать «опыт» и придерживаться его до момента, когда вы почувствуете, что готовы работать над двумя/тремя целями одновременно.
Есть еще два момента, которые стоит упомянуть (Владимир Игловиков (ternaus) — спасибо за напоминание).
Первое — это конвертация усилий, вложенных в Kaggle в новое, более интересное и/или высокооплачиваемое место работы. Как бы ни были нивелированы сейчас плашки Kaggle, но для понимающих людей строчка в резюме «Kaggle Competition Master», да и другие ачивки все-таки чего-то да стоят.
Валерий Бабушкин — 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
| Название соревнования | Название статьи |
| Dstl Satellite Imagery Feature Detection | Satellite imagery feature detection using deep convolutional neural network: A Kaggle competition |
| Carvana Image Masking Challenge | TernausNet: U-Net with VGG11 Encoder Pre-Trained on ImageNet for Image Segmentation |
| MICCAI2017: Gastrointestinal Image ANAlysis (GIANA) | Angiodysplasia Detection and Localization Using Deep Convolutional Neural Networks |
| MICCAI2017: Robotic Instrument Segmentation | Automatic Instrument Segmentation in Robot-Assisted Surgery Using Deep Learning |
| DEEPGLOBE — CVPR18: Road Extraction | Fully convolutional network for automatic road extraction from satellite imagery |
| DEEPGLOBE — CVPR18: Building Detection | Ternausnetv2: Fully convolutional network for instance segmentation |
| DEEPGLOBE — CVPR18: Land Cover Classification | Feature pyramid network for multi-class land segmentation |
| Pediatric Bone Age Challenge | Paediatric Bone Age Assessment Using Deep Convolutional Neural Networks |
| IEEE’s Signal Processing Society — Camera Model Identification | Camera Model Identification Using Convolutional Neural Networks |
| TensorFlow Speech Recognition Challenge | Deep Learning Approaches for Understanding Simple Speech Commands |
| ICIAR2018-Challenge | Deep Convolutional Neural Networks for Breast Cancer Histology Image Analysis |
| Diabetic Retinopathy Detection | Diabetic Retinopathy detection through integration of Deep Learning classification framework |
| DEEPGLOBE — CVPR18: Land Cover Classification | Land Cover Classification from Satellite Imagery With U-Net and Lovasz-Softmax Loss |
| DEEPGLOBE — CVPR18: Land Cover Classification | Land Cover Classification With Superpixels and Jaccard Index Post-Optimization |
| DEEPGLOBE — CVPR18: Building Detection | Building Detection from Satellite Imagery Using a Composite Loss Function |
| The Marinexplore and Cornell University Whale Detection Challenge | North Atlantic Right Whale Call Detection with Convolutional Neural Networks |
| NIPS 2017: Learning to Run | Run, skeleton, run: skeletal model in a physics-based simulation |
| NIPS 2017: Learning to Run | Learning to Run challenge solutions: Adapting reinforcement learning methods for neuromusculoskeletal environments |
| ImageNet Large Scale Visual Recognition Challenge 2013 (ILSVRC2013) | Comparison of Regularization Methods for ImageNet Classification with Deep Convolutional Neural Networks |
| MS-Celeb-1M (2017) | Doppelganger Mining for Face Representation Learning |
| Disguised Faces in the Wild (DFW) 2018 | Hard Example Mining with Auxiliary Embeddings |
| Favorita grocery sales forecasting | Sales forecasting using WaveNet within the framework of the Kaggle competition |
Как избежать боли от потери медали
Забить!
Поясню. Практически в каждом соревновании ближе к его окончанию на паблик выкладывается кернел с решением, которое сдвигает весь лидерборд вверх, ну а вас, с вашим решением, соответственно вниз. И каждый раз на форуме начинается БОЛЬ! Как же так, вот у меня было решение на серебро, а теперь я даже на бронзу не тяну. Что за дела, верните все взад.
Помните — Kaggle — соревновательный DS. В том, на каком месте лидерборда вы находитесь — зависит только от вас. Не от того парня, что выложил кернел, не от того сошлись звезды или нет, а только от того сколько усилий вы приложили к решению и все ли возможные пути к его улучшению вы использовали.
Если паблик кернел сбивает вас с вашего места на лидерборде — это не ваше место.
Вместо того, чтобы изливать боль от несправедливости мира — поблагодарите этого парня. Серьезно, паблик кернел с лучшим решением, чем ваше означает, что вы чего-то упустили в своих пайплайнах. Найдите что именно, улучшите ваш пайплайн — и обойдите всю ту толпу хомячков с одинаковым скором. Помните, чтобы вернуться на свое место вам надо просто быть чуть-чуть лучше чем этот паблик.
Как меня этот момент расстраивал в первых соревнованиях, аж руки опускались, вот ты в серебре — и вот ты в … низу лидерборда. Ничего, надо просто собраться, понять где и что ты упустил — переделать свое решение — и вернуться на место.
Тем более, что этот момент будет присутствовать только на ранней стадии вашего соревновательного процесса. Чем опытнее вы станете — тем меньше на вас будут оказывать влияние выложенные кернелы и звезды. В одном из последних соревнований (Talking Data, в котором наша команда заняла 8-е место) тоже выложили такой кернел, но он удостоился всего одной строчки в нашем командном чате от Павла Плескова (ppleskov): «Парни, я заблендил его с нашим решением, стало только хуже — выбрасываем«. То есть весь полезный сигнал, который вытаскивал из данных этот кернел был уже вытащен нашими моделями.
И еще насчет медалей — помните:
«пояс без техники нужен только для поддержания штанов»(С)
Где, на чем и как писать код.
Тут моя рекомендация — 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 их вполне хватает.
Да, еще про python для тех, кто не программист — не бойтесь его. Ваша задача понять основные структуры кода и базовую суть языка, чтобы разобраться в чужих кернелах и написать свои библиотеки. В Сети много хороших курсов для начинающих, возможно в комментариях подскажут где именно. К сожалению (или к счастью) не могу оценить качество таких курсов, поэтому ссылок в статье не привожу.
Итак, переходим к фреймворку
Примечание
Все дальнейшее описание будет основано на работе с табличными и текстовыми данными. Картинки, которых сейчас очень много на Kaggle — это отдельная тема с отдельными фреймворками. На базовом уровне хорошо уметь их обрабатывать, хотя бы для того, чтобы прогнать через что-то типа ResNet/VGG и вытащить фичи, но более глубокая и тонкая работа с ними — это отдельная и очень обширная тема, не рассматриваемая в рамках данной статьи.
Автор честно признается, что не очень умеет в картинки. Единственная попытка приобщиться к прекрасному была в соревновании Camera Identification, в котором, кстати, наши команды с тегом [ods.ai] взорвали весь лидерборд до такой степени, что админам Kaggle пришлось зайти к нам в слак в гости, убедиться, что все в рамках правил — и успокоить коммьюнити. Так вот, в этом соревновании мне досталось почетное серебро с 46-м местом, а когда прочитал описание топовых решений от наших коллег, то понял, что забраться выше и не светит — там у них применяется реально черная магия с аугментацией, добросом 300Гб данных, жертвоприношениями и прочим.
В общем если хотите начинать с картинок — то вам нужны другие фреймворки и другие руководства.
Основная цель
Ваша задача написать пайплайны (оформленные в виде jupyter notebooks + модули) для следующих задач:
В кернелах обычно все эти задачи собраны в единый код, что и понятно, но очень рекомендую для каждой из этих подзадач завести отдельный ноутбук и отдельный модуль (набор модулей). Так вам потом будет проще.
Предупреждая возможный холивар — структура данного фреймворка не истина в последней инстанции, есть много других способов структурировать свои пайплайны- это всего лишь один из них.
Данные передаются между модулями либо в виде CSV, либо feather/pickle/hdf — что вам удобнее и к чему вы привыкли или лежит душа.
На самом деле много еще зависит и от количества данных, в TalkingData, например, пришлось идти через memmap, чтобы обойти нехватку памяти при создании датасета для lgb.
В остальных случаях — основные данные хранятся в hdf/feather, что-то маленькое (типа набора выбранных атрибутов) — в CSV. Повторюсь — шаблонов нет, кто к чему привык, с тем и работайте.
Начальный этап
Идем в любое Getting started соревнование (как уже упоминалось, автор начинал с House Prices: Advanced Regression Techniques), и начинаем создавать наши ноутбуки. Читаем паблик кернелы, копируем куски кода, процедуры, подходы, и т.д. и т.п. Прогоняем данные через пайплайн, сабмитим — смотрим на результат, улучшаем и так по кругу.
Задача на данном этапе — собрать эффективно работающий пайплайн полного цикла — от загрузки и очистки данных до финального сабмита.
Примерный список того, что должно быть уже готовым и работающим на 100% перед переходом к следующему этапу:
Идем в бой
Выбираем любое понравившееся соревнование и … начинаем 🙂
Смотрим на данные, читаем форумы и строим устойчивую схему валидации. Не будет нормальной схемы — будете летать на лидерборде, как в соревнованиях от Mercedes, Santander и прочих. Посмотрите на лидерборд Mercedes, например (зеленые стрелочки и цифры означают на сколько позиций народ поднялся в лидерборде по сравнению с пабликом, красные — на сколько улетел вниз):
Также данная тема хорошо освещена в курсе How to Win a Data Science Competition: Learn from Top Kagglers»
Пока нет рабочей валидационной схемы — дальше не идем.
Помним — наша цель на данном этапе — получить опыт! Наполнить наши пайплайны рабочими подходами и методами, заполнить наши модули работающим кодом. Не заморачиваемся на медалях — вернее как, здорово, если получится сразу занять свое место на лидерборде, но если нет — не паримся. Мы пришли сюда не на пять минут, медали и плашки никуда не уйдут.
Вот соревнование закончено, вы где-то там, казалось бы все — хватаемся за следующее?
Что вы делаете дальше:
И тут начинается ваш персональный АД!
И самое страшное:
И вот только после этого переходим к следующему соревнованию.
Нет, я не охренел. Да, можно и проще. Вам решать.
Почему ждать 5 дней, а не читать сразу, ведь на форуме можно позадавать вопросы? На данном этапе (на мой взгляд) лучше читать уже сформированные треды с обсуждениями решений, вопросы, которые у вас могут возникнуть — либо кто-то уже задаст, либо их лучше пока вообще не задавать, а искать ответ самим )
Зачем все это делать именно так? Ну, еще раз — задача данного этапа наработать базу решений, методов и подходов. Боевую рабочую базу. Чтобы в следующем соревновании вы не тратили время, а сразу сказали — ага, тут может зайти mean target encoding, и кстати, у меня и правильный код для этого через фолды в фолдах есть. Или о! помнится тогда заходил ансамбль через scipy.optimize, а кстати у меня и код уже готов.
Выходим на рабочий режим
В таком режиме решаем несколько соревнований. С каждым разом замечаем, что записей на листках становится все меньше и меньше, а кода в модулях все больше и больше. Постепенно задача анализа сводится к тому, что вы просто читаете описание решения, говорите ага, ого, ах вот оно как! И добавляете в себе в копилку одно-два новых заклинания или подхода.
После этого режим меняется на режим работы над ошибками. База у вас уже готова, теперь ее просто надо правильно применять. После каждого соревнования, читая описание решений, смотрите — что вы не сделали, что можно было сделать лучше, что вы упустили, ну или где вы конкретно лажанулись, как у меня случилось в Toxic. Шел достаточно хорошо, в подбрюшье золота, а на private улетел вниз на 1500 позиций. Обидно до слез… но успокоился, нашел ошибку, написал пост в слаке — и выучил урок.
Признаком окончательного выхода на рабочий режим может служить тот факт, что одно из описаний топового решения будет написано от вашего никнейма.
Что примерно должно быть в пайплайнах к концу данного этапа:
Автор сделал метаклассы отдельно для линейных и tree-based моделей, с единым внешним интерфейсом, чтобы нивелировать различия в API у разных моделей. Зато теперь можно в едином ключе одной строчкой запускать, например, LGB или XGB над одним обработанным набором данных.
Подытожим
Любой спорт, а соревновательный DS — это тоже спорт, это много-много пота и много-много работы. Это не хорошо и не плохо, это факт. Участие в соревнованиях (если грамотно подойти к процессу) очень хорошо прокачивает технические скиллы, плюс более-менее качает спортивный дух, когда очень не хочется что-то делать, прямо ломает всего — но встаешь к ноутбуку, переделываешь модель, запускаешь на обсчет, чтобы таки выгрызть этот несчастный 5-й знак после запятой.
Так что решайте Kaggle — фармите опыт, медали и фан!
Пара слов про пайплайны автора
В этом разделе попробую описать основную идею собранных за полтора года пайплайнов и модулей. Опять же — данный подход не претендует на универсальность или уникальность, но вдруг кому поможет.
На вход передаем датасет, атрибуты для работы, префикс для новых атрибутов и дополнительные параметры. На выходе получаем новый датасет с новыми атрибутами и список этих атрибутов. Далее это новый датасет сохраняется в отдельный pickle/feather.
Что это дает — мы получаем возможность быстро собрать датасет для обучения из предсгенеренных кубиков. Например для категорий делаем сразу три обработки — Label Encoding / OHE / Frequency, сохраняем в три отдельных feather, и далее на этапе моделирования просто играемся этими блоками, одним элегантным движением создавая различные датасеты для обучения.
Основной набор функций над табличными данными (вещественными и категориальными) включает в себя различное кодирование категорий, проекцию числовых атрибутов на категориальные, а также различные трансформации.
Плюс разные дополнительные специфические преобразователи.
Для обработки текстовых данных используется отдельный модуль, включающий в себя различные методы препроцессинга, токенизации, лемматизирования/стемминга, перевода в частотную таблицу, ну и т.д. и т.п. Все стандартно, используя sklearn, nltk и keras.
Временные ряды обрабатываются также отдельным модулем, с функциями преобразования исходного датасета как для обычных задач (регрессии/классификации), так и для sequence-to-sequence. Спасибо François Chollet, что допилил таки keras, чтобы построение моделей seq-2-seq не походило на вудуистский ритуал вызова демонов.
В том же модуле, кстати, находятся и функции обычного статистического анализа рядов — проверка на стационарность, STL-декомпозиция, и т.д… Очень помогает на начальном этапе анализа, чтобы «пощупать» ряд и посмотреть что он вообще такое.
Функции, которые нельзя применить сразу ко всему датасету, а нужно использовать внутри фолдов при кросс-валидации вынесены в отдельный модуль:
Они передаются внутрь класса модели (про модели читай ниже) на этапе обучения.
То есть для работы с LGB мы создаем модель
Для валидации создано несколько функций, сразу считающих и предсказание и OOF для нескольких сидов при кросс-валидации, а также отдельная функция для обычной валидации через train_test_split. Все функции валидации оперируют методами мета-модели, что дает моделе-независимый код и облегчает подключение к пайплайну любой другой библиотеки.
Для feature selection — ничего интересного, стандартный RFE, и мои любимые shuffle permutation во всех возможных вариантах.
Для поиска гиперпараметров в основном используется Bayesian optimization, опять же в унифицированном виде для того, чтобы можно было запустить поиск для любой модели (через модуль кросс-валидации). Этот блок живет в том же ноутбуке, что и моделирование.
Для ансамблей сделано несколько функций, унифицировано для задач регрессии и классификации на базе Ridge/Logreg, LGB, Neural network и моего любимого scipy.optimize.
Небольшое пояснение — каждая модель из пайплайна выдает в качестве результата два файла: sub_xxx и oof_xxx, представляющих собой предсказание для теста и OOF предсказание для трейна. Далее в модуле ансамбля из указанной директории загружаем пары предсказаний от всех моделей в два датафрейма — df_sub / df_oof. Ну а дальше уже смотрим на корреляции, отбираем лучшие, потом строим модели 2-го уровня над df_oof и применяем к df_sub.
Иногда для поиска лучшего поднабора моделей хорошо заходит поиск генетическими алгоритмами (автор использует эту библиотеку), иногда — метод от Caruana. В простейших случаях прекрасно работают стандартные регрессии и scipy.optimize.
Нейронные сети живут в отдельном модуле, автор использует keras в функциональном стиле, да, не так гибко как pytorch, но пока хватает. Опять же написаны универсальные функции для тренировки, инвариантные к типу сети.
Данный пайплайн был в очередной раз протестирован в недавнем соревновании от Home Credit, внимательное и аккуратное применение всех блоков и модулей принесло 94-е место и серебро.
Автор вообще готов высказать крамольную мысль, что для табличных данных и нормально сделанного пайплайна финальный сабмит на любом соревновании должен влетать в топ-100 лидерборда. Естественно есть исключения, но в целом данное утверждение, похоже, что верно.
Про командную работу
Тут не все так однозначно, решать Kaggle в команде или соло — во многом зависит от человека (и от команды), но мой совет для тех, кто только начинает — попробуйте начать соло. Почему? Попробую объяснить свою точку зрения:
Полезные советы от капитана очевидность и обещанная карта грабель 🙂
Приведенные советы отражают опыт автора, не являются догмой, и могут (и должны) проверяться собственными экспериментами
Всегда начинайте с построения грамотной валидации — не будет ее, все остальные усилия улетят в топку. Еще раз посмотрите на лидерборд Mercedes.
Автор реально доволен тем, что в этом соревновании построил устойчивую схему кросс-валидации (3×10 фолдов), которая сохранила скор и принесла законное 42-е место )
Если построена грамотная валидация — всегда доверяйте результатам вашей валидации. Если скор ваших моделей улучшается на валидации, но ухудшается на паблике — разумнее доверять валидации. При анализе просто считайте тот кусок данных, на котором считается паблик лидерборд еще одним фолдом. Вы же не хотите заоверфитить вашу модель на один фолд?
Если модель и схема позволяет — всегда делайте OOF предсказания и сохраняйте рядом с моделью. На этапе ансамбля никогда не знаешь что выстрелит.
Всегда сохраняйте рядом с результатом/OOF код для их получения. Неважно на гитхаб, локально, куда угодно. Два раза у меня получалось, что в ансамбле лучшая модель та, которая была сделана две недели назад «из коробки», и для которой не сохранилось кода. Боль.
Забейте на подбор «правильного» сида для кросс-валидации, сам грешил этим сначала. Лучше выберите три любых и сделайте 3хN кросс-валидацию. Результат будет стабильнее и проще.
Не гонитесь за количеством моделей в ансамбле — лучше меньше, но разнообразнее — разнообразнее по моделям, по предобработке, по датасетам. В худшем случае — по параметрам, например одно глубокое дерево с жесткой регуляризацией, одно неглубокое.
Для отбора фич используйте shuffle / boruta / RFE, помните, что feature importance в различных tree-based моделях — это метрика в попугаях на мешок опилок.
Личное мнение автора (может и не совпадать с мнением читателя) Bayesian optimization > random search > hyperopt для подбора гиперпараметров. («>» == лучше)
Выложенный на паблик рвущий лидерборд кернел лучше обрабатывать так:
Как выбирать два финальных сабмита — по интуиции, естественно. Ну а если серьезно, то обычно все практикуют следующие подходы:
Помните — все есть цифра и возможности ее обработки зависят только от вашего воображения. Используйте классификацию вместо регрессии, рассматривайте последовательности как картинку, и т.д.
Полезные ссылки
Общие
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»
Внеклассное чтение:
Заключение
Тема Data Science в целом и соревновательный Data Science в частности, так же неисчерпаема, как и атом (С). В данной статье автор только слегка раскрыл тему прокачки практических скиллов используя соревновательные платформы. Если стало интересно — подключайтесь, осматривайтесь, копите опыт — и пишите свои статьи. Чем больше хорошего контента, тем всем нам будет лучше!
Предвосхищая вопросы — нет, пайплайны и библиотеки автора пока не выложены в свободный доступ.
Отдельная благодарность Никите Завгородному (njz) — за финальную корректуру.
Спасибо за внимание, надеюсь эта статья будет кому-нибудь полезна.




























