In dieser Anleitung verwenden Sie ein binäres logistisches Regressionsmodell in BigQuery ML, um den Einkommensbereich von Personen basierend auf ihren demografischen Daten vorherzusagen. Ein binäres logistisches Regressionsmodell sagt vorher, ob ein Wert in eine von zwei Kategorien fällt. In diesem Fall, ob das jährliche Einkommen einer Person über oder unter 50.000 $ fällt.
In dieser Anleitung wird das Dataset bigquery-public-data.ml_datasets.census_adult_income
verwendet. Dieses Dataset enthält demografische und einkommensbezogene Informationen von US-Bürgern aus den Jahren 2000 und 2010.
Lernziele
Aufgaben in dieser Anleitung:- Logistisches Regressionsmodell erstellen
- Modell bewerten
- Vorhersagen mithilfe des Modells treffen.
- Die vom Modell generierten Ergebnisse erklären
Kosten
In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloud verwendet, darunter:
- BigQuery
- BigQuery ML
Weitere Informationen zu den Kosten für BigQuery finden Sie auf der Seite BigQuery-Preise.
Weitere Informationen zu den Kosten für BigQuery ML finden Sie unter BigQuery ML-Preise.
Hinweise
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
BigQuery API aktivieren.
Erforderliche Berechtigungen
Zum Erstellen des Modells mit BigQuery ML benötigen Sie die folgenden IAM-Berechtigungen:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.models.updateMetadata
Zum Ausführen von Inferenzen benötigen Sie die folgenden Berechtigungen:
bigquery.models.getData
für das Modellbigquery.jobs.create
Einführung
Eine häufige Aufgabe beim maschinellen Lernen besteht darin, Daten einem von zwei Typen zuzuordnen, den sogenannten Labels. Beispielsweise wäre es für einen Einzelhändler interessant, anhand von bestimmten Informationen zu einem Kunden vorherzusagen, ob dieser Kunde ein neues Produkt kauft. In diesem Fall könnten die beiden Labels will buy
und won't buy
lauten. Der Einzelhändler kann ein Dataset so erstellen, dass eine Spalte beide Labels und außerdem Kundeninformationen wie den Standort des Kunden, seine vorherigen Einkäufe und die gemeldeten Präferenzen enthält. Der Einzelhändler kann dann ein binäres logistisches Regressionsmodell verwenden, das anhand dieser Kundeninformationen vorherzusagen, welches Label den jeweiligen Kunden am besten repräsentiert.
In dieser Anleitung erstellen Sie ein binäres logistisches Regressionsmodell, das anhand der demografischen Attribute eines Befragten bei der US-Volkszählung vorhersagt, ob sein Einkommen in einen von zwei Bereichen fällt.
Dataset erstellen
Erstellen Sie ein BigQuery-Dataset zum Speichern des Modells:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Klicken Sie im Bereich Explorer auf den Namen Ihres Projekts.
Klicken Sie auf
Aktionen ansehen > Dataset erstellen.Führen Sie auf der Seite Dataset erstellen die folgenden Schritte aus:
Geben Sie unter Dataset-ID
census
ein.Wählen Sie als Standorttyp die Option Mehrere Regionen und dann US (mehrere Regionen in den USA) aus.
Die öffentlichen Datasets sind am multiregionalen Standort
US
gespeichert. Der Einfachheit halber sollten Sie Ihr Dataset am selben Standort speichern.Übernehmen Sie die verbleibenden Standardeinstellungen und klicken Sie auf Dataset erstellen.
Sehen Sie sich die Daten an
Untersuchen Sie das Dataset und ermitteln Sie, welche Spalten als Trainingsdaten für das logistische Regressionsmodell verwendet werden sollen. Führen Sie eine GoogleSQL-Abfrage aus, um 100 Zeilen aus der Tabelle census_adult_income
zurückzugeben:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Führen Sie im Abfrageeditor folgende Abfrage aus:
SELECT age, workclass, marital_status, education_num, occupation, hours_per_week, income_bracket, functional_weight FROM `bigquery-public-data.ml_datasets.census_adult_income` LIMIT 100;
Die Antwort sollte in etwa so aussehen:
In den Abfrageergebnissen sehen Sie, dass die Spalte income_bracket
der Tabelle census_adult_income
nur einen von zwei Werten enthält: <=50K
oder >50K
. Die Spalte functional_weight
gibt die Anzahl der Personen an, die nach Ansicht der Volkszählungsorganisation eine bestimmte Zeile repräsentiert. Die Werte dieser Spalte stehen in keinem Zusammenhang mit dem Wert von income_bracket
für eine bestimmte Zeile.
Beispieldaten vorbereiten
In dieser Anleitung sagen Sie das Einkommen der Befragten bei der Volkszählung anhand der folgenden Attribute vorher:
- Alter
- Art der Tätigkeit
- Familienstand
- Bildungsniveau
- Beruf
- Arbeitsstunden pro Woche
Dazu erstellen Sie eine Ansicht, die die Daten zum Trainieren und Bewerten des Modells sowie zum Erstellen von Vorhersagen enthält.
Diese Ansicht wird später in dieser Anleitung von der CREATE MODEL
-Anweisung verwendet.
Mit der Abfrage zum Erstellen der Ansicht werden Daten zu Befragten der Volkszählung extrahiert, einschließlich education_num
zur Angabe des Bildungsniveaus des Befragten und workclass
zur Angabe des Berufs, den der Befragte ausübt. Es werden mehrere Kategorien ausgeschlossen, die Daten duplizieren: Beispielsweise drücken die Spalten education
und education_num
in der Tabelle census_adult_income
dieselben Daten in verschiedenen Formaten aus. Daher wird die Spalte education
aus dieser Abfrage ausgeschlossen.
Es wird eine neue dataframe
-Spalte erstellt, die die functional_weight
-Spalte der census_adult_income
-Tabelle verwendet, um 80 % der Datenquelle zum Trainieren des Modells mit einem Label zu versehen und die verbleibenden Daten für die Bewertung und Vorhersage reserviert.
Führen Sie die Abfrage aus, mit der die Beispieldaten vorbereitet werden:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Führen Sie im Abfrageeditor folgende Abfrage aus:
CREATE OR REPLACE VIEW `census.input_data` AS SELECT age, workclass, marital_status, education_num, occupation, hours_per_week, income_bracket, CASE WHEN MOD(functional_weight, 10) < 8 THEN 'training' WHEN MOD(functional_weight, 10) = 8 THEN 'evaluation' WHEN MOD(functional_weight, 10) = 9 THEN 'prediction' END AS dataframe FROM `bigquery-public-data.ml_datasets.census_adult_income`
Maximieren Sie im Bereich Explorer das Dataset
census
und suchen Sie die Ansichtinput_data
.Klicken Sie auf den Namen der Ansicht, um das Informationsfenster zu öffnen. Das Ansichtsschema wird auf dem Tab Schema angezeigt.
Logistisches Regressionsmodell erstellen
Sie erstellen ein logistisches Regressionsmodell, indem Sie die Anweisung CREATE MODEL
verwenden und LOGISTIC_REG
als Modelltyp angeben. Das Erstellen des Modells umfasst das Training des Modells mit den Trainingsdaten, die Sie im vorherigen Abschnitt mit Labels versehen haben.
Im Folgenden finden Sie nützliche Informationen zur CREATE MODEL
-Anweisung:
Die Option
input_label_cols
gibt an, welche Spalte in derSELECT
-Anweisung als Labelspalte verwendet werden soll. Hier ist die Labelspalteincome_bracket
, sodass das Modell anhand der anderen in dieser Zeile vorhandenen Werte lernt, welcher der beiden Werte vonincome_bracket
für eine bestimmte Zeile am wahrscheinlichsten ist.Sie müssen nicht angeben, ob ein logistisches Regressionsmodell binär oder mehrklassig ist. BigQuery kann anhand der Anzahl der eindeutigen Werte in der Labelspalte bestimmen, welcher Modelltyp trainiert werden soll.
Die Option
auto_class_weights
ist aufTRUE
gesetzt, um die Klassenlabels in den Trainingsdaten auszugleichen. Standardmäßig sind die Trainingsdaten ungewichtet. Wenn die Labels in den Trainingsdaten ungewichtet sind, lernt das Modell unter Umständen, bei der Vorhersage die häufigste Labelklasse zu stark einzubeziehen. In diesem Fall befinden sich die meisten Befragten im Dataset in der unteren Einkommensklasse. Dies kann zu einem Modell führen, in dem bei der Vorhersage die untere Einkommensklasse zu stark berücksichtigt wird. Mit Klassengewichtungen werden die Klassenlabels ausgewogen. Dazu werden für jede Klasse die Gewichtungen im umgekehrten Verhältnis zur Häufigkeit dieser Klasse berechnet.Die Anweisung
SELECT
fragt die Ansichtinput_data
ab, die die Trainingsdaten enthält. Die KlauselWHERE
filtert die Zeilen ininput_data
so, dass nur die Zeilen zum Trainieren des Modells verwendet werden, die als Trainingsdaten gekennzeichnet sind.
Führen Sie die Abfrage aus, mit der Ihr logistisches Regressionsmodell erstellt wird:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Führen Sie im Abfrageeditor folgende Abfrage aus:
CREATE OR REPLACE MODEL `census.census_model` OPTIONS ( model_type='LOGISTIC_REG', auto_class_weights=TRUE, data_split_method='NO_SPLIT', input_label_cols=['income_bracket'], max_iterations=15) AS SELECT * EXCEPT(dataframe) FROM `census.input_data` WHERE dataframe = 'training'
Maximieren Sie im Bereich Explorer das Dataset
census
und dann den Ordner Modelle.Klicken Sie auf das Modell census_model, um den Informationsbereich zu öffnen.
Klicken Sie auf den Tab Schema (Schema). Das Modellschema führt die Attribute auf, die BigQuery ML zur Durchführung der logistischen Regression verwendet hat. Das Schema sollte in etwa so aussehen:
Die ML.EVALUATE
-Funktion zum Bewerten des Modells.
Nachdem Sie das Modell erstellt haben, können Sie die Leistung des Modells mit der Funktion ML.EVALUATE
bewerten.
Die Funktion ML.EVALUATE
wertet die vom Modell generierten vorhergesagten Werte anhand der tatsächlichen Daten aus.
Als Eingabe verwendet die Funktion ML.EVALUATE
das trainierte Modell und die Zeilen aus der Ansicht input_data
, in denen evaluation
als Spaltenwert dataframe
steht. Die Funktion gibt eine einzelne Zeile mit Statistiken zum Modell zurück.
Führen Sie die ML.EVALUATE
-Abfrage aus:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Führen Sie im Abfrageeditor folgende Abfrage aus:
SELECT * FROM ML.EVALUATE (MODEL `census.census_model`, ( SELECT * FROM `census.input_data` WHERE dataframe = 'evaluation' ) )
Die Antwort sollte in etwa so aussehen:
Sie können auch den Informationsbereich des Modells in der Google Cloud Console aufrufen, um die während des Trainings berechneten Bewertungsmesswerte anzuzeigen:
Mit der Funktion ML.PREDICT
die Einkommensklasse vorhersagen
Mit der Funktion ML.PREDICT
können Sie die Einkommensklasse ermitteln, zu der ein bestimmter Befragter gehört.
Als Eingabe verwendet die Funktion ML.PREDICT
das trainierte Modell und die Zeilen aus der Ansicht input_data
, in denen prediction
als Spaltenwert dataframe
steht.
Führen Sie die ML.PREDICT
-Abfrage aus:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Führen Sie im Abfrageeditor folgende Abfrage aus:
SELECT * FROM ML.PREDICT (MODEL `census.census_model`, ( SELECT * FROM `census.input_data` WHERE dataframe = 'prediction' ) )
Die Antwort sollte in etwa so aussehen:
predicted_income_bracket
ist der vorhergesagte Wert vonincome_bracket
.
Vorhersageergebnisse erklären
Mit der Funktion ML.EXPLAIN_PREDICT
können Sie ermitteln, warum das Modell diese Vorhersageergebnisse generiert.
ML.EXPLAIN_PREDICT
ist eine erweiterte Version der Funktion ML.PREDICT
.
ML.EXPLAIN_PREDICT
gibt nicht nur Vorhersageergebnisse aus, sondern gibt auch zusätzliche Spalten aus, um die Vorhersageergebnisse zu erklären. In der Praxis können Sie ML.EXPLAIN_PREDICT
anstelle von ML.PREDICT
ausführen. Weitere Informationen finden Sie in der Übersicht zu BigQuery ML Explainable AI.
Führen Sie die ML.EXPLAIN_PREDICT
-Abfrage aus:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Führen Sie im Abfrageeditor folgende Abfrage aus:
SELECT * FROM ML.EXPLAIN_PREDICT(MODEL `census.census_model`, ( SELECT * FROM `census.input_data` WHERE dataframe = 'evaluation'), STRUCT(3 as top_k_features))
Die Antwort sollte in etwa so aussehen:
Bei logistischen Regressionsmodellen werden Shapley-Werte verwendet, um für jedes Feature im Modell Feature-Attributionswerte zu generieren. ML.EXPLAIN_PREDICT
gibt die drei wichtigsten Featureattributionen pro Zeile der Ansicht input_data
aus, da top_k_features
in der Abfrage auf 3
gesetzt wurde. Diese Zuordnungen werden nach dem absoluten Wert der Attribution in absteigender Reihenfolge sortiert. In Zeile 1 dieses Beispiels wird die Funktionhours_per_week
am meisten zur Gesamtvorhersage beigetragen, aber in Zeile 2 trug occupation
am meisten zur allgemeinen Vorhersage bei.
Modell global erklären
Mit der Funktion ML.GLOBAL_EXPLAIN
können Sie ermitteln, welche Features im Allgemeinen am wichtigsten sind, um die Einkommensklasse zu ermitteln.
Zur Verwendung von ML.GLOBAL_EXPLAIN
müssen Sie das Modell mit der Option ENABLE_GLOBAL_EXPLAIN
auf TRUE
neu trainieren.
Trainieren Sie das Modell neu und rufen Sie globale Erläuterungen für das Modell ab:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Führen Sie im Abfrageeditor die folgende Abfrage aus, um das Modell neu zu trainieren:
CREATE OR REPLACE MODEL `census.census_model` OPTIONS ( model_type='LOGISTIC_REG', auto_class_weights=TRUE, enable_global_explain=TRUE, input_label_cols=['income_bracket'] ) AS SELECT * EXCEPT(dataframe) FROM `census.input_data` WHERE dataframe = 'training'
Führen Sie im Abfrageeditor die folgende Abfrage aus, um globale Erläuterungen zu erhalten:
SELECT * FROM ML.GLOBAL_EXPLAIN(MODEL `census.census_model`)
Die Antwort sollte in etwa so aussehen:
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
Dataset löschen
Wenn Sie Ihr Projekt löschen, werden alle Datasets und Tabellen entfernt. Wenn Sie das Projekt wieder verwenden möchten, können Sie das in dieser Anleitung erstellte Dataset löschen:
Rufen Sie, falls erforderlich, die Seite "BigQuery" in der Google Cloud Console auf.
Klicken Sie im Navigationsbereich auf das Dataset census, das Sie erstellt haben.
Klicken Sie rechts im Fenster auf Dataset löschen. Dadurch werden das Dataset und das Modell gelöscht.
Bestätigen Sie im Dialogfeld Dataset löschen den Löschbefehl. Geben Sie dazu den Namen des Datasets (
census
) ein und klicken Sie auf Löschen.
Projekt löschen
So löschen Sie das Projekt:
- Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.
Nächste Schritte
- Einführung in BigQuery ML
- Mehr zum Erstellen von Modellen auf der Seite zur
CREATE MODEL
-Syntax