Как выиграть kaggle
Kaggle: три урока, извлеченных из поражения и 158 late submission
Поражение
Я зарегистрировалась на Kaggle.com в 2015 году, но даже не помнила об этом. В апреле 2019 года перешла на Python, в октябре активировала свой профиль Kaggle и выложила два алгоритма (notebook). Для затравочки, так сказать.
Вот уже 13 лет мои разработки математических моделей посвящены электроэнергетике: процессам выработки, потребления и, главное, торговле электроэнергии на оптовом рынке. Да-да, почти во всех развитых странах функционируют оптовые рынки электричества. На Kaggle почти нет соревнований, посвященных электроэнергетике. Мне удалось найти всего два:
Соревнование ASHRAE шло, люди работали. В рамках соревнования нужно было сделать долгосрочный прогноз потребления 4 видов энергии (электроэнергия, пар, холодная и горячая вода) для 1500 зданий, расположенных на 16 территориях.
После долгих раздумий я ткнула join competition. Почему долгих? Потому что я понимала (со времен соревнования Яндекса по прогнозам пробок в 2010 году), что соревнования требуют колоссальных усилий, времени и упорства. Ткнула… и обалдела! С такими массивами данных в своей сфере мне сталкиваться еще не приходилось:
-
Таблица исходных данных
20M x 16 значений
Результат вычислений столбец
Приложив, как мне тогда казалось, заметные усилия, чтобы реализовать простую регрессионную модель, мне удалось сделать 15 попыток загрузки результата и занять 2431 место из 3614 участников. Это поражение.
Точнее, мои оценки выглядят так:
- Private Score: 1.415 (2431 место из 3614)
- Public Score: 1.185 (2087 место из 3614)
Работа над ошибками
В начале января 2020 были опубликованы итоговые результаты. Победители поразили меня и своей точностью, и свой открытостью: большинство победителей опубликовали описание своих алгоритмов/моделей. Я выделила день и внимательно прочитала описания основных решений, просмотрела десяток ключевых алгоритмов и поняла: учиться нужно у победителей. Для этого требуется найти время и самостоятельно реализовать алгоритмы, о которых я прочитала. Цель: сделать 200 загрузок и попасть в 10% лучших результатов.
С января по июнь 2020 года я упорно выделяла часы, когда занималась ASHRAE. Основной рывок пришелся на май и начало июня.
На странице соревнования есть кнопка late submission, которая позволяет загружать прогнозы даже после окончания соревнований. За 5 месяцев мне удалось сделать 158 late submission и добиться результатов, входящих в
- Private Score: 1.291 (558/3614) было 1.415
- Public Score: 0.964 (269/3614) было 1.185
Разработанный фреймворк опубликован на моей git странице. Дальше продвинуться мне не удалось, поскольку в начале июня 2020 начался новый контракт и работы стало много. На сегодняшний день в моих планах задача ASHRAE отсутствует.
Урок 1: учиться нужно у лучших
Соревнование ASHRAE стало для меня издевательством над собой. Важным и полезным. После 12 лет работы в области разработки математических моделей для решения задач планирования и прогнозирования на оптовом рынке электроэнергии и мощности России я думала о себе высоко. За плечами несколько крупных успешно реализованных проектов, кандидатская диссертация в области математического моделирования, высокая зарплата, популярный блог, впечатляющая научная цитируемость и т.д. и т.п.
Соревнование ASHRAE вернуло меня с небес на землю: сотни людей, многие из которых впервые сталкиваются с задачей прогнозирования потребления энергии, не имеют и трети моих регалий, получили решение соревновательной задачи быстрее и точнее.
Пока я делала работу над ошибками, мне было тяжело, больно, хотелось бросить. Публикую кусочек из своего июньского письма моему другу профессору МГТУ им. Н.Э. Баумана А.П. Карпенко.
Предметная область моя, при этом очень большой объем данных, практически нереально все это глазами просматривать. По итогам моих работ в ноябре-декабре у моих «жиденьких» попыток был такой же «жиденький» результат. Но я не плюнула, попереживала, решила, что я доделаю свой фреймворк и получу приличные баллы. Сначала совсем ничего не получалось и ощущала себя полным нулем. Будто я ничего не знаю! Ощущение ужасное. С 12-летним опытом работы в этой области вдруг почувствовала себя дилетантом. Это был ужас! Ужас! Но я работала дальше, тяжело и противно, но дальше. Где-то после 50 загрузки у меня начинало просыпаться ощущение «получается». Это дает воздух внутри, дает надежду! В итоге я сделала 158 загрузок, стараясь в каждом своем шаге быть предельно последовательной и внимательной. По крайней мере для половины загрузок мои ожидания расходились с реальностью. Когда это случалось, опускались руки. Переживала, через час говорила себе: «Я неправильно понимала, оттого были неправильные ожидания, нужно корректировать их, учиться. Если мне так паршиво, значит, я учусь».
Талантливые ребята, опытные кагглеры, грозные команды-победители — словом, самые квалифицированные и смелые участники ASHRAE заставили меня начать с начала: почувствовать себя бестолковым первокурсником, смотреть на их работы как на методичку, думать, повторять, оценивать и добиваться приличных результатов. Это был самый отрезвляющий проект в моей профессиональной жизни.
Урок 2: data scientist должен уметь работать с множеством моделей
В рамках соревнования ASHRAE я впервые услышала о таких библиотеках, как LightGBM, CatBoost, Prophet. Про XGBoost я слышала раньше, но не имела опыта работы с этой библиотекой. Регрессию и Neural Network (Python/Keras/TensorFlow) я знала и использовала давно.
Так выглядит структура решения команды, занявшей второе место. Site обозначает территорию.
XGB: XGBoost
LGBM: LightGBM
CB: CatBoost
FFNN: Feed-forward Neural Network
Моя любимая команда, занявшая второе место, подробно описала решение: они создали около 20К моделей (да-да, 20 000 моделей!) и смешали их результаты. На Kaggle я узнала, что процесс смешивания или ансамблирования моделей называют блендинг (blending). Чтобы получить максимальный эффект от блендинга, нужны модели, с одной стороны, сопоставимого качества; с другой — обладающие важными отличиями и добавляющие разнообразия (diversity) в такую солянку. Разнообразие достигается в том числе за счет использования различных библиотек. Этим прекрасен Python: для него доступен грандиозный арсенал открытых математических библиотек. Насколько я поняла, невозможно выиграть соревнование на Kaggle без батареи точных моделей, грамотно сбленденных между собой.
Блендинг может быть организован как довольно просто и для каждой модели используют фиксированный (экспертом определенный) числовой коэффициент, так и сложно — для вычисления коэффициентов решают задачу оптимизации.
В моей работе мне редко удается сконцентрироваться надолго на одной математике и, как я называю, «жонглировать цифрами» с целью получения максимальной точности. Примерно половина моей работы состоит в понимании и описании предметной области, вторая половина в прикручивании математики к этой предметной области. Соревнования Kaggle дают возможность получить этот недостающий, но важный профессиональный опыт «жонглирования», который позволит эффективнее делать вторую половину моей работы. Теперь, кроме регрессии и Neural Network, в моем арсенале появились «wonder boostings» (LightGBM, CatBoost, XGBoost). Впечатления от работы с фейсбучным Prophet остались гадкими.
12% является прогнозом, полученным как арифметическое среднее 3-х наборов: первый набор содержит 56 моделей LightGBM, обученных по территориям; второй — 24 модели LightGBM, обученных по видам энергии; третий — 36 моделей XGBoost, обученных по территориям. Предварительная обработка (preprocessing): линейная интерполяция погодных данных, удаление постоянных значений (constant) из значений энергии для заданного списка зданий. Постобработка (postprocessing) отсутствует. Выглядит довольно просто, не так ли? Сравнив схему победителей и мои наработки, становится очевидным, каким образом мой результат следует улучшать.
Урок 3: экстенсивный опыт неизбежен
На этапе обучения различных моделей, таких как LightGBM, CatBoost, XGBoost, Neural Network, мы сталкиваемся с длинным списком гиперпараметров. Для wonder boostings мне пришлось изучать эти параметры с нуля.
Я изучала теоретическую часть деревьев StatQuest with Josh Starmer. Замечательный канал, посвященный анализу данных, всем рекомендую! В процессе работы читала описание гиперпараметра, устанавливала некое значение, думала, что понимаю, что делаю. На первом этапе результат получался плачевный: мои ожидания и реальность бежали в разных направлениях. Я корректировала свои ожидания, устанавливала новое значение гиперпараметра, снова считала. Важно при этом менять только один гиперпараметр, изменение двух и более одновременно существенно усложняет интерпретацию результата на первых порах.
В действительности я проделала прогнозов в 2-3 раза больше, чем 158. Лишь часть того, что я посчитала, я загружала для оценки на Kaggle; больше половины отметались на этапе обучения моделей. Таким образом, я вычислила 3 * 158 * 20M (обучение моделей) + 158 * 42M (прогнозирование для оценки на Kaggle) =
16B прогнозных значений.
Такой опыт расчетов, когда на практике я начинаю понимать и даже чувствовать, как тот или иной гиперпараметр влияет на результат моделирования, называю экстенсивным. Когда решала задачу оптимизации работы ТЭЦ, то был момент, когда я с утра до вечера снова и снова оптимизировала, чтобы возникло чувство доверия к модели. Аналогичный опыт у меня был с прогнозированием, когда мне приходилось в день запускать сотню расчетов и оценивать их результаты.
Модель как машина — я должна привыкнуть к расположению ручек, усилиям для вращения руля, чувствительности педалей. Когда модель становится логичным продолжением моей мысли, как рули и педали продолжением рук и ног водителя, тогда я смогу ее эффективно применить.
Для меня важно качественно и быстро делать свою работу: работаю по 4 часа в день и стараюсь выжать максимум за это время. У экстенсивного опыта, конечно, эффективность копеечная. Вот почему для меня было важно получить такой опыт «на стороне», за рамками моих текущих проектов. Мне совесть не позволяет прийти к своему заказчику (работаю контрактником) и просить его платить мне по высокой ставке, пока я тут «поиграюсь» с моделями. Поиграюсь я сама для себя, для опыта и знаний, а уже потом продам это заказчику.
Kaggle предоставляет грандиозную площадку для приобретения важного экстенсивного опыта расчетов, без которого невозможно стать квалифицированным аналитиком.
Сохраняем производительность при участии в соревнованиях Kaggle
Многие DS специалисты для прокачки своих навыков и повышения компетенций участвуют на Kaggle в различных IT соревнованиях. Однако организаторы площадки для лучшего распределения ресурсов вводят определенные лимиты на использование мощностей. Давайте поговорим о том, как максимально эффективно использовать предоставляемые ресурсы и повысить производительность во время таких соревнований.
В последнее время во всем мире значительно возросла популярность технологий искусственного интеллекта и, соответственно, количество проводимых data science – соревнований. Также растет и число участников этих соревнований. В связи с этим, для лучшего распределения имеющихся ресурсов одной из ведущих площадок по организации подобных соревнований (Kaggle) было принято решение о введении лимита на использование участниками мощностей графических процессоров (англ. graphics processing unit, GPU) – не более 30 часов в неделю. При этом, если ноутбук использует 2 графических ядра одновременно, лимит сокращается в 2 раза быстрее.
В этой статье мы постарались систематизировать подходы и советы, предлагаемые в различных источниках, помогающие сохранить производительность при участии в соревнованиях на площадке Kaggle, несмотря на введенные ограничения.
Начнем с официальных советов Kaggle по максимально эффективному использованию предоставляемых пользователям площадки графических процессоров:
- Подключайте графический процессор, только если планируете его использовать. Если ваш код не задействует возможности GPU (например, библиотеки TensorFlow, PyTorch и др.), выгоды от его подключения не будет, при этом выделенный лимит будет уменьшаться.
- Отслеживайте и управляйте использованием GPU. Kaggle имеет инструменты для мониторинга использования графического процессора, при помощи которых вы можете выявлять и отключать ненужные на текущий момент сеансы.
- Избегайте использования пакетных сессий (commit), чтобы сохранить или проверить свой прогресс. Пакетные сессии запускают и выполняют весь код последовательно, тратя на это время и лимит GPU. Эффективнее будет просто загрузить файл. ipynb из редактора.
- Отмените ненужные пакетные сессии. Одно и то же ядро может иметь несколько одновременных пакетных сессий, если вы повторно нажмете кнопку commit до завершения первой операции. Однако если ваш последний код был обновлен по сравнению с предыдущей версией, лучше отменить первый commit и оставить запущенным только второй.
- Остановите интерактивные сеансы до закрытия окна редактора. Интерактивные сеансы остаются активными до тех пор, пока не достигнут 60-минутного ограничения времени простоя. Если вы не остановите сеанс до закрытия окна редактора, выделенный лимит GPU будет уменьшаться, пока сеанс не будет прерван автоматически.
- Подумайте об использовании Kaggle-API, чтобы полностью избежать интерактивных сеансов.
На последнем пункте остановимся более подробно. Kaggle-API позволяет использовать и обрабатывать наборы данных Kaggle в сторонних приложениях. Например, в уже знакомом вам Google Colab. В отличие от Kaggle, Google Colab не имеет общего ограничения на длительность сеансов работы с GPU в неделю – лимит накладывается только в рамках одного сеанса (12 часов). При этом он на 3 часа превышает лимит, установленный для одного сеанса Kaggle.
Для доступа к API необходимо создать личный токен. Для этого необходимо зайти в меню Kaggle «My Account»:
🥇 Не любите Kaggle? Вы просто не умеете его готовить
Kaggle – это платформа, на которой собраны соревнования, курсы, базы данных, туториалы с кодом и обсуждения для решения реальных проблем с помощью Data Science. Существует несколько типов соревнований:
- Проекты для обучения, предназначенные для новичков, например одни из самых известных Titanic-Machine Learning from Disaster и House Prices- Advanced Regression Techniques .
- Проекты, в которых представлены данные для обучения и в которых ожидаемый результат известен как компании, так и участникам.
- Соревнования с денежными призами, с помощью которых компании ищут лучшие решения своих проблем или новых сотрудников (в данном случае результат обычно известен только компании). По мере того, как участники загружают свои материалы, Kaggle делится в режиме реального времени распределением результатов каждой из команд в списке лидеров.
Соревнования обычно длятся от двух до шести месяцев, и участникам разрешается загружать по пять работ в день (как отдельным лицам, так и командам). Призовой фонд соревнований может быть как денежным, так и символическим (мерч Kaggle и приглашения на конференции для лучших команд).
С чего начать?
Одной из причин, по которой большинство людей не решаются приступить к соревнованиям Kaggle, является недооценка своих знаний, опыта, методов и уровня навыков. Для новичка это самая важная и сложная часть, так как соревнования Kaggle отличаются сложностью и высоким уровнем навыков других участников. Не стоит складывать руки, вот несколько советов, которые помогут вам начать работу в правильном направлении.
Изучите данные
Выберите соревнование, в котором вы действительно заинтересованы. Когда вы работаете над проблемой по теме, которая вас действительно интригует и привлекает, вы будете более увлечены и привержены тому, чтобы довести ее до конца и найти лучшее решение. У вас также должен быть небольшой опыт и интерес к проблеме: это поможет начать и увеличит ваши шансы на успех.
Присоединитесь к сообществу
Принимайте активное участие в форумах – это отличная возможность узнать, как другие участники создают функции и интерпретируют данные. Кроме того, читайте сообщения в блоге с подробным описанием предыдущих соревнований. Загляните в официальный блог Kaggle на Medium , где представлены интервью с лучшими участниками и победителями соревнований. Если вы где-то застряли и не знаете, что делать дальше, спросите на форумах или объединитесь с кем-то, кто может научить вас необходимым навыкам.
Построение моделей
Принимающие компании не публикуют простые задачи, которые могут быть решены в течение одного дня. Представленные проекты сложны и запутаны. Компании предлагает призы победителям и структурирует конкурс таким образом, чтобы получить назад потраченные деньги. Большинство из них рассматривают Kaggle как платформу для решения своих самых сложных и больших проблем – ваши решения должны быть инновационным и уникальными. Чтобы иметь шанс занять призовое место в любом соревновании, нужно не только настроить алгоритмы, но и пройти обучение передовым моделям и провести расширенные исследования. Это потребует терпения, исключительных навыков обработки данных, времени и креативности для создания перспективных моделей.
Отправьте результаты
Всегда представляйте решение до истечения крайнего срока. Потратьте время, чтобы досконально разобраться в домене, прежде чем приступать к анализу данных. Детальное понимание данных и области их применения поможет получить четкое представление о том, как анализировать данные. На каждом этапе конкурса включайте в план создание алгоритма оценки модели, который имитирует оценку теста Kaggle (например, использование простой десятикратной перекрестной проверки). Подробно разберитесь в матрице оценки и используйте данные для обучения при создании различных функций. Помните, что у одной модели мало шансов попасть в первую десятку. У вас будет возможность добраться до первых строчек рейтинга, если вы сможете создать как можно больше моделей, а затем собрать их вместе.
Как продолжить
Существует несколько подходов к призовым местам в соревнованиях Kaggle – все зависит от вашей цели. Первые два – это к онструирование признаков и нейронные сети. Разработка функций дает шанс, если вы понимаете данные изнутри, начиная с построения гистограмм. Частью этого является создание и тестирование функций, чтобы определить, какие из них коррелируют с целевой переменной.
Обзор последних соревнований
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.
В этом соревновании вам предстоит применить навыки обработки данных, чтобы помочь идентифицировать аномальные сигналы при сканировании прорывных целей прослушивания. Данные состоят из двумерных массивов, проект предлагает использовать подходы компьютерного зрения, а также цифровой обработки сигналов и обнаружения аномалий. Алгоритм, который успешно идентифицирует наибольшее количество игл, получит денежный приз, но также может помочь ответить на один из самых больших вопросов в науке.
SETI Breakthrough Listen – E.T. Signal Search
Дедлайн для регистрации команд: 21 июля 2021 г.
Дата окончания: 28 июля 2021 г.
Призы: 1 место – $6,000, 2 место – $5,000, 3 место – $4,000.
Соревнование по созданию игровой площадки с элементами многопользовательской симуляции. Вашей задачей станет разработка агента искусственного интеллекта, которому предстоит играть против других. Мероприятие подойдет всем заинтересованным в построении игровых моделей с использованием обучения с подкреплением, Q-обучения и нейронных сетей.
Hungry Geese
Дедлайн для регистрации команд: 26 июля 2021 г.
Дата окончания: 26 июля 2021 г.
Призы: мерч Kaggle (футболки, кружки и т. д.) достанется лучшей команде в ежемесячной таблице лидеров.
Соревнование по созданию игровой площадки с элементами многопользовательской симуляции. Вашей задачей станет разработка агента искусственного интеллекта, которому предстоит играть против других. Мероприятие подойдет всем заинтересованным в построении игровых моделей с использованием обучения с подкреплением, Q-обучения и нейронных сетей.
Если вы только начинаете путь в профессии или хотите научиться решать реальные задачи из смежных областей науки о данных, соревнования – хороший способ это сделать. Обратите внимание на курс по спортивному Data Science образовательной онлайн-платформы GeekBrains. Он включает обучение с элементами соревнования в Kaggle и работу с преподавателем, который разбирает на примерах каждый урок.
Как попасть в топ 2% соревнования Kaggle
Статья основана на реальном опыте участия в соревнованиях на Kaggle, автор — Abhay Pawar. Ссылка на оригинал в подвале статьи.
Участвовать в соревнованиях Kaggle весело и захватывающе! За последние пару лет я разработал несколько простых способов создания более совершенных моделей машинного обучения. Эти простые, но мощные методы помогли мне попасть в топ 2% соревнования Instacart Market Basket Analysis, и я также использую их вне Kaggle. Давайте рассмотрим методы поближе.
Один из наиболее важных аспектов построения любой контролируемой модели обучения для численных данных — хорошее понимание векторов признаков. Глядя на графики работы вашей модели, можно понять, как ее выходной результат зависит от различных признаков.
Но проблема с этими графиками заключается в том, что они создаются с использованием обученной модели. Если бы мы могли напрямую создавать эти графики прямо по данным для обучения, это могло бы помочь нам лучше понять принципы работы нашей сети. Фактически, графики могут помочь вам в следующем:
- Понимание признаков;
- Поиск признаков с большими шумами (самая интересная часть!);
- Разработка признаков;
- Важность признаков;
- Отладка признаков;
- Обнаружение утечек;
- Мониторинг модели.
Чтобы вы легко могли попробовать сами, я решил включить эти методы в пакет featexp на Python, и в этой статье мы увидим, как их можно использовать для исследования признаков. Мы будем использовать датасет из соревнования Kaggle Home Credit Default Risk. Задача конкурса — предсказать неплательщиков по известным данным о клиентах.
Понимание признаков
Если зависимая переменная (цель) является двоичной, строить графики бессмысленно, потому что все точки имеют значение либо 0, либо 1. Для цели с непрерывной областью значений большое количество точек затрудняет понимание взаимосвязи цели и признаки. Featexp создает более полезные графики. Посмотрим на них:
Зависимость признака от цели — DAYS_BIRTH (возраст)
Featexp создает бины (ось X) признака. Затем он вычисляет среднее значение цели в каждом бине и отображает его на рисунке слева. Из графика следует, что у клиентов с высокими отрицательными значениями для DAYS_BIRTH (с большим возрастом) более низкие ставки. Это имеет смысл, поскольку молодые люди обычно чаще просрочивают платежи. Эти графики помогают нам понять, что свойство может сказать о клиентах и как это повлияет на модель. Участок справа показывает количество клиентов в каждом бине.
Поиск признаков с большим шумом
Функции с большим шумом приводят к переобучению, и определить их нелегко. В featexp специальный набор тестов позволяет идентифицировать признаки с большим шумом. Этот набор тестов на самом деле ненастоящий: для него вы заранее знаете цель.
Сравнение признака при обучении и при проверке
Featexp рассчитывает две метрики для отображения на этих графиках, которые помогают оценить шум:
- Корреляция тренда (показана на графике проверки): если признак ведет себя по-разному при обучении и при проверке, это может приводить к перегрузке модели. Так происходит, потому что модель обучается тому, что не применимо на тестовых данных. Коррекция тренда помогает понять, насколько схоже поведение признака при обучении и при проверке. Признак на графике выше имеет корреляцию 99%. Это не «шумящее» свойство!
- Изменения тренда: внезапные и повторяющиеся изменения тренда могут означать наличие шумов. Но такое изменение тренда может произойти, потому что у данного бина совсем другое количество значений в других признаках и, следовательно, его частота не может сравниваться с другими бинами.
Приведенная ниже функция имеет различный тренд и, следовательно, низкую корреляцию: 85%. Эти две метрики можно использовать для отключения признаков с большими шумами.
Пример функции с большими шумами
Отключение хорошо работает, если есть много связанных друг с другом признаков. Это приводит к меньшей перегрузке, а другие признаки позволяют избежать потери информации. Также важно не отключать слишком много важных признаков, поскольку это может привести к снижению производительности. То, что признак является важным, не значит, что он не может быть «шумным» — и в этом случае его нельзя отключать!
Используйте тестовые данные на другом интервале времени. Тогда вы будете уверены, что тренд не меняется со временем.
Функция get_trend_stats() в featexp возвращает таблицу с корреляцией тренда и изменением каждого признака.
Результат, возвращаемый функцией get_trend_stats()
Давайте попробуем отключить признаки с низкой корреляцией тренда в наших данных и посмотреть, как улучшаются результаты.
AUC при включении различных признаков с использованием корреляции тренда
Можно видеть: чем выше порог корреляции тренда, тем выше AUC. Не отключая важные признаки, можно добиться увеличения LB AUC до 0,74. Интересно, что AUC не меняется так сильно, как LB AUC. Важно правильно выбрать стратегию проверки: так, чтобы локальный тест AUC совпадал с LB AUC. Весь код можно найти в featexp_demo.
Разработка признаков
Проанализировав эти графики, вы поймете, как создавать лучшие признаки. Простое понимание данных может привести к разработке лучших признаков. Но в дополнение к этому графики также может помочь вам улучшить существующие признаки. Давайте рассмотрим еще один признак EXT_SOURCE_1:
Зависимость признака от цели EXT_SOURCE_1
Клиенты с высоким значением EXT_SOURCE_1 имеют низкие ставки. Но первый бин (ставка
8%) не соответствует тренду признака (идет вверх, а затем вниз). Он имеет только отрицательные значения вблизи -99.985 и большое количество единиц в бине. Это, вероятно, подразумевает, что это специальные значения. К счастью, нелинейные модели не будут испытывать проблемы с обучением этим связям. Но для линейных моделей, таких как логистическая регрессия, такие специальные значения и нули (которые будут показаны как отдельный бин) должны быть поданы в значение из бина с аналогичной ставкой вместо простой подачи со средним значением признака.
Важность признаков
Featexp также помогает определить относительную важность того или иного признака. DAYS_BIRTH и EXT_SOURCE_1 имеют хорошую линию тренда. Но большинство единиц EXT_SOURCE_1 сосредоточено в специальном бине значений, что означает, что признак почти одинаков для большинства клиентов и, следовательно, не может хорошо их дифференцировать. Это говорит о том, что признак может быть не так важен, как DAYS_BIRTH. Основываясь на модели важности признаков XGBoost, DAYS_BIRTH на самом деле важнее EXT_SOURCE_1.
Отладка признаков
Глядя на графики Featexp, можно находить ошибки в сложных кодах, делая следующие две вещи:
Не изменяющийся призак означает один бин
- Проверьте, что распределение клиентов для признака по бинам выглядит нормально. Я лично много раз сталкивался с такими случаями, как выше, из-за незначительных ошибок.
- Всегда выдвигайте гипотезу о том, как будет выглядеть тренд признака, прежде чем смотреть на графики. То, что тренд выглядит не так, как вы ожидали, может означать некоторые проблемы. И, откровенно говоря, этот процесс предсказания трендов делает создание моделей машинного обучения намного более захватывающим!
Обнаружение утечек
Утечка данных от цели к признакам приводит к перегрузке модели. Признаки с утечкой имеют большую важность. Но понять, почему утечка происходит в том или ином признаке, сложно. Глядя на графики featexp, можно разобраться в этом.
Признак с утечкой
Приведенный выше признак имеет частоту 0% в бине нулей и 100% во всех других бинах. Ясно, что это предельный случай утечки. Этот признак имеет значение только тогда, когда клиент неплатежеспособен. Нужно выяснить, почему так происходит: либо есть ошибка, либо признак действительно реагирует только на неплатежеспособных клиентов (и тогда его нужно отключить). Разобравшись, почему признак приводит к утечке, можно быстрее исправить проблему.
Мониторинг модели
Поскольку featexp вычисляет корреляцию трендов между двумя датасетами, ее можно легко использовать для мониторинга модели. Каждый раз, когда модель переобучается, новые данные для обучения могут быть сравнены с хорошо проверенными данными (обычно это данные, которые использовались при первой сборке модели). Корреляция тренда может помочь вам отследить, изменилась ли как-то зависимость признака от цели.
Эти простые проверки часто помогали мне в создании лучших моделей в реальных задачах и в Kaggle. С featexp требуется 15 минут, чтобы посмотреть на графики, и это определенно стоит того.
Kaggle для начинающего дата-сайентиста: соревноваться нельзя учиться
Мало нам питона и матана — есть ещё, оказывается, и какой-то Каггл. Разбираемся, что это и зачем нужно
Kaggle — популярная платформа для соревнований по Data Science от Google. Пользователи (люди и организации) могут публиковать на ней свои наборы данных, создавать и исследовать модели машинного обучения, соревноваться друг с другом.
Типичная схема Kaggle-соревнования: организатор конкурса (как правило, крупная компания) публикует свои данные и описание проблемы, сроки, критерии правильного решения и приз, который получит победитель. А участники пробуют применить к данным разные методы, модели и алгоритмы, чтобы решить проблему.
Автор лучшего решения получает приз. Остальные участники — баллы в зависимости от места в таблице с результатами. Из этих баллов складывается общий рейтинг на платформе. Денег за рейтинг никто не даст, зато в резюме он может смотреться красиво. Оценка работ прозрачна: платформа автоматически проверяет решения по критериям, выставленным компанией-организатором.
Формат участия в соревновании зависит от условий, которые задаёт автор проблемы. Обычно разрешают участвовать и сольно, и командой — у каждого способа есть свои преимущества.
В Kaggle всё очень непросто:
- Сложные задачи — от создания карты клеток человеческой почки до выявления болезней кассавы . Начинающему победить будет как минимум нелегко.
- Серьёзные призы — до ста тысяч долларов. Значит, будет много участников, а вероятность победы снизится.
- Среди участников — топовые команды с научными степенями и десятками лет опыта в Data Science.
Кажется, шансов у новичка — ноль. Так зачем же соревноваться тому, кто только начал изучать науку о данных?
К тому же очищенные, подготовленные и хорошо документированные Kaggle-датасеты не имеют ничего общего с задачами и данными, над которыми ежедневно работают дата-сайентисты.
С некоторых пор утверждает, что он data scientist. В предыдущих сезонах выдавал себя за математика, звукорежиссёра, радиоведущего, переводчика, писателя. Кандидат наук, но не точных. Бесстрашно пишет о Data Science и программировании на Python.
Чем полезен Kaggle
Хотя вам вряд ли достанется приз, а задачи сильно отличаются от «промышленного» Data Science, соревнования — это отличный инструмент обучения. Многие вообще считают Kaggle лучшим способом изучить науку о данных.
Чтобы обучение проходило эффективно, нужно понимать особенности платформы:
- Каждое Kaggle-соревнование подготовлено и упаковано. А значит, не нужно разворачивать свой проект с нуля, собирать и очищать данные. Сосредоточьтесь на поиске лучшего решения и исследовании алгоритмов.
- Практика — это всегда хорошо. Спасибо, Кэп, но решать задачи по Data Science— действительно лучший способ изучить Data Science 🙂 Так что не переживайте насчёт тех ста тысяч долларов, которые у вас из-под носа увели парни с научными степенями, а просто прокачивайте свои навыки в решении интересных задач. Расти будете как Илья Муромец — не по дням, а по часам.
- Обсуждения, комментарии и интервью участников. Под каждое соревнование создаётся топик на форуме — там участники обсуждают условия и варианты решения, а после окончания победители всегда дают интервью. Отличная возможность изучить стиль мышления опытных дата-сайентистов и развить насмотренность.
На 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: достигайте целей постепенно.
В каждый момент времени следующая цель должна быть одновременно и достаточно трудной, и достижимой. Например:
- Сделать модель, которая лучше базового решения.
- Попасть в топ-50% в одном соревновании.
- Попасть в топ-25% в одном соревновании.
- Попасть в топ-25% в трёх соревнованиях.
- Попасть в топ-10% в одном соревновании.
- И наконец — выиграть уже эти 100 тысяч долларов!
Такая стратегия позволит измерить свой прогресс и сохранить высокую мотивацию.
Совет 2: исследуйте самые популярные решения.
Одна из важных фишек Kaggle — участники могут публиковать краткое описание своего решения, так называемое kernel («ядро»). Изучение чужих решений может натолкнуть на новые идеи.
Совет 3: спрашивайте участников на форумах.
Не бойтесь задавать «глупые» вопросы. В конце концов, ничего страшного не случится. Максимум, что вам грозит, — тишина в ответ. Но, скорее всего, вы получите советы и поддержку опытных дата-сайентистов.
Совет 4: работайте сольно — так эффективнее прокачивать ключевые навыки.
В начале пути лучше работать одному — это поможет внимательнее относиться к ключевым задачам, включая исследовательский анализ, очистку данных, разработку признаков и обучение модели.
Совет 5: работайте в команде, чтобы расширить свои возможности.
Работа в команде — отличный способ учиться у опытных дата-сайентистов. Найти «сообщников» можно в чатах, комьюнити и пабликах, посвящённых Data Science, среди одногруппников по курсам или прямо на форумах Kaggle. Нетворкинг — это сила.
А когда вы отточите общие навыки машинного обучения, будет важно поучиться у экспертов в конкретной отрасли — это увеличит вашу ценность.
Совет 6: помните, что Kaggle — это только этап.
Вы не обязаны провести всю жизнь, соревнуясь с другими кагглерами. И если вы вдруг поймёте, что Kaggle вам «не зашёл», — не проблема. Для многих платформа стала всего лишь первой ступенью перед запуском собственного проекта или трудоустройством.
Совет 7: не переживайте из-за низкого рейтинга.
Порой новички слишком сильно беспокоятся из-за рейтинга в своём профиле. Боязнь конкуренции — серьёзная проблема не только для Kaggle, она часто мешает и в обычной жизни. А если вам всё-таки стыдно показывать низкий рейтинг на платформе — заведите тайный учебный аккаунт kisulya666 и тренируйтесь в нём. Со временем можно переключиться на основной аккаунт gromoverzhec777 и начать охоту за трофеями и рейтингом.
Заключение
Обучение на практике — один из лучших методов освоить любую отрасль знаний. А Kaggle — это в первую очередь прекрасная возможность попрактиковаться в решении задач, и лишь во вторую — денежные призы.
На нашем курсе «Профессия Data Scientist» вы найдёте не только команду для участия в Kaggle-соревнованиях, но и поддержку опытных наставников, и помощь в трудоустройстве.
Kaggle для начинающих: начало работы
Дата публикации Jul 1, 2019
Цель этой статьи — помочь вам начатьKaggleи присоединиться к крупнейшему в мире сообществу в области машинного обучения и науки о данных.
Так что же такое Kaggle?
Kaggle, как они говорят, «Ваш дом для науки о данных». Это лучшее место для изучения и развития ваших навыков с помощью практических проектов в области науки о данных и машинного обучения.
Так чего же ты ждешь ?Отправляйся в Kaggleи зарегистрируйтесь одним нажатием .
Языки программирования на Kaggle
И то и другоепитона такжерпопулярны на Kaggle, и вы можете использовать любой из них для соревнований Kaggle.
Kaggle Services
1.Соревнования по машинному обучению
Это то, чем славится kaggle. Найдите проблемы, которые вам интересны, и постарайтесь создать лучший алгоритм.
Распространенные виды соревнований Kaggle
Вы можете искать соревнования по kaggle по категориям, и я покажу вам, как получить список «начинающих» соревнований для новичков, которые всегда доступны и не имеют срока .
- Избранные соревнованияТипы соревнований, которые Kaggle, вероятно, наиболее известны. Они обычно спонсируются компаниями, организациями или даже правительствами. Они предлагают призовые фонды до миллиона долларов.
- Научные конкурсыособые проблемы, которые являются более экспериментальными, чем показанные проблемы конкуренции. Они обычно не предлагают призы или баллы из-за их экспериментального характера.
- Начало соревнованийструктурированы как показанные соревнования, но у них нет призовых фондов. Они имеют более простые наборы данных, множество учебных пособий и не имеют крайнего срока — только то, что нужно новичку, чтобы начать! . Один из примеров соревнований по началу работы:
- Соревнования детской площадкиЭто соревнование Kaggle «для удовольствия», которое на шаг выше уровня сложности «Начало работы». Призы варьируются от похвалы до небольших денежных призов. Один из примеров соревнований на игровой площадке:
Собаки против Кошек- Создать алгоритм, чтобы отличить собак от кошек
Конкурсная среда Kaggle
Вот быстрый просмотр вкладок
- Обзор:краткое описание проблемы, метрика оценки, призы и сроки.
- Данные:Здесь вы можете скачать и узнать больше о данных, используемых в конкурсе. Вы будете использовать обучающий набор для обучения моделей и тестовый набор, для которого вам нужно будет делать свои прогнозы. В большинстве случаев данные или их подмножество также доступны в ядрах.
- Ядра:Предыдущая работа сделанная вами и другими конкурентами. Обзор популярных ядер может привести к появлению новых идей. Вы можете прочитать другие сценарии и записные книжки, а затем скопировать код (известный как «Форк») для редактирования и запуска.
- Обсуждение:Еще один полезный ресурс, где вы можете найти разговоры как от организаторов соревнований, так и от других участников. Отличное место, чтобы задавать вопросы и учиться на чужих ответах.
- Leaderboard:В каждом соревновании есть публичные и частные таблицы лидеров. Будьте осторожны, таблицы лидеров ОЧЕНЬ разные.Общественный список лидеровпредоставляет общедоступные оценки на основе репрезентативной выборки представленных данных. Этот список лидеров виден на протяжении всего соревнования. Хотя это дает вам хорошую идею, она не всегда отражает, кто победит и проиграет.Частный рейтингэто то, что действительно имеет значение. Он отслеживает производительность модели на данных, невидимых участниками. Таким образом, у частного лидера есть окончательное мнение о том, чьи модели являются лучшими, и, следовательно, кто будет победителями и проигравшими в конкурсе. Не рассчитано до конца конкурса.
- Правила:содержит правила, регулирующие ваше участие в конкурсе спонсора. Чрезвычайно важно прочитать правила, прежде чем начать.
- Команда:На этой вкладке вы можете выполнить ряд различных действий, связанных с командой.
- Мои материалы:просмотрите свои предыдущие представления и выберите последние, которые будут использоваться для конкурса.
- Представление прогнозов:Чтобы отправить новый прогноз, используйте кнопку «Предсказать прогноз». Это откроет модальный режим, который позволит вам загрузить ваш файл представления.
2.Datasets
Наборы данных Kaggle — лучшее место для поиска, изучения и анализа открытых данных. Вы можете найти много разных интересных наборов данных типов и размеров, которые вы можете скачать бесплатно и отточить свои навыки.
3.Курсы Kaggle Learn
Бесплатные микро-курсы в Jupyter Notebooks помогут вам улучшить свои текущие навыки.
4.Обсуждение:
Место, где можно задавать вопросы и получать советы от тысяч ученых-исследователей в сообществе Kaggle.
Есть шесть общих дискуссионных форумов сайта:
- Kaggle Forum: События и темы, специфичные для сообщества Kaggle
- Начиная: Первая остановка для вопросов и обсуждения для новых Kagglers
- Отзыв о продукте: Расскажи, что любишь, ненавидишь или хочешь
- Вопросы и Ответы: Технические советы от других ученых
- Datasets: Запросы и обсуждение открытых данных
- Учиться: Вопросы, ответы и запросы, связанные сКурсы Kaggle Learn
5.Ядра
Ядра Kaggle — это, по сути, ноутбуки Jupyter в браузере. Эти ядра полностью бесплатны для запуска (вы даже можете добавить графический процессор). Это означает, что вы можете избавить себя от необходимости настраивать локальную среду. Они также позволяют вам делиться кодом и анализом на Python или R. Они также могут быть использованы для участия в соревнованиях Kaggle и для прохождения курсов обучения Kaggle. Изучение и чтение кода других Kagglers — это отличный способ изучить новые методы и оставаться вовлеченными в сообщество.
Выбор набора данных и раскрутка нового ядра с помощью нескольких кликов
Kaggle Kernel Environment
Вот как включить графический процессор, изменить язык ядра, сделать ядро общедоступным, добавить соавторов и установить пакеты, которые не предустановлены, так как ядра kaggle поставляются с предустановленными наиболее популярными пакетами python и R .
Добавление набора данных в ваше ядро
Вы можете загрузить дополнительные наборы данных со своего компьютера, из соревнований kaggle или из общедоступных ядер других Kagglers в свое ядро.
Версии ядра
Когда вы фиксируете и запускаете ядро, оно запускает весь ваш код и сохраняет его как стабильную версию, к которой вы можете обратиться позже. Тем не менее, ваш код всегда сохраняется на ходу .
Форкинг Kaggle Ядра
Вы можете копировать и использовать существующие ядра других пользователей .
Вы сделали все это здесь ?! Спасибо за чтение.
Поздравляем!
Вы теперь Kaggler .
Если у вас есть какие-либо вопросы или комментарии, не стесняйтесь оставлять свои отзывы ниже, или вы всегда можете связаться со мной пощебет, До тех пор, до встречи в следующем посте! ✋.