TL; DR: Kaggle - это весело, примите байесовское мышление, используйте докер, код на GitHub

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

Google Cloud и NCAA® объединились, чтобы представить вам версию конкурса машинного обучения Kaggle в этом году. Еще один год, еще один шанс предвидеть неприятности, оценить вероятности и проверить свои навыки брекетологии в таблице лидеров. Kagglers присоединится к миллионам фанатов, которые пытаются предсказать результаты March Madness® во время чемпионатов NCAA Division I по баскетболу среди мужчин и женщин в этом году. Но, в отличие от большинства фанатов, вы выберете свою позицию, используя комбинацию исторических данных NCAA и ваших вычислительных мощностей, в то время как основная правда разворачивается на национальном телевидении.

Урок 1 - Примите байесовский путь 🎲

Если вы посмотрите на ядра Kaggle, то увидите множество решений швейцарского армейского ножа. Спросите себя, не кажется ли вам знакомым один из следующих фрагментов кода :-)

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

Что такое «байесовские подходы»?

Объяснение байесовского мышления с точки зрения непрофессионала было бы следующим:

  1. Иметь первоначальное интуитивное ощущение ситуации (также известное как предварительное убеждение)
  2. Сделайте несколько наблюдений
  3. Обновите свое первоначальное внутреннее ощущение на основе наблюдений (также известное как апостериорное убеждение)

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

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

Что такое бета-дистрибутивы?

Бета-дистрибутивы обладают следующими преимуществами:

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

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

Вкратце, бета-распределение принимает два параметра: α и β. Один из способов понять эти переменные - это

  • см. α как количество успехов
  • β как количество потерь

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

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

Игрок А бросает 100 мячей и забивает 60 очков, что дает 60% точность.

Игрок B бросает 2 мяча и забивает 2 раза, что дает 100% точность.

Если бы вы руководствовались исключительно точностью, вы бы взяли игрока B, но поскольку игрок B бросил только дважды, насколько заслуживает доверия его 100% -ный показатель точности? Бета-распределение отражает именно такую ​​неопределенность, как показано на следующем рисунке:

Как показывает пик, вы можете быть очень уверены в том, что игрок А имеет ~ 60% шанс забить три указателя. В отличие от этого кривая вероятности игрока B довольно плоская, что выражает неуверенность в том, является ли 100% результат удачей или умением.

Если вас интересуют более подробные технические подробности о бета-дистрибутивах (особенно в Python), я рекомендую вам взглянуть на эту Шпаргалку по бета-дистрибутивам или на одну из Блокнотов, где описывается странное происхождение.

Насколько хорошо работают эти статистические подходы?

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

Урок 2 - Докер крутой 🐳

Подождите ... Я специалист по данным, а не программист!

Почему Docker как инструмент контейнеризации упоминается в сообщении, которое охватывает подходы к науке о данных и аналитические модели? Что ж, обе дисциплины имеют (по крайней мере) одну общую концепцию: обеспечивать высокое качество.

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

Как сделать эксперименты портативными и воспроизводимыми?

Престижность Питера Булла и Исаака Славитта и их выступления 2016 года« Наука о данных - это программное обеспечение », которые предлагают экономичную, гибкую и расширяемую настройку для этих проектов (найдите время и посмотрите это видео - оно определенно обогатит ваше мышление).

Вдохновленный этой идеей, мне нужно запустить только две команды, чтобы получить данные и получить все необходимые функции: git clone и make data.

Что ж, это была не полная правда. Поскольку доклад Bull’s & Slavitt хорошо описывает настройку внутри Jupyter, я хотел расширить концепцию и сделать всю инфраструктуру максимально переносимой. Здесь в игру вступает докер.

Оркестровка компонентов приложения с помощью docker-compose просто добавляет две дополнительные команды для перехода с нуля к полной настройке, включая производные данные:

git clone >docker-compose build >docker-compose up > make data

Какая общая архитектура?

В результате установка довольно проста, как показано ниже:

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

Как я могу начать использовать эту архитектуру?

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

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