Заметки Дата Сайентиста: с чего начать и нужно ли оно?

Заметки Дата Сайентиста: с чего начать и нужно ли оно?

TL;DR это пост для вопросов/ответов про Data Science и о том, как войти в профессию и развиваться в ней. В статьей я разберу основные принципы и FAQ и готов отвечать на ваши конкретные вопросы — пишите в комментариях (или в личке), я постараюсь на все ответить в течение нескольких дней.

С появлением цикла заметок «дата сатаниста» пришло немало сообщений и комментариев с вопросами о том, как начать и куда копать и сегодня мы разберем основные скиллы и вопросы возникшие после публикаций.

Все указанное тут не претендует ни какую истину в последней инстанции и является субъективным мнением автора. Мы разберем основные вещи, которые кажутся самыми важными в процессе.

Зачем именно это нужно

Для того, чтобы цель была достижима лучше, чтобы она хоть как-то конкретно выглядела — вы хотите стать 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;
  • Стажировки — тут сложно что-то подсказать, надо искать, что имеется и находить подходящий варианты.

А надо ли оно?

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

  • Должно быть интересно;
  • Приносить внутреннее удовольствие (= хотя бы не причинять страданий);
  • «Быть вашим».

Почему именно они? Сложно представить, что вы будете чем-то заниматься изо дня в день и вам не будет это нравится или будет неинтересно. Представьте, что вы врач и ненавидите общаться с людьми — это конечно может как-то сработать, но вам будет постоянно некомфортно от потока пациентов, которые у вас что-то хотят спросить. Это не работает в долгосрочной перспективе.

Почему я специально упомянул еще внутреннее удовольствие? Мне кажется, это необходимо для дальнейшего развития и в принципе процесса обучения. Я действительно получаю удовольствие, когда мне удается довести до конца какую-то сложную фичу и построить модель или обсчитать важный параметр. Я получаю удовольствие, когда мой код эстетически красив и хорошо написан. Поэтому и изучать что-то новое всего интересно и не требует прямо какой-то существенной мотивации.

«Быть вашим» — это то самое ощущение, что вы примерно этим и хотели заниматься. У меня есть небольшая история. Я с самого детства увлекался рок-музыкой (и металлом — ЛОСОСЬ!) и как очень многие захотел научиться играть и вот это вот все. Выяснилось, что у меня нет слуха и голоса — меня это совершенно не смущало (а надо сказать многих исполнителей это и прямо на сцене не смущает), и вот еще школьником у меня появилась гитара… и стало понятно, что мне не очень нравится часами сидеть и играть на ней. Шло тяжко, мне все время казалось, что выходит какая-то фигня — я совершенно не получал от этого удовольствия и только чувствовал себя паршиво, глупо и совершенно неспособным. Я буквально из под палки себя заставлял садиться за занятия и в целом это было не в коня корм.

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

И в какой-то момент я понял, что игра на гитаре — это не мое и реально-то мне нравится слушать, а не играть. А глаза-то горели, когда я писал игры и код (слушая в этот момент всякие разновидности металла) и вот это-то мне тогда и нравилось, и этим мне стоило заниматься.

А еще есть вопросы?

Конечно же мы не смогли пройтись по всем темам и вопросам, так что пишите комменты и в личку — я всегда рад вопросам.

Заметки Дата Сайентиста: с чего начать и нужно ли оно?

Заметки Дата Сайентиста: с чего начать и нужно ли оно?

Источник: habr.com