Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
GILT FÜR:
Azure CLI ml Erweiterung v2 (aktuell)
Python SDK azure-ai-ml v2 (aktuell)
Automatisiertes Maschinelles Lernen (AutoML) in Azure Machine Learning verwendet Standardmodelle für maschinelles Lernen zusammen mit bekannten Zeitreihenmodellen, um Prognosen zu erstellen. Bei diesem Ansatz werden historische Informationen über die Zielvariable mit vom Benutzer bereitgestellten Funktionen in den Eingabedaten und automatisch erstellten Funktionen kombiniert. Algorithmen zur Modellsuche helfen dabei, die Modelle mit der besten Prognosegenauigkeit zu identifizieren. Weitere Informationen finden Sie unter Prognosemethodik und Modellsuche und -auswahl.
In diesem Artikel wird beschrieben, wie Sie AutoML für Zeitreihenprognosen mit Machine Learning mithilfe des Azure Machine Learning Python SDK und der Azure CLI einrichten. Der Prozess umfasst das Vorbereiten von Daten für Schulungen und das Konfigurieren von Zeitreihenparametern in einem Prognoseauftrag (Klassenreferenz). Anschließend trainieren Sie Modelle mit Hilfe von Komponenten und Pipelines, um sie abzuleiten und zu evaluieren.
Für eine low-code Erfahrung, siehe Tutorial: Prognose des Bedarfs mit maschinellem Lernen. Dieser Artikel enthält ein Beispiel für eine Zeitreihenprognose, das AutoML in Azure Machine Learning Studio verwendet.
Voraussetzungen
- Ein Azure Machine Learning-Arbeitsbereich. Weitere Informationen finden Sie unter Erstellen eines Arbeitsbereichs.
- Die Möglichkeit, AutoML-Training-Jobs zu starten. Weitere Informationen finden Sie unter Einrichten von AutoML-Training für tabellarische Daten mit Azure Machine Learning CLI und Python SDK.
Vorbereiten von Trainings- und Validierungsdaten
Die Eingabedaten für die AutoML- Prognose müssen eine gültige Zeitreihe im Tabellenformat enthalten. Jede Variable muss über eine eigene entsprechende Spalte in der Datentabelle verfügen. AutoML benötigt mindestens zwei Spalten: eine time-Spalte zur Darstellung der Zeitachse und eine target-Spalte für die zu prognostizierende Größe. Andere Spalten können als Prädiktoren dienen. Weitere Informationen finden Sie unter So verwendet AutoML Ihre Daten.
Wichtig
Wenn Sie ein Modell für die Prognose zukünftiger Werte trainieren, stellen Sie sicher, dass alle in der Schulung verwendeten Features auch verwendet werden können, wenn Vorhersagen für Ihren vorgesehenen Horizont ausgeführt werden.
Berücksichtigen Sie ein Feature für den aktuellen Aktienkurs, der die Trainingsgenauigkeit erhöhen kann. Wenn Sie mit einem langen Horizont vorhersagen, können Sie möglicherweise keine exakten zukünftigen Aktienwerte vorhersagen, die zukünftigen Zeitreihenpunkten entsprechen. Dieser Ansatz kann die Modellgenauigkeit verringern.
AutoML-Jobs zur Planung von Prognosen erfordern, dass Ihre Trainingsdaten als MLTable-Objekt dargestellt werden. Ein MLTable-Objekt spezifiziert eine Datenquelle und die Schritte zum Laden der Daten. Weitere Informationen und Anwendungsfälle finden Sie unter Arbeiten mit Tabellen.
Gehen Sie im folgenden Beispiel davon aus, dass Ihre Schulungsdaten in einer CSV-Datei in einem lokalen Verzeichnis enthalten sind: ./train_data/timeseries_train.csv.
Sie können ein MLTable Objekt mithilfe des mltable Python SDK-Mitglieds erstellen:
import mltable
paths = [
{'file': './train_data/timeseries_train.csv'}
]
train_table = mltable.from_delimited_files(paths)
train_table.save('./train_data')
Mit diesem Code wird eine neue Datei, ./train_data/MLTable, erstellt, die das Dateiformat und die Ladeanweisungen enthält.
Um den Schulungsauftrag zu starten, definieren Sie ein Eingabedatenobjekt mithilfe des Python SDK:
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"
)
Sie geben Validierungsdaten auf ähnliche Weise an. Erstellen Sie ein MLTable-Objekt und geben Sie eine Validierungsdateneingabe an. Wenn Sie keine Validierungsdaten bereitstellen, erstellt AutoML automatisch Kreuzvalidierungsaufteilungen Ihrer Trainingsdaten, die für die Modellauswahl verwendet werden sollen. Weitere Informationen finden Sie in den folgenden Ressourcen:
- Prognosenmodelle auswählen
- Anforderungen für die Länge der Trainingsdaten festlegen
- Verhindern von Überanpassung mit Kreuzvalidierung
Erstellen von Rechenressourcen zum Ausführen des Experiments
AutoML verwendet Azure Machine Learning Compute, bei dem es sich um eine vollständig verwaltete Computeressource handelt, um den Schulungsauftrag auszuführen.
Das folgende Beispiel erstellt einen Compute-Cluster mit dem Namen cpu-cluster.
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()Konfigurieren des Experiments
Das folgende Beispiel zeigt, wie Sie das Experiment konfigurieren.
Sie verwenden die AutoML-Factory-Funktionen zur Konfiguration von Prognose-Jobs im Python SDK. Das folgende Beispiel zeigt, wie Sie einen Vorhersageauftrag erstellen, indem Sie die primäre Metrik und Grenzwerte für die Trainingsausführung festlegen:
from azure.ai.ml import automl
# Set forecasting variables.
# As needed, modify the variable values to run the snippet successfully.
forecasting_job = automl.forecasting(
compute="cpu-compute",
experiment_name="sdk-v2-automl-forecasting-job",
training_data=my_training_data_input,
target_column_name=target_column_name,
primary_metric="normalized_root_mean_squared_error",
n_cross_validations="auto",
)
# Set optional limits.
forecasting_job.set_limits(
timeout_minutes=120,
trial_timeout_minutes=30,
max_concurrent_trials=4,
)
Einstellungen für den Prognose-Job
Vorhersageaufgaben verfügen über viele Einstellungen, die spezifisch für die Vorhersage sind. Die grundlegendsten dieser Einstellungen sind der Name der Zeitspalte in den Trainingsdaten und der Vorhersagehorizont.
Verwenden Sie die ForecastingJob-Methoden, um diese Einstellungen zu konfigurieren:
# Forecasting-specific configuration.
forecasting_job.set_forecast_settings(
time_column_name=time_column_name,
forecast_horizon=24
)
Der Name der Zeitspalte ist eine erforderliche Einstellung. Allgemein sollten Sie den Prognosehorizont entsprechend Ihrem Prognoseszenario festlegen. Wenn Ihre Daten mehrere Zeitreihen enthalten, können Sie die Namen der time series ID-Spalten angeben. Wenn diese Spalten gruppiert sind, definieren sie die einzelnen Serien. Nehmen wir zum Beispiel an, Sie haben Daten, die aus stündlichen Verkäufen verschiedener Stores und Marken bestehen. Das folgende Beispiel zeigt, wie Sie die Zeitreihen-ID-Spalten festlegen. Dabei wird davon ausgegangen, dass die Daten Spalten mit den Namen store und brand enthalten:
# 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 versucht, automatisch "time series ID"-Spalten in Ihren Daten zu erkennen, wenn keine angegeben sind.
Andere Einstellungen sind optional und im folgenden Abschnitt beschrieben.
Optionale Einstellungen für den Vorhersageauftrag
Optionale Konfigurationen stehen für Prognoseaufgaben zur Verfügung, z. B. das Aktivieren von Deep Learning und die Angabe einer Zielaggregation im Rollfenster. Eine vollständige Liste der Parameter finden Sie in der Referenzdokumentation.
Modellsucheinstellungen
Es gibt zwei optionale Einstellungen, die den Modellraum steuern, in dem AutoML nach dem besten Modell sucht: allowed_training_algorithms und blocked_training_algorithms. Um den Suchbereich auf einen bestimmten Satz von Modellklassen einzuschränken, verwenden Sie den allowed_training_algorithms Parameter, wie hier gezeigt:
# Only search ExponentialSmoothing and ElasticNet models.
forecasting_job.set_training(
allowed_training_algorithms=["ExponentialSmoothing", "ElasticNet"]
)
In diesem Szenario sucht der Prognose-Job nur in den Modellklassen Exponential Smoothing und Elastic Net. Um einen bestimmten Satz von Modellklassen aus dem Suchbereich zu entfernen, verwenden Sie blocked_training_algorithmsdie folgende Abbildung:
# Search over all model classes except Prophet.
forecasting_job.set_training(
blocked_training_algorithms=["Prophet"]
)
Der Job durchsucht alle Modellklassen außer Prophet. Eine Liste der Namen von Prognosemodellen, die in allowed_training_algorithms und blocked_training_algorithms akzeptiert werden, finden Sie unter Trainings-Eigenschaften. Sie können entweder allowed_training_algorithms oder blocked_training_algorithms auf ein Training anwenden, aber nicht beide.
Lernen für tiefe neuronale Netzwerke aktivieren
AutoML wird mit einem angepassten Modell für tiefe neuronale Netze (Deep Neural Network, DNN) mit dem Namen TCNForecaster ausgeliefert. Bei diesem Modell handelt es sich um ein temporales Convolutional-Network (TCN), das gängige Methoden für Bildgebungsaufgaben auf die Modellierung von Zeitreihen anwendet. Eindimensionale „kausale“ Convolutions bilden das Backbone des Netzwerks und ermöglichen es dem Modell, komplexe Muster über lange Zeiträume in der Training Historie zu lernen. Weitere Informationen finden Sie unter Einführung in TCNForecaster.
TCNForecaster erzielt oft eine höhere Genauigkeit als Standard-Zeitreihenmodelle, wenn es tausende oder mehr Beobachtungen in der Trainingshistorie gibt. Allerdings dauert es auch länger, TCNForecaster-Modelle zu trainieren und zu sweepen, da sie eine höhere Kapazität haben.
Sie können den TCNForecaster in AutoML aktivieren, indem Sie die enable_dnn_training Kennzeichnung in der Schulungskonfiguration wie folgt festlegen:
# Include TCNForecaster models in the model search.
forecasting_job.set_training(
enable_dnn_training=True
)
Standardmäßig ist das Training von TCNForecaster auf einen einzelnen Computeknoten und eine einzelne GPU (falls verfügbar) pro Modelltest beschränkt. Für große Datenszenarien empfiehlt es sich, jeden TCNForecaster-Test auf mehrere Kerne/GPUs und Knoten zu verteilen. Weitere Informationen und Code-Beispiele finden Sie unter Verteiltes Training.
Informationen zum Aktivieren von DNN für ein autoML-Experiment, das in Azure Machine Learning Studio erstellt wurde, finden Sie in den Aufgabentypeinstellungen im Studio-UI-Artikel.
Hinweis
- Wenn Sie DNN für mit dem SDK erstellte Experimente aktivieren, sind Erläuterungen des besten Modells deaktiviert.
- DNN-Unterstützung für die Prognose im automatisierten maschinellen Lernen wird für Ausführungen, die in Azure Databricks initiiert werden, nicht unterstützt.
- Es wird empfohlen, GPU-Compute-Tpen zu verwenden, wenn das DNN-Training aktiviert ist.
Funktionen zur Verzögerung und für rollierende Fenster
Aktuelle Werte des Ziels sind häufig wirkungsvolle Features in einem Vorhersagemodell. Dementsprechend kann AutoML Funktionen zur Aggregation mit Zeitverzögerung und rollierende Fenster erstellen, um die Modellgenauigkeit potenziell zu verbessern.
Betrachten Sie ein Szenario zur Vorhersage des Energiebedarfs, in dem Wetterdaten und der historische Bedarf verfügbar sind. Die Tabelle zeigt die resultierende Featureentwicklung, die auftritt, wenn die Fensteraggregation über die letzten drei Stunden angewendet wird. Spalten für minimum, maximum, und sum werden basierend auf den festgelegten Einstellungen in einem rollierenden Fenster von drei Stunden generiert. Für die beobachtung, die am 8. September 2017, 4:00 Uhr gültig ist, werden beispielsweise die Höchst-, Mindest- und Summenwerte mit den Bedarfswerten für den 8. September 2017, 1:00 - 3:00 Uhr berechnet. Dieses drei Stunden umfassende Fenster wird verschoben, um die verbleibenden Zeilen mit Daten aufzufüllen. Weitere Informationen und Beispiele finden Sie unter Verzögerungs-Funktionen für die Prognose von Zeitreihen in AutoML.
Sie können die Funktionen zur Aggregation von Verzögerungen und für rollierende Fenster für das Ziel aktivieren, indem Sie die Größe des rollierenden Fensters und die Verzögerungs-Aufträge festlegen, die Sie erstellen möchten. Die Fenstergröße ist drei im vorherigen Beispiel. Sie können auch Verzögerungen für Features aktivieren, indem Sie die feature_lags Einstellung verwenden. Im folgenden Beispiel werden alle diese Einstellungen auf auto festgelegt, um AutoML anzuweisen, die Einstellungen automatisch durch Analyse der Korrelationsstruktur Ihrer Daten zu bestimmen:
forecasting_job.set_forecast_settings(
..., # Other settings.
target_lags='auto',
target_rolling_window_size='auto',
feature_lags='auto'
)
Verarbeitung kurzer Reihen
AutoML betrachtet eine Zeitreihe als kurze Reihe, wenn es nicht genügend Datenpunkte gibt, um die Phasen Training und Validierung der Modellentwicklung durchzuführen. Weitere Informationen finden Sie unter Anforderungen an die Länge der Trainingsdaten.
AutoML verfügt über mehrere Aktionen, die für kurze Serien ausgeführt werden können. Sie können diese Aktionen mithilfe der short_series_handling_config Einstellung konfigurieren. Standardwert: auto. Die Einstellungen werden in den folgenden Tabellen beschrieben:
| Einstellung | BESCHREIBUNG | Notizen |
|---|---|---|
auto |
Der Standardwert für die Verarbeitung kurzer Reihen. | - Wenn alle Serien kurz sind, ergänzen Sie die Daten. - Wenn nicht alle Serien kurz sind, lassen Sie die kurzen Serien weg. |
pad |
Wenn die Einstellung short_series_handling_config = pad verwendet wird, fügt AutoML jeder gefundenen kurzen Serie Zufallswerte hinzu. AutoML ergänzt die Zielspalte mit White-Noise-Daten. |
Sie können die folgenden Spaltentypen mit dem angegebenen Padding verwenden: - Objektspalten, auffüllen mit NaN. - Numerische Spalten mit 0 (Null) auffüllen. - Boolesche/logische Spalten, auffüllen mit False. |
drop |
Wenn die Einstellung short_series_handling_config = drop verwendet wird, verwirft AutoML die kurze Serie und sie wird nicht für das Training oder die Prognose verwendet. |
Prognosen für diese Serien liefern NaN. |
None |
Es wird keine Serie ergänzt oder ausgelassen. |
Im folgenden Beispiel wird die Verarbeitung kurzer Reihen so festgelegt, dass alle kurzen Reihen auf die Mindestlänge aufgefüllt werden:
forecasting_job.set_forecast_settings(
..., # Other settings.
short_series_handling_config='pad'
)
Vorsicht
Das Ergänzen kann die Genauigkeit des resultierenden Modells beeinträchtigen, da künstliche Daten eingeführt werden, um Fehler beim Training zu vermeiden. Wenn viele der Serien kurz sind, kann dies auch Auswirkungen auf die Erklärbarkeit der Ergebnisse haben.
Aggregation von Häufigkeits- und Zieldaten
Verwenden Sie die Optionen für Häufigkeit und Datenaggregation, um Fehler zu vermeiden, die durch unregelmäßige Daten verursacht werden. Ihre Daten sind unregelmäßig, wenn sie nicht einem festgelegten Zeitrhythmus folgen, z. B. stündlich oder täglich. Point-of-Sales-Daten sind ein gutes Beispiel für unregelmäßige Daten. In diesen Szenarien kann AutoML Ihre Daten auf eine gewünschte Häufigkeit aggregieren und dann ein Prognose-Modell aus den Aggregaten erstellen.
Sie müssen die Einstellungen frequency und target_aggregate_function festlegen, um unregelmäßige Daten zu verarbeiten. Die Häufigkeitseinstellung akzeptiert Pandas DateOffset-Zeichenfolgen als Eingabe. Die folgende Tabelle zeigt die unterstützten Werte für die Aggregationsfunktion:
| Funktion | BESCHREIBUNG |
|---|---|
sum |
Summe der Zielwerte |
mean |
Mittelwert oder Durchschnitt von Zielwerten |
min |
Minimalwert eines Ziels |
max |
Maximalwert eines Ziels |
AutoML wendet die Aggregation für die folgenden Spalten an:
| Column | Aggregationsmethode |
|---|---|
| Numerische Prädiktoren | AutoML verwendet die sum-, mean-, min- und max-Funktionen. Es generiert neue Spalten. Jeder Spaltenname enthält ein Suffix, das den Namen der Aggregationsfunktion identifiziert, die auf die Spaltenwerte angewendet wird. |
| Kategoriale Prädiktoren | AutoML verwendet den Wert des Parameters forecast_mode zur Aggregation der Daten. Das ist die prominenteste Kategorie im Fenster. Weitere Informationen finden Sie in den Beschreibungen des Parameters in den Abschnitten "Viele Modelle" und " HTS-Pipeline ". |
| Daten-Prädiktoren | AutoML verwendet die Einstellungen für den minimalen Zielwert (min), den maximalen Zielwert (max) und den Parameter forecast_mode, um die Daten zu aggregieren. |
| Ziel | AutoML aggregiert die Werte gemäß der angegebenen Operation. In der Regel ist die sum-Funktion für die meisten Szenarien geeignet. |
Im folgenden Beispiel wird die Häufigkeit auf stündlich und die Aggregationsfunktion auf Summierung festgelegt:
# Aggregate the data to hourly frequency.
forecasting_job.set_forecast_settings(
..., # Other settings.
frequency='H',
target_aggregate_function='sum'
)
Benutzerdefinierte Einstellungen für die Kreuzvalidierung
Es gibt zwei anpassbare Einstellungen, die die Kreuzvalidierung für Prognose-Jobs. Passen Sie die Anzahl der Faltungen mithilfe des n_cross_validations-Parameters an, und konfigurieren Sie den cv_step_size Parameter, um den Zeitversatz zwischen Faltungen zu definieren. Weitere Informationen finden Sie unter Auswahl des Prognosemodells.
Standardmäßig legt AutoML beide Einstellungen automatisch anhand der Merkmale Ihrer Daten fest. Fortgeschrittene Benutzer möchten sie möglicherweise manuell festlegen. Angenommen, Sie verfügen über tägliche Verkaufsdaten und möchten, dass Ihr Validierungssetup aus fünf Faltungen mit einem Sieben-Tage-Versatz zwischen benachbarten Faltungen bestehen soll. Das folgende Code-Beispiel zeigt, wie Sie diese Werte festlegen:
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
)
Benutzerdefinierte Featurisierung
Standardmäßig erweitert AutoML Trainingsdaten mit technischen Features, um die Genauigkeit der Modelle zu erhöhen. Weitere Informationen finden Sie unter Automatisiertes Feature engineering. Sie können einige der Vorverarbeitungsschritte anpassen, indem Sie die Featurisierungskonfiguration des Prognoseauftrags verwenden.
In der folgenden Tabelle finden Sie eine Liste der unterstützten Anpassungen für die Prognose:
| Anpassung | BESCHREIBUNG | Tastatur |
|---|---|---|
| Aktualisierung des Spaltenzwecks | Außerkraftsetzen des automatisch erkannten Featuretyps für die angegebene Spalte. |
categorical, dateTimenumeric |
| Aktualisierung von Transformationsparametern | Aktualisieren der Parameter für den angegebenen Imputer. |
{"strategy": "constant", "fill_value": <value>}, {"strategy": "median"}{"strategy": "ffill"} |
Nehmen wir zum Beispiel an, Sie haben einen Bedarf im Einzelhandel, bei dem die Daten Preise, ein on sale-Flag und einen Produkttyp enthalten. Das folgende Beispiel zeigt, wie Sie angepasste Typen und Imputer für diese Funktionen festlegen können:
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 product_type feature is interpreted as categorical.
forecasting_job.set_featurization(
mode="custom",
transformer_params=transformer_params,
column_name_and_types={"product_type": "Categorical"},
)
Wenn Sie Azure Machine Learning Studio für Ihr Experiment verwenden, lesen Sie Konfigurieren von Funktionseinstellungen in Studio.
Prognoseauftrag übermitteln
Nachdem Sie alle Einstellungen festgelegt haben, sind Sie bereit, den Prognose-Job auszuführen. Das folgende Beispiel veranschaulicht diesen Vorgang.
# 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 job in the studio UI.
returned_job.services["Studio"].endpoint
Nachdem Sie den Job gesendet haben, stellt AutoML die Ressourcen bereit, wendet die Funktionalitäten und andere Vorbereitungsschritte auf die Eingabedaten an und beginnt mit der Durchsicht der Prognosemodelle. Weitere Informationen finden Sie unter Prognose-Methodik in AutoML und Modellsweeping und Auswahl für Prognose in AutoML.
Koordinieren von Schulungen, Rückschlüssen und Auswertungen mithilfe von Komponenten und Pipelines
Ihr Maschineller Lernworkflow erfordert wahrscheinlich mehr als nur Schulungen. Ableitung oder Abruf von Modellprognosen für neuere Daten und Evaluierung der Modellgenauigkeit auf einem Testset mit bekannten Zielwerten sind weitere gängige Aufgaben, die Sie in Azure Machine Learning zusammen mit Trainingsjobs orchestrieren können. Zur Unterstützung von Ableitungs- und Evaluierungsaufgaben bietet Azure Machine Learning Komponenten, bei denen es sich um in sich geschlossene Code-Teile handelt, die einen Schritt in einer Azure Machine Learning Pipeline ausführen.
Im folgenden Beispiel werden Komponentencode aus einer Clientregistrierung abgerufen:
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential
# Get credential to access azureml registry.
try:
credential = DefaultAzureCredential()
# Check if token can be obtained successfully.
credential.get_token("https://management.azure.com/.default")
except Exception as ex:
# Fall back to InteractiveBrowserCredential in case DefaultAzureCredential fails.
credential = InteractiveBrowserCredential()
# Create client to access assets in azureml-preview registry.
ml_client_registry = MLClient(
credential=credential,
registry_name="azureml-preview"
)
# Create client to access assets in azureml registry.
ml_client_metrics_registry = MLClient(
credential=credential,
registry_name="azureml"
)
# Get inference component from registry.
inference_component = ml_client_registry.components.get(
name="automl_forecasting_inference",
label="latest"
)
# Get component to compute evaluation metrics from registry.
compute_metrics_component = ml_client_metrics_registry.components.get(
name="compute_metrics",
label="latest"
)
Als Nächstes definieren Sie eine Factory-Funktion, die Pipelines erstellt, die Training, Ableitung und Metrik-Berechnung orchestrieren. Weitere Informationen finden Sie unter Konfigurieren des Experiments.
from azure.ai.ml import automl
from azure.ai.ml.constants import AssetTypes
from azure.ai.ml.dsl import pipeline
@pipeline(description="AutoML Forecasting Pipeline")
def forecasting_train_and_evaluate_factory(
train_data_input,
test_data_input,
target_column_name,
time_column_name,
forecast_horizon,
primary_metric='normalized_root_mean_squared_error',
cv_folds='auto'
):
# Configure training node of pipeline.
training_node = automl.forecasting(
training_data=train_data_input,
target_column_name=target_column_name,
primary_metric=primary_metric,
n_cross_validations=cv_folds,
outputs={"best_model": Output(type=AssetTypes.MLFLOW_MODEL)},
)
training_node.set_forecasting_settings(
time_column_name=time_column_name,
forecast_horizon=max_horizon,
frequency=frequency,
# Other settings.
...
)
training_node.set_training(
# Training parameters.
...
)
training_node.set_limits(
# Limit settings.
...
)
# Configure inference node to make rolling forecasts on test set.
inference_node = inference_component(
test_data=test_data_input,
model_path=training_node.outputs.best_model,
target_column_name=target_column_name,
forecast_mode='rolling',
step=1
)
# Configure metrics calculation node.
compute_metrics_node = compute_metrics_component(
task="tabular-forecasting",
ground_truth=inference_node.outputs.inference_output_file,
prediction=inference_node.outputs.inference_output_file,
evaluation_config=inference_node.outputs.evaluation_config_output_file
)
# Return dictionary with evaluation metrics and raw test set forecasts.
return {
"metrics_result": compute_metrics_node.outputs.evaluation_result,
"rolling_fcst_result": inference_node.outputs.inference_output_file
}
Definieren Sie die Eingaben für Training und Testdaten in den lokalen Ordnern ./train_data und ./test_data.
my_train_data_input = Input(
type=AssetTypes.MLTABLE,
path="./train_data"
)
my_test_data_input = Input(
type=AssetTypes.URI_FOLDER,
path='./test_data',
)
Erstellen Sie schließlich die Pipeline, legen Sie ihren Standard-Compute-Cluster fest und senden Sie den Job:
pipeline_job = forecasting_train_and_evaluate_factory(
my_train_data_input,
my_test_data_input,
target_column_name,
time_column_name,
forecast_horizon
)
# Set pipeline-level compute.
pipeline_job.settings.default_compute = compute_name
# Submit pipeline job.
returned_pipeline_job = ml_client.jobs.create_or_update(
pipeline_job,
experiment_name=experiment_name
)
returned_pipeline_job
Nachdem Sie die Anfrage zur Ausführung gesendet haben, führt die Pipeline nacheinander das AutoML-Training, die rollierende Evaluierung, die Ableitung und die Berechnung der Metrik aus. Sie können die Ausführung in der Studio-Benutzeroberfläche überwachen und überprüfen. Wenn die Ausführung abgeschlossen ist, können Sie die rollierenden Prognosen und die Metriken für die Evaluierung in Ihr lokales Arbeitsverzeichnis herunterladen:
# Download metrics JSON.
ml_client.jobs.download(returned_pipeline_job.name, download_path=".", output_name='metrics_result')
# Download rolling forecasts.
ml_client.jobs.download(returned_pipeline_job.name, download_path=".", output_name='rolling_fcst_result')
Sie können die Ausgabe an den folgenden Stellen überprüfen:
- Metriken: ./named-outputs/metrics_results/evaluationResult/metrics.json
- Prognosen: ./named-outputs/rolling_fcst_result/inference_output_file (JSON-Zeilen-Format)
Weitere Informationen zur rollierenden Evaluierung finden Sie unter Ableitung und Evaluierung von Prognosemodellen.
Prognosen im großen Maßstab: Many models
Mit den Komponenten mit vielen Modellen in AutoML können Sie Millionen von Modellen parallel trainieren und verwalten. Weitere Informationen finden Sie unter "Viele Modelle".
Schulungskonfiguration für viele Modelle
Die Schulungskomponente für viele Modelle akzeptiert eine YAML-Formatkonfigurationsdatei der AutoML-Schulungseinstellungen. Die Komponente wendet diese Einstellungen auf jede autoML-Instanz an, die gestartet wird. Die YAML-Datei hat die gleiche Spezifikation wie der Prognosebefehl-Auftrag, plus die Parameter partition_column_names und allow_multi_partitions.
| Parameter | BESCHREIBUNG |
|---|---|
partition_column_names |
Spaltennamen in den Daten, die, wenn sie gruppiert sind, die Datenpartitionen definieren. Die Schulungskomponente mit vielen Modellen startet einen unabhängigen Schulungsauftrag auf jeder Partition. |
allow_multi_partitions |
Ein optionales Flag, das das Training eines Modells pro Partition ermöglicht, wenn jede Partition mehr als eine eindeutige Zeitreihe enthält. Standardwert: false. |
Hier ist eine Beispiel-YAML-Konfiguration:
$schema: https://azuremlsdk2.blob.core.windows.net/preview/0.0.1/autoMLJob.schema.json
type: automl
description: A time-series forecasting job config
compute: azureml:<cluster-name>
task: forecasting
primary_metric: normalized_root_mean_squared_error
target_column_name: sales
n_cross_validations: 3
forecasting:
time_column_name: date
time_series_id_column_names: ["state", "store"]
forecast_horizon: 28
training:
blocked_training_algorithms: ["ExtremeRandomTrees"]
limits:
timeout_minutes: 15
max_trials: 10
max_concurrent_trials: 4
max_cores_per_trial: -1
trial_timeout_minutes: 15
enable_early_termination: true
partition_column_names: ["state", "store"]
allow_multi_partitions: false
In nachfolgenden Beispielen wird die Konfiguration unter dem Pfad "./automl_settings_mm.yml" gespeichert.
Pipeline mit vielen Modellen
Als nächstes definieren Sie eine Factory-Funktion, die Pipelines für die Orchestrierung des Trainings, der Ableitung und der Berechnung von Metriken für viele Modelle erstellt. In der folgenden Tabelle werden die Parameter für diese Factory-Funktion beschrieben:
| Parameter | BESCHREIBUNG |
|---|---|
max_nodes |
Anzahl der Compute-Knoten, die für den Training-Job verwendet werden sollen. |
max_concurrency_per_node |
Anzahl der AutoML-Prozesse, die auf jedem Knoten ausgeführt werden. Die Gesamtparallelität eines Many-Models-Jobs ist max_nodes * max_concurrency_per_node. |
parallel_step_timeout_in_seconds |
Bei vielen Modellen ist das Komponenten-Timeout in Sekunden angegeben. |
retrain_failed_models |
Flag zum Aktivieren der Trainingswiederholung für fehlgeschlagene Modelle. Dieser Wert ist hilfreich, wenn Sie zuvor Läufe mit vielen Modellen durchgeführt haben, die zu fehlgeschlagenen AutoML-Aufträgen für einige Datenpartitionen geführt haben. Wenn Sie dieses Flag aktivieren, führen Many Models nur Trainingsjobs für zuvor fehlgeschlagene Partitionen aus. |
forecast_mode |
Rückschlussmodus für die Modellauswertung. Gültige Werte sind recursive (Standard) und rolling. Weitere Informationen finden Sie unter Ableitung und Evaluierung von Prognosemodellen und der Referenz ManyModelsInferenceParameters-Klasse. |
step |
Schrittgröße für rollierende Prognose. Der Standardwert ist 1. Weitere Informationen finden Sie unter Ableitung und Evaluierung von Prognosemodellen und der Referenz ManyModelsInferenceParameters-Klasse. |
Im folgenden Beispiel wird eine Factory-Methode für die Konstruktion von Trainings- und Bewertungs-Pipelines für mehrere Modelle veranschaulicht:
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential
# Get credential to access azureml registry.
try:
credential = DefaultAzureCredential()
# Check whether token can be obtained.
credential.get_token("https://management.azure.com/.default")
except Exception as ex:
# Fall back to InteractiveBrowserCredential if DefaultAzureCredential fails.
credential = InteractiveBrowserCredential()
# Get many-models training component.
mm_train_component = ml_client_registry.components.get(
name='automl_many_models_training',
version='latest'
)
# Get many-models inference component.
mm_inference_component = ml_client_registry.components.get(
name='automl_many_models_inference',
version='latest'
)
# Get component to compute evaluation metrics.
compute_metrics_component = ml_client_metrics_registry.components.get(
name="compute_metrics",
label="latest"
)
@pipeline(description="AutoML Many Models Forecasting Pipeline")
def many_models_train_evaluate_factory(
train_data_input,
test_data_input,
automl_config_input,
compute_name,
max_concurrency_per_node=4,
parallel_step_timeout_in_seconds=3700,
max_nodes=4,
retrain_failed_model=False,
forecast_mode="rolling",
forecast_step=1
):
mm_train_node = mm_train_component(
raw_data=train_data_input,
automl_config=automl_config_input,
max_nodes=max_nodes,
max_concurrency_per_node=max_concurrency_per_node,
parallel_step_timeout_in_seconds=parallel_step_timeout_in_seconds,
retrain_failed_model=retrain_failed_model,
compute_name=compute_name
)
mm_inference_node = mm_inference_component(
raw_data=test_data_input,
max_nodes=max_nodes,
max_concurrency_per_node=max_concurrency_per_node,
parallel_step_timeout_in_seconds=parallel_step_timeout_in_seconds,
optional_train_metadata=mm_train_node.outputs.run_output,
forecast_mode=forecast_mode,
step=forecast_step,
compute_name=compute_name
)
compute_metrics_node = compute_metrics_component(
task="tabular-forecasting",
prediction=mm_inference_node.outputs.evaluation_data,
ground_truth=mm_inference_node.outputs.evaluation_data,
evaluation_config=mm_inference_node.outputs.evaluation_configs
)
# Return metrics results from rolling evaluation.
return {
"metrics_result": compute_metrics_node.outputs.evaluation_result
}
Konstruieren Sie die Pipeline mit der Factory-Funktion. Die Schulungs- und Testdaten befinden sich in den lokalen Ordnern ./data/train und ./data/test. Legen Sie schließlich den Standard-Compute-Cluster fest und senden Sie den Job wie im folgenden Beispiel gezeigt:
pipeline_job = many_models_train_evaluate_factory(
train_data_input=Input(
type="uri_folder",
path="./data/train"
),
test_data_input=Input(
type="uri_folder",
path="./data/test"
),
automl_config=Input(
type="uri_file",
path="./automl_settings_mm.yml"
),
compute_name="<cluster name>"
)
pipeline_job.settings.default_compute = "<cluster name>"
returned_pipeline_job = ml_client.jobs.create_or_update(
pipeline_job,
experiment_name=experiment_name,
)
ml_client.jobs.stream(returned_pipeline_job.name)
Nachdem der Auftrag abgeschlossen ist, können Sie die Auswertungsmetriken lokal herunterladen, indem Sie das Verfahren in der Pipeline für einzelne Schulungsausführungen verwenden.
Ein ausführlicheres Beispiel finden Sie im Notizbuch "Bedarfsvorhersage mithilfe vieler Modelle".
Überlegungen zur Schulung für einen Mehrmodelllauf
Die Schulungs- und Ableitungskomponenten für viele Modelle partitionieren Ihre Daten bedingt gemäß der
partition_column_namesEinstellung. Dieser Prozess führt dazu, dass jede Partition in einer eigenen Datei steht. Der Prozess kann langsam oder fehlschlagen, wenn Sie viele Daten haben. Es wird empfohlen, Ihre Daten manuell zu partitionieren, bevor Sie ein Training für viele Modelle oder Inferenzen durchführen.Während der Schulung mit vielen Modellen werden Modelle automatisch im Arbeitsbereich registriert, sodass keine manuelle Registrierung von Modellen erforderlich ist. Modelle werden basierend auf der Partition benannt, auf der sie trainiert wurden, und diese Namen können nicht angepasst werden. Tags können auch nicht angepasst werden. Diese Eigenschaften werden verwendet, um Modelle während der Ableitung automatisch zu erkennen.
Die Bereitstellung einzelner Modelle ist nicht skalierbar, Sie können jedoch verwenden
PipelineComponentBatchDeployment, um den Bereitstellungsprozess zu vereinfachen. Ein Beispiel finden Sie im Notizbuch "Demand Forecasting by Using Many Models".Während der Ableitung werden geeignete Modelle (die neueste Version) automatisch basierend auf der Partition ausgewählt, die in den Ableitungsdaten gesendet wurde. Wenn Sie
training_experiment_nameverwenden, wird standardmäßig das neueste Modell genutzt, aber Sie können dieses Verhalten außer Kraft setzen, um Modelle aus einem bestimmten Trainingslauf auszuwählen, indem Sie auchtrain_run_idbereitstellen.
Hinweis
Die Standardmäßige Parallelitätsgrenze für viele Modelle, die in einem Abonnement ausgeführt werden, beträgt 320. Wenn Ihr Workload ein höheres Limit erfordert, können Sie sich an den Microsoft Support wenden.
Prognose im großen Maßstab: Hierarchische Zeitreihen
Mit den hierarchischen Zeitreihenkomponenten (HTS) in AutoML können Sie eine große Anzahl von Modellen für Daten trainieren, die sich in einer hierarchischen Struktur befinden. Weitere Informationen finden Sie unter Hierarchische Zeitreihenvorhersage.
HTS-Trainingskonfiguration
Die HTS-Trainingskomponente akzeptiert eine Konfigurationsdatei im YAML-Format mit AutoML-Trainingseinstellungen. Die Komponente wendet diese Einstellungen auf jede ausgeführte AutoML-Instanz an. Diese YAML-Datei hat dieselbe Spezifikation wie der Prognosebefehlsauftrag, enthält jedoch andere Parameter, die mit den Hierarchieinformationen zusammenhängen:
| Parameter | BESCHREIBUNG |
|---|---|
hierarchy_column_names |
Eine Liste von Spaltennamen in den Daten, die die hierarchische Struktur der Daten definieren. Die Reihenfolge der Spalten in dieser Liste bestimmt die Hierarchieebenen. Der Grad der Aggregation nimmt mit dem Listenindex ab. Das heißt, die letzte Spalte in der Liste definiert das Leaf-Ebene, bzw. die am stärksten disaggregierte Ebene der Hierarchie. |
hierarchy_training_level |
Die Hierarchieebene, die für das Training des Vorhersagemodells verwendet werden soll. |
Hier ist eine Beispiel-YAML-Konfiguration:
$schema: https://azuremlsdk2.blob.core.windows.net/preview/0.0.1/autoMLJob.schema.json
type: automl
description: A time-series forecasting job config
compute: azureml:cluster-name
task: forecasting
primary_metric: normalized_root_mean_squared_error
log_verbosity: info
target_column_name: sales
n_cross_validations: 3
forecasting:
time_column_name: "date"
time_series_id_column_names: ["state", "store", "SKU"]
forecast_horizon: 28
training:
blocked_training_algorithms: ["ExtremeRandomTrees"]
limits:
timeout_minutes: 15
max_trials: 10
max_concurrent_trials: 4
max_cores_per_trial: -1
trial_timeout_minutes: 15
enable_early_termination: true
hierarchy_column_names: ["state", "store", "SKU"]
hierarchy_training_level: "store"
In nachfolgenden Beispielen wird die Konfiguration unter dem Pfad "./automl_settings_hts.yml" gespeichert.
HTS-Pipeline
Als nächstes definieren Sie eine Factory-Funktion, die Pipelines für die Orchestrierung von HTS-Training, Ableitung und Metrik-Berechnung erstellt. In der folgenden Tabelle werden die Parameter für diese Factory-Funktion beschrieben:
| Parameter | BESCHREIBUNG |
|---|---|
forecast_level |
Die Ebene der Hierarchie, für die Prognosen abgerufen werden sollen. |
allocation_method |
Die Zuordnungsmethode, die verwendet werden soll, wenn Prognosen aggregiert werden. Gültige Werte sind proportions_of_historical_average und average_historical_proportions. |
max_nodes |
Die Anzahl der Computeknoten, die im Schulungsauftrag verwendet werden sollen. |
max_concurrency_per_node |
Die Anzahl der AutoML-Prozesse, die auf jedem Knoten ausgeführt werden sollen. Die gesamte Parallelität eines HTS-Jobs ist max_nodes * max_concurrency_per_node. |
parallel_step_timeout_in_seconds |
Das Zeitlimit für Komponenten mit vielen Modellen, das in Sekunden angegeben ist. |
forecast_mode |
Der Rückschlussmodus für die Modellauswertung. Gültige Werte sind recursive und rolling. Weitere Informationen finden Sie unter Ableitung und Evaluierung von Prognosemodellen und der Referenz HTSInferenceParameters-Klasse. |
step |
Die Schrittweite für die rollierende Prognose. Der Standardwert ist 1. Weitere Informationen finden Sie unter Ableitung und Evaluierung von Prognosemodellen und der Referenz HTSInferenceParameters-Klasse. |
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential
# Get credential to access azureml registry.
try:
credential = DefaultAzureCredential()
# Check whether token can be obtained.
credential.get_token("https://management.azure.com/.default")
except Exception as ex:
# Fall back to InteractiveBrowserCredential if DefaultAzureCredential fails.
credential = InteractiveBrowserCredential()
# Get HTS training component.
hts_train_component = ml_client_registry.components.get(
name='automl_hts_training',
version='latest'
)
# Get HTS inference component.
hts_inference_component = ml_client_registry.components.get(
name='automl_hts_inference',
version='latest'
)
# Get component to compute evaluation metrics.
compute_metrics_component = ml_client_metrics_registry.components.get(
name="compute_metrics",
label="latest"
)
@pipeline(description="AutoML HTS Forecasting Pipeline")
def hts_train_evaluate_factory(
train_data_input,
test_data_input,
automl_config_input,
max_concurrency_per_node=4,
parallel_step_timeout_in_seconds=3700,
max_nodes=4,
forecast_mode="rolling",
forecast_step=1,
forecast_level="SKU",
allocation_method='proportions_of_historical_average'
):
hts_train = hts_train_component(
raw_data=train_data_input,
automl_config=automl_config_input,
max_concurrency_per_node=max_concurrency_per_node,
parallel_step_timeout_in_seconds=parallel_step_timeout_in_seconds,
max_nodes=max_nodes
)
hts_inference = hts_inference_component(
raw_data=test_data_input,
max_nodes=max_nodes,
max_concurrency_per_node=max_concurrency_per_node,
parallel_step_timeout_in_seconds=parallel_step_timeout_in_seconds,
optional_train_metadata=hts_train.outputs.run_output,
forecast_level=forecast_level,
allocation_method=allocation_method,
forecast_mode=forecast_mode,
step=forecast_step
)
compute_metrics_node = compute_metrics_component(
task="tabular-forecasting",
prediction=hts_inference.outputs.evaluation_data,
ground_truth=hts_inference.outputs.evaluation_data,
evaluation_config=hts_inference.outputs.evaluation_configs
)
# Return metrics results from rolling evaluation.
return {
"metrics_result": compute_metrics_node.outputs.evaluation_result
}
Konstruieren Sie die Pipeline mit Hilfe der Factory-Funktion. Die Schulungs- und Testdaten befinden sich in den lokalen Ordnern ./data/train und ./data/test. Legen Sie schließlich den Standard-Compute-Cluster fest und senden Sie den Job wie im folgenden Beispiel gezeigt:
pipeline_job = hts_train_evaluate_factory(
train_data_input=Input(
type="uri_folder",
path="./data/train"
),
test_data_input=Input(
type="uri_folder",
path="./data/test"
),
automl_config=Input(
type="uri_file",
path="./automl_settings_hts.yml"
)
)
pipeline_job.settings.default_compute = "cluster-name"
returned_pipeline_job = ml_client.jobs.create_or_update(
pipeline_job,
experiment_name=experiment_name,
)
ml_client.jobs.stream(returned_pipeline_job.name)
Nachdem der Auftrag abgeschlossen ist, können Sie die Auswertungsmetriken lokal herunterladen, indem Sie das Verfahren in der Pipeline für einzelne Schulungsausführungen verwenden.
Ein ausführlicheres Beispiel finden Sie im Notizbuch "Bedarfsvorhersage mit HTS".
Überlegungen zum Training für eine HTS-Ausführung
Die HTS-Schulung und -Ableitungskomponenten partitionieren Ihre Daten bedingt gemäß der hierarchy_column_names Einstellung, sodass sich jede Partition in einer eigenen Datei befindet. Dieser Vorgang kann langsam oder fehlschlagen, wenn Sie viele Daten haben. Es wird empfohlen, Ihre Daten manuell zu partitionieren, bevor Sie HTS-Training oder -Inference durchführen.
Hinweis
Der Standardmäßige Parallelitätsgrenzwert für eine HTS,die in einem Abonnement ausgeführt wird, beträgt 320. Wenn Ihr Workload ein höheres Limit erfordert, können Sie sich an den Microsoft Support wenden.
Prognose in großem Maßstab: Verteiltes DNN-Training
Wie bereits in diesem Artikel beschrieben, können Sie Lernen für tiefe neuronale Netzwerke (DNN) aktivieren. Wie das verteilte Training für DNN-Prognosen funktioniert, erfahren Sie unter Verteiltes Training für tiefe neuronale Netze (Vorschau).
Für Szenarien, die große Datenmengen erfordern, ist eine verteilte Schulung mit AutoML für einen begrenzten Satz von Modellen verfügbar. Weitere Informationen und Code-Beispiele finden Sie in AutoML im großen Maßstab: Verteiltes Training.
Beispiel-Notebooks entdecken
Detaillierte Code-Beispiele, die fortgeschrittene Prognosen-Konfigurationen demonstrieren, sind im AutoML Forecasting Sample Notebooks GitHub-Repository verfügbar. Hier sind einige der Beispiel-Notebooks:
- Erstellen einer Bedarfsprognosepipeline (HTS und viele Modelle)
- Trainieren des TCNForecaster (DNN)-Modells auf GitHub-Dataset
- Prognose mit Erkennung von Feiertagen und Funktionen (Bike-Sharing-Dataset)
- Manuelle Konfiguration der Aggregation von Verzögerungen und rollierenden Fenstern