Изучение data science c нуля: этапы и вехи

aa0c7bcc077a92a6a7d36f1d3ce0d93b.png?v=1

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

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

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

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

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

Этап 1. Базовые инструменты анализа данных: SQL, Excel

  • SQL, основы (20ч). Самостоятельное знание SQL может пригодится для выполнения кучи других задачи. И оно, в любом случае, необходимо для большой (большей?) части вакансий на позицию аналитика, дата сайентиста и, тем более, machine learning engineer.

  • Основы Excel (10ч): фильтры и сортировка данных, формулы, vlookup, pivot tables, базовая работа с графиками. Коллеги, партнеры или руководство будут присылать входящие данные в excel, и вам нужно будет уметь их быстро понять и изучить. Нередко и результаты анализа сделанного на Питоне удобнее подготовить и предоставить в Excel.

  • Базовый английский (20–200ч, зависит от предыдущего уровня), на уровне самостоятельного чтения технической документации и спец.литературы. Например, вам совершенно необходимо уметь читать официальную документацию pandas/scikit, и также многие хорошие материалы по Python доступны только на английском.

В некоторые компании с таким набором знаний берут на позиции: аналитика/ младшего аналитика/ веб-аналитика. В Москве хорошие знания этих вещей могут, иногда, давать ЗП до 100 тыс, но вероятнее ЗП порядка 50–70 тыс и начальная позиция .

Этап 2. Основы Python и Pandas

  • Основы Python (80ч). Без знания Питона невозможно использовать львиную часть инструментов машинного обучения. Другие языки менее эффективны в этой сфере и непопулярны.

  • pandas (20 ч) — основа основ в работе с данными в Питоне. На первых порах достаточно хотя бы самых базовых знаний: индексирование, выбор данных по условиям, группировка данных, и соединение разных датафреймов

  • Также научиться основам работы с разными API и парсингом данных (requests, beatiful soup)

На этом этапе дополнительные знания Python позволяют вытаскивать данные из разных API, или путем веб-парсинга.

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

Этап 3. Базовые понятия и классические алгоритмы машинного обучения

(Этот этап может занять 200–400 ч в зависимости от того, насколько хорошо изначально вы владеете математикой)

Базовые  понятия машинного обучения:

  • Кросс-валидация

  • Overfitting

  • Регуляризация

  • Data leakage

  • Экстраполяции (понимание возможности в контексте разных алгоритмов)

Базовые алгоритмы, которые достаточно знать на уровне главных принципов:

  • Прогнозирование и классификация:

    • Линейная регрессия

    • Дерево решений

    • Логистическая регрессия

    • Random forest

    • Градиентный бустинг

    • kNN

  • Кластерзиация: k-means

  • Работа с временными рядами: экспоненциальное сглаживание

  • Понижение размерности: PCA

Базовые приёмы подготовки данных: dummy переменные, one-hot encoding, tf-idf

Математика:

  • умение считать вероятности: основы комбинаторики, вероятности независимых событий и условные вероятности (формула Байеса).

  • Понимать смысл фразы: «correlation does not imply causation», чтобы верно трактовать результаты моделей.

  • Мат.методы, необходимые для полного понимания, как работают ключевые модели  машинного обучения: Градиентный спуск. Максимальное правдоподобие (max likelihood), понимание зачем на практике используются логарифмы (log-likelihood). Понимание как строиться целевая функция логистической регрессии (зачем log в log-odds), понимание сути логистической функции (часто называемой «сигмоид»). С одной стороны, нет жесткой необходимости всё это понять на данном этапе, т.к все алгоритмы можно использовать как черные ящики, зная только основные принципы. Но понимание математики поможет глубже понять разные модели и придать уверенности в их использовании. Позднее, для уровня senior, эти знания являются уже обязательным:

Без практических навыков знания данного этапа мало повышают ваши шансы на трудоустройство. Но значительно облегчают общение с другими дата-сайентистами и открывают путь для понимания многих дальнейших источников (книг/курсов) и позволяют начать практиковаться в их использовании.

Этап 4. Набор базовых навыков решения задач

Цель данного этапа — получение навыков применения всех ранее изученных методов машинного обучения с помощью scikit-learn, pandas (numpy).

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

Тут же следует инвестировать время в изучение разных приёмов и трюков feature engineering

По завершению данного этапа есть шанс устроиться на позицию junior data scientist. ЗП будет низкая. Но главное будет продолжать учиться. До достижения уровня senior возможность учиться у коллег ценнее, чем текущая зарплата.

Знакомство с основами нейронных сетей

На данном этапе может быть полезно знание основ нейронных сетей, CNN, RNN/LSTM слоев, vector embeddings. Но не обязательно уметь тренировать их самому, на данном этапе. Пока это важно для «общего развития» и чтобы вы не хотели применять нейронные сети там, где без можно обойтись, и, наоборот, понимали где они могут быть полезны и когда имеет смысл или обращаться к коллеге уже их знающему, или браться за глубокое изучение и практику.

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

Рекомендую ограничить это объемом в 20–40ч, необходимым только для общего понимания концепций.

Этап 5. Дополнительные технические навыки, необходимые в работе 

Данные этап может занять 60–200ч, в зависимости от степени перфекционизма. Оптимальным кажется изучить всё на столько, чтобы понимать ключевые принципы и команды, но не обязательно тренироваться на большом количестве учебных примерах, т.к. если удастся устроиться на работу, то получение практики и оттачивание навыков можно делать уже в процессе работы

  • Conda, понимание проблем зависимостей версий библиотек, и как conda это может решить

  • основы bash

  • Python standard library, если не освоили ранее (необходимый минимум itertools, collections, contextlib), умение эффективно разбивать код на функции и модули, классы; умение применять context managers.

  • Основы git, также очень полезно умение работать с IDE: pycharm/vs code. Их использование облегчит работу с git, заменив графическим интерфейсом работу с командной строкой

  • Библиотеки визуализации (matplotlib+seaborn, plotnine, plotly), если не освоили их раньше.

С таким багажом знаний наверняка можно найти позицию джуниор дата сайентиста (может называться по-другому, но суть та же).

В принципе, на этом уровне знаний можно работать годами, практикуясь в применении разных из уже изученных моделей, библиотек и инструментов, осваивая вспомогательные методы (feature engineering), нюансы, и способы решения похожих же задач, с помощью разных библиотек (xgboost, cat-boost). Постепенно будет уровень рост ЗП. Но это не уровень Senior специалиста.

Изучаем по необходимости, этапы 2–5

Визуализация данных

В какой-то момент времени вам потребуется уметь визуализировать данные, с которыми вы работаете. Имеет смысл активно это изучать тогда, когда вы будуте готовы сразу примененять эти знаний на практике, потому что иначе они не запоминаются. В Питоне существует несколько библиотек (привожу рекомендуемый порядок изучения):

  • matplotlib — на нём базируется следующие два варианта, и потенциально он может всё. Но тяжел и неэффективен для прямого использования, кроме построения уродливых графиков, для себя и коллег-технарей. Можно специально не учиться его применять, а понять только самые основы, которые будут «проступать» из-за других библиотек.

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

  • plotnine — позволяет создавать очень креативные графики. Супер-мощный инструмент, позволяющий в несколько строчек кода создать самые нетривиальные графики. В сравнении — seaborn не имеет подобной гибкости, а в matplotlib замучаешься разбираться чтобы сделать такой же график, если он не совсем примитивный. Однако, поначалу, plotnine требует определенного времени на освоение. Если бы не существовал plotly — это был бы самый мощный инструмент.

  • plotly — позволяет делать все графики интерактивными. Сложен в изучении и плохо документирован. Вероятно, не имеет смысл его изучать, пока вы не поймёте точно что вам это необходимо (интерактивность).

До начала применения в реальной практике, на обучение можно себя ограничить в 10–20ч на одну библиотеку.

Если вам нет нужды сначала применять питон для подготовки данных, или вы хотите создать визуальные дэшборды которыми смогут пользоваться другие люди — посмотрите в сторону PowerBI и Tableau, это крайне мощные и популярные инструменты визуализации данных. Изучить каждый из этих инструментов на минимальном рабочем уровне можно, примерно, за 60ч. Знание связки SQL+Excel+PowerBI/Tableau откроет вам позиции аналитиков и «BI-специалистов» c окладами в Москве от 100 тыс., коммуникабельные специалисты с хорошими знаниями этих инструментов находят позиции с ЗП от 150 тыс. Подобные вакансии в основном встречаются в корпорациях и системных интеграторах.

Средства работы с данными

Можно учить на разных этапах, в зависимости от задач, с которыми столкнётесь

  • Основы regular expressions, aka RegExp (10ч). Знания regexp необходимо для продвинутой фильтрации данных в разных инструментах для работы с данными.

  • PySpark (40ч на изучение основ, 100–200ч на достижение хорошего рабочего навыка) . Он необходим когда у вас данных очень много, и приходиться обрабатывать их сразу на целой группе серверов (кластере). Это уже Big data. Не имеет смысл разбираться с ним заранее, т.к. знания являются не фундаментальными и легко забываются. Эффективнее осваивать когда планируете начать использовать (или перед тем как подать резюме на позицию, требующую данных знаний).

    Внутри Spark устроен сильно не так, как обычные базы данных, но с точки зрения использования он оказывается сильно похожим, т.к. поддерживает почти стандартный SQL синтаксис или, как альтернативу, API отдалённо похожий на pandas. Определенные концептуальные отличия присутствуют, но больших сложностей в освоении это не вызывает. В последнее время продвигают библиотеку Koalas, которая будет использовать команды совсем как у pandas для работы с spark-кластером, но пока не советую делать это основным подходом по работе с Spark.

  • Основы html — необходимы, как минимум, для общения с коллегами и понимания их языка, если вы хоть немного сталкиваетесь с сайтами и необходимостюь их парсить или анализировать данные с них.

Этап 6

Углубление и развитие технических навыков

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

  • Python на хорошем уровне:   декораторы, уверенное знание классов и наследования, изучение базовых классов, dunderscore __методы__ .

  • Уверенное пользование bash, понимание основ linux

  • Полезно изучить основы docker

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

Другие области машинного обучения

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

Нейронные сети

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

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

Другие статьи о самообразовании

Вводная статья о том, как понять, стоит ли вам вообще идти в data science и как сделать первые шаги

Принципы эффективного самообучения

Как минимум, планируется статья с рекомендациями книг и курсов, в соответствии с приведенными этапами

Готов стать ментором

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

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

Надеюсь, что когда вы почувствуете значительный результат от статей или рекомендаций, вы за него заплатите, сколько сочтёте нужным.

self.development.mentor в домене gmail.com, Олег 

© Habrahabr.ru