Опыт обучения в Яндекс.Практикум. Можно ли вкатиться в Data Science за 8 месяцев

Недавно я завершил прохождение специализации Data Science на платформе Яндекс.Практикум и хочу написать, текст, который был бы полезен мне самому 8 месяцев назад, то есть — обзор учебной программы того, что понравилось или напротив не оправдало моих ожиданий, а также поделиться некоторыми приемами, которые могут сделать обучение эффективнее.

Содержание:

Почему Data Science?

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

f7a55690b0662acb3f42510eec3938ff.jpg

Бэкграунд

Мой опыт в онлайн обучении начался осенью 2018 года с попытки пройти специализацию «Машинное обучение и анализ данных» от МФТИ и Яндеса (https://datasciencecourse.ru/). Тогда, только загоревшись идеей изучить эту «чертову ИИ магию», я решил, что вполне осилю учебу параллельно с моей текущей работой SMM менеджера. Но курс оказался мне не по зубам, думаю тут сказалась и моя низкая математическая подготовка и нулевой опыт в программировании.

ab68ac6832169b57f3acc5c9cad456b1.jpeg

Тогда я понял, что для начала необходимо подтянуть математику я взялся за прохождение онлайн курса «Современная комбинаторика» от МФТИ на Coursera (https://www.coursera.org/learn/modern-combinatorics/home/info) с замечательным харизматичным лектором Андреем Райгородским. Впервые в жизни я понял, как можно получать удовольствие от решения математических задач и кайфовать от красоты доказательств, которые можешь понять.

После этого был курс по теории вероятностей на Stepik от Computer Science Center с лектором Александром Храбровым (https://stepik.org/course/3089/syllabus). Курс тоже очень понравился, много интересных задач, решение которых отпечатывает в голове некоторое понимание того, как работают такие часто контринтуитивные штуки, как случайные величины и их распределения. И параллельно практиковался в Python по записям курса для студентов МФТИ «Алгоритмы и структуры данных на Python» от еще одного прекрасного лектора Константина Хирьянова (https://www.youtube.com/playlist? list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0)

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

Тут, по совпадению, начало сворачиваться финансирование проекта, где я был SMM. И тогда я решил пока не искать новую работу, а снять свои накопления, которых хватало примерно на год оплаты аренды жилья и обеспечения базовых потребностей и поступить на платную специализацию по Data Science стоимостью в районе 100 тысяч рублей, с реальными преподавателями, однокурсниками и дедлайнами, чтобы уже не оставить себе вариантов отлынивать от учебы и сдавать все вовремя.

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

Структура программы Яндекс.Практикум

Сначала в общих чертах опишу базовые единицы из которых строится курс, а потом более подробнее остановлюсь на некоторых моментах. Общая структура Специализации выглядит примерно так:

03bf732708059e39fed0c77583902e80.jpg

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

Например: Курс — Статистический анализ, тема — Описательная статистика, урок — Гистограммы частот.

Урок — элементарная частица специализации, состоит из теории и закрепляющей практики. Теория представляет собой пару страниц текста с примерами кода, иллюстрациями и поясняющими схемами.

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

Рабочее пространство студента. Пунктирная разметка добавлена для пояснения.Рабочее пространство студента. Пунктирная разметка добавлена для пояснения.

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

Интерфейс Jupyterhub при выполнении проектаИнтерфейс Jupyterhub при выполнении проекта

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

Организация учебного процесса

Прохождение курса и выполнение проекта составляет один спринт. Чаще всего на один спринт отводится две недели — неделя на теорию и практику в тренажере и еще неделя на выполнение проекта.

Сам термин «спринт» похоже пришел из методологии разработки, таких как Agile и иже с ними. Да и в целом, насколько я могу судить, весь учебный процесс постарались завернуть в нечто приближенное к разработке продукта в IT.

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

  • с общей информацией по программе от команды Практикума

  • для обмена литературой и ссылками на материалы,

  • для неформального общения между студентами.

Также при открытии нового спринта создаются временные ветки по каждому курсу для обсуждений касающихся заданий в тренажёре и текущего проекта.

Cтудентов нашего потока сопровождала команда состоящая из:

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

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

  • Двух преподавателей — также опытных DS специалистов, которые отвечают на вопросы по проектам и тренажеру;

  • Старшего студента — студента из предыдущего потока, который берет на себя часть работы по ответам на текущие вопросы;

  • Ревьюеров — проверяющих самостоятельные проекты

Что было круто

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

Пример иллюстрации переобученной модели к теме метрик классификации.Пример иллюстрации переобученной модели к теме метрик классификации.

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

Атмосфера. Также стоит отметить непринужденный стиль всех коммуникаций начиная от Куратора до ревьюера — тут не душно :)

Какие ожидания не оправдались

Признаюсь, что ожидал от курса, что он будет чем-то вроде научно-популярного изложения лекций Константина Воронцова в ШАД (плэй-лист на YouTube), так чтобы основные методы машинного обучения были разобраны с нуля, с наглядными иллюстрациями и популярным языком, а в идеале мы бы еще и написали их реализации самостоятельно на Python, что называется from scratch. Сейчас я конечно понимаю, что за срок отведенный на всю программу, реализовать такое, чуть менее фантастично, чем загрузка всех знаний DS напрямую в голову через порт, как в фильме Матрица. И конечно, с такими завышенными ожиданиями некоторое разочарование меня и еще нескольких студентов моего потока таки постигло.

d018c735314dfcaa96c5e94e8a36f0fe.jpg

Тем не менее, как мне показалось, 70% из описанного ребятам из Практикума удалось. Первые два модуля практически полностью соответствовали моим ожиданиям. До какого-то момента изложение шло так, что пришедший с нуля человек, мог бы не просто научится мастерски владеть fit-predict, но еще и понимать, что там происходит внутри, просто посвящая учебе 2–3 часа в день.

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

Но начиная с середины последнего модуля, примерно с курса Анализ временных рядов, по моим ощущениям, глубина погружения стала заметно мельчать. Наиболее поверхностно, на мой взгляд, были изложены «state of the art» — штуки, типа трансформеров и Bert моделей в обработке естественного языка и глубоких сверточных сетей типа ResNet. Что в целом логично, материала в каждой из этих тем на отдельный модуль, если не на специализацию.

2f658d614360ba9f634ddbff22e929a5.jpg

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

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

Что с трудоустройством

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

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

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

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

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

5ff5310abbbf4e88c94fefe8d661ed45.jpg

Как сделать обучение более эффективным

В направлении психологии, занимающейся изучением памяти и обучения людей есть такое понятие — желаемые трудности (https://en.wikipedia.org/wiki/Desirable_difficulty), суть феномена состоит в том, что при создании усложнений в процессе обучения материал может усваиваться лучше.

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

В своем обучении я тоже старался применять эти техники, например:

  • Не смотрел подсказки к заданиям, пока не переберу все варианты, до которых могу додуматься;

  • Не копировал код из примеров, а старался запоминать и писать по памяти;

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

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

  • Решал проекты на локальной машине. Хотя Яндекс и предоставляет все необходимое окружение для выполнения каждого проекта, но бывает полезнее все потрогать своими руками и научится устанавливать все самому. Так, например, проходя курс по SQL я научился устанавливать spark под windows, а в курсе по компьютерному зрению сначала хорошенько попрыгал с бубном заставляя свой ноутбук использовать для вычислений графический процессор, чтобы не ждать очередь на сервер Яндекса, а потом и вовсе пришлось освоить облачный сервис Google Collaboratory который предоставляет GPU для вычислений.

Общее впечатление

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

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

© Habrahabr.ru