Работа в Data Science: что важно знать и как этому научиться
О чем это все?
Сегодня словосочетания вроде Data Science, Machine Learning, Artificial Intelligence очень популярны. При этом нередко под ними понимаются довольно разные вещи. Это зачастую смущает и запутывает людей, желающих войти в специальность: трудно разобраться, с чего начать, что действительно нужно, а что необязательно для начала. Не претендуя на общность, расскажем, как это видится на основе десятка лет опыта c решением такого рода задач для крупных клиентов со всего мира (сервис / заказная разработка / аутсорс — подставьте термин по вкусу).
Источник: https://timoelliott.com/blog/quick-somebody-find-me-a-data-scientist-jpg
Data scientist — кто такой, что умеет?
В наших реалиях data scientist — это человек, решающий бизнес-проблемы заказчика, опираясь на нетривиальные манипуляции с данными. Такая работа требует различных навыков, которые можно примерно разделить на три большие группы:
Математика и машинное обучение
Soft skills: коммуникация, презентация, английский
Технические: программирование, базы данных, облачные технологии и т.п.
Конечно, необходимо погружаться и в предметную область, но в каждом проекте она своя, поэтому абстракная подготовка вряд ли имеет смысл. Есть и общие для бизнеса соображения, которыми важно овладеть, хотя для начального уровня это менее актуально.
«А может, сразу к сеточкам?»
Обычно начинающие больше внимания уделяют машинному обучению и особенно нейронным сетям, что вполне объяснимо: эти области кажутся более «крутыми» и привлекательными. Ну и, конечно, делать что-то прикольное (например, отличать тех же котиков от собачек, хоть бы и по шаблону) намного веселее, чем разбираться с основами. Тем более, что доступность инструментов, решений и примеров создает впечатление, что задачи решаются достаточно легко, надо лишь найти подходящий образец. Такой подход (грубо говоря, copy-paste) вполне возможен и даже работает, пока не перестаёт. А вот чтобы понять, что сломалось и как чинить (не говоря уже о создании чего-то нового), требуется фундаментальное понимание идей и механизмов, основанное на математической базе.
Матан и его друзья
Необходимый минимум математических знаний выглядит вполне посильно:
Начала анализа: пределы, дифференцирование, интегрирование (без фанатизма)
Линейная алгебра: операции над матрицами, ранг, определитель, собственные вектора и значения, сингулярное разложение
Вероятность и статистика: случайные величины и их распределения, характеристики распределений, условная вероятность и формула Байеса, предельные теоремы, основные понятия статистики, оценка параметров и проверка статистических гипотез
Конечно, это лишь базовые темы, более глубокие и/или широкие знания будут полезны, но для старта хватит и этого.
«Что, еще и кодить?»
Ещё более недооценённым навыком для data scientist кажется программирование. Распространено мнение, что анализ данных и построение моделей сводятся к библиотечным вызовам, для которых особой квалификации не нужно. Наш опыт эту точку зрения не подтверждает: даже для достаточно типичных задач большая часть работы — это манипуляции с данными (зачастую весьма нетривиальные), что уж говорить о нестандартных проблемах.
Если переходить к конкретным языкам, это, конечно, в первую очередь Python. R в наши дни все же достаточно нишевый инструмент, MATLAB — тем более. Julia пока что не слишком популярная штука. Где-то можно встретить Java, C++ или Lua, но это, скорее, исключения.
«Python? Там же все понятно!»
Следует отметить, что Python при всей своей простоте всё же требует определенных знаний и навыков, чтобы писать хороший идиоматичный код и избегать подводных камней. Понимание алгоритмов и структур данных тем полезнее, чем более нестандартные задачи вы решаете. Ну и, разумеется, необходим собственно навык программирования (способность быстро преобразовать идею в грамотный код).
Из питоновских библиотек в обязательную программу входят numpy и pandas. Там тоже хватает нюансов для вдумчивого освоения (особенно если данных становится побольше, а трансформации — позатейливее).
Источник: https://xkcd.com/2054/
«И это еще не все?»
Само собой, важных технических областей намного больше. В некоторых проектах необходимо знание SQL (и вообще навык программирования в декларативной парадигме много где может пригодиться). Облачные вычисления давно уже норма, а не экзотика. Да и Big Data — это не просто модное словосочетание, а вполне востребованный комплекс технологий (если говорить о конкретных инструментах, это чаще всего Spark). Если есть время и желание, изучить все это будет полезно, но начинать работать можно и просто с устойчивым навыком программирования на Python (плюс numpy/pandas, конечно).
«Но теперь-то уже к сеточкам, правда?»
Что касается машинного обучения, сейчас многие сразу принимаются за нейронные сети. Это возможный подход, да и само по себе глубокое обучение практически незаменимо в работе с текстами или изображениями. Однако базовые вещи эффективнее разбирать на более простых моделях. Важно хорошо понять, что из себя представляет собственно задача обучения, переобучение и методы борьбы с ним, способы оценки предсказаний. Ну и, конечно, разобраться с классическими подходами: kNN, линейными моделями, деревьями и их ансамблями, а также методами кластеризации и понижения размерности. Этого уже будет достаточно для решения целого ряда задач (тем более, что на практике нейронные сети нечасто показывают лучший результат на структурированных данных, требуя при этом радикально больше ресурсов).
Источник: https://www.meme-arsenal.com/create/meme/6070052
Это отнюдь не значит, что глубокое обучение вредно для начинающих. Проблема в том, что часто люди начинают разбрасываться, перебирая модные архитектуры, при этом толком их не понимая (что естественно при нехватке фундаментальных знаний). Конечно, основательное и последовательное освоение предмета будет очень полезно, но на это, увы, мало у кого хватает времени и дисциплины.
«А вот я еще слышал про…»
Есть немало других тем (например, исследование операций, рекомендательные системы, ассоциативные правила и т.д.), которые необходимы в соответствующих задачах, а также достаточно интересны и поучительны сами по себе, но для старта как правило необязательны.
Ну и, last but not least, то, про что нередко забывают вообще: навыки коммуникации, визуализации и презентации. Важно понимать, что работы с людьми в этой профессии лишь немногим меньше, чем с данными, и объяснить результат зачастую не менее важно, чем его получить. Само собой, поскольку многие заказчики по-русски не понимают, английским надо владеть на достаточном уровне.
Источник: https://timoelliott.com/blog/2016/02/cartoon-data-story-telling.html
«Мыши, станьте ежиками!»
Все и сразу?
Многих привлекает идея получить нужные знания и навыки «пакетом» записавшись на курсы по data science. Увы, не все из них одинаково полезны. Условно курсы можно разделить на три группы:
Где компании зарабатывают на учащихся
Где компании ищут себе сотрудников
Общественные активности
Как правило, во втором случае обучение будет заметно серьезнее (хотя и отбор строже).
Иногда спрашивают и об университетских программах (благо, сейчас несложно найти варианты удаленного обучения как на русском, так и на английском). Безусловно, надо внимательно смотреть на каждый конкретный случай, но в целом это скорее имеет смысл, если по каким-то причинам важен именно диплом. В наше время бесплатно доступны материалы ведущих мировых университетов (уровня Stanford и MIT), так что если в приоритете собственно знания, можно как минимум не хуже подготовиться самостоятельно (конечно, при наличии достаточной мотивации и самодисциплины). Для многих работодателей «корочки» глубоко вторичны: если человек знает и умеет то, что нужно в работе, какая разница, что он заканчивал? Ну, а если нет — тем более. Конечно, сертификат Stanford Graduate Program может вызывать уважение, но если вы действительно к такому готовы, непонятно, зачем вы досюда дочитали.
Также надо понимать, что практически никакой курс сам по себе не гарантирует вам реальной квалификации и успешного трудоустройства (доводилось встречать людей, которым и ШАД не впрок, и полученная в западноевропейском ВУЗе степень PhD не помогает).
Как есть слона
Для тех, кто готов осваивать нужные темы самостоятельно, порекомендуем некоторые материалы. Конечно, список этот далеко не полон, и если вам нравится что-то другое — отлично, при условии, что это дает вам необходимые знания и навыки. Все ресурсы на английском (если вам трудно их воспринимать, значит в первую очередь нужно подтягивать язык — это заметно дольше и сложнее, чем разобраться с нейронными сетями). Какие-то из них есть и в переводе, но не всегда можно быть уверенным в его качестве. Ну и, естественно, владение англоязычной терминологией очень поможет в чтении статей, когда доберетесь от классических вещей до переднего края прогресса.
Кодил, кожу и буду кодить
Хрестоматийной книгой по Python считается Learning Python, хотя, конечно, с выхода последнего издания утекло много воды. Те, кто уже знаком с основами языка, могут предпочесть что-то вроде Clean Python. Если с программированием как таковым опыта немного, важно набить руку (например, на сайтах вроде https://www.hackerrank.com/, https://leetcode.com/, https://exercism.org/ и т.п.).
По numpy и pandas очень достойно выглядит книга «от создателей»: Python for Data Analysis. Потренироваться можно тут: https://github.com/guipsamora/pandas_exercises.
Если замахнетесь на алгоритмы и структуры данных, очень неплох курс Принстонского университета (правда, на Java, хотя освоение этого языка в достаточном для курса объеме не должно занять много времени): https://www.coursera.org/learn/algorithms-part1. Кому лучше заходят книжки, может прочитать первые пять глав из Grokking Algorithms. Есть материалы и для Питона: https://runestone.academy/runestone/books/published/pythonds/index.html. Однако в любом случае эта область кажется менее приоритетной (то есть, наличие знаний по теме будет полезно, но отсутствие вряд ли окажется решающим, если в остальном всё хорошо).
«Сколько выучить формул?»
Говоря о математической базе, стоит начать с линейной алгебры. Базовые представления можно получить тут: https://programmathically.com/linear-algebra-for-machine-learning/. Если захочется чуть углубиться, подойдут первые семь глав из книги No Bullshit Guide to Linear Algebra.
Источник: https://mathwithbaddrawings.com/2018/03/07/matrix-jokes/
Не менее важны основы анализа. Для начала хватит вот этого: https://programmathically.com/calculus-for-machine-learning/. Желающим разобраться, почему и как, можно порекомендовать книгу Calculus Made Easy.
Для знакомства с теорией вероятностей и математической статистикой достаточно будет следущих материалов: https://programmathically.com/probability-and-statistics-for-machine-learning-and-data-science/. Наглядно некоторые вопросы разобраны тут: https://seeing-theory.brown.edu/.
Если вам ближе ваши университетские конспекты — замечательно, только стоит убедиться, что все упомянутые выше темы ими охвачены.
Источник: https://xkcd.com/552/
Важно, чтобы на выходе было глубокое понимание базовых вещей. В порядке самопроверки можно попробовать не глядя в материалы объяснить себе или другому, что там и, главное, почему. Так, например, намного лучше не помнить навскидку формулу Байеса, но при этом быть в состоянии её вывести, чем наоборот.
Ng or not Ng?
Вводных материалов по машинному обучению много. Для понимания базовых идей и подходов очень хорош стэнфордский Statistical Learning (тут можно найти и книгу, и видеокурс: https://www.statlearning.com/). Единственный существенный минус — практические задания на R (есть смысл делать их на Python — как раз хорошее упражнение получится). Какое-то время был очень популярен Эндрю Ын (Andrew Ng) со своим Machine Learning. Содержание актуально до сих пор, хотя MATLAB / Octave в качестве инструмента в наши дни выглядит еще более спорно, чем R. Также можно отметить очень подробное объяснение базовых вещей, что для условных гуманитариев несомненный плюс, а вот людям с математической подготовкой может показаться избыточным.
Переходя от идей и подходов к их актуальной реализации, полезно проработать книгу Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow. Для начала можно ограничиться первой частью, но упражнения пропускать не стоит.
Для закрепления навыков хорошо подойдет mlcourse.ai (в первую очередь именно как набор практических задач).
Если решите охватить и нейронные сети, можно начать с Deep Learning Specialization от того же Ына. Но, повторимся, лучше более основательно освоить классические методы.
Практика на Kaggle тоже будет полезна. Представляется разумным выбирать соревнования со структурированными данные не слишком большого объема, чтобы поменьше отвлекаться на технические сложности. Tabular Playground Series — отличный вариант для начала.
Хотя, безусловно, целый ряд важных в работе аспектов Kaggle не покрывает. Если интересно получить о них представление, можно почитать книги, освещающие вопросы бизнеса и коммуникации, например, Data Science for Business и Storytelling with Data. Однако для начального уровня это, скорее, факультативные вещи.
Источник: https://timoelliott.com/blog/2016/02/cartoon-data-story-telling.html
«А вдруг это не мое?»
В заключение хотелось бы отметить, что связанные с data science проекты подразумевают целый спектр ролей, а не просто условных data scientists. Так, например, востребованы data BA и data DM (бизнес-аналитики и менеджеры с глубоким пониманием специфики работы с данными и машинным обучением), data QA (тестирование различных аспектов обработки данных, включая и прогнозные модели), ML engineer («продукционализация» запрототипированных решений), MLOps (тут вообще можно встретить широкое разнообразие трактовок) и т.д. Так что если по ходу освоения предложенных материалов вам заметно более привлекательной покажется какая-то конкретная область, это не значит, что data science не для вас. Скорее, наоборот: есть неплохие шансы найти интересную вам нишу, особенно в крупных компаниях / проектах.
Источник: https://me.me/i/i-know-machine-learning-83cc8d4b173a47a3991085f3146cc360
Успехов вам в выборе целей и их достижении!