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

Что такое модель?

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

Мы видим множество точек данных и линию, которая, возможно, соответствовала этим данным справа. Возможно, вы уже знакомы с термином «выброс», означающим точку, которая не соответствует остальным данным. Реальные данные часто беспорядочны, и выбросы не являются неожиданными.

При обучении модели каждая из этих точек называется «обучающим примером». Каждый обучающий пример имеет значения x и y и представляет собой пример того, чему мы обучаем модель для прогнозирования. Когда у нас есть модель, мы можем спросить: «Если новая точка имеет x = 3,7, каково, по нашему прогнозу, значение y»? Основываясь на подходящей линии, мы можем предсказать y=3,7/2+1=2,85.

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

Считаете ли вы, что линейная регрессия создаст хорошую модель, учитывая приведенные здесь обучающие примеры?

Конечно, нет! Точки не образуют линию. Вместо этого нам нужно подогнать кривую к данным. Например: ax2+bx+c=y.

Мы почти закончили, но до сих пор мы говорили только о предсказании одного значения из другого. Как мы могли бы использовать это для прогнозирования поведения пользователей в будущем? Все зависит от того, как мы вычисляем значения. Если предиктор (x) был рассчитан в январе, а цель (y) — в феврале, то мы обучили модель, которая предсказывает поведение через месяц после значений, к которым она применялась. Вот почему работа со временем и историческими данными важна для создания обучающих примеров, которые приводят к прогностическим моделям.

Даже с этими простыми моделями мы увидели несколько важных аспектов машинного обучения:

  1. Разные проблемы могут быть лучше решены с помощью разных моделей.
  2. Просматривая (визуализируя) данные, мы можем получить полезную информацию.
  3. Качество модели зависит от качества обучающих данных.
  4. Мы можем создавать модели, которые предсказывают будущее, создавая обучающие примеры со временем между предикторами и целями.

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

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

Таким образом, несмотря на то, что два измерения могут показаться простыми, в большинстве моделей используется множество предикторов — от десятков до сотен. Люди не могут легко визуализировать взаимосвязь между более чем тремя измерениями, поэтому сложно понять эти более сложные модели. Хотя может быть много возможных функций для рассмотрения, найти правильный набор сложно. И это не так просто, как передать их все модели — это часто значительно увеличивает время, необходимое для обучения модели, поскольку ей нужно разобраться в шуме.

Что такое процесс машинного обучения?

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

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

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

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

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

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

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

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

Разработка функций

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

Как уже отмечалось, Feature Engineering — это итеративный экспериментальный процесс. Он может использовать знакомые методы, такие как фильтрация и агрегирование, для определения функций, но также имеет специальные методы. Например, существует множество способов кодирования категориальных данных — то, что я бы назвал перечислением. Часто может быть нежелательно присваивать каждой категории номер, поскольку это может запутать модель — вероятно, несущественно, что Делавэр является 1-м штатом, а Гавайи — 50-м штатом.

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

Заключение

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

Оставайтесь с нами, чтобы узнать больше о том, как мы можем помочь специалистам по обработке и анализу данных создавать лучшие модели и быстрее приносить пользу бизнесу!