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

1. Обзор

В этой лабораторной работе вы узнаете, как построить модель прогнозирования временных рядов с помощью TensorFlow, а затем научитесь развертывать эти модели с помощью Vertex AI .

Что вы узнаете

Вы узнаете, как:

  • Преобразуйте данные, чтобы их можно было использовать в модели машинного обучения.
  • Визуализация и исследование данных
  • Используйте BigQuery ML для создания модели прогнозирования временных рядов
  • Создайте модель прогнозирования временных рядов с помощью TensorFlow, используя архитектуры LSTM и CNN.

2. Введение в прогнозирование временных рядов

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

Данные временных рядов

Во-первых, что такое временной ряд? Это набор данных, в котором данные записываются через регулярные промежутки времени. Набор данных временных рядов содержит как время, так и по крайней мере одну переменную, зависящую от времени.

85af6a1ff05c69f2.png

Компоненты

Временной ряд можно разложить на составляющие:

  • Тренд : движение вверх или вниз по достаточно предсказуемой схеме.
  • Сезонный : повторяется в течение определенного периода, например дня, недели, месяца, сезона и т. д.
  • Случайный : остаточные колебания

Может быть несколько уровней сезонности. Например, колл-центр может наблюдать закономерность в объеме звонков в определенные дни недели, а также в определенные месяцы. Остаток можно объяснить и другими переменными, помимо времени.

6e8d45bbbbc388ec.png

Стационарность

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

Например, график концентрации CO2 ниже показывает повторяющуюся годовую закономерность с тенденцией к росту. ( Источник )

ab82857e2e7d0b89.png

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

c936381ab1095528.png

Использование данных временных рядов для машинного обучения

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

d667a941dbd470f5.png

Теперь, когда мы рассмотрели некоторые основы, давайте начнем с изучения данных и прогнозирования!

3. Настройте среду вашего ноутбука

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

Шаг 1. Включите API

Соединитель BigQuery использует BigQuery Storage API. Найдите BigQuery Storage API в консоли и включите API, если он в данный момент отключен.

9895a2fd3cdf8f8c.png

Шаг 2. Создайте блокнот Vertex AI Workbench.

Перейдите в раздел Vertex AI Workbench в облачной консоли и нажмите «Новый блокнот» . Затем выберите новейший тип ноутбука TensorFlow Enterprise 2.x без графических процессоров :

4e7b73eabf2bc061.png

Используйте параметры по умолчанию и нажмите «Создать» . После создания экземпляра выберите «Открыть JupyterLab» :

18c9f3c462aafaee.png

Затем создайте блокнот Python 3 из JupyterLab:

58523671a252b95a.png

Шаг 3. Загрузите лабораторные материалы.

Создайте новое окно терминала из интерфейса JupyterLab: Файл -> Создать -> Терминал.

Оттуда клонируйте исходный материал с помощью этой команды:

git clone https://github.com/GoogleCloudPlatform/training-data-analyst

4. Исследуйте и визуализируйте данные

В этом разделе вы:

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

Шаг 1

В Vertex AI Workbench перейдите в training-data-analyst/courses/ai-for-time-series/notebooks и откройте 01-explore.ipynb .

Шаг 2

Очистите все ячейки в блокноте («Правка» > «Очистить все выходные данные»), измените настройки региона, проекта и сегмента в одной из первых нескольких ячеек, а затем запустите ячейки одну за другой.

Шаг 3

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

55839e7bc0427915.png

5. Создайте модель с прогнозированием временных рядов BigQuery.

В этом разделе вы:

  • Импортируйте входные данные временных рядов в таблицу BigQuery.
  • Создайте модель временных рядов, используя синтаксис BQML.
  • Узнайте, как оценить параметры и точность вашей модели
  • Прогноз с использованием вашей модели

Шаг 1

Мы собираемся создать таблицу BigQuery с необработанными данными из CSV, который мы только что изучили. Начнем с загрузки CSV-файла из среды ноутбука.

В каталоге training-data-analyst/courses/ai-for-time-series/notebooks/data щелкните правой кнопкой мыши cta_ridership.csv и загрузите его в свою локальную среду.

Шаг 2

Далее мы загрузим эти данные в таблицу BigQuery.

Перейдите в BigQuery в консоли (выполнив поиск или воспользовавшись этой ссылкой ):

649e7ab1c44b75e8.png

Вы можете добавить таблицу в новый или существующий набор данных, который группирует связанные таблицы. Если вы еще не создали набор данных, вы можете нажать на свой проект в левом нижнем углу, а затем выбрать «Создать набор данных» в правом нижнем углу.

281b97020cd52f29.png

Выберите имя по вашему выбору, например demo , примите значения по умолчанию и продолжайте.

Выбрав этот набор данных, выберите «Создать таблицу» в правом нижнем углу, чтобы создать новую таблицу.

ad47810d44cfb289.png

В параметрах создания таблицы выберите:

  • Создать таблицу из: Загрузить
  • Выберите файл: cta_ridership.csv.
  • Имя таблицы: cta_ridership
  • Схема: установите флажок для автоматического определения схемы и входных параметров.

213e4177e9e79544.png

Шаг 3

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

В редакторе запросов вставьте/введите этот запрос, при необходимости заменив demo именем вашего набора данных в обоих местах:

CREATE OR REPLACE MODEL
  `demo.cta_ridership_model` OPTIONS(MODEL_TYPE='ARIMA',
    TIME_SERIES_TIMESTAMP_COL='service_date',
    TIME_SERIES_DATA_COL='total_rides',
    HOLIDAY_REGION='us') AS
SELECT
  service_date, total_rides
FROM
  `demo.cta_ridership`

Давайте рассмотрим ключевые элементы синтаксиса для понимания:

CREATE OR REPLACE MODEL
demo.cta_ridership_model

Это утверждение создает модель. Существуют варианты этого оператора, например CREATE MODEL , но мы решили заменить здесь существующую модель с тем же именем.

OPTIONS(MODEL_TYPE='ARIMA' ... )

Здесь мы определяем параметры модели, причем первым параметром является тип модели. Выбор ARIMA создаст модель прогнозирования временных рядов.

TIME_SERIES_TIMESTAMP_COL='service_date'

Столбец с информацией о дате/времени

TIME_SERIES_DATA_COL='total_rides'

Столбец данных

HOLIDAY_REGION='us'

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

AS SELECT ... FROM ...

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

К запросу можно добавить ряд других параметров, например определение столбца, если у вас есть несколько временных рядов, или выбор автоматического обнаружения параметров модели ARIMA. Более подробную информацию можно найти в инструкции CREATE MODEL для справки по синтаксису моделей временных рядов .

Шаг 4

Давайте узнаем больше о нашей модели. После завершения обучения давайте выполним еще один запрос, снова заменив demo , если необходимо:

SELECT
  *
FROM
  ML.EVALUATE(MODEL `demo.cta_ridership_model`)

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

Вы сможете увидеть параметры p, d и q модели ARIMA , а также сезонность, обнаруженную в модели. В данном случае топ-модель учитывает как недельную, так и годовую сезонность.

5b5b1e129c70a340.png

Шаг 5

Теперь мы готовы прогнозировать с помощью функции ML.FORECAST !

Вставьте/введите следующее (при необходимости заменив demo ):

SELECT
  *
FROM
  ML.FORECAST(MODEL `demo.cta_ridership_model`,
    STRUCT(7 AS horizon))

Этот запрос просто прогнозирует 7 дней с использованием нашей модели! Мы видим семь строк, возвращенных ниже. Прогноз также включает доверительный интервал, по умолчанию равный 0,95, но его можно настроить в запросе.

b8a7f22657dc2d27.png

Отличная работа: мы создали модель временных рядов с помощью всего лишь нескольких запросов BQML.

6. Создайте собственную модель прогнозирования

В этом разделе вы:

  • Удалить выбросы из данных
  • Выполнение многоэтапного прогнозирования
  • Включение дополнительных функций в модель временных рядов
  • Узнайте об архитектуре нейронных сетей для прогнозирования временных рядов: LSTM и CNN.
  • Узнайте о статистических моделях, включая экспоненциальное сглаживание Холта-Винтерса.
  • Модели ансамбля

Шаг 1

В Vertex AI Workbench перейдите в training-data-analyst/courses/ai-for-time-series/notebooks и откройте 02-model.ipynb .

Шаг 2

Очистите все ячейки в блокноте («Правка» > «Очистить все выходные данные»), измените настройки региона, проекта и сегмента в одной из первых нескольких ячеек, а затем запустите ячейки одну за другой.

Шаг 3

В блокноте вы изучили несколько архитектур моделей: LSTM, CNN и статистические модели. Для каждой модели вы можете увидеть, как она работает на тестовых данных:

а528df58f4e6d372.png

7. Обучение и прогнозирование в облаке

В этом разделе вы:

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

Шаг 1

В Vertex AI Workbench перейдите в training-data-analyst/courses/ai-for-time-series/notebooks и откройте 03-cloud-training.ipynb .

Шаг 2

Очистите все ячейки в блокноте («Правка» > «Очистить все выходные данные»), измените настройки региона, проекта и сегмента в одной из первых нескольких ячеек, а затем запустите ячейки одну за другой.

Шаг 3

В предыдущем разделе мы обучили модель и сделали прогнозы с ее помощью, и все это в блокноте Workbench. В этом разделе мы продемонстрировали, как использовать Python SDK для Vertex AI с вашего ноутбука, чтобы использовать сервисы Vertex AI для обучения и развертывания.

a3f6b5dc895a24fb.png

8. Вызов

В этом разделе вы попробуете применить изученные вами концепции к новому набору данных!

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

Цель состоит в том, чтобы спрогнозировать 311 запросов на обслуживание от города Нью-Йорка. К таким несрочным запросам относятся жалобы на шум, проблемы с уличным освещением и т. д.

Шаг 1

Начнем с понимания набора данных.

Сначала получите доступ к набору данных по запросам на обслуживание 311 города Нью-Йорка .

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

  • Сколько 311 запросов связано с фургонами с мороженым?
  • В какие дни поступает больше всего 311 запросов, связанных с вечеринками?

В пользовательском интерфейсе BigQuery выберите «Создать запрос» , чтобы узнать, как получить доступ к набору данных. Обратите внимание, что оператор select выполняет запрос из bigquery-public-data.new_york_311.311_service_requests .

Шаг 2

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

Подсказки

  • Дублируйте блокнот 01-explore.ipynb и начните работать с ним.
  • Чтобы изучить данные, попробуйте этот запрос:
from google.cloud import bigquery as bq

sql = """
SELECT * FROM `bigquery-public-data.new_york_311.311_service_requests` LIMIT 5
"""

client = bq.Client(project=PROJECT)
df = client.query(sql).to_dataframe()

df.head()
  • Чтобы получить количество инцидентов по месяцам, используйте этот запрос:
SELECT
  COUNT(unique_key) as y,
  DATE_TRUNC(DATE(created_date), month) as ds  
FROM `bigquery-public-data.new_york_311.311_service_requests`
GROUP by ds ORDER BY ds asc
  • Обновите переменные столбца в разделе констант. В приведенном выше запросе целевой столбец — y , а столбец даты — ds . Дополнительных функций нет.
  • Рассмотрите возможность изменения имени файла, в который вы экспортируете данные для следующей лабораторной работы.
  • Экспортируйте данные, используя: df.to_csv(YOUR-EXPORT-FILENAME, index=False)

Шаг 3

Давайте теперь создадим модель временных рядов с ежемесячными данными.

Подсказки:

  • Дублируйте блокнот 02-model.ipynb и начните работать с ним.
  • Обновите параметры набора данных:
  • Обновите параметры target_col и ts_col , чтобы они соответствовали вашему новому набору данных.
  • Обновите параметры модели:
  • От периодичности до месяца (код начала месяца — «MS»)
  • Шагов ввода: 12 (окно ретроспективного анализа — 12 месяцев).
  • Шаги вывода: 3 (прогнозировать на 3 месяца вперед)
  • Сезонов: 12 (Сезонность 12 месяцев)
  • Измените имя входного файла, если вы изменили его в предыдущей записной книжке.
  • Если вы запустите запрос в середине месяца, общая сумма за последний месяц будет намного ниже ожидаемой. Итак, для целей этой лабораторной работы давайте удалим последний месяц из набора данных, используя: df = df[:-1]
  • В данных нет явных выбросов, поэтому пропустите или закомментируйте эти ячейки.
  • Настройте единицы LSTM, фильтры CNN и размер ядра для этой новой модели.

9. Очистка

Если вы хотите продолжать использовать этот ноутбук, рекомендуется выключать его, когда он не используется. В пользовательском интерфейсе Workbench в облачной консоли выберите блокнот и нажмите «Стоп» :

57213ef2edad9257.png

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

Используя меню навигации в облачной консоли, перейдите к разделу «Хранилище» и удалите оба сегмента, которые вы создали для хранения ресурсов модели (ВНИМАНИЕ: делайте это только в том случае, если вы создали новые сегменты только для этой лабораторной работы).