Как привлечь к решению задачи лучших аналитиков со всего мира
Рассказ студентов «Сколтеха» о международных соревнованиях по анализу данных.
В сентябре 2016 года в Париже прошло крупнейшее соревнование по анализу данных Data Science Game, в котором приняли участие 140 команд из 70 стран.
В финальную часть соревнований прошло 20 команд, среди которых три российские: из «Сколтеха», МФТИ и МГУ. Команда «Сколтеха» на этих соревнованиях заняла третье место.
Студенты «Сколтеха» рассказали vc.ru, что помогло их команде войти в тройку лучших и для чего нужны подобные соревнования.
Андрей Рыков и Александр Аникин закончили мехмат МГУ и поступили в «Сколтех», где под руководством профессора Виктора Лемпицкого изучают компьютерное зрение. Сейчас студенты работают над дипломным проектом: созданием робота для сортировки бытовых отходов.
Состав команды: студенты «Сколтеха» Андрей Рыков и Александр Аникин, аспирант «Сколтеха» Дмитрий Ульянов, аспирант МГУ Дмитрий Алтухов.
Правила соревнований
Далее рассказывают Андрей Рыков и Александр Аникин.
Data Science Game — ежегодные соревнования, которые помогают получить опыт в решении прикладных бизнес-задач. Конкурс состоит из двух этапов: заочного соревнования, задачи которого команды решают, находясь дома, и очного этапа в Париже, в котором принимают участие 20 команд.
Случайные люди участвовать в этих соревнованиях не могут — битва проходит между университетами. В состав команды входит четыре человека, среди которых должно быть не более двух аспирантов. У нас так и получилось: Дмитрий Ульянов и Дмитрий Алтухов были аспирантами, а мы магистрами.
По условиям соревнований в финал проходят не более трех команд из одной страны и не более одной команды из университета. Мы поняли, что попадаем под эти условия: из «Сколтеха» мы единственные, ну и в тройку лучших российских команд мы тоже попадали, наравне с ребятами из МФТИ и МГУ.
А началось всё с того, что Дмитрий Ульянов предложил нам собрать команду и поучаствовать в этих соревнованиях. Сказал, что неплохо бы съездить в Париж, размять мозги и что-нибудь там выиграть. Всё получилось спонтанно.
Стоимость участия
Организационного взноса как такового не существует, все расходы на организацию мероприятия учредители соревнования берут на себя. Нужно было лишь оплатить билеты в Париж и пару ночей в гостинице.
Нашу команду частично спонсировал «Сколтех», частично — «Яндекс». Мы подали заявку на академическую поездку, «Сколтех» её одобрил и покрыл нам расходы на проживание и перелёт. Дмитрий Ульянов на тот момент работал в «Яндексе», и ему удалось убедить руководство оплатить поездку себе и Дмитрию Алтухову из МГУ.
Подготовка к соревнованиям
Специально к этим соревнованиям мы никак не готовились: хватило тех знаний, что мы получили за год обучения в «Сколтехе». До этого мы оба закончили мехмат МГУ, который дал нам хороший математический базис. К тому же в нашей команде были два аспиранта с большим опытом участия в подобных соревнованиях. Благодаря их наработкам по коду мы сэкономили кучу времени: вместо того, чтобы писать код с нуля, использовали уже готовые сниппеты. Это помогло сократить время на подготовку данных, очистки и прочие рутинные процедуры.
Мы пришли в «Сколтех», не зная ничего ни о компьютерном зрении, ни о машинном обучении. Всему этому мы научились за год, и этих знаний хватило, чтобы успешно участвовать в международных соревнованиях вроде Data Science Game.
По книгам к таким соревнованиям точно не подготовишься, нужен практический опыт решения задач по анализу данных. Лучший способ: идти на Kaggle, брать оттуда задачи и пытаться их решать.
Kaggle — это платформа для проведения конкурсов по машинному обучению. Большинство конкурсов довольно интересные и практичные, причем за первые места дают неплохие призовые. Например, тем, кто разработает лучший алгоритм по прогнозированию цен на недвижимость, «Сбербанк» обещал $12 тысяч.
Или вот, например, победитель турнира по прогнозированию рака легких по ренгеновским снимкам получит полмиллиона долларов. Но суть этих соревнований не столько в призовых, сколько в возможности набраться опыта в области анализа данных и машинного обучения. То есть решать не какие-нибудь задачи, оторванные от реальности, а прикладные, с реальным полезным действием.
На Kaggle довольно дружное сообщество, которое обсуждает интересные вещи. Если погрузиться и начать читать, можно узнать много нового. Для нас погружение в машинное обучение прошло именно там: мы брали задачу и решали её. Сначала получалось не очень, потом всё лучше и лучше. Так и развивались.
Распределение ролей
Неформальным капитаном у нас был Дмитрий Ульянов, но четкого разделения ролей в команде не было. Мы поделили между собой разные эксперименты и независимо друг от друга решали задачу. Распараллелить работу оказалось самым продуктивным решением: каждый пробует пару-тройку методов, ковыряется с данными, пытается найти закономерности, а потом всё это собираем вместе, комбинируем и отбрасываем то, что не работает. Получившееся решение мы совместно дорабатывали, улучшали и выпускали в финал.
Первый заочный этап
Первый этап проходил в июне 2016 года. Задание было от компании, которая занимается установкой солнечных батарей на крыши домов. Нужно было при помощи спутниковых снимков определить ориентацию крыши и предположить, какая доля солнечного света будет на неё попадать. Это нужно, чтобы понять, на какие дома выгодно ставить батареи, а на какие нет.
Задание было нам близко, потому что в «Сколтехе» мы как раз занимаемся компьютерным зрением в лаборатории профессора Виктора Лемпицкого. Нам дали набор данных спутниковых снимков крыш, где из огромного снимка вырезан дом, снятый с неизвестной нам высоты. Нужно было определять ориентацию этих крыш и разделить их на четыре класса: двухскатные крыши, направленные с севера на юг и с запада на восток, плоские крыши и отдельный класс крыш любой другой формы.
Предоставленный набор данных люди заранее разметили руками, то есть указали, что вот эта крыша имеет такую-то ориентацию. А мы уже при помощи этого набора данных должны были построить алгоритм, который автоматически распознает новое изображение крыши, которое до этого никогда не видел, и говорит, к какому из четырех классов эта крыша относится. Таким образом, получив новый снимок, наш алгоритм должен был с наибольшей точностью определить ориентацию крыши.
Сделать это можно несколькими способами, единого правильного решения нет. Например, каждый алгоритм для каждого из возможных классов расположения крыш задает число от нуля до единицы, которые являются вероятностью того, что данное изображение принадлежит такому-то классу. Потом мы можем посчитать среднее арифметическое всех предсказанных чисел и взять максимально возможное.
Мы взяли ранее исследованные алгоритмы, которые уже показали свою работоспособность, и аккуратно адаптировали их к нужным нам данным. При этом нельзя было использовать данные, на которых содержались похожие фотографии крыш, и пытаться за счет этого улучшить качество исследований.
Эту задачу мы решали около месяца, но это не значит, что мы безвылазно по восемь часов сидели у компьютеров и бились над задачей. Компьютеру нужно время, чтобы правильно построить алгоритм. Это может занимать день, причем мы в это время можем параллельно заниматься другими делами. Мы пишем код, запускаем его и сутки ждем, когда компьютер обработает данные и закончит эксперимент.
Это походило больше на инженерную работу, где нам требовалось правильно применить накопленные знания и навыки. В итоге всё свелось к постановке десятка экспериментов и выбору лучшего алгоритма.
Все решения на заочном этапе были более или менее похожими. В основном участники пытались придумать умную аугментацию. Например, у крыши есть ориентация с севера на юг и с запада на восток. Если взять эту картинку и развернуть на 90 градусов, то будет уже другая ориентация и таким образом можно размножить данные и увеличить количество примеров. Кто придумает лучший способ, тот молодец.
В итоге из 140 команд из 70 стран в финал прошли 20 команд, и мы в том числе.
Финал в Париже
Задание финала сформулировали на церемонии открытия, а набор данных выдали уже на следующий день, утром в субботу. И до середины воскресенья у нас было время, чтобы эту задачу решить. После церемонии открытия нас увезли в пригород Парижа в замок, который принадлежит французской консалтинговой компании Capgemini — это один из главных спонсоров.
В финале была задача от страховой фирмы AXA — это довольно крупная европейская компания, созданная еще в 1816 году. На основе анкетных данных человека и автомобиля нужно было предсказать, купит человек страховку или нет. Возможно, в будущем это помогло бы компании отсеивать «холодные» звонки человека, который оставил заявку на сайте. То есть не перезванивать тем людям, которые просто хотели узнать цену и не собирались покупать страховку.
Если заочный этап был связан с работой над изображениями, то здесь было классическое машинное обучение: нам предстояло обучить машину правильно интерпретировать данные и строить прогнозы.
Сначала мы договорились независимо друг от друга проанализировать данные, попытались найти интересные закономерности, генерировали какие-то новые признаки. Подготовка данных и создание грамотных признаков порой важнее, чем создание сложной модели.
Ключом к решению и высокому результату оказалось добавление признаков, сконструированных человеком. Даже когда кажется, что все данные для решения задачи есть, машине всё равно не хватает знаний, чтобы эти данные правильно переформулировать. Тут на помощь приходит человек. Он подсказывает алгоритму, что вот эти исходные данные можно сформулировать таким вот образом, и тогда алгоритм начинает решать задачу более продуктивно.
В нашей задаче ключевым признаком было количество заявок от одного и того же человека. Чем меньше заявок оставил человек, тем с большей вероятностью он купит страховку. Команды, которые до этого додумались, оказались наверху списка. Ну, а дальше мелкие доработки сыграли свою роль: мы добавили несколько признаков, которые ещё немного улучшили результат, и вышли на итоговое третье место.
Не стоит думать, что мы все два дня безвылазно сидели у мониторов и корпели над задачей. Нам удалось даже несколько часов подремать: у каждого из нас была отдельная комната, где мы могли отдохнуть. В какой-то момент мы поняли, что сидим слишком давно и в голову уже ничего умного не приходит, и отправились спать, а в воскресенье утром продолжили.
Мы работали в общем зале, вместе с остальными участниками. На каждую команду приходилось по столу, но никто не запрещал сидеть в другом месте. Главное — не выходить с ноутбуком из зала.
В нашей команде была довольно расслабленная атмосфера, мы не ощущали какого-то колоссального давления. Спокойно решали задачу ради удовольствия, при этом не было ощущения, что нам не хватит времени и мы что-то не успеем. А некоторые ребята, наоборот, очень активно пыхтели над задачей и, судя по всему, сильно волновались.
В воскресенье вечером нам объявили результаты. Все три российские команды уехали с призами, что несколько обескуражило организаторов. Дело в том, что предыдущие соревнования тоже выиграла команда из России.
В этот раз первое место заняла команда МФТИ, что вполне заслуженно: они давно участвуют в подобных соревнованиях и занимают первые строчки в рейтинге Kaggle. Третье место заняли мы, а команда из МГУ получила специальный приз жюри за самое нестандартное решение.
За первое место Microsoft подарил свои компьютеры и кучу разных аксессуаров. Ребята из Кембриджа, занявшие второе место, получили квадрокоптеры, а мы получили Xbox.
Практическая польза соревнований
Науку подобные соревнования двигать не будут, потому что наука — это попытка сделать что-то новое, чего не было раньше. Эти соревнования предполагают иной подход: возьмите то, что было раньше, и догадайтесь, как это правильно комбинировать, чтобы получить лучший результат. Это больше инженерный подход: не изобрести велосипед, а собрать лучшую модель из имеющихся деталей.
Кроме того, выигравшие решения не всегда применимы в бизнесе из-за того, что оказываются довольно громоздкими и требуют больших вычислительных ресурсов. Поэтому в реальном бизнесе приходится применять менее качественные, но более быстрые решения.
Вместе с тем, из таких решений набирается пул интересных идей, которые бизнес забирает и настраивает под свои процессы и задачи. Такие соревнования компаниям нужны для того, чтобы сдвинуть задачу с какой-то мертвой точки, получить набор идей и сильно продвинуться в решении. Конечно, бывают случаи, когда появляется красивое изящное решение, которое хочется сразу реализовать, и такие случаи были на Kaggle.
Участие в подобных соревнованиях довольно выгодно: призовой фонд, который выплачивается победителю, сравним с тем, сколько бы компания заплатила за решение задачи сторонним подрядчикам. При этом над задачей работают тысячи аналитиков со всего мира, благодаря чему компания получает гораздо больше решений. Благодаря соревновательному духу, который присутствует на подобных конкурсах, люди пытаются максимально улучшить свое решение.
Периодически проводятся соревнования не на денежный приз, а на возможность получить оффер от компаний. Они обычно легче, чем соревнования на денежный приз. В своё время такое соревнование на Kaggle проводил Facebook.
Российские компании постепенно организовывают у себя отделы анализа данных. Им не хочется открывать какие-то данные, чтобы они не утекли к конкурентам, поэтому процесс постепенно перетекает внутрь компаний, но площадки все равно будут существовать. Тот же Kaggle сейчас немного изменился — его купил Google и там постепенно появляются более фундаментальные задачи именно с точки зрения науки: чуть менее прикладные сегодня, но позволяющие развивать технологии, которые будут важны завтра.
Свои соревнования в Kaggle проводила Avito, S7 тоже собирается устроить хакатон. А «Сбербанк» пошел дальше и разработал российский аналог сервиса Kaggle: платформу Massive Data. Также он организовывает свои собственные соревнования Sberbank Data Science Journey для специалистов в сфере обработки данных. Некоторые российские компании выкладывают свои задания на Boosters. Например, «Тинькофф банк» приглашал зимой принять участие в турнире по машинному обучению: победитель получил 100 тысяч рублей и предложение о работе.
Если говорить о нас, то участие в таких соревнованиях помогает здорово прокачать мозги, найти новых подход к решению задач и придумать нестандартное решение. Главное во всем этом — получать удовольствие от процесса. Это, кстати, одна из причин того, почему у нас всё получилось.
© vc.ru