12 вещей, которые можно узнать за год работы датасаентистом

О важности общения, новых подходов и проверенных методов.

Всегда интересно посмотреть на опыт новичка и извлечь из него полезные уроки. Австралиец Дэниел Берк самостоятельно изучил анализ данных и получил работу в технологической компании. Он стал частью небольшой команды консультантов по машинному обучению, которая занималась сбором данных, построением моделей и их использованием в реальных задачах. Автор делится своими наблюдениями, которые он вынес за год работы, пока не ушел заниматься собственным бизнесом. Публикуем пересказ этой статьи.

1. Данные важнее всего

Если вы знакомы с основными принципами data science, то это утверждение покажется вам банальным. Но удивительно, как часто в процессе работы я ловил себя на мысли, что пытался улучшить модель, вместо того чтобы улучшить данные, на которых она строится.

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

Когда начинаете работать над проектом, уделите больше всего времени знакомству с данными

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

2. Проблемы в коммуникации сложнее технических трудностей

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

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

Как это исправить? В первом случае нужно регулярно общаться с клиентом. Понимает ли он, что вы можете предложить? Понимаете ли вы его проблему? Знает ли клиент возможности машинного обучения и его ограничения?

Для общения внутри проекта существует огромное количество программ, от Asana до Microsoft Teams. Наиболее эффективный способ для меня — это прислать простой апдейт статуса проекта в соответствующий канал в конце рабочего дня. Это могут быть три-четыре важных пункта о сделанном за день, объяснение, почему было сделано так, а не иначе, и планы на будущее.

Выглядит идеально? Нет. Но, кажется, работает.

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

3. Стабильное важнее, чем самое лучшее

Однажды наша команда столкнулась в работе с задачей, связанной с обработкой естественного языка. Надо было научить модель классифицировать пользовательский текст по двум категориям. А если модель не уверена в выборе классификации, передавать текст сотрудникам. Загруженность составляла от 1000 до 3000 запросов в день.

В то время хитом сезона стала языковая модель BERT. Но без вычислительных мощностей Google тренировка модели на BERT требовала слишком большого времени для обработки данных еще до этапа обучения. Вместо этого мы использовали другой метод, который называется ULMFiT. По документации он выглядит не очень-то современно, но всё же он давал более чем адекватные результаты и был намного проще в работе.

Рабочий вариант гораздо ценнее поиска недостижимого идеала

4. Учеба никогда не даст практические знания

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

Предметно-ориентированные знания нельзя получить во время учебы, их приобретаешь только в процессе работы. Мне повезло оказаться рядом с лучшими специалистами в Австралии, я хотел учиться и не боялся ошибаться ради получения новых знаний.

5. Тратьте на  своё обучение 20% времени

У нас было правило 20%, которое гласило, что 20% времени может быть использовано на обучение наших специалистов. Такой подход не раз доказывал свою ценность. ULMFiT пришел на смену BERT в результате применения этого правила. Таким образом 80% времени используется на основной проект. Не всегда пропорция такова, но это то, к чему нужно стремиться.

Ваши будущие достижения зависят от развития и поддержания конкурентных преимуществ вашего бизнеса.

Это значит, что учиться надо постоянно.

6. Читают только одно исследование из десяти. Используют в работе еще меньше

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

7. Спрашивайте себя: «Что именно я сейчас делаю?»

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

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

Разведка, поиск нового. Здесь может сработать принцип 20% времени. Еще лучше работает соотношение: 70/20/10. Можно тратить 70% времени на основной продукт, 20% на улучшения и 10% на смелые идеи, которые могут и не сработать. В своей работе я так не делал, но стремлюсь к этому.

8. Начинайте с простого и постепенно усложняйте

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

9. Проговорите проблему «об коллегу»

Этому я научился у своего коллеги Рона. Если ты застрял, можно сидеть и вглядываться в код, пытаться решить, но так и не решить проблему. Вместо этого можно посоветоваться с тем, кто сидит рядом.

— Рон, я пытаюсь обработать этот массив и отследить его состояние, одновременно обрабатывая другой массив, и затем вывести регистр n-кратной длины.

— Цикл в цикле? Почему бы его не векторизовать?

— А так можно?

— Давай посмотрим.

10. Не нужно стараться всегда писать модель с нуля

К вопросу о слиянии машинного обучения с разработкой программного обеспечения. Если ваша задача не очень специфична, то для нее можно подобрать стандартное решение: классификации, регрессии, прогнозы временных рядов, рекомендации. Сервисы вроде Google и AutoML сделали машинное обучение доступным для любого, кто способен загрузить набор данных и определить целевую переменную. Мы только в самом начале, но обороты набираются быстро.

Со стороны разработчика вам доступны библиотеки вроде fast.ai, предоставляющие state-of-the-art модели в нескольких строчках кода и «зоопарки» архитектур (предварительно подготовленные пакеты моделей) вроде PyTorch Hub и TensorFlow Hub.

Что это значит? По-прежнему необходимо знать базовые принципы data science и машинного обучения, но ценнее узнать, как их применить к вашей проблеме.

11. Математика важна, но не обязательна для погружения в кодинг

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

12. Актуальные знания быстро устаревают

Знания устаревают, это данность. И по мере слияния программной разработки с машинным обучением это утверждение становится всё более всеобъемлющим. Таковы условия работы. Что остается неизменным? Фреймворки изменятся, библиотеки изменятся, но статистика, теория вероятностей, математика не имеют срока годности. Понять, как их применить, — по-прежнему самая большая задача.

Краткий пересказ от YandexGPT