python

“Без data engineer-а ценность модели аналитика стремится к нулю” — интервью с дата инженером Николае

  • суббота, 21 октября 2017 г. в 03:12:57
https://habrahabr.ru/company/newprolab/blog/340582/
  • Машинное обучение
  • Python
  • Data Mining
  • Big Data
  • Блог компании New Professions Lab


Привет, Хабр! Data Engineering становится все более популярным, многие компании постепенно открывают соответствующие вакансии. В связи с этим мы взяли интервью у дата инженера и преподавателя на программах “Специалист по большим данным” и “Data Engineer” Николая Маркова о том, что должны уметь data scientist-ы и data engineer-ы, чего им чаще всего не хватает и как найти свое место в анализе данных.



— Расскажи о своем пути в дата инженера. Чем тебя изначально привлекла область работы с данными и почему вместо столь популярного и привлекательного Data Scientist ты стал Data Engineer, о котором только сейчас начинают говорить и понимать его ценность, а также делать образовательные программы?

Я начинал работать инженером-программистом, писал код на Python достаточно давно, еще с университета. Правда, откровенно говоря, изначально с математикой у меня в школе было не очень. И когда Data Science начал формироваться, как отдельное направление, я понял, что это одна из тех областей, где люди реально заставляют компьютеры делать то, для чего они предназначены. То есть не перекладывать байтики из одного места в другое или не рисовать красивые интерфейсы (я как-то работал в веб-студии, полезный и интересный опыт, но там далеко не от всех проектов есть хоть какая-то польза).

В этой сфере действительно есть глобальный общечеловеческий смысл, но хитрость в том, что в ней нужно неплохо знать математику. Это было одной из важных причин для меня не идти напрямую в data scientist-ы, так как мне пришлось бы капитально изменить курс развития. Для аналитиков данных что Python, что Spark – это всего лишь инструменты, а основа — математический аппарат, подбор параметров, настройка моделей. Мне слишком нравилось программирование, чтобы нырнуть с головой в другой омут.

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

Таким образом я пришел в Data Engineering. Потому что, во-первых, она позволяет мне заниматься тем, что я люблю, но при этом в более интересной для меня сфере. А во-вторых, это востребованная область. Это же круто, когда тебе платят за то, чем тебе искренне нравится заниматься, правда?

Чем дольше я этим занимаюсь — тем яснее вижу, что Data Science – очень разнообразная сфера, в ней каждый может найти свою нишу. Когда я начал преподавать, своей целью я ставил донести до учеников именно эту мысль: крайне редко попадаются люди, которые умеют все, и математику решать, и код писать, на любую проблему стоит смотреть шире. В этой области есть очень много задач, это не только модели, но и построение архитектуры, развертывание, наладка полной цепочки workflow от прототипа к какому-то готовому продукту. Все эти шаги важны, и для каждого требуется соответствующий специалист.

— С какими трудностями ты сталкивался в профессиональном плане, какие вызовы были в начале карьеры и в дальнейшем?

Трудности как у всех – неопытность сначала, приходилось очень много разбираться с разными технологиями. Приходишь в новую компанию, у тебя совершенно меняется стек. Помню, несколько лет назад, когда пришел работать в Mail.ru Group писать на Python, меня посадили 24/7 поддерживать скрипт, написанный на Perl (причем примером качественного кода я бы его не назвал), который до этого я вообще не знал, пришлось учить его с нуля. Такие вещи случаются нередко, с другой стороны это позволяет получить опыт в разных сферах и по-разному взглянуть на задачу.

Соответственно, когда я пошел уже ближе к аналитике, одной из основных проблем стала математика, но тут мне помогла куча книжек, которые я накупил: по алгебре, статистике, теории вероятностей и всему такому. Больше года я из литературы не вылезал, сначала приходилось каждый день себя заставлять, потом вошло в привычку. И в итоге, кажется, это дало хорошие плоды. Впрочем, наверное, об этом не мне судить.

— В чем ты видишь преимущества и недостатки работы data engineer-ом по сравнению с data scientist-ом?

Тут как в той истории: будучи data engineer-ом, ты понимаешь программирование лучше любого data scientist-а, а статистику — наоборот. Получается немного грустно от того, что исследованиями, математикой, подбором хитрых фич занимаются другие люди. Но здесь преимущество data engineer-а в том, что без него ценность вот этой модели-прототипа, чаще всего состоящей из кусочка кода в файле на Python (и хорошо если на нем, а не на каком-нибудь R!) ужасного качества, который пришел от data scientist-а и худо-бедно дает какой-то выхлоп, стремится к нулю. Без работы data engineer-а этот код никогда не станет проектом, никакая бизнес-задача не будет решена. Пока что это просто эксперимент на коленке. Data engineer же пытается это превратить в продукт.

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

Здесь рецепты, что и везде: конкурентоспособная зарплата, социальные “плюшки”, все как обычно. Сейчас с кризисом получилось так, что очень большому количеству людей стало выгоднее работать удаленно на какую-то зарубежную контору: зарплата выше, возможностей побольше. Наши компании оказались в затруднительном положении, и, на мой взгляд, единственное, что можно сделать — очень тщательно подходить к отбору кандидатов и не бояться вкладывать в толковых ребят. Может и не стоит нанимать кучу студентов, которые еще вчера изучали линейную алгебру, а лучше потратить больше бюджета и нанять пару хороших специалистов, которые могут решать конкретные бизнес-задачи. Пример: допустим, у нас есть магазин, и мы хотим построить рекомендательную систему для сайта. Тогда разумно целенаправленно искать специалистов из этой серии. Вместо того, чтобы размениваться на людей, которые услышали где-то, что Data Science сейчас в тренде и хотят пойти туда работать, а на деле не всегда тянут даже на Junior’а.



— Почему ты решил заняться преподавательской деятельностью?

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

Сотрудничество с ребятами из Newprolab в рамках преподавания началось с того, что я был на первом наборе курса “Специалист по большим данным”, и мне тогда не очень понравилось, как преподавали программирование, сильно не хватало инженерных подробностей. Я подошел к ребятам, предложил свою помощь, ну и понеслось. Теперь вот преподаю Python.

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

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

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

— Исходя из твоего опыта преподавания, какие аспекты программирования и, в частности, анализа данных даются обучающимся сложнее всего? Чем это обусловлено?

Хитрый вопрос. Сейчас я работаю с очень разношерстной аудиторией: на курс по анализу данных приходят как люди из топ (и не очень) менеджмента, которые пытаются понять, что это за машинное обучение и как его применить в бизнесе, так и инженеры с опытом, которые уже умеют кодить, но еще не знают, как эти навыки на 100% применить в анализе данных. В итоге получается, что первым очень сложно программировать, потому что они это никогда в жизни не делали, а вторым нужно вспомнить математику, буквально начиная с первого курса университета. Да и набор инструментов для анализа данных часто довольно сильно отличается от стандартного набора типичной ИТ компании на рынке, для слушателей курса это тоже челлендж.

— Как тебе удается соблюдать баланс в преподавании между этими группами с разными бэкграундами?

Надо отдать должное организаторам в том, что когда люди начинают работать в команде, одни помогают другим, и чаще всего именно такие разношерстные команды хорошо срабатываются: люди решают задачи из разных сфер и подтягивают друг друга на более-менее средний уровень. Затем, после того, как они написали какие-то базовые вещи на Python, решили несколько лабораторных вместе, люди сплачиваются, чувствуют себя уверенней. Также свою роль играет то, что, в отличие от универа, здесь люди собрались вживую изучать конкретную проблему и тратят большой кусок своего времени на нее. А когда ты тратишь на что-то много времени и сил, оно становится важным, и ты искренне хочешь вникнуть в это и “додавить”. И да, я тоже считаю, что плата за курс — это дополнительный стимул при обучении. Хотя бесплатные хорошие курсы тоже есть, взять хоть тот же курс от ODS (я про него чуть позже еще расскажу).



— Из твоих наблюдений: каких soft и hard skills зачастую не хватает как начинающим, так и опытным data scientist-ам и data engineer-ам, чтобы стать действительно высококлассными специалистами?

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

С инженерами ситуация такая, что от них не требуется глубокого понимания математики и того, как эти модели работают. Но чтобы data engineer-ы могли эффективно эти модели превращать в продукты, на мой взгляд, им нужен опыт работы в технологических компаниях. Для меня одна из самых базовых проблем с scientist-ами и джуниор-инженерами в том, что они вообще не знают, как обычно выстраивается рабочий процесс. По-хорошему, должен быть code review, код должен храниться в системе контроля версий, continuous integration и т.д. Конечно, как я выше сказал, ожидать, что data scientist-ы будут все это хорошо знать, не стоит. Но инженерам вот не помешает. Хотя ситуация такова, что даже у толковых инженеров, работающих в технологических компаниях, не всегда эти навыки есть, либо из-за того, что они выстраивали эту инфраструктуру с нуля, ни на кого не ориентируясь, либо потому что рядом не оказалось нужных людей, кто бы объяснил, почему стоит делать именно так, а не иначе.

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

Насчет изучения области, я могу вбросить немного наглого пиара: в России есть очень хорошее Data Science коммьюнити — Open Data Science, там есть канал в Slack с 6500 людьми, многие из которых всегда готовы помочь, так что надо этим пользоваться, особенно на старте. Конечно, обязательный скилл — английский язык, если он хромает, то нужно первым делом подтягивать его, потому что, несмотря на старания издательств, лучшие книги по анализу данных все еще на английском.

В плане построения карьеры, причем не только в Data Science, а в любой сфере сейчас очень важный навык — умение людям объяснять, как работает то, что ты сделал. Умение представить свою работу чрезвычайно важно, особенно для data scientist-a. Как я уже говорил, модель написанную на листе бумаги никто не поймет, другое дело, когда есть нарисованный график, наглядная презентация. Я понимаю, что есть интроверты, которые хотят сидеть в углу, что-то кодить или вычислять, но лучше научиться себя пересиливать хоть иногда.

Касательно data engineering-а все еще хитрее, потому что у компаний, которые сейчас начинают выстраивать у себя Data Science подразделения уже есть внутри какие-то IT-процессы, которые настроены в другую сторону. У них уже давно есть какой-то продукт, IT-департамент, который поддерживает сайт/сервис и периодически аккуратно на него закидывает какие-то новые фичи так, чтобы ничего не упало. Причем чем старше компания, тем закостенелее в ней IT-процессы, больше всякого legacy, весь код строго проходит 10 стадий code review, мерджится не раньше, чем через 10 дней после того, как он залит и т.д. Это хорошие практики для построения стабильных продуктов, но плохие для построения Data Science инфраструктуры. Анализ данных меняется активно, эта область требует экспериментирования: быстро собрал на коленке модельку, запустил проект, смотришь как оно там реагирует, что-то подправил.

Получается, что с точки зрения инженеров кроме умения продавливать нужные идеи, нужно еще и умение интегрироваться в существующие инфраструктуры. Например, в компании, на которую я работаю, до того, как у нас появился нормальный data engineering, попросту не было адекватного диалога между Data Science и Operations. Более того, там была очень старая инфраструктура для анализа данных и своя, написанная за много лет, build-система. И когда мы начали пытаться выстраивать Data Science вокруг этого, то поняли, что окружение нас очень сильно сдерживает. В итоге нам пришлось силой довольно маленькой команды выстраивать компанию внутри компании, то есть небольшую свою подинфраструктуру. И, мне кажется, это не только наша локальная проблема, это то, что творится во всех компаниях, которые начинают внедрять подобные вещи.

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

Полезные ресурсы для data engineer-ов от Николая Маркова


Книги


  • Data Science from Scratch (Joel Gras) — по сути это введение в Data Science для тех, кто уже умеет писать на Python. Особая хитрость книги в том, что она дает понимание, в ней не используется типичный набор инструментов (Pandas, Numpy, Tensorflow), там разжевываются математические концепции с голым кодом на Python. Да, он работает медленно, но там самый качественный код с точки зрения написания и логики. Есть на русском, но лучше читать на английском.
  • Programming Collective Intelligence (Toby Segaran) — очень интересная, хорошо дает обзор базовых вещей, но в отличии от предыдущей, в ней код на Python очень плохого качества. Хорошо годится для вдохновения.
  • Big Data (Nathan Marz) — автор выстраивал аналитические системы в крупных компаниях типа Twitter, создал Apache Storm. По сути, в книге описывается многое из того, что сейчас ждут от data engineer-ов и data архитекторов. Именно он придумал концепцию лямбда-архитектуры, которая объединила в себе batch-обработку данных и real-time processing. В книге объясняется, как практически с нуля выстраивать все. Код на Java, но все равно очень полезно.
  • Python Machine Learning (Sebastian Raschka) — в отличии от первой книги в ней описывается анализ данных в стандартном инструментарии — Numpy, Pandas. Очень хорошая книга с точки зрения того, как вещи делаются на более серьезном уровне.
  • Наглядная математическая статистика (Михаил Лагутин) — помимо чистого написания кода инженерам приходится делать и простенький статистический анализ, чтобы не отвлекать data scientist-ов. Отличная книга для базового понимания что основ математики, что статистики.

Курсы


  • Andrew Ng`s Machine Learning — знаменитый курс на Coursera от Andrew Ng, который должны закончить все. Правда, мне не очень нравится пара вещей в нем, например, то, что там используется Matlab (который в реальной разработке почти не встречается), ну и еще там довольно сильно разжеванные домашние задания.
  • Введение в машинное обучение от Константина Воронцова — неплохой курс по анализу данных, поскольку там не настолько большое углубление в сферу, не про тонкий тюнинг какого-нибудь XGBoost, а некоторые базовые принципы машинного обучения, будет полезно и инженерам данных тоже.
  • Открытый курс машинного обучения от Open Data Science — курс от нашего сообщества на Хабре, вполне неплох, дополнительный плюс — всех людей, создающих этот курс и разбирающихся, можно легко найти в Slack, им можно написать, задавать вопросы, что существенно облегчает обучение.
  • Обучение Data Engineering’у от ребят из Newprolab — я тут тоже буду немного преподавать. Думаю, должно получиться довольно интересно и полезно.


И еще, чуть не забыл — мы с ребятами организуем Data Science Breakfast — это посиделка раз в неделю с утра компанией в кафе на Проспекте Мира, где часто разношерстная публика, но обсуждаются вполне интересные аналитические вопросы и устанавливаются контакты. Заходите на канал #data_breakfast в ODS, там все есть!