1. Обзор
В этой лабораторной работе вы узнаете, как построить модель прогнозирования временных рядов с помощью TensorFlow, а затем научитесь развертывать эти модели с помощью Vertex AI .
Что вы узнаете
Вы узнаете, как:
- Преобразуйте данные, чтобы их можно было использовать в модели машинного обучения.
- Визуализация и исследование данных
- Используйте BigQuery ML для создания модели прогнозирования временных рядов
- Создайте модель прогнозирования временных рядов с помощью TensorFlow, используя архитектуры LSTM и CNN.
2. Введение в прогнозирование временных рядов
Основное внимание в этой лаборатории уделяется тому, как применять методы прогнозирования временных рядов с помощью Google Cloud Platform. Это не общий курс по прогнозированию временных рядов, но краткий обзор концепций может быть полезен нашим пользователям.
Данные временных рядов
Во-первых, что такое временной ряд? Это набор данных, в котором данные записываются через регулярные промежутки времени. Набор данных временных рядов содержит как время, так и по крайней мере одну переменную, зависящую от времени.
Компоненты
Временной ряд можно разложить на составляющие:
- Тренд : движение вверх или вниз по достаточно предсказуемой схеме.
- Сезонный : повторяется в течение определенного периода, например дня, недели, месяца, сезона и т. д.
- Случайный : остаточные колебания
Может быть несколько уровней сезонности. Например, колл-центр может наблюдать закономерность в объеме звонков в определенные дни недели, а также в определенные месяцы. Остаток можно объяснить и другими переменными, помимо времени.
Стационарность
Для достижения наилучших результатов в прогнозировании данные временных рядов должны быть стационарными , где статистические свойства, такие как среднее значение и дисперсия, постоянны во времени. К необработанным данным можно применять такие методы, как дифференцирование и удаление тренда, чтобы сделать их более стационарными.
Например, график концентрации CO2 ниже показывает повторяющуюся годовую закономерность с тенденцией к росту. ( Источник )
После удаления линейного тренда данные больше подходят для прогнозирования, поскольку теперь они имеют постоянное среднее значение.
Использование данных временных рядов для машинного обучения
Чтобы использовать данные временных рядов в задаче машинного обучения, их необходимо преобразовать так, чтобы предыдущие значения можно было использовать для прогнозирования будущих значений. В этой таблице показан пример того, как создаются запаздывающие переменные, чтобы помочь спрогнозировать цель.
Теперь, когда мы рассмотрели некоторые основы, давайте начнем с изучения данных и прогнозирования!
3. Настройте среду вашего ноутбука
Теперь, когда мы кратко познакомились с данными, давайте теперь настроим среду разработки нашей модели.
Шаг 1. Включите API
Соединитель BigQuery использует BigQuery Storage API. Найдите BigQuery Storage API в консоли и включите API, если он в данный момент отключен.
Шаг 2. Создайте блокнот Vertex AI Workbench.
Перейдите в раздел Vertex AI Workbench в облачной консоли и нажмите «Новый блокнот» . Затем выберите новейший тип ноутбука TensorFlow Enterprise 2.x без графических процессоров :
Используйте параметры по умолчанию и нажмите «Создать» . После создания экземпляра выберите «Открыть JupyterLab» :
Затем создайте блокнот Python 3 из JupyterLab:
Шаг 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
В этом разделе вы импортировали данные и визуализировали их различные измерения. Теперь, когда у вас есть более четкое представление о данных, вы будете готовы перейти к моделированию машинного обучения с использованием этих данных.
5. Создайте модель с прогнозированием временных рядов BigQuery.
В этом разделе вы:
- Импортируйте входные данные временных рядов в таблицу BigQuery.
- Создайте модель временных рядов, используя синтаксис BQML.
- Узнайте, как оценить параметры и точность вашей модели
- Прогноз с использованием вашей модели
Шаг 1
Мы собираемся создать таблицу BigQuery с необработанными данными из CSV, который мы только что изучили. Начнем с загрузки CSV-файла из среды ноутбука.
В каталоге training-data-analyst/courses/ai-for-time-series/notebooks/data
щелкните правой кнопкой мыши cta_ridership.csv
и загрузите его в свою локальную среду.
Шаг 2
Далее мы загрузим эти данные в таблицу BigQuery.
Перейдите в BigQuery в консоли (выполнив поиск или воспользовавшись этой ссылкой ):
Вы можете добавить таблицу в новый или существующий набор данных, который группирует связанные таблицы. Если вы еще не создали набор данных, вы можете нажать на свой проект в левом нижнем углу, а затем выбрать «Создать набор данных» в правом нижнем углу.
Выберите имя по вашему выбору, например demo
, примите значения по умолчанию и продолжайте.
Выбрав этот набор данных, выберите «Создать таблицу» в правом нижнем углу, чтобы создать новую таблицу.
В параметрах создания таблицы выберите:
- Создать таблицу из: Загрузить
- Выберите файл: cta_ridership.csv.
- Имя таблицы: cta_ridership
- Схема: установите флажок для автоматического определения схемы и входных параметров.
Шаг 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`
Давайте рассмотрим ключевые элементы синтаксиса для понимания:
| Это утверждение создает модель. Существуют варианты этого оператора, например |
| Здесь мы определяем параметры модели, причем первым параметром является тип модели. Выбор ARIMA создаст модель прогнозирования временных рядов. |
| Столбец с информацией о дате/времени |
| Столбец данных |
| Этот необязательный параметр позволяет нам включать в модель праздничные дни. Поскольку исследование данных на предыдущем этапе показало, что количество пассажиров в праздничные дни было ниже, а данные получены из Чикаго, штат Иллинойс, США, мы включаем в модель праздничные дни в США. |
| В этом разделе выбираются входные данные, которые мы будем использовать для обучения модели. |
К запросу можно добавить ряд других параметров, например определение столбца, если у вас есть несколько временных рядов, или выбор автоматического обнаружения параметров модели ARIMA. Более подробную информацию можно найти в инструкции CREATE MODEL для справки по синтаксису моделей временных рядов .
Шаг 4
Давайте узнаем больше о нашей модели. После завершения обучения давайте выполним еще один запрос, снова заменив demo , если необходимо:
SELECT * FROM ML.EVALUATE(MODEL `demo.cta_ridership_model`)
Давайте интерпретируем результаты. В каждой строке вы увидите модель-кандидат с ее параметрами и статистикой оценки. Результаты возвращаются в порядке возрастания AIC или информационного критерия Акаике , который обеспечивает относительный показатель качества модели. Итак, модель в первом ряду имеет наименьший AIC и считается лучшей моделью.
Вы сможете увидеть параметры p, d и q модели ARIMA , а также сезонность, обнаруженную в модели. В данном случае топ-модель учитывает как недельную, так и годовую сезонность.
Шаг 5
Теперь мы готовы прогнозировать с помощью функции ML.FORECAST
!
Вставьте/введите следующее (при необходимости заменив demo ):
SELECT * FROM ML.FORECAST(MODEL `demo.cta_ridership_model`, STRUCT(7 AS horizon))
Этот запрос просто прогнозирует 7 дней с использованием нашей модели! Мы видим семь строк, возвращенных ниже. Прогноз также включает доверительный интервал, по умолчанию равный 0,95, но его можно настроить в запросе.
Отличная работа: мы создали модель временных рядов с помощью всего лишь нескольких запросов BQML.
6. Создайте собственную модель прогнозирования
В этом разделе вы:
- Удалить выбросы из данных
- Выполнение многоэтапного прогнозирования
- Включение дополнительных функций в модель временных рядов
- Узнайте об архитектуре нейронных сетей для прогнозирования временных рядов: LSTM и CNN.
- Узнайте о статистических моделях, включая экспоненциальное сглаживание Холта-Винтерса.
- Модели ансамбля
Шаг 1
В Vertex AI Workbench перейдите в training-data-analyst/courses/ai-for-time-series/notebooks
и откройте 02-model.ipynb
.
Шаг 2
Очистите все ячейки в блокноте («Правка» > «Очистить все выходные данные»), измените настройки региона, проекта и сегмента в одной из первых нескольких ячеек, а затем запустите ячейки одну за другой.
Шаг 3
В блокноте вы изучили несколько архитектур моделей: LSTM, CNN и статистические модели. Для каждой модели вы можете увидеть, как она работает на тестовых данных:
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 для обучения и развертывания.
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 в облачной консоли выберите блокнот и нажмите «Стоп» :
Если вы хотите удалить все ресурсы, созданные в этой лабораторной работе, просто удалите рабочую записную книжку, а не останавливайте ее.
Используя меню навигации в облачной консоли, перейдите к разделу «Хранилище» и удалите оба сегмента, которые вы создали для хранения ресурсов модели (ВНИМАНИЕ: делайте это только в том случае, если вы создали новые сегменты только для этой лабораторной работы).