Новости

Разработчик Data Science об участии в олимпиаде, своем опыте и пути в программировании

21 апреля 2021
1 046
7 мин. чтения

Источник: НИУ ВШЭ

Иван Брагин, data scientist в Одноклассниках

В эти выходные, 19-21 апреля, прошел финал IDAO 2021, и до того, как станут известны победители, будет возможность послушать лекции от экспертов. А пока мы ждем, кто же выиграл IDAO 2021, мы поговорили с победителем IDAO 2020 Иваном Брагиным: он рассказал об участии в олимпиаде, своем опыте и пути в программировании.

Начало пути

Свое развитие в ИТ я начал с hadoop (фреймворк для разработки и выполнения распределённых программ). Я работал преподавателем электроэнергетики, параллельно изучал Java, искал какие-то вакансии в ИТ и в конце концов нашел стартап Sociohub. Их идея состояла в том, чтобы собирать данные о пользователе из интернета, делать аналитику и затем конструировать модели, например, для кредитного скоринга. Я попал в эту компанию, начал с hadoop, а через год-полтора уже строил модели на технологиях, которые сегодня уже можно назвать древними. Тогда для меня было не совсем понятно, чем отличаются постройка модели от написания какого-нибудь backend или API — это были просто разные задачи обычного разработчика.

Четыре с половиной года назад мы снова собрались с той командой Sociohub, восстановили инфраструктуру и начали думать, чем бы еще заняться. Компания, в которой мы работали, связана с разработкой edge devices, то есть таких устройств, которые работают без подключения к серверу. У нас возникла идея попробовать что-то, связанное с компьютерным зрением для этих устройств.

В течение трех лет я работал в стартапе. Это не была работа сегодняшнего среднестатистического data scientist’а. Также, сложно классифицировать эту работу в один из классов, например, ML-инженер или DevOps, потому что приходилось отчасти работать и с железом. Работая в этой компании, я начал активно участвовать в конкурсах, и они уже намного больше были похожи на классическую науку о данных и машинное обучение — это были достаточно узкие сферы, когда у тебя уже есть готовый набор данных, и тебе нужно просто построить модель и применить ее под новые данные.

Конкурсы

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

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

Первый конкурс, в котором я участвовал еще в 2016 году, был Social Network Analysis от Одноклассников. Это был анализ социального графа, в котором убрали некоторые связи между друзьями, и их нужно было восстановить. Это задача была не на машинное обучение, скорее, здесь требовалось правильно обработать граф. Я использовал Spark, который тогда был не очень популярен, и это очень сильно помогло мне.

Обычно я ищу конкурсы с такой мыслью: я знаю некую технологию, которая сейчас хорошо развита, и в этом конкурсе она точно важна. Последний конкурс, который я выиграл — это Alfa Battle от Альфа-Банка. Задача была предсказать, зачем человек входит в приложение Альфа-Банка — пополнить счет телефона, посмотреть инвестиции или ещё за чем-то. Бизнес-идея заключается в том, чтобы сразу показать человеку то, зачем он пришел.

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

Также я участвовал в конкурсе на платформе Driven Data, где были даны ДНК плазмидов, созданных с помощью генной инженерии, и нужно было определить лабораторию-создателя. Нам удалось занять второе место, и сейчас мы с моей командой пишем статью. Существует такая проблема как атрибуция генной инженерии, которая заключается в том, что генная инженерия сейчас стала очень доступна, и количество занимающихся ею лабораторий выросло, а контролировать их достаточно сложно. Допустим, появляется новый вирус, и благодаря тому, что в разных лабораториях пользуются разными методиками, мы можем получить скрытую в ДНК информацию о том, кто именно это создавал. Это важная задача с точки зрения генной инженерии и выявления тех, кто создает некачественные или опасные организмы.

Год назад я участвовал в конкурсе на Driven Data по классификации животных. Есть огромный заповедник, по которому расставлены камеры, реагирующие на движение. В половине случаев движение спровоцировано ветром — например, листочек пролетел, в других же случаях прошло какое-то животное. Необходимо определить, какое именно, чтобы в дальнейшем строить карту перемещения животных.

Участие в IDAO 2020

Я узнал про IDAO из телеграм-чата платформы ML Boot Camp (платформа для конкурсов по машинному обучению и анализу данных). Я связался с Игорем — это мой бывший коллега, он как раз начал изучать науку о данных и предложил совместно участвовать в конкурсе для того, чтобы погрузиться в тему получше.

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

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

Как играть и выигрывать?

У меня нет цели опробовать новую технологию в конкурсе. Есть какая-то базовая технология — в основном, это анализ данных, на которую у меня набита рука, и я начинаю быстрее большинства, пробую различные подходы, нахожу какую-то интересную идею и начинаю ее развивать. Следующий конкурс я выбираю так, чтобы та идея, которая помогла мне в предыдущем конкурсе, тоже сработала и я был бы сразу на шаг впереди конкурентов.
Старый формат конкурсов привлекает одних и тех же людей. Я знаю несколько человек, которые просто участвуют во всех конкурсах и входят в топ-3 практически всегда.

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

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

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

 

2
0
0
0
0