ИИ — это будущее. Это не спорное утверждение. На самом деле, я уверен, что вы много слышали об этом. Мы используем ИИ для улучшения взаимодействия с пользователем, снижения рисков, продажи рекламы и, возможно, когда-нибудь, чтобы управлять нашими автомобилями. Между реальностью искусственного интеллекта и заявлением о том, что «специалист по данным будет самой сексуальной профессией 21-го века», мы все слышали шумиху.

Однако: 80% проектов по машинному обучению не доводятся до стадии производства. И это, скорее всего, заниженная оценка. Это поразительная цифра, если учесть стоимость неудачного проекта машинного обучения. Я имею в виду буквальную стоимость; специалисты по данным — это дорогостоящий человеческий ресурс, и стоимость обучения алгоритма машинного обучения может быть нетривиальной.

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

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

1. Знай свой продукт

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

Например: когда я работал в финтехе, у нас был проект, который нам показался очень крутым. Для каждой транзакции мы хотели, чтобы клиент мог видеть, где именно была совершена транзакция. Мы интегрировали карты openstreet и написали алгоритм прогнозирования, чтобы определить, в каком магазине происходила каждая транзакция. Затем мы потратили время на создание продукта, чтобы мы могли развернуть его в нашей среде разработки и продемонстрировать, насколько это будет круто!

Но вот в чем дело: продуктовая команда этого не хотела. Возможность видеть, где вы совершили транзакцию на карте, мало что добавила к опыту работы с клиентами. При использовании карт openstreet у нас была довольно сложная работа, и если бы мы попытались сделать это должным образом с картами Google (что нам нужно было бы сделать для масштабирования в производстве), это стоило бы ОЧЕНЬ дорого. Затраты никогда не компенсируют полученный клиентом опыт.

Мы потратили год на разработку алгоритма, который продукт никогда не хотел в своем продукте. Мы построили его. Они не пришли.

Не делайте этого.

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

Вместо этого:

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

2. Знайте свои данные

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

Плохая новость: большинство реальных данных ОЧЕНЬ беспорядочны. Хорошая новость: существует множество методов, разработанных для работы с беспорядочными данными. Но это работает только в том случае, если вы понимаете свои данные и их значение. Опять же, это будет включать в себя знакомство с продуктом (примите это, это будут ваши люди). Но если вы попытаетесь бросить свои мусорные данные в алгоритм, а затем оптимизировать для точности… да смилуется Господь над вашей душой.

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

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

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

Не:

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

Вместо:

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

3. Научитесь любить очистку данных

Как я упоминал в последнем правиле, данные реального мира беспорядочны. Я был на хакатоне, организованном одной из наших дочерних компаний, и участвовавшим в конкурсе студентам предоставили данные из реального мира и попросили найти идеи. Одна студенческая группа сказала мне: «Этот вопрос не был бы задан, если бы здесь не было шаблона!» на что я ответил: «О нет! Никто не знает, как выглядят данные, это ваша работа». Они были поражены тем, насколько беспорядочными были данные, и это был относительно чистый набор данных.

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

Например. Раньше я работал над приложением для электронной коммерции. У нас был продукт «купи сейчас, заплати позже» в приложении, чтобы клиенты могли создать виртуальную карту в приложении и использовать ее в любом магазине в Интернете (более или менее). Моя команда отвечала за то, чтобы клиенты не злоупотребляли этим продуктом, создавая карту, которую они не собирались использовать правильно. И одна идея, которая была у команды разработчиков, заключалась в том, чтобы сопоставить имя продавца, которое клиент ввел, когда запрашивал виртуальную карту, с именем, которое Visa (наш процессор карт) сообщил, где клиент использовал карту. Совпало оно или нет, это могло бы быть функцией в нашей модели, чтобы помочь предсказать, что покупатель не злоупотреблял продуктом!

Вот в чем проблема: данные о продавцах от компаний, занимающихся процессингом карт, — одни из самых запутанных текстовых данных, которые вы, вероятно, увидите. Одним из крупнейших интернет-магазинов, которым пользовались наши клиенты, был Amazon. Знаете ли вы, сколько разных имен продавцов при обработке на самом деле просто Amazon? В какой-то момент я подсчитал: в нашем наборе данных было 64 различных способа, и все они означали, что клиент использовал карту в Amazon.

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

Но у наших клиентов было более 100 000 различных интернет-магазинов, и мы не можем сделать такое сопоставление со всеми из них. Однако, если мы возьмем только самые большие магазины, это покроет примерно 80% нашего варианта использования, что мы и сделали. Это было много работы, но новая функция (сопоставление имен продавцов с момента создания виртуальной карты до момента ее использования) действительно помогла алгоритму выявить злоупотребления и в целом сделала наш продукт более прибыльным! Мы взяли беспорядочные данные и превратили их во что-то ценное. Но это потребовало усилий.

Не:

Закидывайте данные в модель и надейтесь на лучшее. Лучшее никогда не произойдет в реальности.

Вместо:

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

4. Простое лучше сложного

Все хотят работать с нейронными сетями и создавать безумно крутые модели глубокого обучения. Если бы я получал доллар каждый раз, когда молодой ученый говорит мне об этом, я был бы ОЧЕНЬ богатым. Но реальность такова: 90% алгоритмов машинного обучения, находящихся в настоящее время в производстве, не являются моделями глубокого обучения. Бывают случаи, когда вам потребуется глубокое обучение, чтобы получить хороший результат: компьютерное зрение и обработка изображений, а также НЕКОТОРАЯ (но не вся) обработка естественного языка (позвольте мне рассказать вам о TF-IDF, мой друг), и это лишь некоторые из них. Но почти в каждом другом случае использования машинного обучения нейронные сети не только будут стоить дороже для обучения, но и не будут работать так же хорошо, как другие алгоритмы.

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

И я проиграл пари этому менеджеру.

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

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

Не:

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

Вместо:

Попробуйте простое решение. Будут ли работать несколько правил? Линейная регрессия? Алгоритм дерева с градиентным усилением? Это будет стоить меньше времени на обучение и развитие, и у вас будет базовый уровень, с которым можно будет сравнивать более поздние достижения.

5. Совершенство — враг готового

Это относится ко всем работам по кодированию, но особенно часто встречается в науке о данных. Есть баланс. Вам нужно, чтобы ваш код и алгоритмы были достаточно хороши, чтобы в будущем не создавать огромных технических долгов. Но это не Сикстинская капелла, ей не нужно быть шедевром. Ваш проект машинного обучения не должен быть идеальным, он должен быть завершен. Мой научный руководитель говорил: никого не волнует, как часто вы начинаете что-то делать, им важно только то, как часто вы заканчиваете что-то. Будь финишером!

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

Но наш специалист по данным стал слишком зациклен на том, чтобы сделать классификацию заработной платы идеальной. Он попросил команду помочь маркировать все больше и больше обучающих данных. Затем он провел полный рефакторинг кода 3 раза, чтобы максимизировать выход новых библиотек и убедиться, что его код безупречно чист. Все было здорово! Но это означало, что на запуск алгоритма в производство ушло 18 месяцев.

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

Вместо этого он должен был запустить первую «неидеальную» версию и проверить, как она работает на реальных данных. Прежде чем деловые люди придут ко мне: вы можете запустить алгоритм в производство, не принимая решений. Он делает прогнозы и сохраняет их, после чего вы можете посмотреть, как он работает в реальности, не принимая на себя огромный риск, связанный с несовершенной кредитной моделью. Затем, когда у вас есть отзывы о том, как он работает, ТОГДА вы вносите те улучшения, которые приближают его к совершенству.

Не:

Продолжайте продвигать незначительные улучшения по сравнению с тестированием вашего алгоритма в производстве!

Вместо:

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

В конечном итоге ИИ должен создавать ценность для бизнеса

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

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