Уже почти год я занимаюсь машинным обучением и анализом данных, а не контекстной рекламой. Почему — это тема отдельной статьи, которую я, пожалуй, оставлю на потом 🙂 В основном, делюсь своими успехами в FB. Там же, в комментариях я пообещал написать небольшой обзор курсов, которые прошел, чтобы войти в профессию специалиста по машинному обучению и анализа данных. Собственно, вот этот обзор.
Войти в профессию в моем понимании — это начать зарабатывать этим деньги, если что.
С наскока не получится. Будет сложно
Перед тем, как я влез во все это, я думал: раз умею работать с трафиком, google certified trainer, разбираюсь в аналитике, пишу на JavaScript, PHP, когда-то писал на Java и вообще весь из себя такой крутой, то и с машинным обучением быстро разберусь. Месяц-два и я в теме. Редко я так сильно заблуждался 🙂
Машинное обучение и анализ данных тянет за собой целый хвост дисциплин, в которых стоит разбираться хотя бы на уровне «могу примерно понять, что здесь происходит»:
- статистика
- линейная алгебра
- математический анализ
- комбинаторика
- теория вероятности
- алгоритмы и структуры данных
- методы численной оптимизации
- … список неполный, если что 🙂
Ну и само собой, придется писать код. Скорее всего, это будет Python или R. А если собираетесь стать хардкорным ML-инженером — то еще и на C++.
В общем, если вы, в отличие от меня, олимпиадник и PhD по математике, то все просто.
Итак, поехали.
1. Специализация «Машинное обучение и анализ данных» от Яндекса и МФТИ на Coursera
Не зря это называется «специализация». 5 полноценных курсов + последний — финальный проект. Рассчитана на 8 месяцев, хотя я довольно спокойно прошел за 5, проходя параллельно другие курсы и добирая знаний там, где их было недостаточно.
По каждой теме курса — отличные конспекты и довольно интересные задания. В чатике курса — на момент написания статьи 5754 человека. Мне помогали даже глубокой ночью в пятницу 🙂
Единственное, что может смутить кого-то — это то, что видео курса записан для Python 2. Но задания уже переделали под 3-й питон. Реальная разница в коде в 99% случаев — это наличие или отсутствие скобочек у оператора print. Поэтому я забил на это и спокойно проходил. Актуальность в порядке.
Пройдемся по каждому курсу по отдельности:
a). Математика и Python для анализа данных
Супрекомпактный курс, в котором всего по чуть-чуть: основы Pandas, Numpy, Matplotlib, немного про матрицы и линейную алгебру, оптимизацию функций в scipy, градиентный спуск и другие методы оптимизации, основные понятия статистики и центральную предельную теорему.
Что такое производная и как писать на Python «Hello World», никто объяснять не будет, поэтому будьте готовы к тому, что придется вспомнить что-то из программы математики старших классов и посмотреть самую бузе про то, как писать на Python. Что-то вроде «Python с нуля за 20 секунд» вполне сойдет.
b). Обучение на размеченных данных
Здесь уже начинается само машинное обучение: будете обучать алгоритмы на размеченных данных и потом ими что-то предсказывать 🙂 Будет про линейные модели, деревья и ансамбли алгоритмов. Ну и конечно, про то, как оценивать качество моделей.
После этого курса уже будете знать, как, к примеру, обучить алгоритм на данных о квартирах (площадь, адрес, этаж и т.д.) и их стоимости. И потом предсказывать цену на новую квартиру, которой еще нет в базе данных.
c). Поиск структуры в данных
Если в предыдущем курсе говорили о данных с «ответами» (ценой), то здесь речь о том, что можно сделать с данными, у которых «ответа» нет. К примеру, как разбить всех клиентов клиентской базы на 8 сегментов (кластеров), каждый из которых обладает какими-то своими особенностями. Или найти клиентов из базы, выбивающихся из общей массы (поиск аномалий). Или научить алгоритм выделять в куче разных текстов темы и разделять тексты по этим темам (тематическое моделирование).
d). Построение выводов по данным
Здесь о статистике. Я полюбил и возненавидел этот курс одновременно 🙂 Полюбил за интересные задания. А возненавидел за то, как сухо и без объяснений «почему именно так» подается теория. Про проверку статистических гипотез, различные статистические критерии, АБ-тестирование и т.д. Мне с нуля было сложно. В общем, это нужно просто пережить 🙂
e). Прикладные задачи анализа данных
Курс очень кратко по верхам про 4 больших раздела в машинном обучении: прогнозирование временных рядов (продажи, погода, курс биткойна), компьютерное зрение (это о том, как, к примеру, научить алгоритм отделять фоточки енотов от своих селфи), анализ текстов (к примеру, как научить алгоритм отличать позитивный отзыв в соцсетях от негативного) и рекомендательные системы. Лента в фейсбучке, рекомендации в яндекс.музыке, рекомендации фильмов в Netflix — это все работа рекомендательных систем.
f). Финальный проект
Берете на выбор один из 4-х проектов и доводите его по шагам до точки, в которой проект можно положить к себе в портфолио. Можно сделать и все 4, если к этому моменту у вас еще будет на это время 🙂
Если резюмировать, то именно эти 6 курсов помогли мне разобраться в основах классического машинного обучения. С одной стороны, здесь не совсем детская сложность подачи и заданий. С другой, в курсах и конспектах есть все, чтобы эти задания решить.
И да, к каждой неделе есть конспект. И эти конспекты шикарны: все кратко и в одном месте. Я до сих пор в них иногда заглядываю.
2. «Линейная алгебра» от Высшей школы экономики на Coursera
Наверное, не самый лучший курс по линейной алгебре в мире 🙂 У меня осталось впечатление излишнего формализма: очень правильно и точно рассказывают и доказывают формулы, но не объясняют, почему так и откуда эти формулы взялись. Т.е. понятно, что рассказали, но не понятно, для чего это и почему так. Но для вводной подойдет.
По содержанию — разбирают самые азы: как найти определитель, собственные векторы и собственные значения матрицы, решить СЛАУ, решить уравнение в матричном виде, отличать отображение от ядра и т.д. Для того, чтобы без особого ужаса читать формулы и не пугаться фраз типа «матрица плохо обусловлена» более чем достаточно.
Проходить стоит, потому что линейной алгебры в машинном обучении много.
3. «Основы статистики» на Stepik
Шикарный вводный курс от института биоинформатики. Ведет Анатолий Карпов, и ведет просто замечательно.
Чаще всего я встречал случаи, когда даже простые вещи на курсах преподаватели объясняют сложно. Почему так — большой вопрос. Может, стараются так поднять свой авторитет. Или следуют принципу «я страдал — и ты будешь». Это не преподавание, а способ потешить свое эго. Сам через это проходил и представляю, соблазн велик 🙂
Здесь же обратная ситуация: объясняют для того, чтобы мы поняли. Получается просто, понятно и интересно. Прошел курс быстро и с огромным удовольствием. Пока что, по мне, лучший курс по основам статистики. Если быть точным, там 3 части курса, со 2-й части начинаются задания на R.
Просто настоятельно рекомендую этот курс пройти. Хотя бы 1-ю часть. Я его начал проходить вместе с курсом «Построение выводов по данным» специализации Яндекса и МФТИ, ибо хотел понимать, что происходит 🙂 Это секретная техника «пройти курс, чтобы пройти курс.»
Проходить стоит, потому что в машинном обучении и анализе данных статистика нужна.
4. «Комбинаторика для начинающих» на Coursera
Еще один отличный курс как по содержанию, так и по преподавателю. Мистер Райдогорский преподает и в ШАД, и в МФТИ и где-то еще, и делает это хорошо. Очень последовательно, от очевидных вещей до не очень, постепенно наслаивая за каждый урок ровно по одному слою новых знаний и объясняя все с азов.
Обычно, комбинаторные задачи отвечают на вопрос «сколько всего существует комбинаций чего-то». Пример простейшей комбинаторной задачи: сколькими способами могут рассесться 30 учеников в классе.
Проходить рекомендую по 3-м причинам:
- Решение многих задач по теории вероятности (в машинном обучении это встречается) часто сводится к комбинаторным задачам.
- Комбинаторные задачи вполне могут попасться на собеседовании или при поступлении в условный ШАД / MADE / Ozon Masters.
- Это просто забавно и интересно 🙂
5. «Algorithmic Toolbox» на Coursera [EN] («Алгоритмы: теория и практика. Методы» на stepik [RU])
Обычно, этот предмет называется «Алгоритмы и структуры данных». Так вот в курсе — про первую часть, алгоритмы.
Курс для тех, кто любит «пожестче». Здесь не про то, как писать код. Здесь именно про сами алгоритмы: сортировки, расстояние Левенштейна, жадные алгоритмы, динамическое программирование и т.д. То, что обычно спрашивают на собеседованиях в условный Яндекс и Google, но в реальной работе применяется редко.
Подразумевается, что вы уже знаете любой популярный язык программирования, от Python и Ruby до C и C++, хотя бы на самом базовом уровне (даже без ООП, просто функции, переменные и т.д.). А большего здесь и не понадобится. Сложность будет не в том, как писать код, а в том, что же писать 🙂
Крус «Algorithmic Toolbox» на английском, но в его делали и русскоязычные ребята, которые еще запустили аналог этого курса на stepik: «Алгоритмы: теория и практика. Методы».
В каком случае рекомендую проходить:
- Если будете поступать куда-то, где нужны базовые знания алгоритмов
- Если собираетесь ходить по собеседованиям в большие компании
6. «Алгоритмы: теория и практика. Структуры данных» на stepik
Продолжение курса алгоритмов. Здесь про стеки, очереди, кучи, хэш-таблицы, самобалансирующиеся деревья. После него становится понятно, что же «под капотом», к примеру, list и dict в Python и почему до Python 3.6 dict не сохранял порядок элементов, а теперь сохраняет, и чем за это приходится платить.
Для тех, кто хочет «пожестче», проходите на C++. Так получится ощутить на себе все нюансы по работе с памятью, про которые рассказывают в курсе.
Именно этот курс я проходил уже после того, как поступил в MADE. Без него бы было сложнее сдавать там алгоритмы.
У обоих курсов по алгоритмам есть пробел: к сожалению, в них нет ничего про алгоритмы на графах. Но, если что, под это есть отдельный курс специализации, из которой курс «Algorithmic Toolbox» на Coursera. Я сам его не проходил, но слышал, люди хвалили.
7. «Нейронные сети и компьютерное зрение» от Samsung Research Center на stepik
Отличный базовый курс про нейронки: как они устроенны, что такое нейрон, как нейроны складываются в слои, какие слои бывают, какие бывают функции активации, как нейросети учатся, как работает backprop и т.д.
Все на PyTorch, что очень здорово и наглядно.
Создатели курса поступили довольно мудро: тем, кто хочет попроще, сделали основной курс. В конце обучить нейросеть, которая сможет отличать фотки мытых тарелок от грязных, уже сможете 🙂
А тем, кому нужно «пожестче», добавили в каждую неделю блоки теоретических заданий. Там будет и про матричное дифференцирование, и ручками производные сложных функций для алгоритма обратного распространения ошибки придется считать, и много еще всего. Лично я исписал далеко не одну страницу блокнота 🙂
И это все?
Нет, нет, еще раз нет и даже близко нет. Это только начало. Есть еще куча интересных и полезных курсов так или иначе связанных с машинным обучением и анализом данных.
К тому же, у больших IT-компаний — еще и свои программы подготовки специалистов по машинному обучению и анализу данных (ШАД, MADE, Ozon Masters). Попасть туда обычно непросто (конкурс 20-30+ человек на место), учиться обычно 1.5-2 года.
Учиться сложно. К примеру, я поступил в MADE (data.mail.ru). Был приличный конкурс и попали далеко не случайные люди. И все равно, из-за алгоритмов после первого семестра вылетела примерно половина. Нагрузка местами приличная, в сложные недели на учебу и ДЗ уходило в районе 30+ часов.
Но, по мне, это чертовски интересно и того стоит.
6 ответов к “Из маркетинга в Data Science: 7 курсов, которые помогли мне войти в профессию”
Отличная статья и довольно таки долгий путь. Сколько времени затратил на все обучение? Какая сейчас работа и насколько доволен уже сферой?
Благодарю) Сначала где-то 6-7 месяцев фулл-тайм с библиотеке, потом еще 1.5 года в MADE. Сейчас работаю в Mail.ru, помогаю спасать людей от спама с помощью машинного обучения. Как и в любом направлении, есть всякая не всегда забавная рутина, но с большего, конечно доволен.
Здраствуйте Алексей.Прежде всего спасибо за информативную статью!Не могли бы вы сказать как подготовиться к соревнованию по машинному обучению,должен ли я полностью проходить специализацию от курсера яндекс мфти»машинное обучение и анализ данных»?Можно ли я обойтись без pythonа если я знаю java?
Сорри за долгий ответ. Без python будет сложно, можно задолбаться то же самое на java/scala писать. Python сейчас — стандарт индустрии. А вот для шатания hadoop или всяких штук spark java/scala — идеально.
Наверно странный вопрос но хотелось бы озвучить,реально ли стать middle Data Scientistом после made mail.ru?
второй вопрос:] конечно понимаю что почти у всех одинаково но какой из них лучше made;ozon;шад?
Мидлом — если есть уже опыт промышленной разработки, то, думаю, вполне. У меня получилось. Более того, у меня были офферы и на senior (хотя там большие вопросы к компаниям есть), опыт промышленной разработки с 11 по 13 год на java.