Как соревнования по 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.
На соревнованиях редко придумывают новые методы — все же у них другая цель. Но когда это происходит, методы становятся широко известны, ведь они доказывают свою эффективность высоким местом в соревновательном рейтинге. Кроме того, в процессе решения задач часто придумываются небольшие улучшения и, что важнее, происходит отбор и сравнение существующих методов друг с другом. В некотором смысле, соревнования — это платформы для «эволюционного отбора» алгоритмов машинного обучения: побеждают решения с наилучшим качеством.
Например, знаменитый 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! Вот это да!»
Аналогия с шахматами очень правильная: и зрелищность, и динамика, и накал — все это в анализе данных есть, но они видны лишь тем, кто в теме, знает правила игры и то, какая партия сейчас разыгрывается. Конечно, соревнования по анализу данных могут длиться месяцами, но основной накал борьбы наступает в конце — в последние дни и часы. И все это, как в любом спорте, может быть невероятно интересно. А чтобы лучше это почувствовать, надо поучаствовать самому.
Беседовал Тарас Молотилин
Во Франции нашли и расшифровали 57 прежде неизвестных писем Марии Стюарт
Борьба Марии Стюарт, королевы Шотландии и Франции, за английский престол закончилась для нее на эшафоте 8 февраля 1587 года. На гибель Марию Стюарт обрекли несколько писем, которые были зашифрованы слишком простым кодом. Только что архив переписки Марии пополнился: участники проекта DECRYPT обнаружили во Франции больше пятидесяти писем королевы и расшифровали их. Шестнадцатый век, эпоха становления абсолютной монархии и новой европейской политики, наполненный придворными интригами, неофициальной дипломатией и шпионажем, стал также и временем бурного развития искусства криптографии. Переписка монархов, послов, их агентов, попав не в те руки, могла привести к войне или революции — поэтому содержание писем начинают скрывать от лишних глаз с помощью шифров. Самым распространенным — и простым — методом тогда был моноалфавитный симметричный замещающий шифр, где каждой букве соответствует один символ, а для шифровки и расшифровки используется один и тот же ключ в виде таблицы соответствия букв и символов. Взламывать его научились еще арабские математики в X веке: для этого нужно подсчитать частоту встречаемости символов и затем сопоставить ее частотой букв в других текстах на предполагаемом языке послания. В русском языке, например, самая частая буква — «о», на нее приходится 10,98 процента знаков в любом тексте. Если в зашифрованном тексте какой-то символ встречается с такой частотой, то он наверняка замещает именно «о». В частности, именно так американцы Бетти и Дональд Гардены в 1969 году прочли зашифрованные письма серийного убийцы Зодиака, которые публиковали газеты. Но для XVI века такой шифр был уже слишком простым. Появились более изощренные методы, например, омофонический шифр, в котором одну и ту же букву могли обозначать разные символы, или использование номенклатур, то есть таблиц специальных символов для некоторых слов, имен, топонимов и месяцев. Появились шифры с нулевыми знаками, которые игнорировались при расшифровке, а также знаки, которые отменяли предыдущий или, напротив, повторяли его. Ключи шифрования могли меняться по ходу текста. Да и сам текст мог быть на экзотическом языке, чтобы затруднить его идентификацию при помощи частотного анализа. Комбинирование этих приемов делало взлом шифра крайне сложной задачей. Многие документы того периода так и остались не расшифрованными ни современниками, ни последующими исследователями — и только появление методов компьютерного анализа позволило, наконец, их прочесть. Неопознанный архив Слишком простой шифр сыграл фатальную роль в судьбе Марии Стюарт. Главной уликой в суде, который приговорил ее к смерти, стало письмо Марии лидеру заговорщиков Энтони Бабингтону. Документ перехватили агенты секретаря Елизаветы I Фрэнсиса Уолсингема и прочли — он был зашифрован примитивным моноалфавитным шифром с очень небольшой номенклатурой. Неосторожность Марии, вероятно, была вынужденной. Ее молодой корреспондент — Бабингтону не было и 25 лет — скорее всего, просто не владел более сложными способами шифрования. Вообще среди писем Марии Стюарт встречаются примеры использования значительно более сложных шифров. Всего в Английском национальном архиве хранится больше сотни зашифрованных писем шотландской королевы. Многие из них связаны с заговорами по свержению Елизаветы I и коронованию Марии как королевы Англии. Теперь эпистолярный архив Марии Стюарт сильно пополнился — сразу на 57 новых документов — благодаря усилиям трех членов группы DECRYPT: компьютерщику Джорджу Ласри (George Lasry), историку Норберту Бирманну (Norbert Biermann) и физику Сатоши Томокийо (Satoshi Tomokiyo). Изучая оцифрованный архив Национальной библиотеки Франции в поисках зашифрованных рукописей, они обнаружили документы, которые были атрибутированы как итальянские письма первой половины XVI века. Изучив эти документы, исследователи поняли, что они не имеют никакого отношения к Италии, а первая попытка расшифровки — когда язык послания еще не был определен — дала им имя, которое все расставило по местам. Это было имя Фрэнсиса Уолсингема, который занимался для Елизаветы в первую очередь вопросами различной секретности, и, в конечном счете, успехи которого погубили Марию Стюарт. Но эти письма были зашифрованы гораздо более сложным кодом, чем попавшие в руки Уолсингема письма Баббингтону: в нем было много омофонических знаков и сложная номенклатура. Поскольку исчерпывающий поиск, при котором перебираются все возможные варианты расшифровки, занимает слишком много времени и вычислительных ресурсов, группа применяла метод поиска восхождением к вершине (hill climbing) — один из способов решения оптимизационных задач (например, разных типов задачи коммивояжера). Этот алгоритм начинает работу с того, что генерирует произвольное решение, а затем пошагово его улучшает, меняя параметры. Перед началом расшифровки исследователи составили таблицы вероятности для пятибуквенных сочетаний, таких как -ision, -ement, -etles, -ourle. После этого была рассчитана вероятность сочетания этих комбинаций с наиболее часто встречающимися буквами в письмах. Затем был сгенерирован случайный ключ, призванный выявить омофоны, чтобы разметить их в тексте. После незначительной модификации ключа алгоритм заново размечал текст, и, в случае улучшения результата, принимался новый ключ, в противном случае он отвергался. Алгоритм применялся до тех пор, пока не выявлялся оптимальный пик для всего текста. Этот метод позволил выявить омофоны, в то время как знаки номенклатуры — знаки, обозначающие сразу целые слова, — подбирались вручную. Письма были написаны на французском, но шифр отличался от принятого во французской дипломатии того периода и был сложнее. В частности, в шифрах французских послов в Венеции, Риме, Испании не использовались диакритические знаки, которые есть в письмах Марии Стюарт. Ласри и его коллеги пока не нашли ответа, был ли этот шифр разработан самой королевой или кем-то из ее окружения — или был усложненным вариантом французского дипломатического шифра. Исследователи проверили корректность расшифровки путем сравнения найденных писем с уже известными документами из коллекции бумаг Уолсингема в британских архивах. Ласри и его коллеги полагают, что, возможно, в дальнейшем удастся обнаружить и другие документы, связанные с судьбой Марии Стюарт, которые зашифрованы так же. Что в письмах Из 57 найденных писем Марии Стюарт 54 адресованы французскому послу при английском дворе Мишелю де Кастельно, два — посланнику французского короля Генриха III, Бертрану де Салиньяку де ла Моте-Фенлону. Еще одно письмо написано секретарем Марии Жаком Но и адресовано Жану Арно, секретарю де Кастельно. Хотя историки знали о секретной переписке Марии Стюарт с Мишелем де Кастельно, письма считались утраченными. Нынешняя находка показывает, что переписка с де Кастельно началась не позже мая 1578 года и продолжалась как минимум до середины 1584 года — весь этот период Мария находилась в Англии под стражей, но могла общаться с внешним миром с помощью писем, которые она передавала через доверенных лиц. Французский король тогда казался наиболее реальным союзником пленной шотландской королевы, а его посол Мишель де Кастельно — наиболее очевидным контрагентом по переписке. Расшифровка писем позволила датировать их и установить, что в основном они относятся к периоду 1580-1583 годов — особенно к июлю 1583-го — то есть связаны с заговором Трокмортона. Это позволило узнать новые детали заговора и уточнить степень вовлеченности в него французского двора. Кроме того, в это же время происходило еще одно событие, которое могло значительно повлиять на судьбу Марии — растянувшееся на три года сватовство брата французского короля, герцога Анжу и Алансона, к Елизавете. Показательно, что Мария активно защищает в письмах идею этого брака и даже предлагает свое посредничество при переговорах. Одновременно она предостерегает Кастельно, что англичане не ведут переговоры честно и их целью является не брак, а стремление столкнуть интересы Франции и Испании в Нидерландах, где Анжу был провозглашен «Протектором свободы». Одновременно Мария предлагает свое посредничество между Анжу и испанским королем Филиппом II с целью предотвратить возможный конфликт. В нескольких письмах Мария высказывает крайне неприязненное отношение к графу Лестеру, фавориту Елизаветы, которого она обвиняет в самых разнообразных заговорах, в том числе и против английской королевы. В частности Мария пишет о проекте брака между Лестером и Арабеллой Стюарт, правнучкой Маргариты Тюдор, то есть потенциальной претенденткой на английский престол. Можно предположить, что подразумевалась возможность организованной «утечки информации» с целью внесения раскола в окружение Елизаветы, тем более, что в этих письмах регулярно упоминается следивший за Марией секретарь Елизаветы Фрэнсис Уолсингем. В нескольких письмах, относящихся к концу 1582-го, Мария просит де Кастельно повлиять на французский двор, чтобы тот поддержал сына Марии, Якова VI (в будущем ставшим монархом Англии и Шотландии), когда его в августе 1582 года захватил Уильям Ратвен, а ко власти в Шотландии пришли радикальные протестанты. Также Мария сообщает в письмах о визитах представителей Елизаветы, которые вели переговоры о возможных условиях ее освобождения и даже восстановления на шотландском троне (совместно с сыном). Одновременно она пишет о беспредметности этих переговоров, в которых представители английской королевы не имеют полномочий предлагать что-либо конкретное. Кроме того, Мария призывает де Кастельно активизировать шпионскую активность и переманивать на свою сторону придворных Елизаветы, а также в большем объеме награждать агентов, одновременно предостерегая, что среди потенциальных сочувствующих могут быть (как, впрочем, и получилось) агенты Уолсингема. Подводя итог, можно сказать, что расшифровка недавно обнаруженных в Национальной библиотеке Франции, а также семи уже известных, но не расшифрованных писем Марии к Кастельно, которые находились в британских архивах, показывает: алгоритмический взлом омофонических шифров может пролить еще немало света на тайную дипломатию раннего Нового времени.