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

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

    Другие статьи

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

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

    3. Обзор учебных онлайн платформ

    4. Рекомендации книг и статей

    Готов выступить ментором в самообучении

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

    Если у вас есть индивидуальные вопросы, на которые не отвечают мои статьи - пишите на почту self.development.mentor в gmail.com, Олег

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

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

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 12

      +1

      Спасибо за полезную статью!

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

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

            +1
            Я решил разбить весь материал на логические части. Также чтобы статьи были не слишком длинными. В следующей (через неделю, наверное) напишу уже книги и курсы. С тех пор как сам учился вышли новые, я хочу всё пробежать глазами чтобы отобрать самое актуальное.
            Кажется, что почти всем рекомендую сначала читать Datasmart. Замечательно написанная книжка.
            0
            Внутри Spark устроен сильно не так, как обычные базы данных

            Техническое замечание: Spark это вообще не база данных. И даже Hive это не база данных в том смысле, как этот термин обычно используется. Это движок, который может выполнять SQL-запросы (но не только — потому что есть RDD и Dataset API, например, второй из которых был скопирован с pandas, но адаптирован к параллелизму) на кластере, распределяя вычисления между узлами. При этом данные будут лежать в условно, куче файлов json, и никакой базой это вообще не будет, никогда. И работать со спарком как с базой данных не стоит — ничего хорошего не получится.

            Что же до почти всего остального — то это можно, мне кажется, сформулировать в двух словах — изучите программирование. Data Science, по большому счету, это программирование с большим довеском математики, или наоборот. И тут уже либо вы будете программистом, и тогда все нужные библиотеки вы освоите рано или поздно, по мере надобности, и другие языки, а если не будете — то каждый новый язык программирования или библиотека будет вызывать у вас проблемы.
              0
              spark предоставляет высокоуровневую абстракцию, которая позволяет работать с ним, практически, как с обычной субд. Поэтому это упрощение сильно помогает объяснить что это, и снимает психологический барьер на освоение новой технологии.
              То, что data science это в львиной части программирования — однозначно, я и в первой статье поэтому про Питон писал больше, чем про дата сайенс. Более того, я хочу об этом отдельную статью написать (о важности умения хорошо программировать).
              Но я не ставлю знак равенства осознанно, т.к., например, программистом я бы не хотел быть (скучно, т.к. обычно это выполнение идей Других людей), а дата сайентистом — мне нравится, т.к. это более высокая автономности и большая часть похожа на исследование и творчество, субъективно — значительно меньше рутины. И задачи, потенциально, high impact
                0
                > практически, как с обычной субд.
                Ну, да. SQL. Но только до тех пор, пока производительность вас вообще не волнует. Ну и внутри это ну совсем не база. Типовая СУБД — это демон, который выполняет запросы. Спарк — это короткоживущий процесс, который для выполнения запроса запускает еще кучу процессов на разных узлах, там где лежат данные. Если всего этого не учитывать — получается ну как-то совсем не эфффективно.

                Ну и потом, есть и другие API, чуть ниже уровнем, при использовании которых все становится уже вообще непохоже на СУБД.

                >Но я не ставлю знак равенства осознанно
                А его и нет. Это разные виды деятельности. Мне не скучно (потому что мне нравится доводить проект до внедрения, не говоря уже про получение премии за результаты этого внедрения ;), но я согласен, что кому-то может быть интереснее заниматься чем-то более творческим.
              0
              FFelix, а что думаете по поводу ML.Net от майкрософт?
                0
                Нужен ваш совет или подсказка куда копать:
                Поступают данные о товарах и их нужно разбивать по категориям. Насколько понимаю это близко к подходу Data mapping. В каком инструменте можно получить некатегоризированные данные, проассоциировать их с категорией руками, а далее такая ассоциация занеслась в реестр и ассоциирование шло автоматически?
                И такую задачу выполнять ежедневно пополняя реестр.
                  0
                  Похоже на задачу кластеризации. При превышении предела метрики сходства может формироваться новый кластер или категория «unsorted».
                    0
                    Я не знаю готовых инструментов, которые смогут адекватно это сделать вот так просто, без программирования и просто кликанием.
                    Нужно изучать основы дата-саенс для этого, т.к. иначе вы можете неверные данные в этот инструмент скормить, или неожиданно получить в какой-то момент сломанные категории.
                    Книга datasmart даёт близкие примеры сделанные в эксель. С неё можно начинать практически любое изучение
                    0
                    Спасибо за отличный план, во первых стало понятнее на каком я этапе, и о каких навыках надо говорить на собеседовании, потому что SQL и Excel к примеру мне казались настолько базовыми (SQL разумеется подтянуть всегда можно и можно это делать бесконечно, но базовые вещи знаю), я на собеседовании не считала важным о них упомянуть, но теперь для большей убедительности получу ка я сертификаты, хорошо много курсов, где можно порешать задачки и сертификат готов.( я про stepik.org)

                    Only users with full accounts can post comments. Log in, please.