company_banner

Machine Learning Boot Camp — как это было и как это будет



    13 июня стартовал ML Boot Camp — состязание по машинному обучению от Mail.Ru Group. В связи с этим мы хотим поделиться с вами впечатлениями о его предыдущем запуске, историями успеха победителей и рассказываем, что нового ждет участников в этом году.

    Как устроен контест?


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

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

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

    ML Boot Camp 2015


    В 2015 году мы провели открытый чемпионат, о котором многие не знали. Участниками стали преимущественно студенты наших образовательных проектов — Техносферы и Технопарка.

    Вот условие задания, которое участники получили при открытии контеста:

    «Перед вами стоит задача классификации: на основе известного распределения по классам обучающих элементов распределить также и тестовые. Все предоставленные для данной задачи данные разбиты на две части: обучающую (x_train.csv и y_train.csv) и тестовую (x_test.csv). Каждая строка файлов x_train.csv и x_test.csv представляет собой описание некоторых объектов в виде наборов бинарных значений (признаков), перечисленных через запятую. Все объекты распределены по трем категориям (классам). Для объектов из обучающей выборки данное разбиение известно и приведено в файле y_train.csv. В качестве ответа для данной задачи принимается текстовый файл, каждая строка которого соответствует строке в файле x_test.csv и содержит номер класса (0, 1 или 2).

    Пример данных:

    x_train.csv y_train.csv x_test.csv
    1,1,1,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,0,1,1,0,1 1 1,1,0,1,1,0,1,0,0,1,1,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,0
    1,0,1,0,0,0,1,1,0,1,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,0,0,1,0,0 2 0,1,1,0,1,0,1,0,1,0,0,0,1,0,1,0,0,1,1,0,1,0,0,1,0,0,1,0,0,0
    0,1,1,0,0,0,0,1,1,1,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,1,1,0,1,0 1 0,0,1,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,1
    1,0,1,1,0,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0 0 1,0,1,0,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,1,0,0,1,0,0,1,0

    В качестве критерия качества решения задачи будет приниматься точность классификации, т. е. доля правильно классифицированных объектов. Тестовая выборка случайным образом разбита на две части в соотношении 40/60. Результат на первых 40% будет определять положение участников в рейтинговой таблице на всем протяжении конкурса. Результат на оставшихся 60% станет известен после окончания конкурса, и именно он определит финальную расстановку участников».

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

    Участник Предварительный балл Финальный балл
    1 Павел Швечиков 0,6984126984 0,6785714286
    2 Антон Гордиенко 0,6904761905 0,6547619048
    3 Анастасия Виденеева 0,6984126984 0,630952381
    4 Артем Кондюков 0,6825396825 0,619047619
    5 Александр Луценко 0,7301587302 0,619047619
    6 Константин Созыкин 0,6587301587 0,619047619
    7 Виталий Малыгин 0,4126984127 0,5833333333
    8 Алексей Несмелов 0,4841269841 0,5714285714
    9 Владимир Винницкий 0,380952381 0,5714285714
    10 Виктор Шевцов 0,4047619048 0,5714285714

    Здесь балл — это процент последовательностей, для которых итоговая программа верно определила класс.

    На самом деле мы получили эти цепочки следующим образом.

    Класс 0 содержит последовательности, сгенерированные людьми. Мы попросили каждого из 140 человек, которые согласились нам помочь, записать последовательность из нулей и единиц так, чтобы она выглядела как можно больше похожей на случайную. При этом они не могли пользоваться компьютером, таблицами и другими материалами. Каждый должен был просто представить, что он подбрасывает монетку. Если в его воображении выпадает орел, то записать 1, если решка — записать 0. Разумеется, настоящей монеткой и другими приспособлениями также запрещено было пользоваться.

    Класс 1 содержит последовательности, сгенерированные компьютером с помощью датчика псевдослучайных чисел. Вероятность появления нуля, так же как и вероятность появления единицы, равна 50%, при этом зависимости между разными элементами последовательности нет.

    Класс 2 содержит последовательности, также сгенерированные компьютером, но при этом последовательные значения различны с вероятностью 70%.

    Только задумайтесь: даже не имея никакого представления о том, как были получены эти цепочки, участники при помощи своего железного друга (компьютера) с вероятностью почти в 70% (!) верно определяют, написал эту последовательность человек или компьютер, случайным образом или с алгоритмом. Это кажется достаточным поводом, чтобы оценить силу методов машинного обучения, ведь даже оценка в 50% была бы хорошей, учитывая, что априорные шансы угадать — всего 33,(3)%.

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

    3-е место


    Анастасия Виденеева

    «Решала я задачу следующим образом. Сначала исследовала данные и выяснила, что в обучающей выборке объектов из разных классов примерно поровну, количество нулей и единиц примерно одинаковое в объектах из каждого класса, но в классе 2 чаще, чем в других, следующий символ отличается от предыдущего (в классах 0 и 1 таких „переключений“ было в среднем около 14 в каждом объекте, в классе 2 — 17). Я добавила число переключений как новый признак и обучила randomForest на получившихся признаках. Результат оказался невысоким (без подбора параметров мой скор был 0,438, насколько я помню). Судя по скорам остальных участников на тот момент, они, скорее всего, тоже использовали исходные признаки, но более аккуратно подбирали параметры алгоритмов или использовали комбинации алгоритмов.

    Задумалась о принципиально другой идее, которая в данной задаче может „выстрелить“. Решила рассматривать данные как строки длины 30, а в качестве признаков использовать n-граммы, потому что они позволяли отразить и тот факт, что в классе 2 часто происходит смена символа, и другие закономерности в данных. На новых признаках все алгоритмы позволяли получить значительно более высокий результат (тот же randomForest без подбора параметров получил скор 0,706). Затем делала отбор признаков с помощью ExtraTreesClassifier (выборка очень маленькая, не хотелось переобучиться) и классификацию с помощью gradient boosting, svm и randomForest. Параметры всех алгоритмов и порог отсечения по важности выбирались с помощью leave-one-out кросс-валидации. Не получила значительной разницы между алгоритмами, поэтому в финальной посылке использовала более привычный мне randomForest. Интересно было бы еще посмотреть, каких результатов можно добиться с помощью нейронных сетей, но времени не хватило с ними разобраться».

    2-е место


    Антон Гордиенко

    «До участия в конкурсе весь мой опыт machine learning сводился к прохождению курса Andrew Ng на Coursera, и пару раз я пробовал делать простые классификаторы с помощью логистической регрессии.

    Первая попытка: попробовал обучить XGBoost. На ночь поставил перебирать параметры. Получил неплохое локальное качество (порядка 50%), но после отправки решения на сайт — всего лишь 39%. Наверняка переобучился, так как при отправке XGBoost с параметрами по умолчанию получил 41%.

    Вторая попытка: пробовал анализировать признаки. Выяснил, что каждый столбец в отдельности не содержит абсолютно никакой информации: число нулей и единиц одинаково для каждого класса. Решил искать зависимости для разных наборов столбцов. Перебирал всевозможные комбинации из трех столбцов (также пробовал комбинации из двух и четырех столбцов) и смотрел, как часто встречается каждая комбинация в каждом классе. Теперь многие комбинации в одном из классов встречались в 1,5–2 раза чаще (или реже), чем в двух других. Но переход на новые бинарные признаки „наличие в последовательности каждой комбинации“ в результате ничего не дал. Сайт вернул тот же 41%. Причина, скорее всего, в слишком большом количестве признаков (4060 признаков при размере обучающей базы в 210 элементов).

    Третья попытка: решил рассмотреть в качестве признаков количество подпоследовательностей каждого вида длины 5 (другие длины тоже пробовал, но качество оказывалось немного хуже). Обучил с помощью randomForest на случайных параметрах и получил на сайте 63%. Посмотрев на важность признаков, увидел, что хорошо выделяется признак „наличие подпоследовательности 10101“. Добавил еще один признак: „общее количество чередований в последовательности“. Немного поперебирал параметр max_features и получил финальные 69%».

    1-е место


    Павел Швечиков

    «Это было мое первое соревнование по машинному обучению, поэтому я пытался испробовать все, что приходило мне на ум и могло улучшить качество предсказания. Сначала я долго пытался визуализировать данные, пробовал посмотреть на данные, разложив их по PCA, но это не дало сколько-нибудь хороших результатов. Данные были все в куче, и чего-то простого, сразу заметного глазу не было видно. Потом меня заинтересовало, связаны ли как-нибудь признаки между собой, и я построил диаграмму корреляций между признаками в разных классах. Так диаграмма выглядела для класса 0:



    Так же я построил диаграмму корреляций для первого класса:



    На этом этапе я надолго остановился и пытался понять, в чем же истинное отличие, но, когда я построил подобную диаграмму для второго класса, все стало несколько понятней:



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

    Тут я дал себе волю. :) Я пробовал простое голосование, взвешенное голосование, stacking, blending, каждое из перечисленных с разным количеством уровней и разными моделями. Здесь я пробовал много разных интересных вещей, в том числе обучать модели более высокого уровня на предсказаниях предыдущего уровня с добавлением исходных бинарных признаков, пробовал разные типы кросс-валидации. Надо признаться, что метод кросс-валидации leave-one-out стал настоящей находкой для моделей второго уровня в силу небольшого количества данных, что еще несколько подняло качество ансамбля, который я заботливо причесывал, черпая методы и их обоснования из статей и обсуждений.

    В какой-то момент мне совершенно случайно подали несколько хороших идей, в частности про то, что можно использовать для обучения моделей следующего уровня не предсказания предыдущих, а вероятности классов, которые получены на моделях первого уровня, а также прекрасную идею, что можно посмотреть на признаки как на строки. Вкупе с теми диаграммами корреляции, которые я получил в самом начале контеста, это открыло мне глаза на то, что еще можно сделать для улучшения качества. В частности, я пробовал представить бинарные признаки как случайное блуждание, пытался использовать симметрию признаков, количество смены 0-1, количество непрерывных 0 или 1, их максимальную/медианную/среднюю длину, а также я пытался представить исходные признаки в виде текстовых документов, состоящих из слов 0, 1, добавлял новые признаки, обозначающие номер признака, на котором непрерывная последовательность из одинаковых значений прерывается. Я думал пойти дальше и добавлять признаки TF-IDF для разных комбинаций „слов“, но время поджимало, и я решил остановиться на том, что уже получилось.

    Получившаяся модель выглядела следующим образом:



    На 90% данных (c добавленными признаками, описанными выше) я обучил семь моделей (представлены ниже), для остальных 10% данных я получал предсказания вероятности класса от моделей первого уровня и на этих новых признаках обучал модели второго уровня, в числе которых был svm, randomForest и небольшая нейронная сеть. Предсказания моделей второго уровня я сливал вместе с помощью majority voting».

    Как можно заметить, двое из трех финалистов признались в том, что опыт решения задач по машинному обучению до контеста у них был невысок. Это означает, что сроки соревнования и открытые ресурсы предоставляют вам возможность не только во всем этом разобраться и предложить свое решение, но и показать достойный результат — было бы только желание и упорство.

    ***

    В этом году мы проводим состязание вновь! На этот раз для участников подготовлена новая задача, а победителей ждут не только респект и уважуха, но еще и полезные призы (iPod shuffle и внешние жесткие диски на 500 Гб), а также возможность присоединиться к команде Mail.Ru Group! Сфера применения алгоритмов машинного обучения постоянно расширяется, уже сейчас они активно используются у нас в рекламных сервисах, антиспаме и социальных сетях. Мы заинтересованы в специалистах по machine learning и хотим, чтобы люди знали, что это такое и как этим пользоваться. Такие состязания, как ML Boot Camp, — отличная возможность не только прочитать абстрактно непонятную теорию, но и сразу же обкатать ее на задачах, близких к реальным. Это повод наконец заняться машинным обучением тем, кто всегда этим интересовался, но медлил в нерешительности, и шанс для опытных юзеров показать свой высокий уровень. Присоединяйтесь к нам на ML Boot Camp!

    Чемпионат ML Boot Camp входит в число инициатив Mail.Ru Group, направленных на развитие российской IT-отрасли и объединённых ресурсом IT.Mail.Ru. Платформа IT.Mail.Ru создана для тех, кто увлекается IT и стремится профессионально развиваться в этой сфере. Также проект объединяет чемпионаты Russian Ai Cup, Russian Code Cup и Russian Developers Cup, образовательные проекты Технопарк в МГТУ им. Баумана, Техносфера в МГУ им. М. В. Ломоносова и Технотрек в МФТИ. Кроме того, на IT.Mail.Ru можно с помощью тестов проверить свои знания по популярным языкам программирования, узнать важные новости из мира IT, посетить или посмотреть трансляции с профильных мероприятий и лекции на IT-тематику.

    Mail.Ru Group

    1017,00

    Строим Интернет

    Поделиться публикацией

    Похожие публикации

    Комментарии 12
      0
      Посмотрите сами в таблице ТОП-10 участников контеста.

      Это ТОП по и финальному и предварительному баллу?
      Любопытно было бы посмотреть каким был ТОП-10 чисто по предварительному и как относительно него изменился ТОП-10 по финальному.
        0
        Это топ только по финальному. На самом деле, по предварительному получились бы практически те же финалисты, только Саше Луценко повезло бы сильно больше, по предварительному результату он оказался бы на первом месте.
        Когда пройдет второй контест — можно будет попробовать сравнить корреляции между рейтингами на разном классе задач. Вдруг найдется что-то интересное :)
        0
        Блин! Какая интересная задача была! Прям руки чешутся натравить на неё свои алгоритмы. Если времени наскребётся, сначала её помучаю, а потом уже посмотрю что в этом году придумали.
          0
          Если вы про «Бинарные данные», о которых речь в статье — так ведь контест уже закрыт, да и интриги больше нет.
          Попробуйте лучше новую, она вполне ок — 900+ признаков, есть где разгуляться :)
          0
          Меня удивляет, что до конца конкурса еще 29.5 дней, а некто Andrey Litvinov уже выложил решение с средней относительной ошибкой равной 0.0 (то есть лучше уже нельзя в принципе)…
            0
            Это ошибка — в случае, когда загружается решение, которое не может прохавать парсер, решению выставляется status=FAULT и score=0. Мы не учли это при запуске контеста, где метрикой выступает значение, которое «чем меньше тем лучше» :(
            Конечно же такие решения в финальном рейтинге учавствовать не будут вовсе, да и из промежуточной таблицы мы их уберём ASAP
            А 0.0 я думаю в принципе недостижим
              0
              Билайновский конкурс показал, что если не ограничивать количество попыток — ещё как достижим. Один из участников просто перебором брутфорснул 70% тестовой выборки и таким образом увиличил себе учебную. Не из злого умысла, а потому что мог.
                0
                И как, дали приз? Или это оказалось не в рамках правил? :)
                  0
                  Ну он же показывающиеся 70% брутфорснул, а не те 30% по которым идёт зачёт.
                  Они там закрытым образом редактировали результаты от тех, которые им не понравились. Так что связь между результатами и местами получилась не очевидной. Если хотите узнать подробнее, то вот тут в статье и в комментариях к ней: https://habrahabr.ru/post/269745/
                0
                Отвечу сам себе — мы исправили косяк с нулевыми результатами, теперь всё встало на свои места. Приношу извинения всем, кто был введен в заблуждение, будем тестировать лучше :)
              0
              Может, подскажете — у вас есть какая нибудь площадка/чат для обсуждения решений? А то тяжеловато чему-то учиться, не общаясь с другими участниками контеста.
                0
                Отдельной площадки нет. А пусть будут google groups, тынц
                Ссылочку добавили, спасибо за идею

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

              Самое читаемое