Datentypen und Datentransformationen

Auf dieser Seite wird beschrieben, wie Vertex AI mit verschiedenen tabellarischen Daten für AutoML-Modelle funktioniert.

Einführung in Transformationen in Vertex AI

Modelltraining

Tabellarische Eingabedaten müssen transformiert werden, bevor sie für das Modelltraining verwendet werden können. Die Transformation gibt die Funktion eines bestimmten Datenmerkmals an.

Die folgenden Transformationen werden unterstützt:

Wenn Ihre Datenquelle eine CSV-Datei in Cloud Storage ist, müssen Kommas (,) als Trennzeichen verwendet werden. Vertex AI verwendet das CSV-Format RFC 4180.

Wenn Ihre Datenquelle BigQuery ist und Sie eine Klassifizierung oder Regression durchführen, können Sie Daten einbeziehen, die aus mehreren Datenprimitiven bestehen. Diese zusammengesetzten Datentypen müssen vorverarbeitet werden, bevor Transformationen angewendet werden können. Die folgenden zusammengesetzten Datentypen werden unterstützt:

Wenn ein Typwert fehlt oder null ist, verarbeitet Vertex AI ihn anhand Ihres Modellziels und der für dieses Feature angewendeten Transformation. Weitere Informationen finden Sie unter Vorgehensweise bei fehlenden Werten oder Nullwerten.

Vorhersage

Das Format der Daten für die Vorhersage muss mit dem Format für das Training übereinstimmen. Weitere Informationen finden Sie unter Datenformat für Vorhersagen.

Vertex AI-Transformationen

Kategorial

Wenn Sie eine kategoriale Transformation anwenden, werden durch dieses Feature Werte in einer Kategorie dargestellt. Also nur auf einer nominalen Ebene. Die Werte unterscheiden sich nur aufgrund ihres Namens – ohne Reihenfolge. Sie können kategoriale Werte mithilfe von Zahlen darstellen, wobei die Werte keine numerische Beziehung zueinander haben. Das heißt, eine kategoriale 1 ist nicht "größer" als eine kategoriale 0.

Hier ein paar Beispiele für kategoriale Werte:

  • Boolesch – true, false.
  • Land – "USA", "Canada", "China" und so weiter.
  • HTTP-Statuscode – "200", "404", "500" und so weiter.

Bei kategorialen Werten wird zwischen Groß- und Kleinschreibung unterschieden. Schreibvarianten werden als unterschiedliche Kategorien behandelt. "Potenzial" und "Potential" werden beispielsweise nicht kombiniert.

Wenn Sie ein Modell mit einem Feature mit einer kategorialen Transformation trainieren, wendet Vertex AI die folgenden Datentransformationen auf das Feature an und verwendet jedes, das ein Signal für das Training bereitstellt:

  • Der unveränderte kategoriale String: keine Änderung in Groß- und Kleinschreibung, Satzzeichen, Rechtschreibung, Zeitform usw.
  • Wandeln Sie den Kategorienamen in einen Dictionary-Lookup-Index um und erstellen Sie für jeden Index eine Einbettung.
  • Kategorien, die im Trainings-Dataset weniger als fünfmal vorkommen, werden als Kategorie „Unbekannt” behandelt. Die Kategorie „Unbekannt” erhält einen eigenen speziellen Lookup-Index und eine entsprechende Einbettung.

Kategoriale Transformationen können auf STRING-Daten in CSV-Dateien oder auf die folgenden BigQuery-Datentypen angewendet werden:

  • INT64
  • NUMERIC, BIGNUMERIC
  • FLOAT64
  • BOOL
  • STRING
  • DATE
  • DATETIME
  • TIME
  • TIMESTAMP

Text

Eine Texttransformation führt dazu, dass das Feature als Freitext verwendet wird, der üblicherweise aus Texttoken besteht.

Hier ein paar Beispiele für Textwerte:

  • "The quick brown fox"
  • "This restaurant is the best! The food is delicious"

Bei Prognosemodellen wird die Texttransformation für kovariative Features nicht unterstützt.

Wenn Sie ein Modell mit einem Feature mit einer kategorialen Transformation trainieren, wendet Vertex AI die folgenden Datentransformationen auf das Feature an und verwendet jedes, das ein Signal für das Training bereitstellt:

  • Der unveränderte Text: Keine Änderung in Groß- und Kleinschreibung, Zeichensetzung, Rechtschreibung, Zeitform usw.
  • Wandeln Sie Text in Wörter um und erstellen Sie 1-Gramme und 2-Gramme aus Wörtern. Wandeln Sie jedes N-Gramm in einen Dictionary-Lookup-Index um und erstellen Sie eine Einbettung für jeden Index. Kombinieren Sie mithilfe des Mittelwerts die Einbettung aller Elemente zu einer einzelnen Einbettung.

    Tokenisierung basiert auf Unicode-Skript-Grenzen.

  • Fehlende Werte erhalten ihren eigenen Lookup-Index und die entsprechende Einbettung.
  • Stoppwörter erhalten keine besondere Behandlung und werden nicht entfernt.

Texttransformationen können auf STRING-Daten in CSV-Dateien oder auf die folgenden BigQuery-Datentypen angewendet werden:

  • STRING
  • DATETIME

Numerisch

Eine numerische Transformation bewirkt, dass eine Spalte als Ordinal- oder quantitativer Wert verwendet wird. Diese Zahlen können verglichen werden. Das heißt, zwei unterschiedliche Zahlen können kleiner oder größer als die andere Zahl sein.

Voran- oder nachgestellte Leerzeichen werden abgeschnitten.

Die folgende Tabelle zeigt alle kompatiblen Formate für eine numerische Transformation:

Format Beispiele Hinweise
Numerischer String "101", 101.5" Das Punktzeichen (".") Ist das einzige gültige Dezimaltrennzeichen. "101.5" und "100.000" sind keine gültigen numerischen Strings.
Wissenschaftliche Schreibweise "1.12345E+11", "1.12345e+11" Siehe Hinweise zu numerischen Strings in Bezug auf Dezimaltrennzeichen.
Not a number (Keine Zahl) "NAN", "nan", "+NAN" Groß-/Kleinschreibung wird ignoriert. Vorangestellte Plus- ("+") oder Minuszeichen ("-") werden ignoriert. Wird als NULL-Wert interpretiert.
Unendlich "INF", "+inf" Groß-/Kleinschreibung wird ignoriert. Vorangestellte Plus- ("+") oder Minuszeichen ("-") werden ignoriert. Wird als NULL-Wert interpretiert.

Wenn ein Wert in einer Spalte mit einer numerischen Transformation keinem dieser Formate entspricht, wird entweder die gesamte Zeile vom Training ausgeschlossen oder der Wert wird als null behandelt. Sie wählen zwischen diesen Ergebnissen, wenn Sie die numerische Transformation auswählen.

Wenn Sie ein Modell mit einem Feature mit einer kategorialen Transformation trainieren, wendet Vertex AI die folgenden Datentransformationen auf das Feature an und verwendet jedes, das ein Signal für das Training bereitstellt:

  • Der in float32 umgewandelte Wert.
  • Die z_Score des Werts.
  • Ein Bucket-Index des Werts basierend auf Quantilen. Die Bucket-Größe beträgt 100.
  • log(value+1), wenn der Wert größer oder gleich 0 ist. Andernfalls wird diese Transformation nicht angewendet und der Wert wird als fehlender Wert betrachtet.
  • z_score von log(value+1), wenn der Wert größer oder gleich 0 ist. Andernfalls wird diese Transformation nicht angewendet und der Wert wird als fehlender Wert betrachtet.
  • Ein boolescher Wert, mit dem angegeben wird, ob der Wert null ist.
  • Zeilen mit ungültigen numerischen Eingaben (z. B. ein String, der nicht in float32 geparst werden kann) werden beim Training und bei der Vorhersage nicht berücksichtigt.
  • Extreme Werte bzw. Ausreißerwerte werden nicht speziell behandelt.

Numerische Transformationen können auf STRING-Daten in CSV-Dateien oder auf die folgenden BigQuery-Datentypen angewendet werden:

  • INT64
  • NUMERIC, BIGNUMERIC
  • FLOAT64
  • STRING
  • TIMESTAMP

Zeitstempel

Eine Zeitstempeltransformation bewirkt, dass ein Feature als Zeitpunkt verwendet wird, entweder als amtliche Zeitangabe mit einer Zeitzone oder als Unix-Zeitstempel. Für die Zeitspalte können nur Features mit einer Zeitstempeltransformation verwendet werden.

Wenn für die amtliche Zeitangabe keine Zeitzone angegeben ist, wird standardmäßig UTC verwendet.

In der folgenden Tabelle sind alle kompatiblen Zeitstempelstringformate aufgeführt:

Format Beispiel Hinweise
%E4Y-%m-%d "2017-01-30" Eine Beschreibung dieses Formats finden Sie in der Abseil-Dokumentation.
%E4Y/%m/%d "2017/01/30"
%Y/%m/%d %H:%M:%E*S "2017/01/30 23:59:58"
%d-%m-%E4Y "30-11-2018"
%d/%m/%E4Y "30/11/2018"
%d-%B-%E4Y "30-November-2018"
%Y-%m-%dT%H:%M:%E*S%Ez "2019-05-17T23:56:09.05+00:00" RFC 3339. Geben Sie den Zeitzonenoffset (z) im folgenden Format an: ±HH:MM[:SS[.ffffff]]
Unix-Zeitstempel-String in Sekunden "1541194447" Nur für Zeiten zwischen 01. Jan. 1990 und 01. Jan. 2030.
Unix-Zeitstempel-String in Millisekunden "1541194447000"
Unix-Zeitstempel-String in Mikrosekunden "1541194447000000"
Unix-Zeitstempel-String in Nanosekunden "1541194447000000000"

Wenn ein Wert in einer Spalte mit einer Zeitstempeltransformation nicht mit einem dieser Formate übereinstimmt, wird die gesamte Zeile vom Training ausgeschlossen oder der Wert wird als null behandelt. Sie wählen zwischen diesen Ergebnissen, wenn Sie die Zeitstempeltransformation auswählen.

Wenn Sie ein Modell mit einem Feature mit einer kategorialen Transformation trainieren, wendet Vertex AI die folgenden Datentransformationen auf das Feature an und verwendet jedes, das ein Signal für das Training bereitstellt:

  • Wenden Sie die Transformationen auf Spalten des Typs Numerical (Numerisch) an.
  • Bestimmen Sie das Jahr, den Monat, den Tag und den Wochentag. Behandeln Sie jeden Wert aus dem Zeitstempel als Spalte des Typs Categorical (Kategorial).
  • Ungültige numerische Werte, z. B. Werte außerhalb eines typischen Zeitstempels oder Extremwerte, erhalten keine besondere Behandlung und werden nicht entfernt.
  • Zeilen mit ungültigen Zeitstempeleingaben, z. B. ein ungültiger Zeitstempelstring, sind bei Training und Vorhersage nicht eingeschlossen.

Zeitstempeltransformationen können auf STRING-Daten in CSV-Dateien oder auf die folgenden BigQuery-Datentypen angewendet werden:

  • INT64
  • STRING
  • DATE
  • DATETIME
  • TIMESTAMP

Zusammengesetzte Datentypen

Manchmal müssen Sie Daten angeben, die aus mehreren Datenprimitiven wie Arrays oder Structs bestehen. Zusammengesetzte Datentypen sind nur in Verbindung mit BigQuery als Datenquelle verfügbar. Sie werden für Prognosemodelle nicht unterstützt.

Struct

Mit einem Struct kann eine Gruppe beschrifteter Felder dargestellt werden. Ein Struct enthält eine Liste von Feldnamen, die jeweils mit einem Datentyp verknüpft sind. Die Liste der Felder und deren Datentypen müssen für alle Struct-Werte einer Spalte gleich sein.

Hier ein paar Beispiele für Structs:

  • Blutdruck – {"timestamp": 1535761416, "systolic": 110, "diastolic": 70}
  • Produkt – {"name": "iPhone", price: 1000}

Structs werden mit dem BigQuery-Datentyp STRUCT dargestellt.

Struct-Werte werden automatisch zu Feldern vereinfacht. Vertex AI wendet die Datentransformation entsprechend ihrem Transformationstyp auf die vereinfachten Felder an.

Array

Mit einem Array können Sie eine Liste von Werten darstellen. Die enthaltenen Werte müssen denselben Transformationstyp akzeptieren. Sie können STRUCTs in Arrays einfügen. Alle Strukturen im Array müssen dieselbe Struktur haben.

Vertex AI verarbeitet Arrays als relative Gewichtung. Dies bedeutet, dass später im Array aufgeführte Elemente gegenüber früher darin vorkommenden Elementen stärker gewichtet werden.

Hier ein paar Beispiele für Arrays:

  • Produktkategorien:

    ["Clothing", "Women", "Dress", ...]

  • Letzte Käufe:

    ["iPhone", "Laptop", "Suitcase", ...]

  • Nutzerdatensätze:

    [{"name": "Joelle", ID: 4093}, {"name": "Chloe", ID: 2047}, {"name": "Neko", ID: 3432}, ...]

Arrays werden mit dem BigQuery-Datentyp ARRAY dargestellt.

Für die Datentransformation Vertex AI wird der Transformationstyp angewendet, der auf das Array angewendet wird:

Array-Typ Transformation
Numerical array (Numerisches Array)
  • Alle Transformationen für die Typen Numerical (Numerisch), die auf den Durchschnitt der letzten N Elemente mit N = {1, 2, 4, 8, alle} angewendet werden. Die am stärksten hervorgehobenen Elemente sind also diejenigen am Ende des Arrays und nicht am Anfang.
  • Der Durchschnitt leerer Arrays wird als null behandelt.
Categorical array (Kategoriales Array)
  • Wandeln Sie für jedes Element im Array der letzten N Elemente mit N = {1, 2, 4, 8, alle} den Kategorienamen in einen Dictionary-Lookup-Index um und erstellen Sie eine Einbettung für jeden Index. Kombinieren Sie mithilfe des Mittelwerts die Einbettung aller Elemente zu einer einzelnen Einbettung.
  • Leere Arrays werden als Einbettung von Nullen behandelt.
Text-Array
  • Verketten Sie alle Textwerte im Array zu einem einzelnen Textwert, indem Sie ein Leerzeichen (" ") als Trennzeichen verwenden, und behandeln Sie das Ergebnis dann als einzelnen Textwert. Wenden Sie die Transformationen auf die Spalten Text an.
  • Leere Arrays werden als Einbettung von Nullen behandelt.
Timestamp array (Zeitstempel-Array)
  • Wenden Sie die Transformationen in Spalten des Typs Numerical (Numerisch) auf den Durchschnitt der letzten N Elemente des Arrays an. N = {1, 2, 4, 8, alle}. Dies bedeutet, dass die am stärksten hervorgehobenen Elemente am Ende des Arrays liegen.
Struct-Array
  • Die Structs im Array werden in einzelne Felder vereinfacht und nach Feld in Arrays zusammengefasst. Die Arraytransformation wird, wie in dieser Tabelle beschrieben, gemäß dem Feldtyp für dieses Array angewendet.

Umgang mit fehlenden oder Nullwerten

Wie fehlende Werte behandelt werden, hängt vom Modellziel und der Transformation ab, die für dieses Feature angewendet wird.

Klassifizierung und Regression

Bei Klassifizierungs- und Regressionsmodellen führen Nullwerte zu einer Einbettung für kategoriale und Texttransformationen. Bei anderen Transformationen bleibt der Nullwert bei null.

Prognosen

Für Prognosemodelle werden Nullwerte aus den umgebenden Daten berechnet. Es gibt keine Möglichkeit, einen Nullwert als Null zu belassen. Wenn Sie lieber steuern möchten, wie Nullwerte ausgeführt werden, können Sie diese explizit festlegen. Die für Sie optimalen Werte hängen von Ihren Daten und Ihrem Geschäftsproblem ab.

Fehlende Zeilen (z. B. keine Zeile für ein bestimmtes Datum mit einer täglichen Granularität der Daten) sind zulässig, doch Vertex AI erhöht die Werte für die fehlenden Daten nicht. Da fehlende Zeilen die Modellqualität beeinträchtigen können, sollten Sie nach Möglichkeit fehlende Zeilen vermeiden. Wenn beispielsweise eine Zeile fehlt, weil die Verkaufsmenge für diesen Tag null war, fügen Sie eine Zeile für diesen Tag hinzu und legen Sie explizit Verkaufsdaten auf 0 fest.

Welche Werte werden als Nullwerte behandelt

Beim Training eines tabellarischen AutoML-Modells behandelt Vertex AI die folgenden Werte als Nullwerte:

  • Ein BigQuery-NULL-Wert

  • NaN oder unendliche numerische Werte

  • Leerer String. Vertex AI entfernt keine Leerzeichen aus Strings. Das heißt, " " wird nicht als Nullwert betrachtet.

  • Ein String, der in NaN oder einen unendlichen numerischen Wert umgewandelt werden kann.

    • Bei "NAN" wird Groß- und Kleinschreibung ignoriert, wobei ein optionales Plus- oder Minuszeichen vorangestellt wird.
    • Bei "INF" wird Groß- und Kleinschreibung ignoriert, wobei ein optionales Plus- oder Minuszeichen vorangestellt wird.
  • Fehlende Werte

  • Werte in einer Spalte mit einer numerischen oder Zeitstempel-Transformation, die kein gültiges Format für die Transformation der Spalte haben. Wenn Sie in diesem Fall angegeben haben, dass die Zeile mit dem ungültigen Wert beim Training verwendet werden soll, wird der ungültige Wert als null betrachtet.

Datenformat für Vorhersagen

Das Format der Daten für die Vorhersage muss mit dem Format für das Training übereinstimmen.

Wenn Sie Ihr Modell in einer CSV-Datei in Cloud Storage mit Daten trainiert haben, haben Ihre Daten den Typ STRING. Wenn Sie ein JSON-Objekt zum Senden Ihrer Vorhersageanfrage verwenden, achten Sie darauf, dass alle Werte in den Schlüssel/Wert-Paaren auch vom Typ STRING sind.

Wenn Sie Ihr Modell mit Daten trainiert haben, die in BigQuery gespeichert sind, und Sie ein JSON-Objekt zum Senden Ihrer Vorhersageanfrage verwenden, müssen die Datentypen der Werte in den JSON-Schlüssel/Wert-Paaren der Zuordnung in der folgenden Tabelle folgen.

BigQuery-Datentyp JSON-Datentyp
INT64 String
NUMERIC, BIGNUMERIC Zahl
FLOAT64 Zahl
BOOL Boolesch
STRING String
DATE String
DATETIME String
TIME String
TIMESTAMP String
Array Array
STRUCT Objekt

Wenn Ihre Trainingsdaten beispielsweise length-Features vom Typ FLOAT64 enthielten, ist das folgende JSON-Schlüssel/Wert-Paar korrekt:

"length":3.6,

Umgekehrt gibt das folgende JSON-Schlüssel/Wert-Paar einen Fehler aus:

"length":"3.6",

Nächste Schritte