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

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

  1. Достаточен ли объем данных? Лично, когда набор данных достигает 100 000 записей, я начинаю задаваться вопросом, может ли он служить более широкой цели, чем та, для которой он был изначально создан. 10 000 элементов может быть достаточно, если есть достаточно хорошая мотивация, и хотя что-то можно сделать с 1 000 элементами, я бы сказал, что у вас нет достаточно распространенного варианта использования, чтобы оно того стоило.
  2. Растут ли данные? Статические наборы данных могут отлично подойти для академических кругов, в бизнес-приложениях вам нужен постоянный источник данных для постоянного улучшения, а также вы хотите, чтобы скорость роста увеличивалась. Иначе зачем в него вкладываться?
  3. Интересно ли структурированы данные? Посмотрите на функции данных (столбцы), сколько из них числовые? сколько категоричных? содержат ли они дату, если да, то сколько? Затем выполните описательные запросы к данным, найдите среднее значение, стандартное отклонение, максимальное-минимальное и медианное значения. Подсчитайте уникальные значения, вычислите матрицу корреляции. Сделайте несколько графиков: гистограммы, линейные диаграммы и точечные диаграммы.

Хорошо, вы определили качество данных. Теперь давайте перейдем к оценке инфраструктуры. На важные вопросы нужно ответить: Где хранятся данные? В каком формате? Как запросить/получить его? Как его собирают? Какого размера каждая запись? Это копируется? Какова его ценность? Мне нравится отвечать на этот и связанные с ним вопросы с помощью блок-схемы, и, основываясь на ней, я предполагаю, насколько дорогой будет разработка данных.

Составление бизнес-требований

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

Мне нравится группировать функции ML на основе двух групп: функции, которые обеспечивают рост, и функции, которые приносят прибыль.

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

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

Хорошая структура для оценки осуществимости идей предоставлена ​​Майклом Сейбелем из YCombinator, где каждая идея помещается в ячейку матрицы 3 на 3 с осью x, классифицирующей, насколько легко реализовать идею. ожидается, что эта функция будет реализована, а ось Y измеряет потенциальную ценность этой функции. Анализ каждой функции будет обслуживаться пересечением между предыдущей оценкой данных и ожидаемым результатом алгоритма ML. После такого анализа остается от 3 до 5 кандидатов с расчетом на реализацию одного-двух из них.

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

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

Хорошая идея — подкрепить свою гипотезу тривиальными реализациями, это расширит понимание матрицы корреляции, сделанной ранее. К этому моменту у вас уже есть хорошее представление о том, как в конечном итоге будет выглядеть ваш проект, но лучше всего дополнить анализ псевдокодом того, как, по моему мнению, будет выглядеть решение. Это второй раз, когда я ищу доступную литературу, чтобы найти лучший алгоритм для каждого случая. В первой реализации ML для набора данных я обычно сосредотачиваюсь на линейной регрессии, ближайших соседях, машинах опорных векторов и деревьях решений. Что-то большее, чем это, может быть слишком сложно реализовать с первой попытки. С хорошим дизайном покончено, переходим к оценке и планированию задачи.

Выполнение

Теперь у вас есть хорошее представление о том, какой должна быть ваша новая функция, но перед обучением алгоритма оцените, сколько времени это займет. Машинное обучение — это не только наука о данных, но и инженерия данных также играет в нем огромную роль. Вам потребуется как минимум три конвейера данных: первый — в блокнот iPython, где будет происходить исследование данных. Блокноты также являются хорошим местом для обучения ваших первых алгоритмов, но лучше, если обучение и обслуживание модели размещаются в зарезервированном вычислительном экземпляре. Третий и последний необходимый конвейер — это место, где будет происходить предсказание, это можно сделать через API или в клиенте для более сложных решений. Основываясь на доступной инфраструктуре, оцените, требуется ли вам больше дополнительных инструментов для проекта, таких как дополнительные базы данных, программное обеспечение ELT, вычислительные экземпляры и т. д. После этого вы увидите, насколько сложной будет работа по разработке данных и сколько времени вы можете ожидать. распределить обучение модели в соответствии с ожидаемыми временными рамками.

Лично я, прежде чем внедрять решение, хотел бы глубоко изучить доступную литературу. Прежде чем начать, я люблю читать в среднем: 10 постов в блогах, 2 академических статьи и 1 техническую книгу. После учебы я чувствую себя очень уверенно и перехожу к разработке, пытаясь воспроизвести некоторые результаты и выполняя ансамбль между статьями.

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

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

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

Спасибо, что прочитали и поделитесь, какие практики лучше всего подходят для вас.

Лучший,
Сантьяго М.