Быстрее, выше, точнее

Как соревнования по Data Science помогают эволюции в мире машинного обучения

Недавно мы писали о машинном обучении для анализа различных видов спорта, но до сих пор так и не рассказали об «обратной» комбинации — соревнованиях по анализу данных, а ведь есть и такие. Сегодня мы восполняем пробел — на наши вопросы о необычной роли соревнований в эволюции алгоритмов машинного обучения отвечает Александр Гущин, руководитель команды по анализу неструктурированных данных в Яндекс.Такси и «спортивного» направления образовательного проекта Data Mining in Action, а в прошлом — топ-5 в рейтинге Kaggle, крупнейшей мировой площадки для соревнований по анализу данных.

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

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

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

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

Это — «на верхнем уровне», а если говорить конкретнее?

Как обычно решается задача в индустрии? Сначала она возникает в неформальной формулировке, например: «Мы, социальная сеть Х, хотим показывать людям более релевантные посты в ленте». Затем задача формулируется в терминах необходимого качества. Например: «Среди N постов, которые будут показаны в ленте пользователя, как можно больше должны быть ему интересны». Помимо желания максимизировать качество, к алгоритму обычно предъявляются еще какие-то требования, скажем: «Поиск этих N постов не должен происходить дольше, чем M миллисекунд».

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

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

А сами организаторы при этом преследуют сразу три цели. Первая — это те самые классные и нетривиальные решения, которые можно будет использовать для практических задач. Вторая — реклама самой компании-организатора, причем как среди специалистов, так и среди широкой аудитории, ведь «машинное обучение», «big data» — это сейчас довольно популярные buzzword-ы. Ну, и третья цель — поиск и найм специалистов. В ходе соревнований можно показать часть внутренних задач, и если кто-то из участников успешно их решает, то его можно рассматривать как потенциально хорошего специалиста в данной области. Ну и наоборот, успешное решение каких-то задач помогает специалисту заинтересоваться связанной с ними областью.

А какие площадки для соревнований можно считать ключевыми?

Главной площадкой на сегодня является Kaggle, просто потому, что там проводится наибольшее число конкурсов, причем с самыми большими призами. Есть DrivenData, TopCoder, crowdAI, есть индийская платформа CrowdANALYTIX и еще много других.

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

В России тоже есть несколько интересных платформ. Есть Boosters — наверное, лучший среди специализированных российских сайтов, на котором за последние несколько лет прошло около десятка соревнований (это достаточно много для России). Есть TrainMyData. Некоторые компании проводят соревнования на своих собственных платформах, например Яндекс на contest.yandex.ru, Сбербанк на sdjs.ru.

А как обстоит с академической стороной дела? Бывало ли, чтобы решение, придуманное для Kaggle, получило потом повсеместное признание?

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

Например, знаменитый AlexNet, который вдохнул в нейросети новую жизнь, стал известен после того, как с большим отрывом победил в соревновании Imagenet в 2012 году. Модель FFM (Field-aware Factorization Machines) была придумана во время решения KDD Cup 2012. Благодаря соревнованиям стали известны реализация градиентного бустинга XGBoost, счетчики для категориальных признаков и, конечно же, ансамбли различных моделей.


В подавляющем большинстве на Kaggle и других площадках даются задачи на точность, а не какие-то другие критерии (скорость, интерпретируемость модели). Их итоговые решения — жуткие «франкенсамбли» (по определению Михаила Биленко, руководителя управления машинного интеллекта в Яндексе), которые никогда не пойдут в продакшн. Они соответствуют ожиданиям организаторов?

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

Бывают и вовсе курьезные случаи, когда организаторы допускают ошибки в подготовке соревнований. Иногда оказывается, что в данных есть «утечка» (leak), например какой-то признак «из будущего», в котором уже кроется требуемый ответ. Скажем, организаторы хотят научиться прогнозировать стоимость акций, но по ошибке убирают из данных акции обанкротившихся компаний. Очевидно, что обученные на таких выборках модели не будут применимы в реальной жизни, потому что они не умеют прогнозировать возможное банкротство компаний в обозримом будущем. Этот пример — классическая иллюстрация «ошибки выжившего», но, конечно, встречаются и более изощренные.

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

Чаще всего соревнования оказываются полезны для таких организаторов, которые уже имеют некоторое решение своей задачи и ставят себе цель улучшить его. Тогда они ожидают от участников, что те “выжмут всё” из имеющихся данных: пересмотрят все данные, попробуют все способы генерации признаков, обучат все модели машинного обучения, которые только существуют. Самые лучшие «франкенсамбли» из самых удачных подходов дадут лучшие результаты и займут первые места. Организаторы получат эти решения, достанут из них самые классные идеи, а затем улучшат свой собственный продукт.

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

Да, конечно. Если организатор хочет, чтобы решения были применимы в продакшне, он может наложить на участников ряд технических ограничений, о которых мы уже упоминали: скорость работы, размер требуемой для работы памяти или интерпретируемость модели (то есть возможность понять, «почему» модель предсказала именно это значение).

Обычно соревнования устроены так: участники решают соревнование на своем компьютере и просто отправляют на Kaggle или другую платформу файл с ответом. И если организатор видит только этот файл, он не понимает, сколько времени и ресурсов ушло на поиск ответа. Но если задать условие, чтобы участники присылали не ответ, а само решение, то есть код, то можно запустить этот код «у себя» на виртуальной машине с определенными ограничениями, например по времени и объему памяти. Сейчас есть тренд устраивать соревнования именно в таком формате.

Теперь давайте от организаторов перейдем к участникам. Кто приходит соревноваться на Kaggle? Аналитики из крупных компаний, ученые, студенты? Или, может быть, есть отдельная профессия — «кагглер»?

В соревнованиях участвуют совершенно разные люди из разных стран мира и с разным бэкграундом. Неважно, сколько тебе лет или кто ты — студент из Бразилии или профессор из России, аналитик из Китая или разработчик из США, важно лишь, насколько хорошо ты решаешь поставленную задачу. Пожалуй, единственным требованием является университетская математическая подготовка — для того, чтобы лучше понимать модели и методы машинного обучения. И даже в этом единственном правиле есть исключения — иногда даже школьники выступают на Kaggle достаточно успешно.

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

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

Если «профессиональных кагглеров» не бывает и все участники соревнований занимаются чем-то еще, то помогают ли им знания из какой-то специфичной области? Биологии, физики, экономики?

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

Другой пример: несколько лет назад проходило соревнование Microsoft Malware Challenge. Участники получили байт-коды вирусов, и надо было классифицировать их по типам, например Malware, Trojan или что-нибудь еще. И это как раз та задача, когда начальные данные требуют хорошей предобработки, поэтому специфические знания в области компьютерных вирусов — большой плюс. Конечно, можно просто «скормить» байт-код определенной модели, например градиентному бустингу, но, скорее всего, это окажется не очень эффективно.

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

Если вернуться к сравнению соревнований по анализу данных с профессиональным спортом, то получается, что прямой аналогии между ними нет. Например, в футболе какая-нибудь английская премьер-лига — это вершина твоей карьеры. А в случае с анализом данных наоборот: соревнования — это некий промежуточный этап, который тебе много чего дает, но чтобы реализовать полученное, надо отнести его куда-то еще. Это так?

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

Вопрос к вам как к руководителю спортивного направления в Data Mining In Action: зачем была создана эта дисциплина? Вы хотите вырастить поколение суперкагглеров, или это способ привести людей в анализ данных другим, менее традиционным путем?

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

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

Похоже, соревнования по анализу данных в чем-то похожи на турнир по шахматам, ведь они тоже лишены главного спортивного элемента — зрелищности. Даже если посадить сто кагглеров на заполненном стадионе, трибуны все равно не будут кричать: «Давай! Вы только посмотрите, как он обучает свой XGBoost! Вот это да!»

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


Беседовал Тарас Молотилин

Нашли опечатку? Выделите фрагмент и нажмите Ctrl+Enter.