Промышленные записки

Запуск проектов машинного обучения: что нужно знать

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

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

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

Приведенное ниже описание - это не что иное, как краткое изложение опыта, который я получил, руководя группами машинного обучения и работая над некоторыми интересными проблемами в Accenture, Evalueserve, BCG, Intent HQ и Quantplex за последние 10 лет.

Предпосылки

  1. Прежде чем совершить такой прыжок, вы должны четко понимать, какую формулировку проблемы вы пытаетесь решить, каковы границы решения, т.е. что можно решить, а что нет, какие данные доступны, с какими командами вы будете иметь дело, в какие сроки вы работаете.
  2. Хорошая идея - посидеть 2 часа в конференц-зале и перечислить все на доске, попытаться объяснить формулировку проблемы своим товарищам по команде (также, в SOW / контракте с клиентом должна быть вся информация, иначе это может вызвать большое количество проблем, по крайней мере, формулировка проблемы, время, необходимое для решения, и финансовые данные должны быть указаны в контракте). Попросите свою команду перечислить все данные и факторы, которые потребуются для 100% решения проблемы (в идеальном мире), а затем найдите, какие данные и информация у вас есть для решения проблемы. Этого достаточно для решения проблемы? Можете ли вы провести вторичное исследование, чтобы дополнить источники данных, можете ли вы попросить клиентов предоставить соответствующую информацию?
  3. Можете ли вы разбить формулировку проблемы на модули и расставить приоритеты по модулям и в первую очередь поработать над наиболее важными модулями? Можете ли вы использовать принцип Парето, то есть какой модуль будет работать, чтобы решить ~ 80% проблемы?
  4. В зависимости от размера команды и сроков выделите 2–4 дня на изучение возможных решений важных модулей. Прочтите исследовательские работы или найдите решения, которые помогли другим. Поддерживайте несколько каналов связи на любой платформе, на которой вы используете Slack, команды и т. Д., И, пожалуйста, сводите бессмысленную болтовню к минимуму (поддерживайте отдельный канал для таких махинаций).
  5. Все в вашей команде должны четко понимать, что решается и каковы возможные подходы к решению. Выберите тот, который прост и окажет максимальное влияние.

Ab-Initio

  1. Вы знаете цель проекта, можете ли вы ее выразить количественно? Если вы работаете с несколькими целями, можете ли вы распределить их по важности?
  2. Каковы критерии приемки или показатель успеха? (Для этого вам нужно будет работать с клиентами или заинтересованными сторонами, это консультативное мероприятие).
  3. Можете ли вы определить показатели, которые вы будете использовать для измерения цели / успеха проекта? Как и в случае с положительной метрикой, вы должны использовать отрицательную метрику, и ваши результаты должны удовлетворять как положительной, так и отрицательной метрике , например. при разработке системы рекомендаций положительным показателем может быть% купленных продуктов, которые вы рекомендовали, а отрицательным -% купленных продуктов, которые вы не рекомендовали пользователю. Процент для отрицательного показателя здесь должен быть небольшим.
  4. Метрика, которую вы определили на шаге выше, должна иметь отношение к реальному миру, а не только насыщать развратные глаза команды данных. Да, модель должна давать статистически значимые результаты, и вы должны использовать R², вероятность, логарифмическую вероятность, чувствительность, специфичность, переменные матрицы путаницы, точность, MAPE, MSE и т. Д., Но только для оценки производительности модели, а не для передачи результатов в аудитория, в которой есть заинтересованные стороны из бизнеса и люди, не связанные с технологиями. Убедитесь, что вы используете что-то, что что-то значит в их мире. Создавайте прокси-метрики, которые имеют более реальную коннотацию, если вы не можете найти ничего другого.
  5. Что вы сделаете, чтобы ваша модель не сбилась с пути и не унаследовала мировые предубеждения, такие как раса, культура, субкультура, пол, возраст, география и т. Д.)? Сможете ли вы сбалансировать свой микромир?

Инфра

Часто инфра становится узким местом. Если ваши машины не могут работать с тяжелым решением, поищите альтернативные или облачные решения.

  1. Может ли ваша команда или вы получить доступ к данным, которые хранятся в форматах, отличных от того, что может потребоваться вашим моделям? Часто потоки данных отправляются в сегменты S3 в экосистеме HDFS, и для доступа к соответствующим фрагментам необходимо запускать искровые запросы apache. Не перегружайте свою команду специалистами по обработке данных, убедитесь, что у вас тоже есть инженеры по данным, они бог послали в критические ситуации и сделают вашу команду универсальной.
  2. В реальной жизни ваш продукт не будет ядром jupyter, это будет набор файлов, которые будут запускаться через планировщик через задание cron, которое будет публиковать результаты на панели инструментов или помещать результаты в другую корзину S3. Если вы думаете, что все это чушь, то убедитесь, что у вас есть люди (инженеры), которые могут вам помочь. Проекты машинного обучения, как правило, не являются индивидуальным занятием, для его успеха требуется широкий спектр навыков.
  3. Внутренняя инфраструктура будет ограничивать, какие модели вы можете разрабатывать и какие выходные данные будут поддерживаться, а также как часто вы сможете обновлять модели и обновлять результаты. Прежде чем команда приступит к разработке тяжелой и сложной модели, результаты которой нельзя будет использовать, необходимо сначала выяснить внутреннюю инфраструктуру.

Данные

  1. У вас уже есть данные с собой, но вам нужно провести проверку работоспособности. Он проверит целостность предоставленных вам данных.
  2. Насколько свежи данные, есть ли вообще смысл с ними работать? Будет ли он отражать эмоции, которые вы хотите передать с помощью своих моделей?
  3. Какая частота обновления? Как часто он становится несвежим? Соответствует ли он GDPR? Есть ли у него врожденные предубеждения?
  4. Имейте глоссарий и определение всех функций, которые у вас есть в ваших данных. Каков источник данных? Есть ли зависимость от исходных данных, и если да, то какова частота обновления, каковы соглашения об уровне обслуживания и кто их определил?
  5. Одна из самых важных частей - есть ли у вас информация в желаемом формате? Наиболее распространенным из них является int, имеющий тип объекта, а объекты DateTime - строки. Вам нужно будет предварительно обработать такие функции, чтобы на более поздних этапах было меньше проблем.

Базовые волки

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

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

  1. Выделите неделю и придумайте базовую модель. Лучше иметь что-нибудь не слишком сложное и просто использующее семантический подход к решению, а не использующее какое-либо машинное обучение. Базовая модель также поможет вам в проверке работоспособности моделей, а также в некоторых простых случаях, например. если вы разрабатываете систему утверждения ссуды, следует отметить всех, у кого кредитный рейтинг меньше 400. Такой простой первоначальный дизайн поможет вам с самого начала проверить строгость.
  2. Убедитесь, что базовая модель может производить ту же метрику, которую вы определили на шагах выше. Запишите, насколько вы далеки от цели и что вам может понадобиться сделать, чтобы приблизиться к показателям успеха или поставленным вами целям.
  3. Разверните / отправьте свои первые модели как можно скорее, чтобы что-то было в разработке и протестировать всю систему. Хорошо иметь навыки Streamlit / Heroku, чтобы вы могли демонстрировать прерывистые или даже окончательные результаты более широкой аудитории.

Инкременты

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

  1. Ваши последующие итерации должны быть инкрементными, использовать ваш опыт, отзывы клиентов и деловых людей, а также информацию, полученную в результате вторичного исследования, чтобы определить, какие сигналы и функции следует использовать в инкрементальных моделях. Стройте свои модели и постарайтесь превзойти базовый уровень.
  2. Убедитесь, что ваши методы выборки не предвзяты. Они не должны вносить искажения в результаты вашей инкрементальной модели и портить картину.
  3. Всегда возвращайтесь к основам и смотрите, сможете ли вы найти баланс между интерпретируемостью и сложностью моделей. Если ваши модели усложняются, вы теряете интерпретации. PCA - хороший метод уменьшения размерности и достойный способ визуализировать данные, но попробуйте объяснить его смешанной толпе из 100 человек, и вы получите ледяной взгляд.
  4. Предположим, вы создали несколько сложных функций или выбрали один из скрытых слоев нейронной сети и используете его в своей модели, в принципе, это нормально, но такие функции, как правило, не являются выпуклыми по своей природе, что означает, что внутренние механизмы оптимизации вашего модели будет трудно сойтись, и поэтому высока вероятность того, что вы застрянете в локальных максимумах или минимумах, и, следовательно, результаты могут отличаться в каждом прогоне. Если вы используете такие функции, проверьте надежность системы и опубликуйте их.
  5. Продолжайте проверять, как идут дела у ваших инкрементальных моделей, используя как положительные, так и отрицательные метрики, которые вы придумали.

Разум и машина - Последняя миля

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

  1. Разработайте достойную стратегию, которая поможет вам в случае сбоя данных, например как бы вы классифицировали тех пользователей, у которых нет кредитного рейтинга, в системе утверждения кредита или какие рекомендации вы дадите в случае сбоя серверной системы.
  2. Ваша модель будет иметь целевые функции и функции потерь. Если вы думаете, что есть неприятная особенность, которая создает проблемы, включите ее в функцию потерь. Вот где ему место.
  3. Можете ли вы провести пользовательские испытания вашего продукта / системы? Если да, то примите результаты, потому что вы и ваша команда хорошо разбираетесь в мире машинного обучения и понимаете все тонкости системы, но конечный пользователь может думать иначе. Вы знаете, что помидор - это фрукт, но конечные пользователи считают его овощем, пусть будет так. Не стремитесь изменить мировоззрение.
  4. Продолжайте измерять, как работает ваша система, в соответствии с придуманными вами метриками. Ваша система слишком далеко от них? Есть ли необходимость в переопределении показателей?
  5. Важным фактором, который обычно скрывается, является обновление модели и ее старение. Будет ли титанической задачей обновить модель, будет ли она стареть, как вино на основе винограда пино, или это будет неконтролируемый урод, как пугало, падающее с лестницы?

Схема большего размера

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

  1. Улучшается ли система или продукт со временем или он завис?
  2. Можете ли вы сделать что-нибудь, чтобы упростить систему и упростить ее?
  3. Вы уверены, что отвечаете на вопросы, на которые начали отвечать?

Комплексный консалтинг

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

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

Эпилог

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

Наслаждаться :)