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

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

Твой программист

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

Для старта нужно знать основу: как работает классическое машинное обучение, уметь решать задачи регрессии (линейной, логистической, случайный лес, градиентный бустинг на решающих деревьях и т. п.), классификации. Чаще всего в жизни применяется 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 Science важно знать прежде всего алгоритмы и структуры данных, которые применяются в алгоритмах машинного обучения. Например, для того, чтобы знать, как устроены решающие деревья, нужно знать, как создать класс узла дерева, а затем построить само дерево, используя рекурсию.


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


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


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

Report Page