Funktionsweise von Azure Databricks AutoML

In diesem Artikel wird die Funktionsweise von Azure Databricks AutoML erläutert sowie die Implementierung von Konzepten wie Imputation (Ergänzung) fehlender Werte und Sampling großer Daten.

Databricks AutoML führt Folgendes aus:

  1. Es bereitet das Dataset für das Modelltraining vor. Beispielsweise führt AutoML vor dem Modelltraining eine ungleichgewichtige Datenerkennung für Klassifizierungsprobleme durch.
  2. Es durchläuft zum Training und Optimieren mehrere Modelle, wobei jedes Modell aus Open Source-Komponenten erstellt wird und problemlos bearbeitet und in Ihre Machine Learning-Pipelines integriert werden kann.
    • AutoML verteilt automatisch Testversionen zur Hyperparameteroptimierung auf die Workerknoten eines Clusters.
    • Mit Databricks Runtime 9.1 LTS ML oder höher erstellt AutoML automatisch Stichproben für Ihr Dataset, wenn es zu groß ist, um in den Arbeitsspeicher eines einzelnen Workerknotens zu passen. Siehe Stichprobenentnahme großer Datasets.
  3. Es evaluiert Modelle basierend auf Algorithmen aus den Paketen scikit-learn, xgboost, LightGBM, Prophet und ARIMA.
  4. Es zeigt die Ergebnisse an, und es wird ein Python-Notebook für jeden Testlauf bereitgestellt, damit Sie den Code überprüfen, reproduzieren und ändern können. Darüber hinaus werden von AutoML auch zusammenfassende Statistiken für Ihr Dataset berechnet. Diese Informationen werden in einem Notebook gespeichert, das Sie dann später überprüfen können.

AutoML-Algorithmen

Databricks AutoML trainiert und wertet Modelle basierend auf den Algorithmen in der folgenden Tabelle aus.

Hinweis

Für Klassifizierungs- und Regressionsmodelle basieren die Entscheidungsstruktur, zufällige Gesamtstrukturen, logistische Regression und lineare Regression mit stochastischen Gradientenabstiegsalgorithmen auf scikit-learn.

Klassifizierungsmodelle Regressionsmodelle Vorhersagemodelle
Entscheidungsstrukturen Entscheidungsstrukturen Prophet
Random Forests Random Forests Auto-ARIMA (Verfügbar in Databricks Runtime 10.3 ML und höher.)
Logistische Regression Lineare Regression mit stochastischem Gradientenverfahren
XGBoost XGBoost
LightGBM LightGBM

Unterstützte Datenmerkmalstypen

Merkmalstypen, die unten nicht aufgeführt sind, werden nicht unterstützt. Bilder werden beispielsweise nicht unterstützt.

Die folgenden Merkmalstypen werden unterstützt:

  • Numerisch (ByteType, ShortType, IntegerType, LongType, FloatType und DoubleType)
  • Boolean
  • Zeichenfolge (kategorischer oder englischer Text)
  • Zeitstempel (TimestampType, DateType)
  • ArrayType[Numeric] (Databricks Runtime 10.4 LTS ML und höher)
  • DecimalType (Databricks Runtime 11.3 LTS ML und höher)

Aufteilen der Daten in Trainings-/Validierungs-/Testsätze

Bei Databricks Runtime 10.4 LTS ML und höher können Sie eine Zeitspalte angeben, die für die Aufteilung in Trainings-, Validierungs- und Testdaten bei Klassifizierungs- und Regressionsproblemen verwendet werden soll. Wenn Sie diese Spalte angeben, wird das Dataset nach Zeit in Trainings-, Validierungs- und Testmengen aufgeteilt. Die frühesten Punkte werden für das Training verwendet, die nächstfrüheren für die Validierung und die neuesten Punkte werden als Testmenge verwendet. Die Zeitspalte muss eine Zeitstempel-, Zeichenfolgen- oder Integerspalte sein.

Sampling großer Datasets

Hinweis

Die Stichprobenentnahme wird nicht auf Vorhersageprobleme angewendet.

Obwohl AutoML Tests zur Hyperparameteroptimierung auf die Workerknoten eines Clusters verteilt, wird jedes Modell auf einem einzelnen Workerknoten trainiert.

AutoML schätzt automatisch den Speicherbedarf für das Laden und Trainieren Ihres Datasets und nimmt bei Bedarf Stichproben aus dem Dataset.

In Databricks Runtime 9.1 LTS ML bis Databricks Runtime 10.4 LTS ML hängt der Stichprobenanteil nicht vom Typ des Clusterknotens oder der Menge des Arbeitsspeichers auf jedem Knoten ab.

In Databricks Runtime 11.x ML:

  • Der Stichprobenanteil erhöht sich für Workerknoten mit mehr Arbeitsspeicher pro Kern. Sie können den Umfang der Stichprobe erhöhen, indem Sie einen arbeitsspeicheroptimierten Instanztyp auswählen.
  • Sie können den Umfang der Stichprobe auch erhöhen, indem Sie für spark.task.cpus in der Spark-Konfiguration einen größeren Wert für den Cluster auswählen. Die Standardeinstellung ist 1, der Maximalwert ist die Anzahl der CPUs im Workerknoten. Wenn Sie diesen Wert erhöhen, ist der Umfang der Stichprobe größer, aber es werden weniger Testversionen parallel ausgeführt. In einem Computer mit 4 Kernen und insgesamt 64 GB RAM führt die Standardeinstellung spark.task.cpus=1 4 Testversionen pro Worker aus, wobei jede Testversion auf 16 GB RAM beschränkt ist. Wenn Sie spark.task.cpus=4 festlegen, führt jeder Worker nur eine Testversion aus, aber diese Testversion kann 64 GB RAM verwenden.

In Databricks Runtime 12.2 LTS ML und höher kann AutoML (automatisiertes maschinelles Lernen) mit größeren Datasets trainieren, indem mehr CPU-Kerne pro Trainingsaufgabe zugeteilt werden. Sie können die Stichprobengröße erhöhen, indem Sie eine Instanzgröße mit größerem Gesamtsarbeitsspeicher wählen.

Wenn in Databricks Runtime 11.3 LTS ML von AutoML Stichproben des Datasets entnommen wurden, wird der Stichprobenanteil auf der Benutzeroberfläche auf der Registerkarte Übersicht angezeigt.

Bei Klassifizierungsproblemen verwendet AutoML die PySpark sampleBy-Methode für geschichtete Stichproben, um die Verteilung der Zielbezeichnung beizubehalten.

Bei Regressionsproblemen verwendet AutoML die sample-Methode.

Unterstützung unausgewogener Datasets bei Klassifizierungsproblemen

Wenn AutoML in Databricks Runtime 11.3 LTS ML und höher erkennt, dass ein Dataset unausgeglichen ist, versucht es, die Unausgeglichenheit des Trainingsdatasets zu reduzieren, indem es ein Downsampling für die Hauptklassen durchführt und Klassengewichtungen hinzufügt. Automatisiertes ML gleicht nur das Trainingsdataset aus, nicht aber die Test- und Validierungsdatasets. Dadurch wird sichergestellt, dass die Modellleistung immer für das nicht angereicherte Dataset mit der tatsächlichen Eingabeklassenverteilung ausgewertet wird.

Um ein unausgeglichenes Trainingsdataset auszugleichen, verwendet automatisiertes ML Klassengewichtungen, die umgekehrt proportional zum Downsamplinggrad einer bestimmten Klasse sind. Wenn also beispielsweise ein Trainingsdataset mit insgesamt 100 Beispielen 95 Stichproben der Klasse A und fünf Stichproben der Klasse B enthält, wird dieses Ungleichgewicht durch automatisiertes ML verringert, indem die Klasse A mittels Downsampling auf 70 Stichproben reduziert wird, was einem Downsamplingverhältnis für die Klasse A von 70/95 oder 0,736 entspricht. Die Anzahl von Stichproben in Klasse B bleibt dagegen bei fünf. Um sicherzustellen, dass das endgültige Modell ordnungsgemäß kalibriert ist und die Wahrscheinlichkeitsverteilung der Modellausgabe der Wahrscheinlichkeitsverteilung der Eingabe entspricht, skaliert automatisiertes ML die Klassengewichtung für die Klasse A um das Verhältnis 1/0,736 oder 1,358. Die Gewichtung der Klasse B ist hingegen weiterhin 1. Anschließend verwendet automatisiertes ML diese Klassengewichtungen im Modelltraining als Parameter, um sicherzustellen, dass die Stichproben aus den einzelnen Klassen beim Trainieren des Modells entsprechend gewichtet werden.

Semantische Typerkennung

Hinweis

  • Die semantische Typerkennung wird nicht auf Vorhersageprobleme angewendet.
  • AutoML führt keine semantische Typerkennung für Spalten durch, für die benutzerdefinierte Imputationsmethoden angegeben sind.

Mit Databricks Runtime 9.1 LTS ML und höher versucht AutoML zu erkennen, ob Spalten einen semantischen Typ aufweisen, der sich vom Spark- oder Pandas-Datentyp im Tabellenschema unterscheidet. AutoML behandelt diese Spalten als erkannten semantischen Typ. Diese Erkennung wird bestmöglich durchgeführt und kann in einigen Fällen das Vorhandensein semantischer Typen übersehen. Sie können den semantischen Typ einer Spalte auch manuell festlegen oder AutoML anweisen, die semantische Typerkennung nicht mithilfe von Anmerkungen auf eine Spalte anzuwenden.

AutoML nimmt insbesondere die folgenden Anpassungen vor:

  • Zeichenfolgen- und Integer-Spalten, die Datums- oder Zeitstempeldaten darstellen, werden als Zeitstempeltyp behandelt.
  • Zeichenfolgenspalten, die numerische Daten darstellen, werden als numerischer Typ behandelt.

Bei Databricks Runtime 10.1 ML und höher nimmt AutoML auch die folgenden Anpassungen vor:

  • Numerische Spalten, die kategorische IDs enthalten, werden als kategorisches Feature behandelt.
  • Zeichenfolgenspalten, die englischen Text enthalten, werden als Text-Feature behandelt.

Semantische Typanmerkungen

Mit Databricks Runtime 10.1 ML und höher können Sie den zugewiesenen semantischen Typ manuell steuern, indem Sie eine semantische Typanmerkung in einer Spalte platzieren. Verwenden Sie die folgende Syntax, um den semantischen Typ der Spalte <column-name> manuell mit der Anmerkung <semantic-type> zu versehen:

metadata_dict = df.schema["<column-name>"].metadata
metadata_dict["spark.contentAnnotation.semanticType"] = "<semantic-type>"
df = df.withMetadata("<column-name>", metadata_dict)

<semantic-type> kann eine der folgenden Optionen sein:

  • categorical: Die Spalte enthält kategorische Werte (z. B. numerische Werte, die als IDs behandelt werden sollen).
  • numeric: Die Spalte enthält numerische Werte (z. B. Zeichenfolgenwerte, die als Zahlen analysiert werden können).
  • datetime: Die Spalte enthält Zeitstempelwerte (Zeichenfolgen-, numerische oder Datumswerte, die in Zeitstempel konvertiert werden können).
  • text: Die Zeichenfolgenspalte enthält englischen Text.

Um die semantische Typerkennung für eine Spalte zu deaktivieren, verwenden Sie die spezielle Schlüsselwortanmerkung native.

Shapley-Werte (SHAP) zur Modellerklärbarkeit

Hinweis

Bis MLR 11.1 werden keine SHAP-Plots generiert, wenn das Dataset eine Spalte vom Typ datetime enthält.

Die von den AutoML-Regressions- und Klassifizierungsausführungen erstellten Notebooks enthalten Code zur Berechnung der Shapley-Werte. Die Shapley-Werte basieren auf der Spieltheorie und schätzen die Bedeutung jedes Features für die Vorhersagen eines Modells.

AutoML-Notebooks verwenden das SHAP-Paket zur Berechnung von Shapley-Werten. Da diese Berechnungen sehr arbeitsspeicherintensiv sind, werden sie standardmäßig nicht durchgeführt.

So berechnen Sie Shapley-Werte und zeigen Sie an

  1. Wechseln Sie zum Abschnitt Featurerelevanz in einem von AutoML generierten Testnotebook.
  2. Legen Sie shap_enabled = True fest.
  3. Führen Sie das Notebook erneut aus.

Zeitreihenaggregation

Wenn bei Vorhersageproblemen mehrere Werte für einen Zeitstempel in einer Zeitreihe vorhanden sind, verwendet AutoML den Durchschnitt der Werte.

Um stattdessen die Summe zu verwenden, bearbeiten Sie das Quellcode-Notebook. Ändern Sie in der Zelle Aggregieren von Daten nach ... .agg(y=(target_col, "avg")) zu .agg(y=(target_col, "sum")) auf folgende Weise:

group_cols = [time_col] + id_cols
df_aggregation = df_loaded \
  .groupby(group_cols) \
  .agg(y=(target_col, "sum")) \
  .reset_index() \
  .rename(columns={ time_col : "ds" })

Integration des Featurespeichers

In Databricks Runtime 11.3 LTS ML und höher können Sie im Featurespeicher vorhandene Featuretabellen verwenden, um das ursprüngliche Eingabedataset für Ihre Klassifizierungs- und Regressionsprobleme zu erweitern.

In Databricks Runtime 12.2 LTS ML und höher können Sie im Featurespeicher vorhandene Featuretabellen verwenden, um das ursprüngliche Eingabedataset für Ihre AutoML-Probleme (Klassifizierung, Regression und Vorhersage) zu erweitern.

Informationen zum Erstellen einer Featuretabelle finden Sie unter Was ist der Featurestore.

Um vorhandene Featuretabellen zu verwenden, können Sie Featuretabellen auf der AutoML-Benutzeroberfläche auswählen oder den Parameterfeature_store_lookups in Ihrer AutoML-Ausführungsspezifikation festlegen.

feature_store_lookups = [
  {
     "table_name": "example.trip_pickup_features",
     "lookup_key": ["pickup_zip", "rounded_pickup_datetime"],
  },
  {
      "table_name": "example.trip_dropoff_features",
     "lookup_key": ["dropoff_zip", "rounded_dropoff_datetime"],
  }
]

Generierung eines Testnotebooks

Für Vorhersageexperimente werden vom automatisierten maschinellen Lernen (AutoML) generierte Notebooks für alle Testläufe Ihres Experiments automatisch in Ihren Arbeitsbereich importiert.

Für Klassifizierungs- und Regressionsexperimente werden von AutoML generierte Notebooks für die Datenuntersuchung und der beste Testlauf in Ihrem Experiment automatisch in Ihren Arbeitsbereich importiert. Für andere Experimenttestläufe generierte Notebooks werden als MLflow-Artefakte im DBFS gespeichert, anstatt sie automatisch in Ihren Arbeitsbereich zu importieren. Für alle Testläufe abgesehen vom besten Testlauf werden notebook_path und notebook_url in der TrialInfo-Python-API nicht festgelegt. Wenn Sie diese Notebooks verwenden müssen, können Sie sie manuell über die AutoML-Benutzeroberfläche für Experimente oder die neue databricks.automl.import_notebookPython-API in Ihren Arbeitsbereich importieren.

Wenn Sie nur das von AutoML generierte Notebook für die Datenuntersuchung oder das Notebook für den besten Testlauf verwenden, enthält die Spalte Quelle in der AutoML-Benutzeroberfläche für Experimente den Link zum generierten Notebook für den besten Testlauf.

Wenn Sie andere generierte Notebooks in der AutoML-Benutzeroberfläche für Experimente verwenden, werden diese nicht automatisch in den Arbeitsbereich importiert. Sie können die Notizbücher finden, indem Sie in jeder ausgeführten MLflow-Instanz klicken. Das IPython-Notizbuch wird im Abschnitt Artefakte der Ausführungsseite gespeichert. Sie können dieses Notizbuch herunterladen und in den Arbeitsbereich importieren, wenn das Herunterladen von Artefakten von Ihren Arbeitsbereichsadministratoren aktiviert wurde.

Notebookbeispiel: AutoML-Experiment mit Feature Store

Im folgenden Notebook wird gezeigt, wie Sie ein ML-Modell mit AutoML- und Feature Store-Featuretabellen trainieren.

AutoML-Experiment mit Beispielnotebook für Featurespeicher

Notebook abrufen