Какие алгоритмы и структуры данных нужно освоить начинающему специалисту по Data Science — отвечают эксперты

Аватар Никита Прияцелюк
Отредактировано

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

21К открытий22К показов

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

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

Лучше всего выбрать любой курс/учебник/лекции по алгоритмам и посмотреть содержание — это с большой вероятностью адекватный, проверенный временем необходимый список того, что нужно знать. Кроме того, любой курс включает понятия для анализа и понимания любых алгоритмов: вычислительная сложность по памяти, по времени, теории из анализа алгоритмов (почему сортировать быстрее, чем за O(N*logN), в среднем нельзя) — с этим в любом случае сталкиваешься при работе.

Если же говорить, о том, с чем чаще приходится работать — это различные методы, используемые в базах данных: тут важно знать виды сортировок, понимать, как СУБД обрабатывает оператор ORDER BY, как работает и хранится индекс и primary key и т. п.

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

Начинающему data scientist’у необходимо определиться с ближайшей целью своего развития:

  1. Применение своих навыков в прикладных задачах.
  2. Экспериментальные и в большей степени научные задачи, участие в конкурсах на платформе Kaggle, анализ идей цифровых гигантов.

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

Для этого стоит изучить библиотеки NumPy, Pandas, SciPy, Sklearn, Matplotlib, XGBoost, LightGBM, после чего специалисту открыты двери для решения задач в ритейл-, телеком- и банковской сферах.

Если в приоритете экспериментальные задачи, помимо всего вышесказанного нужно разобраться в библиотеках NLP, Keras, TensorFlow, Theano, проанализировать множество видео-, аудиоданных, собрав различные датасеты, например с изображениями котиков. Это откроет потенциальную возможность разработать нечто крутое, что потом купит Apple или Facebook.

Вне зависимости от того, какая цель будет выбрана, начинающий специалист должен владеть основами аналитики, статистики и математики. А в фундаментальных знаниях — Python и R, базовые навыки работы в Linux, Excel и, конечно же, SQL, потому что иногда проще написать две строчки select-а, чем ломать голову, как минимизировать количество циклов над датасетом.

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

Ну и безусловно, в этом вопросе лучше разбираться с опытным наставником.

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

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

Для специалистов, работающих с текстовым поиском, полезно знать алгоритм Кнута-Морриса-Пратта (поиск подстроки в строке), а для тех, кто работает в области NLP, хорошо бы знать алгоритм Хаффмана, использующийся, в частности, в word2vec.

Для инженера машинного обучения — специалиста, который не только применяет модели машинного обучения, но и внедряет их, а иногда и модифицирует, важно знать всё те же алгоритмы, которые должен знать обычный программист, начиная от простейших (сортировки, обход деревьев) до специфичных для Data Science.

Преподаватели вузов говорят о том, что из 100 поступивших на IT-факультеты до выпуска доходят не более 50 человек. При этом по профессии начинает работать едва ли половина из них. Эксперты онлайн-университета «Нетология» отмечают, что прирост блока Data Science в онлайн-обучении в 2019 году составил целых 700 %. Это сигнализирует о том, что в условиях высокой конкуренции специалисту в DS нужно обладать обширным набором знаний для успешной самореализации.

Алгоритмы и структуры данных — это больше теоретическая основа для работы программистом. Так, в «джентльменский набор» программиста входит: асимптотическая оценка сложности, быстрая сортировка, хеш-таблицы, сбалансированные деревья поиска, алгоритмы на графах и знание NP-полных задач.

Data Science-специалисту как минимум надо овладеть следующим инструментарием и знаниями:

  • Основы программирования на Python + Python для анализа данных. Это и управляющие структуры, и умение написать небольшую процедуру, например для очистки данных, и базовые знания Pandas, NumPy.
  • Визуализация данных для интерпретации результатов и обсуждения с бизнес-заказчиками. Для начала можно использовать matplotlib — библиотеку на языке Python для визуализации данных двумерной 2D и 3D-графикой — она наиболее распространённая.
  • Математические основы: работа с линейными операторами (матрицами).
  • Матанализ и методы оптимизации (например градиентный спуск, метод наименьших квадратов).
  • Знание статистики и теории вероятности. Тут важна теорема Байеса и понимание, как проверять статистические гипотезы.
  • Умение анализировать временные ряды (метод скользящего среднего).
  • Оценка качества алгоритмов (схемы валидации и метрики, например HoldOut, K-Fold, метрики: MSE, F1-Score, ROC-AUC). Это нужно, чтобы проанализировать, правильно ли работают налаженные вами процессы и насколько они эффективны.
  • Основные модели машинного обучения (это logistic regression, random forest, desicion tree, XGBoost, SVM, k-means). Применяются в зависимости от конкретной прикладной задачи, либо в ансамбле многоуровневой модели.
  • Deep learning и нейронные сети — Back Propagation, Pytorch, основные архитектуры сетей. Начать можно со свёрточных сетей вроде AlexNet, так как они самые простые для выполнения задач классификации.
  • Оценка эффективности моделей в реальных бизнес-задачах, умение коррелировать внутренние метрики с бизнес-показателями.
  • Сложно будет и без soft-skills: ML-модели строятся под конкретные цели заказчиков, поэтому важно уметь объяснить клиенту — либо своему project-менеджеру — мотивацию своих действий и решений, чтобы выстроить грамотный «мостик» между работой программиста и задачами бизнеса.

Эксперты отмечают Data science среди необходимых в 2020 году навыков, так как 14 % всех рабочих задач могут быть автоматизированы в ближайшие годы. Хорошему специалисту DS нужны не только диджитал-навыки и высокий уровень понимания процессов, но и soft skills для успешной коммуникации с командой и заказчиками.

Для старта нужно знать основу: как работает классическое машинное обучение, уметь решать задачи регрессии (линейной, логистической, случайный лес, градиентный бустинг на решающих деревьях и т. п.), классификации. Чаще всего в жизни применяется Gradient Boosted Trees/Random Forest, но встречаются также задачи с логистической регрессией. Это что касается обучения с учителем (supervised learning).

Если говорить про алгоритмы без учителя (unsupervised learning), позволяющие делать аналитику без целевой разметки, то здесь важно владеть методами понижения размерности, потому что они часто помогают избавиться от ненужных факторов, облегчить модель перед выводом в продакшн, например. Также нужно хорошо знать методы кластеризации, среди них популярны метод k-средних (k-means), HDBSCAN. Первый подходит, когда мы вручную задаём количество кластеров. Например у нас есть информация, какой у людей рост и вес, известно, что производственные мощности могут произвести 100 маек, и мы знаем, что существует 5 размеров маек — 5 кластеров. Задача — понять, сколько на самом деле маек нужно сделать, чтобы обеспечить спрос рынка, чтобы, например, не было много размеов L или S. И алгоритм k-means помогает подобрать, сколько людей подходит под каждый кластер. Другой алгоритм помогает сам подобрать необходимое количество кластеров.

Классические методы Machine Learning хороши, но часто не оправдывают ожидания бизнеса из-за того, как они работают и с каким качеством. Например, если в обученной модели вес одного из факторов будет 70-80 %, то бизнес может решить, что модель линейная, и не принять результаты. Молодому специалисту следует выбрать направление, в котором интересно развиваться профессионально. Например, если интересно заниматься предиктивной аналитикой, то нужно дополнительно изучить анализ временных рядов (здесь много своей специфики), глубинное обучение. Также надо знать, как работают классические модели по анализу временных рядов (ARIMA/SARIMA и т. д.).

Другое направление — это рекомендательные системы. К ним прибегают, когда нужно восстановить зависимость: какой пользователь какой продукт выберет. Отличный пример — Netflix, который рекомендует релевантный видео-контент в зависимости от предпочтений. В этом направлении базовые методы — сингулярное разложение, коллаборативная фильтрация, факторизационные машины. Можно, конечно, погрузиться и в изучение квантовых Больцмановских машин, но понадобится он, скорее всего, только для исследований — не для работы.

Ещё одно интересное направление — анализ естественного языка (NLP). Желающим развиваться в этом направлении специалистам нужно знать базовые модели и разбираться в текущих наработках — gensim, word2vec, SpaCy, BERT. Последний достаточно тяжелый, он нужен для масштабных разработок крупным ИТ-компаниям. В обычной жизни его сложно использовать.

Ещё одно очень популярное в последнее время направление — компьютерное зрение. Для того, чтобы специалисту развиваться в этом, нужно изучить как классические модели — например аналитические алгоритмы на основании библиотеки OpenCV — так и более продвинутые и устойчивые инструменты, например свёрточные нейросети (convolutional neural network).

Таким образом, чтобы начать карьеру Data Scientist, нужна база, после чего можно углублённо изучать доменные области, внутри которых можно развиваться. Конечно, в любой момент можно легко поменять направление, потому что в принципе «под капотом» находится примерно одно и то же, только разбирается разными инструментами и под разными ракурсами.

Итак, какие алгоритмы и структуры данных нужно знать начинающему специалисту Data Scientist?

Конечно же, необходимость понимать тот или иной алгоритм или структуру данных зависит от прикладных задач, которые решает или планирует решать специалист. Так, для работы с текстовым поиском, полезно знать алгоритм Кнута-Морриса-Пратта, для работы с геоданным точно пригодятся графовые алгоритмы, а для NLP — алгоритм Хаффмана. При этом, любому специалисту явно не помешает знание методов кластеризации (например, k-means и HDBSCAN) и умение решать задачи классификации, понижения размерности и регрессии.

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

Вне зависимости от направления, которое вы выберете, вам понадобятся основы аналитики, статистики и математики. Также не помешают базовые навыки работы с Linux, Excel и SQL. Кроме того, вам скорее всего придётся освоить какой-то язык программирования; в ML фаворитами являются R и Python, многие делают свой выбор в пользу последнего.

В Python для ML пригодятся такие библиотеки, как NumPy, Pandas, SciPy, Sklearn, Matplotlib, XGBoost, LightGBM и другие.

Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики. Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на experts@tproger.ru, мы расскажем, как это сделать.

Следите за новыми постами
Следите за новыми постами по любимым темам
21К открытий22К показов