Практическое руководство

Ой, еще один из этих сообщений в блоге о переходе на Data Science из Academia. Что ж, в этом посте я попытаюсь добавить несколько иной взгляд на обычный совет, а также на несколько более традиционных советов. Это не пошаговое руководство, потому что я не думаю, что в данном случае такое существует. Вместо этого в этом посте будут изложены мои категоричные взгляды на то, что вы можете сделать для плавного перехода от академической среды к науке о данных. Кроме того, этот пост не о том, «как устроиться на работу в области Data Science». Я не буду говорить ни о вашем резюме, ни о подготовке к собеседованию, ни о чем-то подобном. Этот пост о том, как стать специалистом по анализу данных.

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

  1. Вы уже занимаетесь технической областью (математика, статистика, физика, химия, биология и т. Д.).
  2. У вас есть некоторые познания в программировании (подойдет любой язык).
  3. Ваша предполагаемая карьера в области Data Science является прикладной, а не ориентированной на исследования.
  4. Все это, вероятно, будет более применимо, если вы участвуете в программе PhD, но все же может быть актуально для бакалавриата.

Разобравшись с этим, давайте перейдем к делу.

Что такое Data Science?

Если вы наткнулись на блог, вероятно, вы имеете некоторое представление о том, что такое Data Science, или, возможно, думаете, что знаете, что это такое. Наука о данных может означать, что вы управляете базами данных и пишете код SQL весь день. Это может означать, что вы работаете с «большими данными» и делаете что-то с Hadoop (возможно, это все еще актуально…), Spark и другими инструментами для работы с большими данными. Не дай бог, это может означать, что вы делаете большую часть своей работы в Excel, создавая модели линейной регрессии.

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

Как академия уже подготовила меня к этой роли?

Я знаю, что когда я был аспирантом, я думал, что готов только к одному делу в своей жизни - быть профессором / исследователем (астро) физики (после длительной постдокторской карьеры). Когда я учился в аспирантуре физики (2009–2014 гг.), О каких-либо других карьерных траекториях почти не упоминалось. Предполагалось, что это будет путь, по которому пойдут все, что в основном означало, что существует один режим работы: Написание документов.

Тем не менее, есть еще много вещей, которые вы узнаете в своей академической карьере (как в бакалавриате, так и в аспирантуре), которые будут очень полезны для вашей карьеры в области науки о данных (кхм… инженера по машинному обучению).

Изучение борьбы

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

В Data Science большая часть вашего существования - это борьба, и вам нужно чувствовать себя комфортно, не зная, что делать в данный момент. Вы должны уметь экспериментировать и, возможно, потерпеть неудачу. Во многих случаях заинтересованное лицо (причудливый язык для человека / организации, которому нужен какой-либо продукт / функциональность ML) мало что знает о ML, все, что они знают, - это то, как они хотят, чтобы конечный продукт выглядел. На самом деле, в некоторых случаях они даже не знают, как должен выглядеть конечный продукт. Чаще у них имеется много данных (конечно, совершенно чистых), и они хотят «понимания» из этих данных. Вы, как инженер по машинному обучению, должны быть готовы к трудностям, пытаясь найти решение своей проблемы.

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

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

Учимся учиться

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

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

«Мягкие навыки»

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

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

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

Опять же, в следующем разделе я дам несколько советов о том, как практиковать свои коммуникативные навыки.

Практический (и очень самоуверенный) совет

Как сказано в названии, этот совет очень самоуверенный, но эти методы мне помогли. Прежде чем я перейду к самому совету, позвольте мне объяснить, что я ищу в кандидате в Data Scientist:

  1. Спокойный человек с хорошими личными / коммуникативными навыками. Это может показаться не слишком важным для технической роли, но для меня это критично. Большинство специалистов по анализу данных работают в командах, поэтому умение ладить и общаться имеет первостепенное значение.
  2. Тот, кто проявлял инициативу в прошлом и достаточно мотивирован. Это не обязательно должно быть связано с машинным обучением / наукой о данных, это может относиться к вашей академической области обучения, но это также может относиться к вашей подготовке к переходу в науку о данных.
  3. Тот, кто имеет опыт работы с «реальными» данными. Под реальными данными я имею в виду беспорядочные данные. Я хочу видеть, что вы научились борьбе и приняли ее. Опять же, это может относиться к вашему академическому прошлому или вашей подготовке в области науки о данных.
  4. Тот, кто может рассказать о многих различных техниках машинного обучения. Это не означает, что вам нужно знать какие-либо очень подробные сведения, но вы должны иметь представление о том, какие методы существуют и для каких приложений они используются.

Итак, давайте перейдем к совету

1. Изучите Python

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

Он растет во всех областях, не только в ML, но в этой статье я сосредоточусь на ML. Python очень эффективен в ML благодаря нескольким специализированным библиотекам ML, таким как pandas, tensorflow, pytorch, scikit-learn, spacy и transformers и это лишь некоторые из них.

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

2. Изучите принципы разработки программного обеспечения.

Итак, вы выучили Python. Хорошо, правда? Ну не совсем, я знал, как использовать Python довольно долгое время, прежде чем я действительно научился разрабатывать программное обеспечение. Я всегда использую аналогию со строительством дома. Вы могли бы действительно хорошо использовать все инструменты, но если у вас нет чертежа, вы не знаете различных кодексов и стандартов или знаете, где и как получить все материалы, тогда вам не повезло. Хотя знание языка Python очень важно, на самом деле знание принципов разработки программного обеспечения (в основном языковых) действительно позволит вам выделиться.

Этот раздел сам по себе может служить несколькими сообщениями в блоге, но я упомяну только основные моменты здесь:

  1. Объектно-ориентированное программирование (ООП): хотя в функциональном программировании нет ничего плохого, и вы действительно будете использовать сочетание ООП и функционального программирования в своей повседневной жизни. Экосистема ML (то есть упомянутые выше пакеты, особенно PyTorch и scikit-learn) в основном относится к лагерю ООП. Очень важно иметь возможность разбираться в пакетах на основе ООП и иметь возможность писать свой собственный код на основе ООП.
  2. Модульное тестирование и непрерывная интеграция (CI): эти два понятия обычно идут рука об руку. Под модульным тестированием понимается написание конкретных тестов для отдельных модулей вашего кода. Это служит проверкой правильности вашего кода, но также служит защитой от взлома кода при внесении изменений. CI в основном включает автоматизацию этого процесса тестирования, а также может включать другие типы тестов, кроме модульных. Освоение этого даст вам огромное преимущество.
  3. Шаблоны проектирования: это шаблоны многократного использования, которые решают определенные проблемы. Эти шаблоны в основном не зависят от языка. Теперь вам не нужно знать все различные шаблоны, и вам не нужно всегда их использовать; однако базовое понимание того, что они делают (и что они существуют), поставит вас в выгодное положение.
  4. Документация: В своей академической карьере вы, вероятно, писали код, который был специально для вас. Вы знали, как им пользоваться, и это сработало. В составе группы специалистов по анализу данных другие люди должны уметь использовать и понимать ваш код. Документация кода имеет первостепенное значение, и очень важно знать передовой опыт.

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

Я закончу этот раздел, отметив, что, по моему опыту, большинство специалистов по обработке данных (особенно инженеров по машинному обучению) имеют лишь ограниченные знания об этих вещах. Так что это не то, чего вам будет не хватать с точки зрения ваших конкурентов. Однако, если вы знаете эти вещи и потратите время на их изучение, тогда вы сможете выделиться среди конкурентов. Что еще более важно, это сделает вас лучшим специалистом по обработке данных.

3. Сделайте несколько проектов (и поделитесь ими)

Хорошо, вот тут-то и пригодится стандартный совет, но он стандартен по какой-то причине. Если вы имеете академическое образование, а не науку о данных, вам нужно выполнить несколько проектов, чтобы восполнить недостаток опыта работы. В некотором смысле это бонус, особенно если вы соревнуетесь с людьми, которые учились в науке о данных или в аналогичной области. Помните, что я сказал о самомотивации. Те, кто участвует в программах по науке о данных или аналитике, по большей части получают опыт работы с классами, которые им «приходилось делать». Для вас, ученого-самоучки, вы сразу же показываете, что у вас есть мотивация, представив проекты в области науки о данных, которые вы выполнили.

Теперь есть много разных проектов, которыми вы можете заниматься. Я перечислю три здесь в приблизительном порядке важности:

  1. Проект сторителлинга данных: На мой взгляд, такой проект - самое полезное, что вы можете сделать. По сути, выберите интересующую вас область, найдите данные, проанализируйте их и расскажите историю. На самом деле вам даже не нужно заниматься машинным обучением. Эти проекты демонстрируют ваши навыки работы с необработанными нефильтрованными данными (старайтесь не использовать тщательно отобранные наборы данных), а также могут дать вам некоторый опыт в борьбе с наукой о данных. В моем случае я посмотрел на расстрелы гражданских лиц полицией и взял данные из нескольких баз данных, данные переписи населения, статистику преступлений ФБР и данные местного полицейского управления. В процессе я изо всех сил старался собрать все эти источники воедино и многое узнал о пандах и различных пакетах сопоставления Python.
  2. Полное сквозное приложение машинного обучения: проект такого рода будет очень впечатляющим и покажет, что у вас есть опыт реального развертывания машинного обучения, которого не хватает многим кандидатам и фактическим специалистам по данным (в том числе и мне).
  3. Kaggle: Вы можете многое узнать о ML, просто участвуя в соревнованиях Kaggle и просматривая общедоступные блокноты. Они в списке, потому что они важны для вас, чтобы получить некоторый опыт применения машинного обучения для данных, но они в последнюю очередь, потому что этот вид работы теперь повсеместен, поэтому он не будет вас слишком сильно выделять.

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

Во-первых, обязательно размещайте все, что вы делаете, на GitHub, что сделает вашу работу общедоступной и научит вас контролю версий, если вы еще не знали об этом. Убедитесь, что вы документируете свой проект с помощью проекта README. Это самый низкий уровень обмена вашей работой.

Далее вы можете поделиться этой работой в личном блоге или на Medium. Это еще один отличный способ отточить свои коммуникативные навыки и убедиться, что вы действительно поняли свой проект. Лучший способ проверить свои знания - попытаться объяснить свой проект кому-то другому. Однако написание сообщения в блоге по-прежнему в некоторой степени пассивно, и эти навыки не являются основными коммуникативными навыками, которые вам понадобятся, чтобы стать успешным специалистом по анализу данных.

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

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

4. Выучите жаргон (притворяйтесь, пока не научитесь)

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

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

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

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

5. Учитесь онлайн

Хорошо, а теперь, возможно, еще один спорный совет. Не читайте книги, чтобы изучить свои навыки Data Science / ML. По крайней мере, не используйте книги в качестве основного источника информации. Единственное, для чего я бы порекомендовал книги - это изучить основы языка программирования (хотя, вероятно, и в Интернете).

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

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

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

  1. Coursera: Здесь есть много отличных курсов, которые могут дать вам хорошее представление по многим темам, особенно по машинному обучению и глубокому обучению. Не ожидайте, что станете экспертом в чем-либо после прохождения курса Coursera, но они могут дать вам хорошую основу для начала.
  2. Fast.ai: Я бы сказал, что это лучший ресурс для изучения передовых методов глубокого обучения. К сожалению, он поддерживается программной библиотекой, которая, на мой взгляд, объединяет все худшие методы кодирования и объединяет их все в одном месте. Тем не менее, есть два отличных курса Deep Learning и более неизвестный курс Machine Learning (github here) и Linear Algebra.
  3. YouTube: вы можете найти практически все, что хотите о Data Science / ML / Programming, на YouTube. Проблема в том, что качество сильно различается. Вместо того, чтобы рекомендовать определенные каналы или видео (некоторые из которых я уже упоминал выше), я просто скажу, что для меня самые полезные видео во многих случаях - это пошаговые инструкции в реальном времени, где они кодируются в реальном времени (это это одна из причин, почему fast.ai великолепен). Однако иногда вас просто интересует концепция, поэтому кодирование не имеет большого значения. В любом случае YouTube - отличный ресурс для всех.
  4. Сообщения в блоге: В сторону науки о данных могут быть действительно хорошие сообщения, но их количество варьируется. В основном это означает, что просмотр случайных сообщений в блогах для изучения вещей может быть неплохой идеей. Даже если сам пост не очень хорош, обычно есть другие ссылки, которые могут привести вас к тому, что вы хотите.
  5. Документация по коду и исходный код. Многие большие базы кода содержат действительно обширную документацию и руководства. Изучение этих руководств может стать отличным учебным опытом. В некоторых других случаях просмотр самого исходного кода может показать вам некоторые хорошие практики программирования (а в некоторых случаях может удивить вас, насколько плох исходный код для различных проектов). Для хорошо организованного и хорошо документированного кода я бы порекомендовал для начинающих PyTorch и scikit-learn.
  6. Twitter: Может быть как мусорный бак, но также может быть отличным инструментом для изучения нового и установления новых связей. Я действительно нашел свою текущую работу через друга в твиттере. Их слишком много, чтобы перечислять здесь, но ищите науку о данных или машинное обучение и следите за некоторыми более популярными аккаунтами. Со временем вы расширите эту сеть и будете использовать ее как своего рода фильтр информации.

Заворачивать

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

Все, что я упомянул в этом посте, я узнал за предыдущие 3,5 года в качестве специалиста по данным. Я не делал всего этого с самого начала и с тех пор многому научился.

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

Первоначально опубликовано на https://jellis18.github.io 3 января 2021 г.