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) |
|
Categorical array (Kategoriales Array) |
|
Text-Array |
|
Timestamp array (Zeitstempel-Array) |
|
Struct-Array |
|
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:
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
- BigQuery-Datentypen
- Tabellarische Trainingsdaten vorbereiten
- Best Practices für das Erstellen von tabellarischen Trainingsdaten