(в соавторстве с Дэниелом Остином)

Команда AppNexus Data Science всегда ищет способы распространения знаний о данных в AppNexus. Мы не первая компания, которая осознает, что масштабирование машинного обучения (ML) означает улучшение знаний о машинном обучении за пределами отдела науки о данных: другие компании, включая Airbnb (здесь, здесь), Facebook (здесь, здесь), У Google (здесь) есть стратегии грамотности в отношении данных и машинного обучения, как правило, через внутренний университет по наукам о данных и официальную программу обучения. Мы рассмотрели возможность разработки учебной программы по машинному обучению, экспериментировали с наставничеством и обучением людей, проходящих онлайн-курсы (например, классы Mining of Massive Datasets и Coursera Machine Learning), и создали группу по глубокому обучению на основе Deep Учебная книга .

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

Мы хотели попробовать это внутри AppNexus. Вот как мы это сделали, почему мы это сделали и как вы можете сделать это самостоятельно.

Создание конкурса

Для проведения конкурса нам понадобились эти вещи: мотивация, проблема, набор данных, люди, инструменты управления конкурсом и поддержка.

Мотивация

Проведение конкурса требует усилий: для этого должна быть веская причина. Команда AppNexus Data Science создает продукты машинного обучения, чтобы помочь создателям онлайн-контента (издателям) и рекламодателям с миллиардами аукционов, совершаемых ежедневно на нашей платформе, а также для обеспечения безопасности нашей платформы. Вот лишь некоторые из этих продуктов:

  • Оптимизация резервных цен на аукционах с назначением ставок в реальном времени (RTB) («резервная цена» - это минимальная цена, которую продавец примет от участника аукциона)
  • Оптимальное распределение показов между гарантированными контрактами и аукционами RTB
  • Bid Price Pacing (автоматическая корректировка ставок для соответствия целям)
  • Обнаружение (определение того, какой инвентарь издателя лучше всего подходит для показа рекламы)
  • Фильтрация нечеловеческого и другого недействительного трафика и неподходящих доменов

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

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

Проблема

Нам нужна была задача, где:

  • Проблема актуальна для AppNexus, а идеи, модели и алгоритмы для нее ценны для компании.
  • Данные для анализа проблемы могут быть легко извлечены, они имеют разумный размер (от 100 МБ до нескольких ГБ), и их анализ может быть выполнен на ноутбуке компании участника.
  • У нас есть показатели (и базовые контрольные показатели для этих показателей) для сравнения конкурсных работ, поэтому команды могут быть однозначно ранжированы.

Мы выбрали прогнозирование рейтинга кликов (CTR): прогнозирование вероятности клика пользователя с учетом набора функций аукциона. Эта проблема соответствовала указанным выше критериям и:

  • Команда Buy Side Data Science имеет большой опыт в прогнозировании CTR с существующими моделями на основе машинного обучения в производстве.
  • У нас есть последние данные для наборов обучающих / тестовых, показателей для сравнения представленных материалов и тестов, полученных при запуске производственных моделей на этом наборе данных.
  • По этой теме существует множество онлайн-литературы.
  • Проблема имеет хорошее педагогическое значение: к ней можно применить множество различных моделей машинного обучения, от машин логистической регрессии и факторизации до нейронных сетей.

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

Набор данных

Мы использовали выборку исторических данных аукционов из конкретной рекламной кампании, проведенной в сентябре 2017 года. Мы создали обучающий набор данных, состоящий из 900 000 образцов, и набор тестовых данных из 100 000 образцов, причем каждый образец представляет собой уникальный аукцион с числовыми и категориальными характеристиками для показ объявления на аукционе и поле click_label, в котором сообщается, был ли клик по объявлению или нет.

Люди

Конкурс был открыт для Appnexians в нашем офисе в Портленде, штат Орегон, и проводился в течение 6 недель (с октября по декабрь 2017 г.). Участвовали три команды (всего 9 аппнексианцев из примерно 40 сотрудников на этом месте). Мы намеренно ограничили круг участников, чтобы мы могли пилотировать конкурс (чтобы проработать детали реализации и продемонстрировать ценность конкурса до масштабирования на всю компанию), а также помогать людям один на один на протяжении всего конкурса.

Инструменты управления конкурсом

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

Мы использовали образ Docker для среды разработки; он содержал наборы данных, записные книжки Python и Jupyter (хотя участники могли использовать любой язык программирования для анализа, мы поощряли использование Python и Jupyter, поскольку они популярны в сообществе AppNexus Data Science и за его пределами). Мы расширили базовый образ Jupyter Docker пакетами, которые мы сочли подходящими для нашей проблемы, включая Pandas, NumPy и SciPy для анализа, Scikit-Learn для моделирования традиционных моделей машинного обучения, Tensorflow и Keras для моделей глубокого обучения, а также Matplotlib и Bokeh для данных. визуализация. Когда контейнер Docker запускается, он запускает сервер Jupyter: участники могут начать использовать записные книжки Jupyter из браузера и установить дополнительные пакеты Python или другое программное обеспечение из окна терминала Jupyter.

Kaggle предоставляет компаниям возможность проводить внутренние конкурсы машинного обучения за определенную плату или внешние конкурсы с общедоступными наборами данных. Мы искали в Интернете бесплатное программное обеспечение, чтобы участники могли отправлять свои прогнозы и видеть свои баллы и рейтинг сразу после отправки, но не нашли ни одного. Поэтому мы решили создать нашу собственную платформу для соревнований с открытым исходным кодом. Мы использовали Dash, фреймворк Python, основанный на React и Flask, который можно использовать для создания аналитических веб-приложений, включая веб-интерфейсы с раскрывающимися списками, ползунками и графиками, без написания какого-либо Javascript.

Мы оценивали каждую заявку, как только она была загружена из приложения. Мы использовали метрику Logarithmic Loss (логарифмическая потеря) для оценки представленных материалов (это популярная метрика для измерения производительности модели классификации, в которой прогноз представляет собой значение вероятности от 0 до 1). Как и в соревнованиях Kaggle, каждая заявка получала два балла: общий балл и частный балл. Общедоступная оценка была рассчитана с использованием метрики потерь журнала на фиксированной 20% случайной выборке тестового набора данных и отображалась сразу после отправки. Частный балл был рассчитан с использованием метрики потерь журнала для полного набора тестовых данных, но был скрыт от участников.

Чтобы добавить соревновательную серию (это все-таки конкурс!), Мы создали общедоступную таблицу лидеров на основе общедоступной оценки, динамически обновляя доступную только для чтения вики-страницу Confluence при каждой отправке заявки. Личная таблица лидеров также была создана на основе личного счета, но была скрыта до конца конкурса.

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

Поддержка

Мы запустили учебные пособия по настройке среды разработки Docker и использованию записных книжек Jupyter. Мы создали начальные записные книжки, в которых проиллюстрированы основные аспекты машинного обучения, включая использование Pandas и NumPy, как обрабатывать категориальные функции, как запустить логистическую регрессию с помощью Scikit-Learn и как запустить простую нейронную сеть с помощью Keras. Мы создали Slack-канал, где участники могли задавать вопросы, а также установили еженедельные рабочие часы.

Уроки, извлеченные из нашего пилотного проекта, и следующие шаги

После окончания конкурса мы провели ретроспективную сессию, отправили дополнительный опрос и провели полуструктурированное интервью с участниками. Мы зафиксировали следующие отзывы:

  • В целом. Наш пилотный запуск был в основном успешным: мы обнаружили большой интерес людей к изучению данных и участию в этих мероприятиях. Каждая команда подала более 10 заявок, и мы хорошо приняли участие в конкурсе и в рабочие часы, которые мы провели (это было особенно верно в начале конкурса, но ближе к концу). Участники также использовали методы машинного обучения на хакатоне AppNexus, который прошел во время пилотного проекта, и мы повторно использовали учебный материал и образ докера из конкурса для учебного сеанса хакатона.
  • Выбор задач. Выбранная нами задача CTR была интересна и актуальна для участников, и большинству участников понравилась общая структура конкурса. В конце конкурса был большой интерес к тому, чтобы больше узнать о машинном обучении и науке о данных, а также о применении машинного обучения в своей работе.
  • Инфраструктура конкурса: участники считали, что процесс подачи заявок прост и удобен, но наличие сценария командной строки или другого инструмента для автоматизации подачи могло бы помочь. Большинству участников понравилось использовать Python в записных книжках Jupyter из-за простоты использования и возможности строить графики. Кроме того, контейнер Docker позволил быстро и легко приступить к работе.
  • Поддержка преподавания и обучения: начальные занятия были хорошей отправной точкой для привлечения участников к соревнованиям, но могли бы помочь дополнительные практические занятия в начале конкурса. В дополнение к рабочим часам было бы полезно, если бы мы проводили больше обучения в ходе конкурса. Например, некоторые люди извлекли пользу из более подробной информации о том, как выбрать гиперпараметры модели и как использовать набор удержания для проверки обобщения. Наконец, предоставление каждой команде наставников из отдела Data Science - возможно, смены наставников еженедельно - скорее всего, улучшит мотивацию и поможет сохранить команды незаблокированными на протяжении всего соревнования.

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

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

  • Улучшите приложение отправки, чтобы оно обеспечивало проверку подлинности и отображало ход выполнения во время обработки отправки. Оба ограничения связаны с выбором базовой платформы (Dash), которую мы использовали для создания приложения. Второе ограничение было устранено командой Dash, и теперь у нас есть индикатор прогресса. Бесплатная версия пакета Dash не имеет интеграции LDAP, но мы можем назначать пароли участвующим командам для их аутентификации при отправке заявок. Мы также изучаем возможность использования Jupyter Dashboard для приложения для отправки.
  • Предоставьте интерфейс командной строки для отправки материалов.
  • Сократите продолжительность конкурса (до 4 недель) и ограничьте количество ежедневных заявок.
  • Обеспечьте больше практических занятий и записных книжек с примерами.
  • Если возможно, предоставьте сменяющийся набор наставников для каждой участвующей команды.

Мы также планируем открыть исходный код кода, который мы разработали для этого конкурса: ищите его на https://github.com/appnexus.

Благодарности:

Мы хотели бы поблагодарить следующих AppNexians за их щедрую помощь и поддержку:

• Мусса Тайфи: за создание инфраструктуры Docker и помощь с инструментами
• Лей Ху: за предоставление набора данных
• Стефани Ценг: за плодотворное обсуждение того, как проводить конкурс
• Эллисон Круг: за поощрение участия и спонсорство для получения призов.
• Сара-Джейн Терп: за помощь в преобразовании нашей рецензии в удобочитаемый и доступный для чтения пост в блоге
• Джон Мюррей и Скотт Мур: за обзор и отзыв о публикации в блоге
• Райан Вудард и Сэм Селджан: нашим коллегам-специалистам по данным в офисе Портленда, за их постоянную обратную связь на протяжении всего этапа конкурса и создание этого сообщения в блоге

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