Привет! Меня зовут Андрей Лукьяненко. В команде центра искусственного интеллекта МТС я занимаюсь проектом улучшения разрешения видео (super resolution): например, из видео в формате 1k мы делаем хорошую “картинку” 4k, которую можно показывать на большом экране. Как я пришел к этому? Пять лет назад я решил освоить новую профессию: оставил (тогдашнюю) работу в ERP-консалтинге и начал учиться машинному обучению. За это время я не только стал профессионалом в новой области, но и занял 1 место в международном рейтинге Kaggle Notebooks. Зачем я потратил сотни часов на выполнение конкурсных заданий и к чему меня это привело, расскажу в этой статье.

Как я сменил профессию и научился ML с нуля

По образованию я экономист, после учебы в университете начал работать в ERP-консалтинге, занимался внедрением и поддержкой ERP-систем (Enterprise Resource Planning systems). Это системы для управления договорами, логистикой, активами и другими процессами. Я работал в 3-х консалтинговых компаниях, это было по-своему интересно, но в итоге понял, что мне это не подходит: бесконечное тестирование чужих разработок, написание десятков страниц документации, постоянные переработки, стрессы. 

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

Я уволился с работы и full time стал изучать программирование, математику, машинное обучение. Прошел курс Andrew NG, читал книги про Python, посты в профильных сообществах, смотрел видео.

Мне понадобилось больше полугода на то, чтобы найти первую работу, связанную с  машинным обучением: я стал data scientist в коммерческом банке. Там я проработал полгода, сделал проект и перешел в небольшой стартап. Конечно, я не переставал учиться: прошел курс по машинному обучению на Coursera. Параллельно занимался на стэнфордском курсе по компьютерному зрению. Потом был еще один ML-курс от сообщества ODS. 

После этого я начал работать в компании, которая предоставляет доступ к wi-fi в метро. Там я занимался системой wi-fi-аналитики – это было интересно. Я анализировал огромные объемы данных, одной из задач было – определить, на каких станциях метро живут и работают разные группы пассажиров по тому, как они передвигаются в подземке. В 2018 году я перешел в телекоммуникации и начал заниматься разными DS-проектами. Я участвовал в организации двух корпоративных хакатонов, делал проект по текстовой аналитике, создал прототип систем видеонаблюдения для камер в салонах связи. 

Именно в это время я стал активным участником Kaggle, начал выступать, организовывать мероприятия в ODS. Например, в 2019 году участвовал в подготовке DataFest и даже вёл секцию.

В ноябре 2019 года я начал работать в центре ИИ МТС. Меня заинтересовал проект по созданию медицинского чат-бота, а через некоторое время я стал техлидом NLP-части проекта.

Сейчас я работаю в команде компьютерного зрения и занимаюсь проектом улучшения разрешения видео super resolution: исходное видео с разрешением 1k мы увеличиваем, например, до 4k, чтобы пользователям было комфортно смотреть его на больших экранах. Эту технологию можно использовать для улучшения качества советских фильмов или видео, снятого на телефон, когда его нужно показать на большом экране.  

Что такое сообщество Kaggle, и зачем оно дата-сайнтисту 

Kaggle – международное англоязычное сообщество для дата-сайнтистов и крупная платформа для проведения соревнований по машинному обучению. Разные компании организуют на ней свои конкурсы для поиска новых идей и помощи от профессионального сообщества, пиара или найма новых сотрудников. Одно соревнование длится 2-3 месяца, участникам дают доступ к данным, они обучают модели и загружают результаты на платформу или запускают модели на мощностях платформы. 

Участие в Kaggle-сообществе делится на 4 составляющие: 

  1. сами соревнования; 

  2. форумы для обсуждений соревнований и любых тем по ML; 

  3. датасеты – они могут относиться как к соревнованиям, так и быть самостоятельными. Участники сообщества иногда загружают академические наборы данных, которыми могут пользоваться все; 

  4. notebooks – в этом разделе люди показывают, как именно они решали задачу, и выкладывают свой код. 

Что такое Notebooks и зачем они нужны

Когда люди пишут python-код, есть несколько вариантов того, как это делать. И один из них – Jupyter-Notebooks, интерактивный интерфейс, в котором можно писать код и сразу показывать результаты анализа. Вы можете делать свой анализ по данным и показывать графики, тренировать модель машинного обучения и демонстрировать, как это происходит. 

Мое первое соревнование было таким: фонд, который занимается благотворительностью для школ, организовал соревнование, чтобы понять, каким школам нужно помогать в первую очередь. Фонд получал огромное количество заявок и их сложно было обработать. Заказчики хотели не просто получить самую качественную модель, но и посмотреть на анализ. Важным условием было опубликовать Notebooks – свои записи с исследованием. Побеждали те решения, которые получили максимальное число голосов участников сообщества. Меня это заинтересовало, я подготовил свой анализ. В результате я занял 2 место и получил призовой ноутбук pixelbook, который до сих пор использую.

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

Второе – когда ты выкладываешь свой анализ, получаешь комментарии от людей: кто-то находит ошибки, кто-то даёт советы. Это помогает более критично взглянуть на свою работу, помогает улучшать свои навыки. 

В сообществе Kaggle есть хорошая система геймификации, чтобы мотивировать людей больше участвовать в активностях. Это ранги, которые присваиваются пользователям в разных разделах: на соревнованиях, форумах, датасетах и Notebooks. Участник может получить ранг эксперта, мастера и грандмастера. И для каждого из них нужно выполнить какие-то требования. Например, чтобы стать грандмастером соревнований – нужно получить 5 золотых медалей (одну из них без команды). А их получают те, кто попал в топ 10-20 среди тысяч участников соревнований. Для рейтинга ноутбуков нужно сделать 15 решений, каждый из которых должен получить не меньше 50 лайков участников сообщества. Я стал грандмастером Notebooks в феврале 2019 года, а чуть позже вышел на 1-е место рейтинга и удерживал его больше года. Сейчас я сбавил обороты и занимаю 4-е место. Параллельно я продолжал участвовать в соревнованиях, и в августе 2019 получил ранг мастера соревнований. 

Мне понадобилось больше года и сотни рабочих часов, чтобы стать лидером рейтинга Notebooks. И это было достаточно сложно. Часто приходилось делать исследования очень быстро. Когда запускалось новое соревнование, то я старался подготовить и опубликовать Notebook максимально оперативно. Желающих это сделать очень много и важно быть одним из первых, чтобы выиграть конкуренцию за внимание сообщества. Соревнования бывают на очень разные темы: тексты, картинки, медицина, металлургия и так далее. То есть нужно активно и быстро вникать в разные задачи, что развивает навыки, но в то же время это довольно тяжело. Полноценная работа над ноутбуком может занимать порядка 20-30 часов. Бывает быстрее, бывает дольше. Времени уходило очень много, но я уверен, что оно того стоило.

Как попасть в рейтинг Kaggle

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

Занять первую строчку в рейтинге соревнований сложно. Если говорить про Notebooks, то положение в этом списке зависит от числа лайков, которые участники сообщества ставят исследованиям. Интересно, что со временем влияние старых лайков уменьшается, чтобы мотивировать участников продолжать проявлять активность. 

Самые интересные задачи в Notebooks

В сообществе Kaggle выкладывают много датасетов, и участники могут сами проводить исследования по данным. Например, когда эпидемия коронавируса была в разгаре, я сделал небольшой датасет с данными по заболевшим в Финляндии и подготовил по нему исследование. 

Было также интересное соревнование от компании Two Sigma. Они хотели, чтобы мы попробовали предсказывать котировки акций. Это очень популярная тема, но воплотить в жизнь ее практически невозможно.

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

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

Прокачка навыка анализа данных из совершенно разных областей, помогает в том числе найти хорошую работу. Некоторые соревнования проходят на научные темы: исследования химических свойств молекул, исследования по астрономии, физике, химии, – люди публикуют научные статьи и получают цитирование. Какие-то участники разрабатывают open source библиотеки и используют их на Kaggle, и эти библиотеки получают популярность, – вокруг них построена экосистема. 

Как стать лидером рейтинга Kaggle Notebooks

Самый главный совет – не бояться. Все с чего-то начинали и все ошибались. Только практика принесет результат. 

Основные советы и лайфхаки: 

  1. Первое и главное: нужно готовить ноутбуки качественно. То есть перед написанием своего первого ноутбука стоит посмотреть самые популярные решения, понять, как их делали и что в них есть хорошего: стиль, анализ, графики и пытаться это применять. 

  2. Нужно подумать о том, про что вы будете писать Notebooks. Можно писать для всех соревнований или, наоборот, попытаться сфокусироваться на каких-то конкретных темах: например, делать Notebooks только для задач по компьютерному зрению или по текстам. Это важно, если нужно выработать свой стиль и тратить меньше времени на постоянное изучение нового.  

  3. Не стоит пытаться обмануть рейтинг и копировать чужие посты в ноутбуки без ссылок на оригинал. 

  4. Подумать когда, как и где вы делаете работу. Иногда люди не делают введение к исследованию, а сразу пишут код – это отпугивает участников сообщества и уменьшает ваши шансы получить лайки. Кто-то готовит исследования на малоизвестные датасеты, которые вряд ли увидят и оценят. Если датасет маленький и у него пара просмотров, не стоит делать по нему работу, если цель – набрать лайки. И третий момент: если началось новое соревнование, и вы быстро выкатили свою работу, скорее всего, вы получите много голосов. А если прошло 3 месяца, соревнования заканчиваются, и вы только сейчас выкладываете работу, вероятно, все идеи были озвучены до этого и ничего нового вы не покажете. 

  5. Не забывать о продвижении: если вы не расскажете о своей работе сами, никто о ней не узнает. Нужно выкладывать ссылки на свою работу в социальные сети, в сообщества, чтобы больше людей увидели исследование.

Что мне дает Kaggle

Когда я стал мастером соревнований, то стал получать больше предложений о работе – именно так устроился в центр ИИ МТС. Тебя больше уважают в некоторых сообществах по машинному обучению. Быть в топе рейтинга Kaggle – крутое достижение. Я дал об этом несколько интервью и выступал на мероприятиях.

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

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

Комментарии (4)


  1. PosyaginK
    15.07.2021 11:04
    +1

    Спасибо за статью!

    Через пол года fulltime изучения DS и ML Вам удалось найти первую работу в DS. Скажите - какие основные навыки вам помогли найти первую работу? Это только пайтон и статистика?

    И на сколько сильно в этом Вам помог предыдущий опыт работы (в консалтинге)?


    1. Artgor Автор
      15.07.2021 11:20
      +1

      Для получения первой работы был нужен python, SQL, статистика/математика, знание самого машинного обучения. Кроме того я начал делать портфолио - https://erlemar.github.io/. На момент получения первой работы в нём не было разделов про каггл и отдельные проекты, и ещё пары отдельных примеров, все остальное присутствовало.

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


  1. RenatKutuzov
    13.08.2021 16:04
    +1

    Спасибо за статью! Очень вдохновляюще!

    Андрей, расскажи (ничего что на "ты"?), к моменту твоего первого трудоустройства после ERP, какие DS библиотеки (для Python или других ЯП) ты уже освоил и умел использовать и на каком уровне были познания в матстат и теорвер?

    И вопрос про соревнования на Kaggle - чтобы начать соревноваться и успешно продолжать какие библиотеки лучше уже знать и как глубоко разбираться в матстат и теорвер?

    Понимаю, что от контекста задачи многое зависит, но тем не менее интересно узнать твоё мнение. Я, например, знаком только с scikit-learn, а в матстат знания не очень глубоки, где-то на уровне понимания p-value :)


    1. Artgor Автор
      13.08.2021 16:27

      Я рад, что статья понравилась! :)

      Конечно, можно на "ты".

      К тому моменту как я нашёл первую работу в сфере DS, у меня небольшое портфолио: https://erlemar.github.io/ В то время в нем ещё не было разделов про каггл, и некоторых проектов, но большая часть контента уже присутствовала. То есть я знал основные библиотеки для обработки данных, визуализации данных и машинного обучения, немного разбирался в рекомендательных системах, в NLP и т. д.

      Если говорить про матстат и тервер - я проходил курсы на https://www.khanacademy.org/

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