Привет! Меня зовут Евгений Мокшин, я занимаюсь аналитикой и машинным обучением в ПГК. Хочу рассказать, как можно применять научный подход при решении рабочих DS-задач.
В большинстве статей, посвящённых правилам и советам по решению задач DS, рассказывается о подготовке, очистке и предварительной обработке данных, разновидностях задач и методов их решения. Из них можно узнать о том, как разработать модель, настроить гиперпараметры, выполнить перекрестные проверки. Как правило упор делается на технические аспекты. Знать и использовать все это, безусловно, важно. Однако для получения качественного результата DS-специалист также должен быть исследователем, уметь правильно ставить задачу, проводить обзор методов, выдвигать гипотезы и делать выводы. В этой статье я опишу свой взгляд на решение DS-задач и покажу, как научный подход поможет повысить его качество.
Алгоритм решения задачи DS
Представим, что вам необходимо решить определенную задачу и реализовать решение в виде программного сервиса.
Решение можно разбить на такие этапы:
Постановка задачи;
Обзор литературы;
Построение гипотез;
Проведение экспериментов;
Просмотр и анализ результата;
Формулировка выводов, интерпретация результата;
Выбор оптимального решения.
1. Постановка задачи
На практике такому простому этапу как постановка задачи часто уделяют мало внимания. Не хватает деталей в описании задачи, нет качественного анализа со стороны ее постановщика. Между тем, если на этом этапе допустить неточность, можно получить некорректные результаты или застрять на разных этапах их получения. Специалисты рекомендуют тратить на проработку задачи 40-50% всего времени построения и реализации алгоритма. Не всегда этому совету возможно следовать, но на него можно ориентироваться. Уделяя достаточное время постановке задачи можно сократить время на решение проблемы, избежать лишних действий и грамотно спланировать их последовательность.
Лайфхак
Если задача ставится устно, обязательно запишите и согласуйте написанное с постановщиком. Это позволит избежать ложных толкований и улучшит понимание вопроса. Кроме того, в процессе решения полезно обратиться к написанному, чтобы скорректировать свои действия.
Содержание этапа постановки задачи:
В чем проблема?
Здесь описываем текущий бизнес-процесс и уточняем, где его нужно улучшить. Чем больше подробностей укажете, тем точнее будет решение поставленной задачи. Не стесняйтесь задавать уточняющие вопросы и заходить в области, граничащие с другими сферами, на
которые реализуемый алгоритм может влиять. Вы должны хорошо представлять, какую
задачу решаете, почему она возникла и какой в ней смысл.
Лайфхак
Попробуйте сформулировать суть задачи другому человеку. Если у вас получилось объяснить – поздравляю, значит понимание есть. Если нет, то есть над чем поработать.
Если это возможно, добавьте описание существующего алгоритма. Тогда постановку можно сформулировать как его улучшение. Даже если это не подразумевается, то в любом случае уточните, какое решение было до вашего. Это поможет вам сделать сравнение до/после.
Что известно?
Опишите, какими данными обладаете, что в них содержится. В каком виде эти данные представлены, есть ли у вас доступ к ним, что может потребоваться для их извлечения, правки. Убедитесь, что вы понимаете их физический или бизнес-смысл.
Что требуется сделать?
Здесь нужно точно сформулировать, что мы хотим получить. Вы должны понимать, во-первых, какие неизвестные величины необходимо найти. Во-вторых, в каком виде будет итоговый результат — в виде файла (таблицы, картинки и т.п.), программного кода или сервиса, который будет встроен в общий продукт. Если это сервис, то как именно он будет использоваться, в каком виде он должен быть представлен? Как часто должна обновляться модель, кем, как и каким образом запускаться – автоматически или вручную? Сколько вычислительных и временных ресурсов нужно для расчета алгоритма? От этого будет сильно зависеть выбранный метод решения и программная реализация.
В-третьих, обсудите метрики оценки качества модели. Они должны быть понятны принимающей стороне, иначе она не сможет убедиться в правильности решения.
Как только ответы на эти вопросы появятся, можно приступать к следующему этапу.
2. Обзор литературы
Мой совет: даже если у вас уже есть идеи по решению задачи, поищите еще способы в Интернете. Вдруг вы найдете работу, в которой решали подобную проблему? В этом случае сократится время поиска оптимального метода. Но даже если совпадение частичное, это тоже неплохо. Узнавая путь других авторов, можно вдохновиться их идеями и реализовать их в своем решении.
Поиск литературы – процесс трудозатратный. Для его оптимизации поделюсь несколькими лайфхаками:
Когда вы нашли подходящую статью, сначала прочтите ее заголовок. Если он согласуется с вашим поиском, ознакомьтесь с аннотацией. Если то, что в ней написано, заинтересовало, переходите сразу к заключению, в нем будет описано, что удалось достичь авторам, а также будет повторно изложено, о чем статья. При чтении обращайте внимание на иллюстрации, они часто бывают информативными. Если статья кажется полезной, переходите к ее сути. Опирайтесь на подзаголовки. С их помощью читать статью можно по диагонали. Уделяйте отдельное внимание только тем местам, которые заинтересовали.
Активно используйте обзор, проделанный другими авторами. Найдя первую статью, относящуюся к теме вашей задачи, внимательно ознакомьтесь с литературой, на которую ссылается автор. Обзор литературы в статьях — очень полезный ресурс. С их помощью можно легко отследить хронологию развития вопроса, понять, какие тенденции сохранились, а какие только появились, как с ними работают. Быть в курсе полезно.
Банально, но часто подводит умение правильно задавать поисковые запросы. Пользуйтесь запросом в несколько слов (3-5), используйте (если возможно) английский язык, формулируйте лаконично и просто. Обращайте внимание на терминологию вашей сферы и используйте ее для поиска.
3. Построение гипотез
После прохождения этапов, описанных выше, у вас должно сформироваться понимание задачи и представление возможных подходов к ее решению. Самое время проанализировать полученную информацию, выбрать стратегию решения и выдвинуть гипотезы. Обратитесь еще раз к постановке и отталкивайтесь от целей задачи.
На этом этапе прорабатывается план решения. Ограничивается область решения, например, выбирается временной диапазон данных (или планируются эксперименты по определению оптимального диапазона). Также, исходя из понимания физического смысла задачи, возможными ограничениями могут быть уменьшение количества искомых величин, сужение интервала поиска и т.п. Вводимые ограничения нужны для оптимизации вычислительного процесса. При этом важно не потерять смысл задачи.
Попробуйте сделать предположение о возможных зависимостях между имеющимися признаками. Часто графический анализ является хорошим инструментом для выявления корреляций (например, классический cross plot). О пользе визуализации данных мы еще остановимся в 5-ом пункте.
Определите методы, способные решить поставленный вопрос в заданное время. Подумайте, какие можно выдвинуть гипотезы. При формулировке заложите ожидаемый результат, а также время на проверку с помощью эксперимента. Старайтесь проводить эксперимент по принципу «один вопрос – один ответ». Пытаться совместить в одном расчете несколько гипотез — не очень правильная идея. Это может привести к «нечистому» результату. Кроме того, внося несколько изменений, вы повышаете шансы на появление ошибок. Иногда лучше потратить больше времени на дополнительные расчеты, но при этом получать понятные и чистые результаты.
Примером выдвигаемых гипотез могут также служить приемы по очистке данных, когда вы делаете предположения о том, какие аномалии могут возникать, и реализуете правила по их исправлению. Также гипотеза может задавать вопрос: «Какой из рассматриваемых методов наилучший?» Здесь важно убедиться в том, что они сравниваются в одинаковых условиях.
Постарайтесь описать продуманное в виде плана, однако не придумывайте сразу много гипотез, а решайте их последовательно. Формулируйте вопрос и получайте ответ в эксперименте. Возможно некоторые гипотезы отпадут сами собой.
4. Проведение экспериментов
Проведение экспериментов — это более технический этап решения, который требует грамотной и безошибочной реализации. Хотя здесь и не нужен глубокий анализ, один нюанс все же есть. Это сложный этап, который требует большого количества одновременных действий: нужно корректно написать код, погрузиться в логику языка, синтаксиса, продумать и реализовать архитектуру алгоритма. Если задача объемная, это может отнять значительную часть времени и тем самым отвлечет от главного – решения поставленной задачи.
На своей практике я неоднократно наблюдал ситуацию, когда неопытный специалист, доходя до результатов эксперимента, не мог вспомнить, на какой вопрос он хотел ответить. Поэтому не забывайте возвращаться гипотезе, которую выдвигали.
5. Просмотр и визуализация результата
Наконец, вы получили результат, но не спешите его анализировать, сперва его нужно качественно отобразить. Графический анализ – это отличный инструмент для выявления закономерностей, аномалий в данных и проверки результата.
Развивайте навыки визуализации, изучайте необходимые для этого библиотеки. Качественно построенный график — отмасштабированный, с подписными осями, легендой, выбранными цветами может очень много сказать о результате.
Я вынес этот раздел в отдельный пункт, чтобы подчеркнуть его значимость. Часто специалисты не отводят достаточного внимания визуализации графиков. Из-за этого ускользает часть смысла полученного результата, возникают ошибки в толковании. Я присутствовал на множестве презентаций, когда специалист показывал плохой график и делал неправильный вывод по нему. Но когда он его исправлял, приводил в культурный вид, то выводы корректировались сами собой, все становилось очевидным.
График не единственный возможный вариант отображения результата. Числовой и табличный вид также является удобной и полезной формой анализа. Практикуйте пересечение этих способов, когда один и тот же результат отображается и графически, и таблично.
6. Формулировка выводов, интерпретация результата
Теперь, когда результат готов, время приступить к анализу. Этот пункт является опорным, от него будет зависеть дальнейших ход развития решения. Чтобы сохранять объективность и беспристрастность старайтесь разделять следующие понятия: результаты, выводы (обсуждение) и заключение.
Результаты – это полученные в ходе эксперимента значения, данные. Выводы или обсуждения – это результат, проанализированный с пониманием решаемой задачи (или серии экспериментов). Результат — это случившийся факт, для всех он одинаковый, это построенный вами график или таблица. Выводы же могут отличаться в зависимости от интерпретатора. Коллеги могут не разделить ваше мнение, что является поводом для дополнительных экспериментов.
Лайфхак
Перед демонстрацией результата эксперимента всегда пробуйте провести собственный анализ. Это улучшит ваше понимание задачи. Можно, например, сравнить полученное значение с предыдущим результатом или сопоставить значение этой величины и другим признаком из того же эксперимента. Старайтесь не передергивать факты, просто описывайте наблюдаемое.
При формулировке выводов вернитесь к гипотезе, которую выдвигали в начале. Удалось ли ее подтвердить или нет? Подумайте, какие новые знания получили, на что они повлияли, что еще нужно проверить? Кроме анализа текущего результата выводы необходимы для формулировки следующих гипотез.
Поделитесь своими выводами с руководителем и/или коллегами. Возможно, они интерпретируют результаты вашей работы по-другому, и это позволит вам иначе взглянуть на полученный результат. Если проведенного эксперимента для решения задачи оказалось недостаточно, сформулируйте новые гипотезы и повторяйте шаги 3-6.
Заключение - обычно подводит итоги работы, делает резюме по проведенной серии экспериментов, позволяет глобально взглянуть на осуществленный процесс, понять к чему пришли, куда движемся дальше или все хорошо и задача решена. Сюда вносятся главные
достижения, ответы на поставленные вопросы и цель.
7. Выбор оптимального решения
Итогом решения задачи может послужить обобщение всех проведенных экспериментов и выбор оптимальной ветки решения в качестве основного алгоритма. Не все рассмотренные ситуации могут быть применимы на практике, вам следует выбрать наилучший сценарий, который будет укладываться во все условия задачи и давать оптимальный результат. Убедитесь, что вид решения и выходной формат данных соответствует поставленной задаче.
Теперь вы готовы, чтобы пустить ваш построенный корабль в долгое путешествие. Удачи!
Заключение
Задачи, решаемые Data Scientist, во многом исследовательские и часто включают в себя проведения масштабной серии экспериментов. В статье я постарался рассказать о важности постановки задачи, ее содержании, сокращении времени на обзор литературы, дал советы по формулировке гипотез. Еще рассказал о различиях между результатами, выводами и заключением.
Специалисты, которые работают в этой области, должны практиковать и развивать научный подход к решению задач, заниматься исследованиями. Важно уметь правильно ставить цели, выполнять качественный research, уметь проводить эксперименты и корректно интерпретировать результаты. Я убежден в том, что кто владеет научным методом решения поставленных задач, может решать их более качественно и быстро.