Заметки Дата Сайентиста: с чего начать и нужно ли оно?
RUVDS.comС появлением цикла заметок «дата сатаниста» пришло немало сообщений и комментариев с вопросами о том, как начать и куда копать и сегодня мы разберем основные скиллы и вопросы возникшие после публикаций.
Все указанное тут не претендует ни какую истину в последней инстанции и является субъективным мнением автора. Мы разберем основные вещи, которые кажутся самыми важными в процессе.
Зачем именно это нужно
Для того, чтобы цель была достижима лучше, чтобы она хоть как-то конкретно выглядела — вы хотите стать DS или Research Scientist в Facebook/Apple/Amazon/Netflix/Google — смотрите требования, языки и необходимые навыки прям конкретно под какую позицию. Какой процесс найма? Как проходить обычный день в такой роли? Как выглядит усредненный профиль человека, который там работает?
Часто общая картина в том, что человек не очень понимает, что именно хочет и не совсем понятно, как к этому неясному образу готовиться — поэтому стоит иметь хотя бы примерный план того, что именно вы хотите.
Конкретизируйте текущее представление цели
Даже, если оно по ходу будет меняться, а это вообще нормально — менять планы по ходу пьесы — стоит иметь перед собой цель и на нее ориентироваться, периодически оценивая и переосмысливая.
Будет или это еще актуально
К тому моменту, как вы дорастете до позиции.
Представьте, что до вашей позиции вам нужно получить PhD, поработать 2-3 года в индустрии и вообще остричься, медитируя в монастыре — не будет ли с Data Science такой же ситуации как когда-то с экономистами и юристами? Не изменится ли все до неузнаваемости в той области, которой вы хотите заниматься.
Нет ли хорошего шанса, что все сейчас именно туда и ломанутся и мы увидим картину, когда есть широкий пласт людей, которые пытаются войти в профессию — а позиций для старта будет просто мизер.
Возможно стоит учесть текущие тенденции при выборе пути, не только текущее состояние рынка труда, но и ваше представление о том, как он меняется и в какой точке находится.
К примеру автор и не планировал идти в дата сатанисты, а во время PhD пилил сторонние проекты, которые сильно перекликались по скиллам с DS и по окончанию аспирантуры естественным образом перешел в среду, увидев хорошую позицию.
Если по ходу пьесы окажется, что нужно будет переходить куда-то еще — ибо там сейчас самая движуха и все самое интересное действо происходит, ну значит туда и будем переходить естественным образом.
Разбивка навыков
Это условные категории навыков, который мне кажутся ключевыми для полноценной и эффективной работы в DS. Отдельно выделю английский — учите, чем бы вы не занимались в CS. Далее будут ключевые категории.
Программирование/Скриптинг
С какими языками обязательно надо познакомиться? Python? Java? Shell scripting? Lua? Sql? C++?
Что именно нужно уметь и зачем в плане программирования — тут спектр позиций очень разнится.
Например, мне часто приходится реализовывать сложную логику, запросы, модели, аналитику и вообще разрабатывать именно интерпретируемые системы, но практически никогда нет требований по скорости работы кода, кроме самых общих и разумных.
Поэтому мой набор навыков сильно отличается от тех, кто пишет библиотеку Tensorflow и думает об оптимизации кода под эффективное использование l1 кеша и подобным вещам, поэтому смотрите, что именно нужно вам и оценивайте правильный путь к изучению.
Например, для питона люди уже даже составляют карту изучения языка.
Наверняка под ваши нужды уже имеются советы бывалых и есть хорошие источники — надо определиться со списком и начать им заниматься.
Понимание бизнес процессов
Без него никуда: вам нужно понимать зачем вы нужны в данном процессе, что вы делаете и зачем. Часто именно это может сэкономить вам кучу времени, максимизировать свою пользу и не тратить время и ресурсы на фигню.
Обычно, я задаюсь следующими вопросами:
- Что именно я делаю в компании?
- Зачем?
- Кто и как это будет использовать?
- Какие у меня есть опции?
- В каких границах находятся параметры?
Тут чуть подробнее про параметры: часто можно сильно изменить сценарий работы, если знать, что чем-то можно пожертвовать: например интерпретируемостью или наоборот, пара процентов тут роли не сыграют и у нас есть оооочень быстрое решение, а клиенту оно и нужно, ибо он платит за время работы пайплайна в AWS.
Математика
Тут вы думаю и сами все понимаете — без знания базовой математики вы не более чем бебезьян с гранатой (простите с Random Forest) — поэтому нужно понимать хотя бы базовые вещи. Если бы я составлял прям самый минимальный список, то туда бы вошли:
- Линейная алгебра — огромное количество ресурсов легко гуглится, ищите, что вам больше всего подходит;
- Математический анализ — (хотя бы в объеме первых двух семестров);
- Теория вероятностей — она повсюду в машинном обучении;
- Комбинаторика — она фактически комплементарна к теорверу;
- Теория графов — хотя бы БАЗОВО;
- Алгоритмы — хотя бы объеме первых двух семестров (см. рекомендации Кормена в его книжке);
- Матлогика — хотя бы базово.
Практический анализ и визуализация данных
Одна из самых принципиальных вещей — уметь не бояться испачкать руки в данных и провести всесторонний анализ датасета, проекта и накидать быструю визуализацию данных.
Exploratory data analysis должен стать просто чем-то естественным, как и все прочие трансформации данных и умение накидать простой пайплайн из unix тузлов (см. предыдущие статьи) или написать читаемый и понятный ноутбук.
Отдельно упомяну визуализацию: лучше один раз увидеть, чем сто раз услышать.
Показать менеджеру график в сто раз проще и понятнее, чем набор цифр, поэтому matplotlib, seaborn и ggplot2 ваши друзья.
Софт скиллы
Не менее важно уметь донести свои идеи, а также результаты и опасения (итд) до окружающих — убедитесь, что вы умеете четко изложить задачу как в технических, так и бизнес терминах.
Можете объяснить коллегам, менеджерам, начальству, клиентам и всем, кому требуется, что происходит, какими данными вы оперируете и что за результаты вы получили.
Ваши графики и документация должны читаться без вас. То есть, не нужно идти к вам, чтобы понять, что там написано.
Вы можете сделать понятную презентацию, чтобы донести суть происходящего и/или задокументировать проект/свою работу.
Вы можете аргументированно и безэмоционально донести свою позицию, сказать “да/нет” или поставить под сомнение/поддержать решение.
Обучение
Есть много разных мест, где можно все этому научиться. Я приведу краткий список — я пробовал из него все и, честно скажу, у каждого пункта есть свои плюсы и минусы. Пробуйте и решайте, что подходит вам, но крайне рекомендую попробовать несколько вариантов и не зацикливаться на одном.
- Онлайн курсы: coursera, udacity, Edx, etc;
- Новые школы: онлайн и офлайн — SkillFactory, ШАД, MADE;
- Классические школы: магистерские программы университетов и курсы повышения квалификации;
- Проекты — можно просто выбрать интересные вам задачи и пилить, выкладывая на github;
- Стажировки — тут сложно что-то подсказать, надо искать, что имеется и находить подходящий варианты.
А надо ли оно?
В заключение, пожалуй добавлю три персональных принципа, которым я стараюсь следовать сам.
- Должно быть интересно;
- Приносить внутреннее удовольствие (= хотя бы не причинять страданий);
- «Быть вашим».
Почему именно они? Сложно представить, что вы будете чем-то заниматься изо дня в день и вам не будет это нравится или будет неинтересно. Представьте, что вы врач и ненавидите общаться с людьми — это конечно может как-то сработать, но вам будет постоянно некомфортно от потока пациентов, которые у вас что-то хотят спросить. Это не работает в долгосрочной перспективе.
Почему я специально упомянул еще внутреннее удовольствие? Мне кажется, это необходимо для дальнейшего развития и в принципе процесса обучения. Я действительно получаю удовольствие, когда мне удается довести до конца какую-то сложную фичу и построить модель или обсчитать важный параметр. Я получаю удовольствие, когда мой код эстетически красив и хорошо написан. Поэтому и изучать что-то новое всего интересно и не требует прямо какой-то существенной мотивации.
«Быть вашим» — это то самое ощущение, что вы примерно этим и хотели заниматься. У меня есть небольшая история. Я с самого детства увлекался рок-музыкой (и металлом — ЛОСОСЬ!) и как очень многие захотел научиться играть и вот это вот все. Выяснилось, что у меня нет слуха и голоса — меня это совершенно не смущало (а надо сказать многих исполнителей это и прямо на сцене не смущает), и вот еще школьником у меня появилась гитара… и стало понятно, что мне не очень нравится часами сидеть и играть на ней. Шло тяжко, мне все время казалось, что выходит какая-то фигня — я совершенно не получал от этого удовольствия и только чувствовал себя паршиво, глупо и совершенно неспособным. Я буквально из под палки себя заставлял садиться за занятия и в целом это было не в коня корм.
В то же самое время, я совершенно спокойно мог сидеть часами за разработкой какой-нибудь игрушки, с помощью скрипта анимировать что-то на флеше (или чем-то еще) и меня дико мотивировало доделывать элементы в игре или разбираться с механикой движения и/или подключением сторонних библиотек, плагинов и всего остального.
И в какой-то момент я понял, что игра на гитаре — это не мое и реально-то мне нравится слушать, а не играть. А глаза-то горели, когда я писал игры и код (слушая в этот момент всякие разновидности металла) и вот это-то мне тогда и нравилось, и этим мне стоило заниматься.
А еще есть вопросы?
Конечно же мы не смогли пройтись по всем темам и вопросам, так что пишите комменты и в личку — я всегда рад вопросам.