Автоматизированная генерация прогнозов - Эван Шеффер, Сяона Ху и Мэтт Коллинз

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

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

Каждое приложение прогнозирования сопряжено со своими проблемами; две общие проблемы:

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

Чтобы решить эти проблемы, мы познакомим вас с комплексным решением, использующим Amazon Web Services (AWS) для обучения и развертывания модели прогнозирования в облаке.

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

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

SageMaker DeepAR

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

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

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

Ниже приведены дополнительные преимущества и недостатки использования DeepAR после разработки нашего решения для прогнозирования.

Преимущества

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

Анализ «что, если»
• Изменение переменных во время прогнозирования.
• Имитация эффекта без необходимости повторного обучения.

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

Недостатки

Формат данных
• Данные должны быть отформатированы определенным образом. Подробнее о формате см. Здесь https://docs.aws.amazon.com/sagemaker/latest/dg/deepar.html#deepar-inputoutput
• Переменные должны быть закодированы, требуется переназначение пост-прогнозирования

Эффективность ETL
• DeepAR требует полного набора данных при создании новых прогнозов.
• Растущие наборы данных требуют встроенных средств повышения эффективности при форматировании и загрузке данных.

Производительность модели
• Все сущности настроены вместе
• Нет настройки модели для отдельных временных рядов
• Общая производительность в порядке, но некоторые сущности могут пострадать

Создание модели DeepAR в SageMaker представляло собой трехэтапный процесс.

Форматировать данные

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

Чтобы обучить модель DeepAR на этих данных, мы должны преобразовать ее из плоского формата в JSON. Этот процесс создает объект для каждой комбинации магазин-отдел, кодирует категориальные признаки от 0 до N-1 (где N - количество уровней этой функции) и маркирует его соответствующими категориальными и динамическими характеристиками. Эти объекты JSON выводятся в виде трех отдельных файлов: для обучения, тестирования и проверки. DeepAR будет использовать обучение и тестирование. Валидация была отложена для целей этой демонстрации.

Задание по настройке гиперпараметров

После загрузки файлов JSON в Amazon S3 мы готовы приступить к обучению модели DeepAR. Это можно сделать либо с помощью заранее заданных гиперпараметров, либо путем выполнения задания по настройке гиперпараметров. Настройка гиперпараметров будет более дорогостоящей, так как она будет обучаться несколько раз в надежде получить более точную модель, но очень часто она стоит результатов.

Настройка гиперпараметров выполняется в SageMaker путем указания статических значений для неизменных гиперпараметров (таких как частота временных рядов или длина прогноза) и диапазонов значений для произвольных гиперпараметров (таких как скорость обучения или эпохи). Эти значения и некоторые основные параметры конфигурации станут определяющими для вашей работы по настройке. Время, необходимое для этого процесса, будет зависеть от размера вычислений ваших обучающих экземпляров, количества итераций, указанных в задании настройки, и размера вашего набора данных. Для справки: 20 итераций на 3 экземплярах ml.c4.2xlarge с нашим набором данных заняли 3 часа.

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

Экспорт лучшей модели

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

Обзор архитектуры

Теперь, когда у нас есть рабочая модель, следует ее развертывание - вот как мы интегрируем обученную модель в рабочий процесс для создания прогнозов для бизнеса. Для этого в AWS используются основные сервисы S3, Lambda, Glue и Athena. Схема развертывания модели на приведенной выше схеме архитектуры показывает, как этот процесс будет выполняться после настройки и автоматизации.

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

Мы используем Lambda для запуска задания пакетного преобразования для создания прогнозов и последующей обработки результатов в формате, который мы можем легко использовать. Лямбда-функция запускается при получении новых данных в сегменте S3. Здесь предполагается, что в производственной среде будет еще один процесс ETL, который еженедельно записывает чистые данные в этот сегмент. После запуска и запуска Lambda записывает результаты прогнозов в файлы CSV в S3, к которым затем обращаются Glue и Athena. И, наконец, Tableau считывает данные из Athena и отображает прогнозы на панели инструментов.

Лямбда

AWS Lambda - один из наиболее часто используемых сервисов AWS. Это платформа для бессерверных вычислений, управляемая событиями. Он позволяет запускать код без подготовки и управления серверами. Функция запускается только при запуске предопределенными событиями и автоматически масштабируется. Вы платите только за то время, когда ваш код работает. Этот сервис поддерживает код, написанный на разных языках, включая Java и Python.

На этой диаграмме показано, как AWS Lambda работает в нашем рабочем процессе: объект, который является входными данными нашего прогноза, создается в нашей корзине S3. Как только S3 обнаруживает событие создания объекта, он запускает лямбда-функцию и выполняет код с событием создания входных данных в качестве параметра. Чтобы S3 запускал Lambda, мы устанавливаем разрешения между нашим входным сегментом S3 и функцией Lambda, используя нашу роль IAM.

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

Это функция лямбда, которая создает наши прогнозы и очищает выходные данные. Функция - это код и среда выполнения для обработки событий. Среда выполнения устанавливает язык для кода - в нашем случае это Python. Обработчик - это функция, которую Lambda запускает при выполнении вашей функции. Он состоит из двух компонентов: первый - это имя файла, а второй - имя функции внутри этого файла. Наш обработчик функции называется lambda_function.lambda_handler. Функция Lambda передает инициированное событие и контекст обработчику при его запуске.

Есть разные способы предоставить свой код. Вы можете писать код прямо в редакторе, если вам не нужны никакие библиотеки. Если вам нужно добавить библиотеки и зависимости, отличные от AWS SDK, или вы используете Lambda API, вам необходимо создать пакет развертывания, который представляет собой ZIP-архив, содержащий код функции и зависимости. В нашем случае, поскольку нам нужно было использовать Pandas и Numpy для обработки вывода, мы создали пакет развертывания и загрузили его напрямую. Другой способ загрузить пакет - сначала загрузить его в S3, а затем загрузить в Lambda из S3.

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

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

Клей и Афина

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

AWS Glue - это полностью управляемый сервис ETL. Мы настроили Glue Crawler для автоматического извлечения схемы таблицы результатов наших прогнозов и сохранения этих метаданных в каталоге данных Glue. Каталог данных изначально интегрирован с Amazon Athena, который представляет собой интерактивную службу запросов. Athena удобно получает доступ к результатам прогнозов в S3 через каталог данных. На данный момент у нас есть готовая таблица в Athena, которую мы можем запросить с помощью SQL для просмотра прогнозов. Мы можем остановиться на этом или, как показано в следующем разделе, мы дополнительно подключим Athena к Tableau и создадим живую информационную панель для визуализации.

Панель управления прогнозированием в реальном времени

Многие варианты программного обеспечения для визуализации данных предлагают живые подключения к сервисам AWS. Мы решили использовать Tableau для создания панели инструментов для прогнозирования в реальном времени, которая визуализирует прогнозы из нашей модели DeepAR, когда они существуют в Amazon Athena. Установление этой связи - простой процесс. Следуйте инструкциям Tableau здесь.

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

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

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

Заключительные мысли

Пакет AWS предлагает все услуги, необходимые для быстрого и простого прогнозирования в крупном масштабе. Готовые алгоритмы и службы развертывания Amazon не требуют большой настройки для создания полностью автоматизированного сквозного конвейера. При использовании моделей SageMaker может потребоваться некоторая кривая обучения, поскольку документация, хотя и исчерпывающая, может быть трудной для поиска. Учитывая все обстоятельства, мы обнаружили, что эта комбинация S3, SageMaker (DeepAR), Lambda, Glue и Athena является отличным решением проблемы, с которой сталкивались бесчисленное количество раз. Если ваша проблема прогнозирования включает создание прогнозов для множества различных объектов, мы рекомендуем вам рассматривать это как одно из лучших решений.