Будьте осторожны, когда время является измерением в вашем наборе данных

Одна из попыток обеспечить обобщение моделей машинного обучения в неизвестных условиях — это разделение данных. Это можно сделать разными способами: от трехэтапного (обучение, тестирование, оценка) разделения до k-разбиения с перекрестной проверкой. Основное рассуждение заключается в том, что, обучая модель ML на подмножестве данных и оценивая unknown данные, можно гораздо лучше рассуждать, если модель имеет недостаточное или избыточное соответствие при обучении.

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

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

Начнем с набора данных

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

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

Делать шпагат

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

Чтобы упростить задачу, вы решаете пойти на простой сплит с train и eval. Вы сразу понимаете, что наивный случайный сплит с перетасовкой здесь не пройдет — данные все-таки имеют множественные сенсорные потоки, индексированные по времени. Так как же разделить данные, чтобы сохранить порядок и сделать последующие модели достаточно обобщаемыми?

Другой взгляд на данные

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

Горизонтальное разделение

Группировка внезапно делает проблему разделения немного проще и в значительной степени зависит от вашей гипотезы. Если машины работают в одинаковых условиях, вы можете задать один вопрос: How would a ML model trained on one group generalize to other groups. То есть, если обучаться на временных потоках class_1, class_2 и class_3, как модель будет работать на временных потоках class_4 и class_5. Вот визуализация этого разделения:

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

Важно отметить, что решение о разделении NOT учитывало время как основу самого разделения. Однако можно предположить, что вы также будете сортировать по времени для каждого временного потока, чтобы сохранить эту связь в своих данных. Что подводит нас к следующему расколу..

Вертикальный раскол

Но что, если вы хотите разделить само время? Для большинства моделей временных рядов обычным способом разделения данных является past и future. То есть взять в обучающем наборе исторические данные относительно данных в eval наборе. Гипотеза в этом случае будет: How would a ML model trained on historical data per group generalize to future data for each group?. На этот вопрос может ответить так называемый Vertical раскол:

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

Конечно, ваши множественные временные потоки теперь должны быть отсортированы по отдельности, поэтому нам все еще нужно сгруппировать. Однако на этот раз вместо того, чтобы разбивать группы, мы берем выборку из 17_ каждой группы и помещаем ее в train, а future каждой группы — в eval. В этом идеализированном примере все временные потоки имеют одинаковую длину, т. е. каждый временной поток имеет одинаковое количество точек данных. Однако в реальном мире это может быть не так, поэтому вам потребуется, чтобы система построила индекс для каждой группы, чтобы сделать это разделение.

Гибридный сплит

В этот момент любознательный исследователь машинного обучения мог бы задаться вопросом, могут ли они создать модель, которая будет обобщать оба ограничения разделения Horizontal и Vertical. Гипотеза в этом случае будет: How would a model trained on historical data for SOME groups generalize to future data of these groups AND all data from other groups?. Визуализация этого разделения Hybrid будет выглядеть так:

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

Многомерные разделения

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

Заключение

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

Спасибо и счастливого разделения!