Русский
Русский
English
Статистика
Реклама

Fedot

Прогнозирование временных рядов с помощью AutoML

30.05.2021 14:10:27 | Автор: admin


Хабр, привет!


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


Все подробности под катом!


Автоматическое машинное обучение (AutoML)


Современная Data Science стала весьма востребованной частью IT сферы. Специалисты собирают данные, занимаются их очисткой, пробуют различные модели, производят валидацию, выбирают лучшие из них. И все это для того, чтобы предоставить бизнесу решение, которое принесет наибольшую пользу. При этом, некоторые этапы получения таких решений с каждым годом все больше и больше автоматизируются. Как правило, это касается наиболее рутинных частей. Таким образом освобождается время экспертов для более важных задач.


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


  • собрать данные из множества источников, очистить их;
  • осуществить предобработку, нормализацию, закодировать некоторые из признаков;
  • отобрать наиболее полезные из них, либо синтезировать на их основе новые;
  • удалить возможные выбросы в данных.

Такие многоступенчатые последовательности операций, включающие этапы от первичной обработки данных до обучения модели и составления прогнозов, называют пайплайнами. Работать с пайплайнами уже несколько сложнее, чем с одиночными моделями машинного обучения, так как чем больше составных блоков, тем больше гиперпараметров, которые нужно оптимизировать. Также выше вероятность того, что на каком-нибудь этапе возникнет ошибка, да и в целом такую более громоздкую систему труднее настраивать и контролировать ее поведение. Для решения этой проблемы реализованы специальные инструменты MLFlow, Apache AirFlow и т. д что-то вроде workflow management system (WMS) в мире машинного обучения. Они призваны упростить контроль за состоянием пайплайнов обработки данных.
Почему потребность в таких инструментах возникла, ведь раньше обходились без них?


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

Более амбициозной задачей в данной области машинного обучения является автоматическая генерация этих пайплайнов. Существует несколько фреймворков, которые предоставляют подобные функции, среди open-source, например это TPOT, AutoGluon, MLJAR или H2O. Такие AutoML фреймворки решают задачу оптимизации вида построить такой пайплайн, который дает конечный прогноз с наименьшей (среди всех рассмотренных решений) ошибкой. В основном структура пайплайна зафиксирована и подбираются только гиперпараметры, но некоторые фреймворки способны получать в качестве решения модели произвольной структуры. Данная оптимизационная задача (нахождения пайплайна произвольной структуры) решается как правило при помощи эволюционных алгоритмов, примеры: фреймворки TPOT и FEDOT.
Существуют также и проприетарные SaaS-решения, такие как DataRobot, GoogleAutoTables, Amazon SageMaker, которые помогают не только автоматизировать ML эксперименты, но и предоставляют возможности AutoML.
Как правило, AutoML библиотеки и сервисы успешно решают две самые популярные задачи в машинном обучении: классификация и регрессия на табличных данных. Реже поддерживаются задачи, связанные с обработкой изображений, текста и прогнозирования временных рядов. В рамках данной статьи мы не будем рассматривать плюсы и минусы известных решений, а остановимся на возможностях автоматического машинного обучения в задаче прогнозирования временных рядов.


Автоматическое машинное обучение для временных рядов


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


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


Некоторые команды, которые все-таки решаются поддерживать прогнозирование временных рядов, однако ограничиваются только этим типом данных. Хороший open-source пример фреймворк AutoTS. В подобных библиотеках обычно используются классические статистические модели для прогнозирования например AR или ARIMA. Внутри фреймворка производится настройка этих моделей, а затем выбирается наилучшая (по метрике ошибки на валидационной выборке), но новых моделей здесь не генерируются. На такой логике, например, основана библиотека pmdarima.


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


А какие функции хотелось бы иметь в AutoML-арсенале?


Хотя задача прогнозирования поведения одномерного массива выглядит тривиальной, существует множество инструментов, которыми инженер хотел бы обладать при работе с временными рядами. Например:
  • Возможность строить интерпретируемые ансамбли из моделей (например, чтобы одна модель воспроизводила высокочастотную составляющую временного ряда, вторая низкочастотную, а третья объединяла их прогнозы);
  • Иметь возможность осуществлять настройку гиперпараметров в пайплайнах для временных рядов;
  • Использовать экзогенные (вспомогательные) временные ряды;
  • Применять специфические методы предобработки (от сглаживания скользящим средним до преобразования Бокса-Кокса);
  • Иметь возможность применять in-sample и out-of-sample прогнозирование;
  • А если временной ряд с пропусками как их устранить?
    Учесть все перечисленные возможности в одном фреймворке, и, при этом, не ограничиваться только временными рядами достаточно сложная задача.

Такие требования к AutoML появились не просто так. Мы работаем в лаборатории моделирования природных систем, и последние несколько лет участвовали в десятках различных исследовательских и бизнес проектах в области машинного обучения, data-driven моделирования, оптимизации и д.р. Нам на практике часто приходится решать подобные проблемы, в т.ч. для прогнозирования пространственно-временных данных.


Немного о нас

Наша лаборатория является частью Национального центра когнитивных разработок центре компетенций по машинному обучению и когнитивным технологиям, созданном в 2018 году на базе Университета ИТМО. Благодаря данному центру и стало возможным осуществление проекта создания фреймворка FEDOT мы занимаемся им с начала 2020 года.


Некоторое время назад мы заинтересовались исследованиями в области AutoML, а в команде появились свежие идеи для экспериментов. В итоге, идеи сформировались в полноценный open-source AutoML фреймворк, который мы разрабатываем и поддерживаем в лаборатории FEDOT.


Основная мотивация заключалась в том, чтобы разработать удобный инструмент, который упростил бы процесс создания пайплайнов для решения широкого круга задач полезный в том числе и для нас самих. Мы хотели встроить модели разной природы в такие пайплайны, например, не только модели машинного обучения и операции предобработки, но еще и предметные модели из различных областей (например, гидродинамические модели). Такой подход часто называют гибридным моделированием.
Еще хотелось бы автоматически решать более одной задачи в рамках одного пайплайна, то есть задачу регрессии совместно с задачей прогнозирования временного ряда, или одновременно задачу регрессии и классификации. Например, в задаче кредитного скоринга, т.е. бинарной классификации потенциальных заемщиков, можно использовать не только анкетные признаки, но и будущие значения денежного потока, который можно попробовать спрогнозировать как временной ряд. Весьма перспективно, на наш взгляд, было бы получать baseline для таких задач автоматически.
Так же нам было интересно исследовать методы идентификации пайплайнов произвольной структуры и использовать многокритериальную оптимизацию, позволяющую оптимизировать не только ошибку моделирования, но и сложность найденного решения (её, например, можно оценить через общее количество блоков в пайплайне).


В некоторых из этих задач нам удалось получить интересные результаты, и если интересно, научные статьи по ним вы можете посмотреть здесь и здесь. Ниже мы сфокусируемся на задаче прогнозирования временных рядов и разберем, как там можно использовать AutoML и FEDOT, в частности.


Основные сущности в FEDOT

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


Основные абстракции, которыми оперирует FEDOT во время работы, это:


  • Операция действие, которое выполняется над данными: это может быть действие по предобработке данных (нормализация, стандартизация, заполнение пропусков) или модель машинного обучения, которая даёт прогноз;
  • Узел это контейнер, в который помещается операция. В одном узле может быть только одна операция. Primary узел принимает только исходные данные, а Secondary использует в качестве предикторов предсказания узлов предыдущего уровня;
  • Цепочка это ациклический направленный граф, который состоит из узлов. Пайплайны машинного обучения в FEDOT реализуются через цепочки (или класс Chain).

Приведенные абстракции можно увидеть на рисунке ниже:

Операции, узлы и цепочки в фреймворке FEDOT


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


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


Прогнозирование временных рядов в FEDOT


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


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

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


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

Пример составления таблицы с признаками для прогнозирования временного ряда
Такое преобразование мы будем называть lagged-преобразование временного ряда. В FEDOT мы вынесли его в отдельную операцию lagged. Его важным гиперпараметром является размер скользящего окна от него зависит сколько предыдущих значений мы будем использовать в качестве предикторов.


Ниже приведена анимация с примерам многошагового прогнозирования на 1 элемент вперед. Однако, прогноз за один шаг может осуществляться сразу на несколько элементов вперед. В таком случае решается задача muli-target регрессии. Весь процесс прогнозирования от формирования траекторной матрицы до составления предсказания можно увидеть на анимации ниже:

Анимация. Прогнозирование на 3 элемента вперед при помощи lagged преобразования временного ряда


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


Пример задачи


Пример прогнозирования временного ряда

В сообществе распространены примеры прогнозирования временных рядов на довольно простых примерах. Один из самых популярных временной ряд US airline passengers и выглядит следующим образом:

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


Имеются два временных ряда: первый это среднесуточная выработка электроэнергии ветряной установкой. Другой среднесуточная выработка электроэнергии при помощи дизельного генератора. Оба показателя измеряются в кВтч.

Выработка электроэнергии при помощи дизельной установки и ветряного электрогенератора


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


Нам необходимо прогнозировать нагрузку на дизельный генератор на 14 дней вперед. Таким образом, целевая переменная выработка энергии дизельным генератором.


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


Заполнение пропусков


Первая проблема это пропуски в рядах. В FEDOT для восстановления значений во временных рядах мы реализовали три группы методов:


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

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



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


Для этого мы строим простую цепочку из lagged-представления, сглаживания Гаусса, и ridge-регрессии (см. рисунок), обучаем ее предсказывать значения ряда вперед.

Структура применяемой цепочки для восстановления пропусков во временном ряде


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


Подробнее о том, как это устроено внутри

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


Получаем следующий результат:



Заполненный пропуск во временном ряде выработки электроэнергии дизельным генератором


Неплохо! Но второй временной ряд еще имеет зияющую дыру посередине. Её мы можем восстановить так же как первую. Но мы поступим иначе. Сопоставим значения двух временных рядов в виде парной регрессии и восстановим значения выработки электроэнергии ветряком (отклик) с помощью ряда с дизельным генератором (предиктор). Эту задачу регрессии мы также будем решать при помощи FEDOT.


В результате получились восстановленные временные ряды, которые выглядят так:



Восстановленные временные ряды (видно, что они идут в противофазе и заполненный пропуск не нарушает этот принцип)


Теперь оба временных ряда не имеют пропусков и готовы к использованию далее.


Автоматическая идентификация композитной модели


Построим цепочку для временных рядов при помощи AutoML. В FEDOT это можно сделать буквально в несколько строчек кода, используя API.
Коротко о том, что происходит внутри. AutoML работает в два этапа:


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

Настройка гиперпараметров по умолчанию осуществляется одновременно во всех узлах цепочки при помощи байесовских методов оптимизации:

Анимация. Процесс настройки параметров в узлах композитной модели


После завершения всех этапов мы получаем итоговый пайплайн. Теперь посмотрим на получившийся прогноз и рассчитаем метрики: среднюю абсолютную ошибку (MAE) и корень из средней квадратической ошибки (RMSE): MAE 100.52, а RMSE 120.42.

Пример прогноза временного ряда


Если смотреть на график и значения метрик, возникает вопрос: хорошая ли получилась модель?


Ответ: определить трудно. На одном участке лучше модель не валидировать. Там ведь всего лишь 14 значений. Лучше посчитать метрику хотя бы три раза по 14 (то есть 42). Для этого стоит воспользоваться in-sample прогнозированием.

Ниже приведена анимация, которая должна помочь разобраться в out-of-sample и in-sample прогнозировании:

Анимация. Процесс in-sample и out-of-sample прогнозирования


Итак, мы наша модель умеет делать прогноз на 14 значений вперед. Но мы хотим получить прогноз на 28 значений вперед в таком случае мы итеративно можем 2 раза сделать прогноз на 14 элементов. В таком случае в качестве предикторов для второго прогноза выступят значения, предсказанные на первой итерации (out-of-sample).


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


В FEDOT этот подход также реализован так что теперь мы проверим алгоритм на 3-х блоках по 14 значений каждый. Для этого иначе разделим выборку и еще раз запустим композер. Результат прогнозирования отображен на рисунке ниже. Важно уточнить, что эволюционные алгоритмы имеют стохастическую природу, поэтому найденные решения могут отличаться.

Валидация композитной модели для временного ряда на трех блоках по 14 элементов. Показана правая часть исходного временного ряда


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

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


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

Однородные части временного ряда, похожие на валидационный участок, выделены оранжевым цветом


В этих частях присутствуют повторяющиеся паттерны, и при этом сам временной ряд не имеет тренда величина колеблется вокруг среднего, то поднимаясь до значения выше 1000 кВтч, то опускаясь до 0. Поэтому умение воспроизводить эти паттерны для построенного пайплайна является очень важным. А вот угадывать низкочастотные колебания временного ряда (например, тренд или сезонность) при этом не обязательно. Модель K-nn как раз хорошо подходит для этих задач. Метрики качества прогнозирования, полученные после композирования цепочки, таковы: MAE 88.19 и RMSE 177.31.


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


Сравнение с альтернативами: AutoTS и pmdarima

Дисклеймер: Приведенное в этом разделе сравнение далеко не является исчерпывающим. По хорошему, для обоснования того, что один фреймворк лучше или хуже другого требуется проводить много больше экспериментов. Желательно использовать не один источник данных, применять кросс-валидацию, запускать алгоритмы на одних и тех же данных и с одними параметрами несколько раз (с последующим усреднением метрик). Здесь же мы привели ознакомительное сравнение: показали как с поставленной задачей могут справляться альтернативные решения. Если вас заинтересовало то, как FEDOT может справляться с временными рядами в сравнении с другими фреймворками, следите за новостями в нашем телеграмм канале. Полноценное сравнение в виде научной статьи скоро будет!


Попробуем также сравнить FEDOT с другими open-source фреймворками для прогнозирования временных рядов AutoTS и pmdarima. Jupyter notebook с кодом, а также графиками, доступен по ссылке. Так как не во всех библиотеках реализована функциональность валидации на нескольких блоках, то решено было провести это небольшое сравнение на всего одном фрагменте ряда. Каждый алгоритм был запущен по 3 раза, и метрики ошибок были усреднены. Таблица с метриками выглядит следующим образом (в ячейках приведено СКО- среднее квадратическое отклонение):


Библиотека МАЕСКО RMSECKO
pmdarima 1551 1961
AutoTS 19822 23641
FEDOT 11014 17026

На рисунке также отображены прогнозы для одного из экспериментов:


Даже невооруженным взглядом видно, что в данной задаче прогноз от FEDOT больше похож на правду.


Заключение


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


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


Примеры (код и картинки) из данного поста доступны в отдельном репозитории по ссылке.


Используйте AutoML, пробуйте FEDOT!


Над статьей работали: Михаил Сарафанов, Павел Вычужанин и Николай Никитин.

Подробнее..

Как AutoML помогает создавать модели композитного ИИ говорим о структурном обучении и фреймворке FEDOT

23.05.2021 18:15:00 | Автор: admin

image


В лаборатории моделирования природных систем НЦКР ИТМО мы занимаемся разработкой и продвижением решений в области AutoML. Наши научные сотрудники Николай Никитин, Анна Калюжная, Павел Вычужанин и Илья Ревин рассказывают о трендах и задачах AutoML, плюс о собственных open-source разработках в этой области.


Минутка теории и пара слов об AutoML фреймворках


Для того, чтобы решить какую-либо задачу с помощью методов машинного обучения (МО), требуется пройти множество шагов: от очистки данных и подготовки датасета, выбора наиболее информативных признаков и преобразования признакового пространства до подбора модели МО и настройки ее гиперпараметров. Такую последовательность часто представляют в виде пайплайна. Однако даже на работу с линейными пайплайнами (А, на схеме выше), подбор их структуры и параметров могут требоваться дни, а иногда и недели. В процессе решения сложных задач пайплайны приобретают иную структуру. Для повышения качества моделирования часто используют ансамблевые методы (стекинг), объединяющие несколько моделей (на схеме B), либо делают пайплайн разветвленным. В последнем случае задействуют различные методы предобработки для вариативных моделей МО, обучаемых на разных частях датасета (С).


Автоматизированная подготовка пайплайна это преимущественно задача комбинаторной оптимизации или поиска наилучшего сочетания возможных факторов множества вычислительных блоков. В этом случае пайплайн описывают в виде направленного ациклического графа (directed acyclic graph, DAG), который может быть транслирован в граф вычислений, а эффективность определяют с помощью целевых функций, численно оценивающих качество, сложность, устойчивость и другие свойства получившейся модели.


Модели со структурой типа В и С фактически становятся композитными, т.е. включают в себя различные алгоритмы МО. Например, можно объединить байесовскую сеть и свёрточную для предсказания на мультимодальных данных. А с композитными моделями и пайплайнами МО можно работать с помощью методов и технологий AutoML.

Самый примитивный метод решения этой задачи случайный поиск (random search) с оценкой сочетаний блоков. Более совершенный подход мета-эвристические алгоритмы оптимизации: роевые и эволюционные (последние можно реализовать с помощью фреймворков TPOT и FEDOT). Такие алгоритмы должны иметь специализированные операторы кроссовера, мутации и селекции для применения к особям, описываемым графом (обычно деревом), работать с многокритериальной целевой функцией, включать дополнительные процедуры для создания устойчивых и не склонных к переобучению пайплайнов (например, регуляризацию).

Операторы кроссовера и мутации могут быть реализованы классическим способом в виде кроссовера поддеревьев (subtree crossover), когда выбираются две родительские особи, которые обмениваются случайными частями своих графов. Но это не единственная возможная реализация, есть и более семантически сложные варианты (например, one-point crossover). Мутация на деревьях также предполагает реализации, включающие случайное изменение модели (или вычислительного блока) в случайном узле графа на подходящий вариант из пула моделей, удаление случайного узла, а также случайное добавление поддерева.

image

В идеальном случае, AutoML позволяет исключить эксперта-аналитика из процесса разработки, эксплуатации и внедрения модели. Однако пока добиться этого в полной мере сложно большая часть AutoML фреймворков поддерживает решение отдельных задач автоматического МО (настройка гиперпараметров, выбор признаков и тому подобных) в рамках фиксированных пайплайнов и только для некоторых типов данных (в таблице далее).
Название Тип
пайплайна
Метод
оптимизации
Входные
данные
Масшта-
бирование
Дополнительные
особенности
Источник
TPOT Variable GP Tabular Multiprocessing, Rapids Code generation github
H2O Fixed Grid Search Tabular, Texts Hybrid - githib
AutoSklearn Fixed SMAC Tabular - - github
ATM Fixed BTB Tabular Hybrid - github
FEDOT Variable GP + GridSearch Tabular, Timeseries,
Images, Texts
- Composite
pipelines
github
AutoGluon Fixed Fixed Defaults Tabular, Images, Texts - NAS, AWS integration github
LAMA Fixed Optuna Tabular - Profiling github
NNI Fixed Bayes Tabular, Images Hybrid,
Kubernetes
NAS, WebUI github

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


Чего не хватает, и что предложили мы


Типовой сценарий применения AutoML выглядит следующим образом. На основе доступных данных (обучающей выборки) осуществляют оптимизация структуры пайплайна моделирования и гиперпараметров блоков, входящих в его состав. Однако на практике реализации, неплохо работающие на тестовых задачах, оказываются не так хороши на боевых сводах данных. Поэтому появляются всё новые и новые AutoML-решения: H2O, AutoGluon, LAMA, NNI и другие. Они отличаются по возможностям, но часто не подходят для широкого класса задач. Хотя большинство фреймворков позволяют решать задачи классификации и регрессии, прогнозирование временных рядов они практически не поддерживают.


image

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


До недавнего времени готовых к использованию инструментов такого рода не было, но мы решили попробовать разработать свой и обойти описанные проблемы. Мы назвали его FEDOT. Это open-source фреймворк автоматического машинного обучения, автоматизирующий создание и оптимизацию цепочек задач (пайплайнов) МО и их элементов. FEDOT позволяет компактно и эффективно решать различные задачи моделирования.


image

Вот пример его использования для решения задачи классификации:


# new instance to be used as AutoML tool with time limit equal to 10 minutes auto_model = Fedot(problem='classification', learning_time=10) #run of the AutoML-based model generation pipeline = auto_model.fit(features=train_data_path, target='target') prediction = auto_model.predict(features=test_data_path) auto_metrics = auto_model.get_metrics() 

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


Однако фреймворк не ограничивается отдельными AutoML-задачами, а позволяет заниматься структурным обучением, когда для заданного набора данных строится решение в виде ациклического графа (DAG), узлы которого представлены моделями МО, процедурами предобработки и трансформации данных. Структуру этого графа, а также параметры каждого узла и подвергают обучению.


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



Как и ряд ранее отмеченных фреймворков, FEDOT реализован на Python и доступен под открытой лицензией BSD-3. Но есть и отличия с точки зрения преимуществ:


  • Архитектура FEDOT обладает высокой гибкостью, фреймворк можно использовать для автоматизации создания МО для различных задач, типов данных и моделей;
  • FEDOT поддерживает популярные ML-библиотеки (scikit-learn, keras, statsmodels и др.), но при необходимости допускает интеграцию и других инструментов;
  • Алгоритмы оптимизации пайплайнов не привязаны к типам данных или задачам, но можно использовать специальные шаблоны под определенный класс задач или тип данных (прогнозирование временных рядов, NLP, табличные данные и др.);
  • Фреймворк не ограничен машинным обучением, в пайплайны можно встроить модели, специфичные для конкретных областей (например, модели в ОДУ или ДУЧП);
  • Дополнительные методы настройки гиперпараметров различных моделей также могут быть бесшовно добавлены в FEDOT в дополнение к уже поддерживаемым;
  • FEDOT поддерживает any-time режим работы (в любой момент времени можно остановить алгоритм и получить результат);
  • Итоговые пайплайны могут быть экспортированы в json-формате без привязки к фреймворку, что позволяет добиться воспроизводимости эксперимента.

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


Применение AutoML для реальных задач на примере FEDOT


Для проверки корректности и эффективности алгоритмов, лежащих в основе FEDOT, мы протестировали его на известных бенчмарках (например, наборе задач Penn ML). Помимо этого мы подготовили пример из области нефтехимии разберем его далее.


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


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


image


Входные данные для моделирования имеют следующую структуру: Значение целевой переменной (задача регрессии) Значение целевой переменной (задача классификации) образца Кин.вязкость при 50С Плотность при 15 С Содержание серы Содержание воды TSA Т потери текучести Т вспышки в закрытом тигле Вид топлива
0.17 1 Класс 13 583.6 973.0 2.74 0.3 0.03 20.0 110.0 ТПБ
0.1 2 Класс 37 472.3 965.0 2.48 0.2 0.03 19.0 110.0 М-100
0.03 2 Класс 22 18.80 851.0 0.0015 0.1 0.02 20.0 110.0 ТМУ ЭКО
0.21 1 Класс 98 574.3 970.0 2.74 0.2 0.03 20.0 110.0 ТМУ-180

Результаты применения фреймворка Федот и созданной вручную модели (на основе градиентного бустинга) к сформированном набору данных таковы: для задачи регрессии созданная вручную модель обеспечивает MSE 0.215, R2 0.723, FEDOT 0.168 и 0.761 соответственно; для задачи регрессии базовое решение обеспечивает ROC AUC 0.737, F1 0.714, FEDOT 0.861 и 0.764 соответственно.


Перспективы развития AutoML


Среди AutoML-решений помимо перечисленных выше инструментов есть EvalML, TransmogrifAI, Lale и множество других. Все эти они собственные разработки компаний. В некоторых случаях им не хватает технических аспектов вроде поддержки масштабируемости и распределенных вычислений, Kubernetes и интеграции с MLOps инструментами. В других появляются концептуальные вопросы вроде реализации новых алгоритмов оптимизации или их интерпретируемости. Однако есть несколько направлений и перспектив развития AutoML, которым уделяют еще меньше внимания.


Гибкое управление сложностью поиска. В зависимости от требований и допустимого бюджета, ML-инженеру может подойти как модель градиентного бустинга с оптимизированными гиперпараметрами, так и глубокая нейронная сеть или нелинейный пайплайн. Так или иначе, он будет вынужден вникать в возможности доступных AutoML-фреймворков и проводить экспериментальные исследования, выясняя, что работает лучше или хуже. Было бы весьма удобно иметь непрерывный переключатель сложности поиска, при помощи которого можно регулировать размерность пространства поиска от простых решений до сложных, но эффективных пайплайнов (вплоть до созданных с нуля).


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


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


Идею о фабрике AutoML-решений, в том числе высказывал и исследователь Yuriy Guts из компании DataRobot в своем докладе Automated Machine Learning. В частности он проводил аналогию с ООП-паттерном Factory, где AutoML мог бы предоставлять разные решения пользователю в зависимости от заданных условий: типы наборов данных, интервалы прогнозов, время жизненного цикла модели и так далее.


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


image

В целом автоматическое машинное обучение многообещающее направление. Если вы работаете в области data science, следить за новостями из мира AutoML весьма ценно. Мы подобрали материалы для погружения в эту тему:


Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru