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

ОБЛАСТЬ ПРИМЕНЕНИЯ: пакет SDK для Python azure-ai-ml версии 2 (текущая версия)

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

Для этого сделайте следующее.

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

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

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

Предварительные требования

Для работы с этой статьей вам потребуется:

Данные для обучения и проверки

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

Важно!

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

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

Задания прогнозирования AutoML требуют, чтобы данные для обучения были представлены в виде объекта MLTable . MlTable указывает источник данных и шаги для загрузки данных. Дополнительные сведения и варианты использования см. в руководстве по MLTable. В качестве простого примера предположим, что данные для обучения содержатся в CSV-файле в локальном каталоге ./train_data/timeseries_train.csv. Вы можете определить новую mlTable, скопировав следующий код YAML в новый файл ./train_data/MLTable:

$schema: https://azuremlschemas.azureedge.net/latest/MLTable.schema.json

type: mltable
paths:
    - file: ./timeseries_train.csv

transformations:
    - read_delimited:
        delimiter: ','
        encoding: ascii

Теперь можно определить объект входных данных, необходимый для запуска задания обучения, с помощью пакета SDK Для Python машинного обучения Azure следующим образом:

from azure.ai.ml.constants import AssetTypes
from azure.ai.ml import Input

# Training MLTable defined locally, with local data to be uploaded
my_training_data_input = Input(
    type=AssetTypes.MLTABLE, path="./train_data"
)

Данные проверки можно указать аналогичным образом, создав MLTable и объект входных данных. Кроме того, если вы не предоставляете проверочных данных, AutoML автоматически создает разбиения перекрестной проверки из обучающих данных для использования при выборе модели. Дополнительные сведения см. в нашей статье о выборе модели прогнозирования . Дополнительные сведения о том, сколько обучающих данных необходимо для успешного обучения модели прогнозирования, см. в разделе Требования к длине обучающих данных.

Узнайте больше о том, как AutoML применяет перекрестную проверку для предотвращения чрезмерной установки.

Объект вычислений для выполнения эксперимента

AutoML использует вычислительные ресурсы Машинного обучения Azure, которые являются полностью управляемым вычислительным ресурсом, для выполнения задания обучения. В следующем примере создается вычислительный кластер с именем cpu-compute :

from azure.ai.ml.entities import AmlCompute

# specify aml compute name.
cpu_compute_target = "cpu-cluster"

try:
    ml_client.compute.get(cpu_compute_target)
except Exception:
    print("Creating a new cpu compute target...")
    compute = AmlCompute(
        name=cpu_compute_target, size="STANDARD_D2_V2", min_instances=0, max_instances=4
    )
    ml_client.compute.begin_create_or_update(compute).result()

Настройка эксперимента

Существует несколько вариантов, которые можно использовать для настройки эксперимента прогнозирования AutoML. Эти параметры конфигурации задаются в методе задачи automl.forecasting(). Вы также можете задать параметры обучения задания и критерии выхода с помощью функций set_training() и set_limits() соответственно.

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

from azure.ai.ml import automl

# note that the below is a code snippet -- you might have to modify the variable values to run it successfully
forecasting_job = automl.forecasting(
    compute=compute_name,
    experiment_name=exp_name,
    training_data=my_training_data_input,
    target_column_name=target_column_name,
    primary_metric="NormalizedRootMeanSquaredError",
    n_cross_validations="auto",
)

# Limits are all optional
forecasting_job.set_limits(
    timeout_minutes=120,
    trial_timeout_minutes=30,
    max_concurrent_trials=4,
)

Параметры конфигурации

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

# Forecasting specific configuration
forecasting_job.set_forecast_settings(
    time_column_name=time_column_name,
    forecast_horizon=24
)

Имя столбца времени является обязательным параметром, и обычно необходимо задать горизонт прогноза в соответствии со сценарием прогнозирования. Если данные содержат несколько временных рядов, можно указать имена столбцов идентификаторов временных рядов. Эти столбцы при группировке определяют отдельные ряды. Например, предположим, что у вас есть данные, состоящие из почасовых продаж из разных магазинов и торговых марок. В следующем примере показано, как задать столбцы идентификаторов временных рядов при условии, что данные содержат столбцы с именами store и brand:

# Forecasting specific configuration
# Add time series IDs for store and brand
forecasting_job.set_forecast_settings(
    ...,  # other settings
    time_series_id_column_names=['store', 'brand']
)

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

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

Необязательные параметры

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

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

Существует два необязательных параметра, которые управляют пространством модели, в котором AutoML ищет лучшую модель, allowed_training_algorithms и blocked_training_algorithms. Чтобы ограничить пространство поиска определенным набором классов моделей, используйте allowed_training_algorithms, как показано в следующем примере:

# Only search ExponentialSmoothing and ElasticNet models
forecasting_job.set_training(
    allowed_training_algorithms=["ExponentialSmoothing", "ElasticNet"]
)

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

# Search over all model classes except Prophet
forecasting_job.set_training(
    blocked_training_algorithms=["Prophet"]
)

Теперь задание выполняет поиск по всем классам моделей, кроме Prophet. Список имен моделей прогнозирования, которые принимаются в и blocked_training_algorithms, см. в allowed_training_algorithms разделе Поддерживаемые модели прогнозирования и поддерживаемые модели регрессии.

Включение глубокого обучения

AutoML поставляется с пользовательской моделью глубокой нейронной сети (DNN) под названием TCNForecaster. Эта модель представляет собой темпоральную сверточную сеть или TCN, которая применяет распространенные методы задач создания образов к моделированию временных рядов. А именно, одномерные "причинно-следственные" свертки формируют магистраль сети и позволяют модели изучать сложные шаблоны в течение длительного времени в истории обучения. Дополнительные сведения см. в нашей статье TCNForecaster.

Схема основных компонентов TCNForecaster AutoML.

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

Вы можете включить TCNForecaster в AutoML, установив enable_dnn_training флаг в методе set_training() следующим образом:

# Include TCNForecaster models in the model search
forecasting_job.set_training(
    enable_dnn_training=True
)

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

Примечание

  • При включении глубокой нейронной сети для экспериментов, созданных с помощью пакета SDK, лучшие объяснения моделей отключены.
  • Поддержка DNN для прогнозирования в автоматизированном машинном обучении не поддерживается для запусков, инициированных в Databricks.
  • Типы вычислений GPU рекомендуется использовать при включенном обучении DNN

Целевой агрегат со скользящим окном

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

Рассмотрим сценарий прогнозирования спроса на энергию, в котором доступны данные о погоде и исторический спрос. В таблице показана результирующая инженерия признаков, которая возникает при применении агрегирования окон в течение последних трех часов. Столбцы минимума, максимума и суммы создаются в скользящем окне продолжительностью три часа на основе определенных параметров. Например, для наблюдения, действительного 8 сентября 2017 года в 4:00 утра, максимальные, минимальные и суммарные значения вычисляются на основе значений спроса за 8 сентября 2017 г., 1:00–3:00. Это окно с тремя часами смещается, чтобы заполнить данные для оставшихся строк.

целевое скользящее окно

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

forecasting_job.set_forecast_settings(
    ...,  # other settings
    target_rolling_window_size='auto'
)

Обработка коротких рядов

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

AutoML имеет несколько действий, которые можно предпринять для коротких рядов. Эти действия можно настроить с помощью short_series_handling_config параметра . Значение по умолчанию — "auto". В следующей таблице описаны параметры:

Параметр Описание
auto Значение по умолчанию для обработки коротких рядов.
- Если все ряды короткие, отступите к данным.
- Если не все ряды являются короткими, удалите короткие ряды.
pad Если short_series_handling_config = pad, то автоматизированное ML добавляет случайные значения в каждый обнаруженный короткий ряд. Ниже перечислены типы столбцов и их заполнение:
— Столбцы объектов с nan
— Числовые столбцы с 0
— Логические столбцы или столбцы логики с значением False
— Целевой столбец заполняется случайными значениями со средним нулевым и стандартным отклонением 1.
drop Если short_series_handling_config = drop, то автоматизированное ML удаляет короткие ряды и они не будут использоваться для обучения или прогнозирования. Прогнозы для этих рядов будут возвращать значения NaN.
None Ряды не заполняются и не удаляются

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

forecasting_job.set_forecast_settings(
    ...,  # other settings
    short_series_handling_config='pad'
)

Предупреждение

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

Частота и агрегирование целевых данных

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

Необходимо задать frequency параметры и target_aggregate_function для обработки нерегулярных данных. Параметр частоты принимает строки Pandas DateOffset в качестве входных данных. Поддерживаемые значения для агрегатной функции:

Функция Описание
sum  Сумма целевых значений
mean  Среднее или среднее от целевых значений
min Минимальное целевое значение
max максимальное значение целевых значений.
  • Значения целевого столбца агрегируются в соответствии с указанной операцией. Как правило, в большинстве ситуаций подходит операция "sum".
  • Числовые столбцы прогнозирования в данных агрегируются по сумме, среднему значению, минимальному и максимальному значению. В результате автоматизированное ML создает новые столбцы с суффиксом, соответствующим имени примененной функции агрегирования, и применяет к ним выбранную операцию агрегирования.
  • Для столбцов категориального прогноза данные агрегируются по моде — наиболее выраженной категории в окне.
  • Столбцы прогнозирования дат агрегируются по минимальному значению, максимальному значению и моде.

В следующем примере для параметра frequency задается значение ежечасно, а функция агрегирования — для суммирования:

# Aggregate the data to hourly frequency
forecasting_job.set_forecast_settings(
    ...,  # other settings
    frequency='H',
    target_aggregate_function='sum'
)

Настраиваемые параметры перекрестной проверки

Существует два настраиваемых параметра, которые управляют перекрестной проверкой для заданий прогнозирования: количество сверток, и размер шага, n_cross_validationsопределяющий смещение времени между свертками, cv_step_size. Дополнительные сведения о значении этих параметров см. в разделе Выбор модели прогнозирования . По умолчанию AutoML устанавливает оба параметра автоматически на основе характеристик данных, но опытные пользователи могут захотеть задать их вручную. Например, предположим, что у вас есть ежедневные данные о продажах и вы хотите, чтобы настройка проверки состояла из пяти сверток со смещением на семь дней между смежными свертками. В следующем примере кода показано, как их задать:

from azure.ai.ml import automl

# Create a job with five CV folds
forecasting_job = automl.forecasting(
    ...,  # other training parameters
    n_cross_validations=5,
)

# Set the step size between folds to seven days
forecasting_job.set_forecast_settings(
    ...,  # other settings
    cv_step_size=7
)

Настраиваемое конструирование признаков

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

Ниже перечислены поддерживаемые настройки для прогнозирования.

Настройка Описание Параметры
Изменение назначения столбца Переопределение автоматически определенного типа признака для указанного столбца. "Categorical", "DateTime", "Numeric"
Изменение параметра преобразователя Обновите параметры для указанного вменителя. {"strategy": "constant", "fill_value": <value>}, {"strategy": "median"}, {"strategy": "ffill"}

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

from azure.ai.ml.automl import ColumnTransformer

# Customize imputation methods for price and is_on_sale features
# Median value imputation for price, constant value of zero for is_on_sale
transformer_params = {
    "imputer": [
        ColumnTransformer(fields=["price"], parameters={"strategy": "median"}),
        ColumnTransformer(fields=["is_on_sale"], parameters={"strategy": "constant", "fill_value": 0}),
    ],
}

# Set the featurization
# Ensure that product_type feature is interpreted as categorical
forecasting_job.set_featurization(
    mode="custom",
    transformer_params=transformer_params,
    column_name_and_types={"product_type": "Categorical"},
)

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

Выполнение эксперимента

После настройки всех параметров можно запустить задание прогнозирования с помощью следующего mlcient :

# Submit the AutoML job
returned_job = ml_client.jobs.create_or_update(
    forecasting_job
)

print(f"Created job: {returned_job}")

# Get a URL for the status of the job
returned_job.services["Studio"].endpoint

Прогнозирование с помощью обученной модели

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

Оценка точности модели с помощью скользящего прогноза

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

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

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

"""
This is the script that is executed on the compute instance. It relies
on the model.pkl file which is uploaded along with this script to the
compute instance.
"""

import os
import pandas as pd

from sklearn.externals import joblib


def init():
    global target_column_name
    global fitted_model

    target_column_name = os.environ["TARGET_COLUMN_NAME"]
    # AZUREML_MODEL_DIR is an environment variable created during deployment
    # It is the path to the model folder (./azureml-models)
    # Please provide your model's folder name if there's one
    model_path = os.path.join(os.environ["AZUREML_MODEL_DIR"], "model.pkl")
    try:
        fitted_model = joblib.load(model_path)
    except Exception:
        print("Loading pickle failed. Trying torch.load()")

        import torch
        model_path = os.path.join(os.environ["AZUREML_MODEL_DIR"], "model.pt") 
        device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
        fitted_model = torch.load(model_path, map_location=device)


def run(mini_batch):
    print(f"run method start: {__file__}, run({mini_batch})")
    resultList = []
    for test in mini_batch:
        if not test.endswith(".csv"):
            continue
        X_test = pd.read_csv(test, parse_dates=[fitted_model.time_column_name])
        y_test = X_test.pop(target_column_name).values

        # Make a rolling forecast, advancing the forecast origin by 1 period on each iteration through the test set
        X_rf = fitted_model.rolling_forecast(
            X_test, y_test, step=1, ignore_data_errors=True
        )

        resultList.append(X_rf)

    return pd.concat(resultList, sort=False, ignore_index=True)

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

Прогнозирование в будущем

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

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

Для прогнозирования значений до указанной даты в функции forecast_quantiles() можно также использовать параметр forecast_destination.

label_query = test_labels.copy().astype(np.float)
label_query.fill(np.nan)
label_fcst, data_trans = fitted_model.forecast_quantiles(
    test_dataset, label_query, forecast_destination=pd.Timestamp(2019, 1, 8)
)

Здесь не указаны квантили, поэтому создается только прогноз точки. Вы можете понять прогнозы в определенном квантили распределения. например если прогнозирование используется для контроля запасов товаров в продуктовом магазине или виртуальных машин для облачной службы. В таких случаях используется контрольная точка вида “мы хотим, чтобы товар оставался в ассортименте и заканчивался 99 % времени”. В следующем примере показано, как указать квантили прогноза, например 50-й или 95-й процентиль:

# Get forecasts for the 5th, 50th, and 90th percentiles 
fitted_model.quantiles = [0.05, 0.5, 0.9]
fitted_model.forecast_quantiles(
    test_dataset, label_query, forecast_destination=pd.Timestamp(2019, 1, 8)
)

Вы можете вычислить метрики модели, например, корень среднеквадратической погрешности (КСКП) или среднюю абсолютную процентную ошибку (MAPE), чтобы оценить производительность моделей. См. например, раздел "Оценка" записной книжки спроса на прокат велосипедов.

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

Укажите набор данных в том же формате, что и набор для тестирования test_dataset, но с будущими значениями даты и времени. Результирующим набором прогнозов будут прогнозируемые значения для каждого шага временного ряда. Предположим, что последние записи в наборе данных были за 31 декабря 2018 г. Для прогнозирования спроса создайте запись временных рядов для каждого магазина, начиная с 1 января 2019 г.

day_datetime,store,week_of_year
01/01/2019,A,1
01/01/2019,A,1

Повторите необходимые действия, чтобы загрузить эти будущие данные в кадр данных, а затем выполните команду best_run.forecast_quantiles(test_dataset) для прогнозирования будущих значений.

Примечание

Прогнозы внутри выборок не поддерживаются при прогнозировании с помощью автоматизированного ML, когда включены параметры target_lags и (или) target_rolling_window_size.

Прогнозирование в большом масштабе

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python для ML Azure версии 1

Важно!

Многие модели и иерархические временные ряды в настоящее время поддерживаются только в Машинном обучении Azure версии 1. Ожидается поддержка Машинного обучения Azure версии 2.

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

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

Многие модели

Решение "Машинное обучение Azure" со многими моделями с автоматизированным машинным обучением позволяет пользователям параллельно обучать миллионы моделей и управлять ими. Акселератор решений для многих моделей использует конвейеры Машинного обучения Azure для обучения модели. В частности, используется объект "Конвейер и ParalleRunStep, и для них требуются определенные параметры конфигурации, задаваемые через ParallelRunConfig.

На следующей диаграмме показан рабочий процесс для решения со многими моделями.

Концептуальная схема многих моделей

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

from azureml.train.automl.runtime._many_models.many_models_parameters import ManyModelsTrainParameters

partition_column_names = ['Store', 'Brand']
automl_settings = {"task" : 'forecasting',
                   "primary_metric" : 'normalized_root_mean_squared_error',
                   "iteration_timeout_minutes" : 10, #This needs to be changed based on the dataset. Explore how long training is taking before setting this value 
                   "iterations" : 15,
                   "experiment_timeout_hours" : 1,
                   "label_column_name" : 'Quantity',
                   "n_cross_validations" : "auto", # Could be customized as an integer
                   "cv_step_size" : "auto", # Could be customized as an integer
                   "time_column_name": 'WeekStarting',
                   "max_horizon" : 6,
                   "track_child_runs": False,
                   "pipeline_fetch_max_batch_size": 15,}

mm_paramters = ManyModelsTrainParameters(automl_settings=automl_settings, partition_column_names=partition_column_names)

Прогнозирование иерархических временных рядов

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

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

Пример таблицы необработанных данных для иерархических данных

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

Визуальная иерархия для данных

Иерархическое решение временных рядов построено на основе решения со многими моделями и имеет аналогичную настройку конфигурации.

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


from azureml.train.automl.runtime._hts.hts_parameters import HTSTrainParameters

model_explainability = True

engineered_explanations = False # Define your hierarchy. Adjust the settings below based on your dataset.
hierarchy = ["state", "store_id", "product_category", "SKU"]
training_level = "SKU"# Set your forecast parameters. Adjust the settings below based on your dataset.
time_column_name = "date"
label_column_name = "quantity"
forecast_horizon = 7


automl_settings = {"task" : "forecasting",
                   "primary_metric" : "normalized_root_mean_squared_error",
                   "label_column_name": label_column_name,
                   "time_column_name": time_column_name,
                   "forecast_horizon": forecast_horizon,
                   "hierarchy_column_names": hierarchy,
                   "hierarchy_training_level": training_level,
                   "track_child_runs": False,
                   "pipeline_fetch_max_batch_size": 15,
                   "model_explainability": model_explainability,# The following settings are specific to this sample and should be adjusted according to your own needs.
                   "iteration_timeout_minutes" : 10,
                   "iterations" : 10,
                   "n_cross_validations" : "auto", # Could be customized as an integer
                   "cv_step_size" : "auto", # Could be customized as an integer
                   }

hts_parameters = HTSTrainParameters(
    automl_settings=automl_settings,
    hierarchy_column_names=hierarchy,
    training_level=training_level,
    enable_engineered_explanations=engineered_explanations
)

Примеры записных книжек

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

Дальнейшие действия