Александр Гущин

Сегодня в блоге материал из цикла ЖЗЛ;), в котором читатели познакомятся с интересными людьми. Правила очень простые: я нахожу неординарную личность и заваливаю вопросами (от любимой музыки и языков программирования до планов на жизнь и прогнозов будущего «датамайнинга»). На какие вопросы отвечать  — каждый выбирает сам. Публикую ответы «как есть». Читатели могут оставлять и свои вопросы в комментариях;) Ну и мнение о подобном цикле (нужен/не нужен).

Первопроходцем в таком интервьюировании стал Саша Гущин, который за несколько последних соревнований на Кэгле два раза брал золото и один раз был третьим. Сейчас он 5й в общем рейтинге платформы после всего 20 соревнований. Итак, поехали…

guschin
Где учитесь? Почему поступили именно сюда?

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

В каких, на Ваш взгляд, учебных заведениях в России готовят лучших специалистов по DS?

Из “специальных” предметов, которые могли бы пригодится в анализе данных, у нас были, пожалуй, только программирование на C, базы данных, курс “алгоритмы и модели вычислений” по Кормену, математическая статистика и методы оптимизации. Много узкоспециализированных предметов на физтехе рассказывается на кафедре, занятия на которой начинаются в весеннем семестре третьего курса бакалавриата. На моей кафедре ИС (Интеллектуальные системы) в бакалавриате есть, в общем-то, достаточно хорошие теоретические курсы, однако, существенно недостаёт практических. Похожая ситуация на кафедре ИППИ (Институт проблем передачи информации). Неплохим выбором для тех, кто хочет заниматься машинным обучением, является кафедра ММП на ВМК МГУ. Кроме того, на ФИВТе (факультет МФТИ) на первых трёх курсах есть лекции по машинному обучению, а также курс, где студенты вместе с более опытным куратором делают рабочий проект по анализу данных, что является хорошим опытом. На том же ФИВТе есть неплохие кафедры с уклоном в практический анализ данных.

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

Как Вы дополнительно образовываетесь в анализе данных? Что можете порекомендовать новичкам?

Моё обучение анализу данных, в целом, можно описать так: я выбираю интересную задачу и начинаю её решать. Это может быть соревнование, может быть задача на работе или что-нибудь ещё. В процессе решения неизбежно возникают проблемы, в которых приходится разбираться — так я узнаю что-то новое.

Поскольку мне нравится самому контролировать процесс своего обучения, я не стал поступать, например, в ШАД. Тут главное — понять, как вам самому удобнее учиться.

Общий совет новичкам — больше практиковаться. Я считаю, что любой человек может достичь совершенства в выбранной области, если ему интересно и если он потратит достаточно времени для этого. Я начал заниматься анализом данных осенью 2014 года, не имея практически никаких знаний в этой области. В среднем я тратил на решение задач по 4-5 часов каждый день на протяжении полугода, прежде чем выиграл первое соревнование.

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

Если что-то сработало (или не сработало), нужно разобраться почему, это может дать более глубокое понимание решаемой проблемы. Со временем это понимание позволит сходу ориентироваться в задачах, которые вы видите в первый раз.

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

Насколько известно, Вы сами занимаетесь тем, что учите анализу данных. Расскажите об этом поподробнее.

Да, в данный момент я, вместе с другими ребятами, веду дополнительный курс “Анализ данных на практике” на физтехе. Весной 2015 мы вели его вдвоём вместе с Александром Никитиным. Осенью 2015 с Виктором Кантором — он рассказывал про алгоритмы и их применение, я делился опытом участия в соревнованиях. Оказывается, что ведение курса помогает и тому, кто его ведет. Когда готовишься, думаешь, как рассказать понятней и интересней, смотришь на материал под другим углом, могут прийти какие-нибудь новые идеи. Кроме того, само общение со студентами полезно: вопросы, которые тебе задают, могут помочь, да и студенты часто предлагают хорошие идеи, о которых ты сам не подумал.

Где работаете? Как там оказались? Чем занимаетесь на работе?

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

Какими языками программирования и технологиями владеете? Что максимально полезно для анализа данных?

Владею питоном. Пока что этого было достаточно) Основную часть инструментов использую из sklearn. Градиентный бустинг из xgboost, нейронные сети из lasagne. Думаю, для новичков, выбирающих, какой язык учить, лучшей комбинацией будет python + ipython notebook + pandas + sklearn. В ipython notebook удобно писать код, pandas хорош для работы с табличками, а sklearn имеет в своём составе “базовый набор” инструментов и алгоритмов для анализа данных. Для работы с нейронными сетями можно выбрать Keras или Lasagne.

Как узнали о платформе Kaggle? Расскажите о первых соревнованиях.

Уже не помню откуда) Летом 2014 года решал Forest Cover Type Prediction, осенью начал посещать тренировки по ML в Яндексе, там познакомился с ребятами, которые в то время организовывали эту тренировку и регулярно её посещали — Димой Дремовым, Мишей Трофимовым, Стасом Семеновым, Сашей Фенстер. Машинное обучение я на то время знал не очень хорошо, поэтому возможность спросить о чем-то и получить объяснения была очень ценна. Первые соревнования я решал “вслепую”, плохо понимая внутреннюю логику применяемых моделей и технических приёмов. К тому же, много времени уходило на обучение самому питону, многие простые вещи делались сложными путями)

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

Какие задачи для Вас удобные, а какие неудобные?

Почему-то так получается, что любимые задачи — это те, которые решаешь успешно) Чем интересней задача, тем больше времени тратишь на него и тем выше отдача в конце концов.

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

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

Есть ли у Вас свой фирменный стиль при решении задач? Есть ли он у Ваших конкурентов в соревнованиях?

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

У многих людей, решающих соревнования, постепенно вырабатывается свой алгоритм решения задач. Читая форум на Kaggle можно составить представление об подходах разных участников. Это может быть полезно: на основе этой информации и позиций участников на лидерборде можно строить предположения о том, какими методами эффективно решать текущую задачу.

Что главное для победы на Kaggle?

Желание, опыт, удача. Мотивация — самое важное здесь. Нужно потратить реально много времени, чтобы сделать решение, которое будет иметь шанс выиграть.

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

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

Что главное для быстрого получения эффективного решения? Можете назвать какие-то приёмы, которые существенно улучшают качество решений задач машинного обучения?

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

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

Насколько для Вас важен рейтинг на платформе Kaggle? Будете ли Вы стараться его улучшить в ближайшее время?

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

Какие планы на будущее?

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

П.С. Наверное, многих заинтересует бакалаврская диссертация Александра:

Другие интервью Александра:

Реклама

7 thoughts on “Александр Гущин

  1. Спасибо за интервью!

    Александр, хотелось бы задать вопрос:

    «Как Вы комбинируете десятки моделей? Можно поподробней про кросс-валидацию и смешивание в этом случае? И также интересует, читаете ли Вы статьи по Classifier ensembling и если да, то помогает ли это на практике.»

    • А смотрели материалы по ссылкам в конце интервью? Мне кажется, что в бакалаврской работе Александра содержится часть ответа.

      • Спасибо, видимо, они не сразу появились. Посмотрю. Но еще один вопрос остается: какие приемы смешивания алгоритмов, подтвержденные теоретически и описанные в научных статьях, реально помогают в соревнованиях Kaggle?

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s