Как я участвовал в соревновании по анализу данных от Яндекса

Всем привет!

Сначала хотел озаглавить пост “За что я люблю Яндекс”, но вовремя понял, что простыню с таким названием сам вряд ли бы стал читать 🙂 Но раз вы уже попались в мою ловушку…

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

Уже после я много ходил на различные мероприятия Яндекса — от конференции для технических писателей “Гипербатон” (угадайте-ка на какой слог тут ударение) до лекции по специфике обработки информации экспериментов на БАК.

Но кроме крутых web-сервисов и замечательной организации работы внутри самой компании, больше всего я люблю Яндекс за его учебные проекты. Они не так давно запустили обновленную версию “Академии” и целый пул каналов на youtube — подпишитесь обязательно. Именно подписка на рассылку “Академии” и привела меня “Ночь анализа данных”.

Соревнование состояло из двух частей: 1) лекции, практикум и лайт-версия задания для тех, кто пока не обладает большим опытом в обработке данных и 2) хардбасс версия для продвинутых парней, способных кодить ночь напролет. Я сразу трезво оценил свои шансы и подал заявку только на участие в практикуме. Недели за две пришло подтверждение и просьба выслать логины яндекса и гитхаба (я бы и пароли выслал, если попросили 🙂 ).

Практикум начался с лекций ребят из Яндекса. Первая была теоретической и достаточно сумбурной. А вот вторая лекция от Андрея Устюжанина, который руководит совместными проектами Яндекса и CERN, была очень полезной. Андрей рассказывал про инструменты воспроизводимых научных вычислений — docker контейнеры, стек pythonpandassklearn, jupyter notebook, github и проект Яндекса REP, направленный на унификацию исследовательской работы с результатами экспериментов на БАК.

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

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

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

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

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

Итак, итогом моих полуторачасовых ворочаний стало ничего. Но я не унывал, так как соревнование оставили открытым для дальнейших сабмитов. Уже из дома, часа в два ночи, после долгих ковыряний с алгоритмами K-means, DBSCAN, MeanShift мне все-таки удалось засабмитить решение лучше базового и попасть на 30-е место общего зачета. Считаю, что это неплохой результат для первого раза (и при числе участников в 80-90 человек).

Какие основные уроки я вынес из этого соревнования:

  1. Нельзя торопиться;
  2. Нужно последовательно наращивать сложность алгоритмов, а не пытаться сразу реализовать что-то тяжеловесное, а потом думать, как же его даунгрейдить;
  3. Повышение размерности и наращивание признакового пространства, даже при последующем выделении главных компонент, требует очень тонкого и внимательного подхода;
  4. У ребят из матклассов совершенно другое, “алгоритмическое” мышление. Мне кажется, этому даже и научиться невозможно, только если копировать какие-то паттерны;
  5. Нужно не боятся участвовать в чем-то новом, это дает существенный апгрейд в опыте и вообще мировоззрении.

Подписывайтесь на образовательные проекты. Яндекс плохому не научит.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s