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

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

Просто для понимания контекста позвольте мне объяснить, что я физик и научился программировать самостоятельно. Кроме того, до этого момента я всегда работал один, поэтому мне никогда не приходилось делиться своим кодом ни с кем, кроме меня.

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

Что за хрень? — сказал мой руководитель, указывая на метод с более чем 200 строками кода.

– я обучаю модель машинного обучения. — гордо ответила я с ухмылкой на лице.

– Да, но похоже, что вы также читаете некоторые наборы данных тут и там. — спросил его совсем не улыбаясь.

– Да, конечно, я читаю данные, разделяю их в train и test, предварительно обрабатываю, а затем обучаю модель — к этому моменту ухмылка гордости с моего лица уже исчезла.

– это неправильная практика.

– Это не что?

– О боже, это показывает, что вы физик…

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

Почему лучшие практики важны

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

Для скорости

Начиная новый проект по науке о данных, мы все рады быстро достичь окончательных результатов. Однако такой менталитет делает вас медленнее в долгосрочной перспективе. Один из моих коллег сказал мне несколько лет назад: «Ученые-данные с опытом работы в физике проделывают отличную работу на первых этапах проекта. У них есть отличные идеи, и обычно они добиваются хороших результатов в течение нескольких дней. Однако после этого первого всплеска творчества и результатов они застревают, потому что написанный ими код теперь неуправляем, а любое крошечное изменение требует большой работы». Если вы хотите избежать этого, следуйте рекомендациям и напишите хороший код, это поможет вам экспериментировать лучше и быстрее.

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

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

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

Для науки

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

Представьте себе биолога, который проводит эксперимент в захламленной лаборатории, не маркируя должным образом различные образцы, которые он использует, или не следуя инструкциям инструмента. Представьте себе астрофизика, пытающегося открыть новые экзопланеты, не следуя стратегии, просто направляя телескоп в случайные места. Представьте себе физиков из ЦЕРН, фиксирующих LHC с помощью клейкой ленты. Понятно, что во всех этих случаях результаты экспериментов, вероятно, будут бесполезными. И хотя интуиция — мощный двигатель науки, за ней всегда следует тщательный научный процесс. Тем не менее, я видел много экспертов по данным, делающих заявления, основанные на экспериментах с действительно плохо спроектированными научными установками.

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

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

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

Занимайтесь машинным обучением как великий инженер, которым вы являетесь, а не как великий эксперт по машинному обучению, которым вы не являетесь.
Из Правил машинного обучения от Google

Эта история изначально была размещена здесь.