BigQuery ML zur Vorhersage des Gewichts von Pinguinen verwenden


In dieser Anleitung verwenden Sie ein lineares Regressionsmodell in BigQuery ML, um das Gewicht eines Pinguins basierend auf den demografischen Informationen des Pinguins vorherzusagen. Eine lineare Regression ist eine Art von Regressionsmodell, das aus einer linearen Kombination von Eingabemerkmalen einen kontinuierlichen Wert generiert.

In dieser Anleitung wird das Dataset bigquery-public-data.ml_datasets.penguins verwendet.

Ziele

Aufgaben in dieser Anleitung:

  • Erstellen Sie ein lineares Regressionsmodell.
  • Modell bewerten
  • Vorhersagen mithilfe des Modells treffen.

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

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the BigQuery API.

    Enable the API

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 Modell
  • bigquery.jobs.create

Dataset erstellen

Erstellen Sie ein BigQuery-Dataset, um Ihr ML-Modell zu speichern:

  1. Rufen Sie in der Google Cloud Console die Seite „BigQuery“ auf.

    Zur Seite „BigQuery“

  2. Klicken Sie im Bereich Explorer auf den Namen Ihres Projekts.

  3. Klicken Sie auf Aktionen ansehen > Dataset erstellen.

    Dataset erstellen

  4. Führen Sie auf der Seite Dataset erstellen die folgenden Schritte aus:

    • Geben Sie unter Dataset-ID bqml_tutorial ein.

    • Wählen Sie als Standorttyp die Option Mehrere Regionen und dann USA (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 unverändert und klicken Sie auf Dataset erstellen.

      Seite "Dataset erstellen"

Modell erstellen

Erstellen Sie mithilfe des Analytics-Beispiel-Datasets für BigQuery ein lineares Regressionsmodell.

SQL

Sie können ein lineares Regressionsmodell durch Verwendung der Anweisung CREATE MODEL und Angabe von LINEAR_REG für den Modelltyp erstellen. Das Erstellen des Modells umfasst das Training des Modells.

Im Folgenden finden Sie nützliche Informationen zur CREATE MODEL-Anweisung:

  • Die Option input_label_cols gibt an, welche Spalte in der SELECT-Anweisung als Labelspalte verwendet werden soll. Hier lautet die Labelspalte body_mass_g. Bei linearen Regressionsmodellen muss die Labelspalte reelle Zahlen als Werte enthalten.
  • Die SELECT-Anweisung dieser Abfrage verwendet die folgenden Spalten in der Tabelle bigquery-public-data.ml_datasets.penguins, um das Gewicht eines Pinguins vorherzusagen:

    • species: die Pinguinart.
    • island: die Insel, auf der der Pinguin lebt.
    • culmen_length_mm: die Länge des Schnabelrückens des Pinguins in Millimetern.
    • culmen_depth_mm: die Tiefe des Schnabelrückens des Pinguins in Millimetern.
    • flipper_length_mm: die Länge der Pinguinflosen in Millimetern.
    • sex: das Geschlecht des Pinguins.
  • Die WHERE-Klausel in der SELECT-Anweisung dieser Abfrage, WHERE body_mass_g IS NOT NULL, schließt Zeilen aus, in denen die Spalte body_mass_g den Wert NULL hat.

Führen Sie die Abfrage aus, mit der Ihr lineares Regressionsmodell erstellt wird:

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Führen Sie im Abfrageeditor folgende Abfrage aus:

    CREATE OR REPLACE MODEL `bqml_tutorial.penguins_model`
    OPTIONS
      (model_type='linear_reg',
      input_label_cols=['body_mass_g']) AS
    SELECT
      *
    FROM
      `bigquery-public-data.ml_datasets.penguins`
    WHERE
      body_mass_g IS NOT NULL;
  3. Das Erstellen des penguins_model-Modells dauert ungefähr 30 Sekunden. Wenn Sie das Modell ansehen möchten, öffnen Sie den Bereich Explorer, erweitern Sie das Dataset bqml_tutorial und maximieren Sie dann den Ordner Modelle.

BigQuery DataFrames

Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von BigQuery DataFrames in der BigQuery-Kurzanleitung: BigQuery DataFrames verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu BigQuery DataFrames.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

from bigframes.ml.linear_model import LinearRegression
import bigframes.pandas as bpd

# Load data from BigQuery
bq_df = bpd.read_gbq("bigquery-public-data.ml_datasets.penguins")

# Drop rows with nulls to get training data
training_data = bq_df.dropna(subset=["body_mass_g"])

# Specify your feature (or input) columns and the label (or output) column:
feature_columns = training_data.drop(columns=["body_mass_g"])
label_columns = training_data[["body_mass_g"]]

# Create the linear model
model = LinearRegression()
model.fit(feature_columns, label_columns)
model.to_gbq(
    your_model_id,  # For example: "bqml_tutorial.penguins_model"
    replace=True,
)

Das Erstellen des Modells dauert ungefähr 30 Sekunden. Wenn Sie das Modell ansehen möchten, öffnen Sie den Bereich Explorer, erweitern Sie das Dataset bqml_tutorial und maximieren Sie dann den Ordner Modelle.

Trainingsstatistiken abrufen

Mit der Funktion ML.TRAINING_INFO können Sie die Ergebnisse des Modelltrainings abrufen. Alternativ lassen sich die Statistiken auch in der Google Cloud Console abrufen. In dieser Anleitung verwenden Sie die Google Cloud Console.

Ein maschineller Lernalgorithmus erstellt ein Modell durch Analyse vieler Beispiele. Ziel ist es, ein Modell zu finden, das den Verlust minimiert. Dieser Vorgang wird als empirische Risikominimierung bezeichnet.

Verlust ist der Strafwert für eine schlechte Vorhersage. Es ist eine Zahl, die angibt, wie schlecht die Vorhersage des Modells bei einem einzelnen Beispiel war. Wenn die Vorhersage des Modells genau ist, entspricht dies einem Verlust von null. Je ungenauer die Vorhersage ist, desto höher ist der Verlust. Ziel des Modelltrainings ist es, eine Reihe von Gewichtungen und Verzerrungen zu finden, die bei allen Beispielen im Schnitt einen geringen Verlust aufweisen.

Sehen Sie sich die Statistiken des Modelltrainings an, die beim Ausführen der CREATE MODEL-Abfrage generiert wurden:

  1. Maximieren Sie im Bereich Explorer das Dataset bqml_tutorial und dann den Ordner Modelle. Klicken Sie auf penguins_model, um den Informationsbereich für das Modell zu öffnen.

  2. Klicken Sie auf den Tab Training und dann auf Tabelle. Die Antwort sollte in etwa so aussehen:

    Ausgabe von ML.TRAINING_INFO

    Die Spalte Trainingsdatenverlust enthält den Verlustmesswert, der berechnet wird, nachdem das Modell mit dem Trainings-Dataset trainiert wurde. Da Sie eine lineare Regression durchgeführt haben, wird in dieser Spalte der Wert für die mittlere quadratische Abweichung angezeigt. Für dieses Training wird automatisch eine Optimierungsstrategie "normal_equation" verwendet. Daher ist nur eine einzelne Iteration bis zum endgültigen Modell erforderlich. Weitere Informationen zum Festlegen der Modelloptimierungsstrategie finden Sie unter optimize_strategy.

Modell bewerten

Nachdem Sie das Modell erstellt haben, können Sie die Leistung des Modells mit der Funktion ML.EVALUATE oder der BigQuery DataFrames-Funktion score bewerten, um die vom Modell generierten vorhergesagten Werte anhand der tatsächlichen Daten auszuwerten.

SQL

Als Eingabe verwendet die Funktion ML.EVALUATE das trainierte Modell und ein Dataset, das mit dem Schema der Daten übereinstimmt, die Sie zum Trainieren des Modells verwendet haben. In einer Produktionsumgebung sollten Sie das Modell anhand anderer Daten als den Daten bewerten, die Sie zum Trainieren des Modells verwendet haben. Wenn Sie ML.EVALUATE ausführen, ohne Eingabedaten anzugeben, ruft die Funktion die Bewertungsmesswerte ab, die während des Trainings berechnet wurden. Diese Messwerte werden mithilfe des automatisch reservierten Bewertungs-Datasets berechnet:

    SELECT
      *
    FROM
      ML.EVALUATE(MODEL bqml_tutorial.penguins_model);
    

Führen Sie die ML.EVALUATE-Abfrage aus:

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Führen Sie im Abfrageeditor folgende Abfrage aus:

      SELECT
        *
      FROM
        ML.EVALUATE(MODEL `bqml_tutorial.penguins_model`,
          (
          SELECT
            *
          FROM
            `bigquery-public-data.ml_datasets.penguins`
          WHERE
            body_mass_g IS NOT NULL));
      

BigQuery DataFrames

Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von BigQuery DataFrames in der BigQuery-Kurzanleitung: BigQuery DataFrames verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu BigQuery DataFrames.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

import bigframes.pandas as bpd

# Select the model you will be evaluating. `read_gbq_model` loads model data from
# BigQuery, but you could also use the `model` object from the previous steps.
model = bpd.read_gbq_model(
    your_model_id,  # For example: "bqml_tutorial.penguins_model"
)

# Score the model with input data defined in an earlier step to compare
# model predictions on feature_columns to true labels in label_columns.
score = model.score(feature_columns, label_columns)
# Expected output results:
# index  mean_absolute_error  mean_squared_error  mean_squared_log_error  median_absolute_error  r2_score  explained_variance
#   0        227.012237         81838.159892            0.00507                173.080816        0.872377    0.872377
#   1 rows x 6 columns

Die Antwort sollte in etwa so aussehen:

Ausgabe von ML.EVALUATE

Da Sie eine lineare Regression durchgeführt haben, enthalten die Ergebnisse die folgenden Spalten:

  • mean_absolute_error
  • mean_squared_error
  • mean_squared_log_error
  • median_absolute_error
  • r2_score
  • explained_variance

Ein wichtiger Messwert in den Bewertungsergebnissen ist der R2-Wert. Der R2-Wert ist ein statistisches Maß dafür, ob sich die Vorhersagen der linearen Regression den tatsächlichen Daten annähern. Der Wert 0 gibt an, dass das Modell keine der Abweichungen der Antwortdaten um den Mittelwert erklärt. Der Wert 1 gibt an, dass das Modell alle Abweichungen der Antwortdaten um den Mittelwert erklärt.

Sie können auch den Informationsbereich des Modells in der Google Cloud Console aufrufen, um die Bewertungsmesswerte anzuzeigen:

Ausgabe von ML.EVALUATE

Modell verwenden, um Ergebnisse vorherzusagen

Nachdem Sie Ihr Modell ausgewertet haben, besteht der nächste Schritt darin, ein Ergebnis vorherzusagen. Sie können die ML.PREDICT-Funktion oder die predict-BigQuery DataFrames-Funktion auf dem Modell ausführen, um die Körpermasse der auf den Biscoeinseln lebenden Pinguine in Gramm vorherzusagen.

SQL

Als Eingabe verwendet die Funktion ML.PREDICT das trainierte Modell und ein Dataset, das dem Schema der Daten entspricht, die Sie mit Ausnahme der Labelspalte zum Trainieren des Modells verwendet haben.

Führen Sie die ML.PREDICT-Abfrage aus:

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Führen Sie im Abfrageeditor folgende Abfrage aus:

    SELECT
    *
    FROM
    ML.PREDICT(MODEL `bqml_tutorial.penguins_model`,
      (
      SELECT
        *
      FROM
        `bigquery-public-data.ml_datasets.penguins`
      WHERE island = 'Biscoe'));

BigQuery DataFrames

Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von BigQuery DataFrames in der BigQuery-Kurzanleitung: BigQuery DataFrames verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu BigQuery DataFrames.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

# Select the model you'll use for predictions. `read_gbq_model` loads
# model data from BigQuery, but you could also use the `model` object
# object from previous steps.
model = bpd.read_gbq_model(
    your_model_id,
    # For example: "bqml_tutorial.penguins_model",
)

# Load data from BigQuery
bq_df = bpd.read_gbq("bigquery-public-data.ml_datasets.penguins")

# Use 'contains' function to filter by island containing the string
# "Biscoe".
biscoe_data = bq_df.loc[bq_df["island"].str.contains("Biscoe")]

result = model.predict(biscoe_data)

# Expected output results:
#     predicted_body_mass_g  	      species	                island	 culmen_length_mm  culmen_depth_mm   body_mass_g 	flipper_length_mm	sex
# 23	  4681.782896	   Gentoo penguin (Pygoscelis papua)	Biscoe	      <NA>	            <NA>	        <NA>	          <NA>	        <NA>
# 332	  4740.7907	       Gentoo penguin (Pygoscelis papua)	Biscoe	      46.2	            14.4	        214.0	          4650.0	    <NA>
# 160	  4731.310452	   Gentoo penguin (Pygoscelis papua)	Biscoe	      44.5	            14.3	        216.0	          4100.0	    <NA>

Die Antwort sollte in etwa so aussehen:

Ausgabe von ML.PREDICT

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:

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Führen Sie im Abfrageeditor folgende Abfrage aus:

    SELECT
    *
    FROM
    ML.EXPLAIN_PREDICT(MODEL `bqml_tutorial.penguins_model`,
      (
      SELECT
        *
      FROM
        `bigquery-public-data.ml_datasets.penguins`
      WHERE island = 'Biscoe'),
      STRUCT(3 as top_k_features));
  3. Die Antwort sollte in etwa so aussehen:

    Ausgabe von ML.EXPLAIN_PREDICT

Bei linearen 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 Tabelle penguins 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 allen Beispielen trägt die Funktion sex am meisten zur Gesamtvorhersage bei.

Modell global erklären

Mit der Funktion ML.GLOBAL_EXPLAIN können Sie ermitteln, welche Features im Allgemeinen am wichtigsten sind, um das Pinguingewicht zu bestimmen. 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:

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Führen Sie im Abfrageeditor die folgende Abfrage aus, um das Modell neu zu trainieren:

    #standardSQL
    CREATE OR REPLACE MODEL `bqml_tutorial.penguins_model`
      OPTIONS (
        model_type = 'linear_reg',
        input_label_cols = ['body_mass_g'],
        enable_global_explain = TRUE)
    AS
    SELECT
      *
    FROM
      `bigquery-public-data.ml_datasets.penguins`
    WHERE
      body_mass_g IS NOT NULL;
  3. Führen Sie im Abfrageeditor die folgende Abfrage aus, um globale Erläuterungen zu erhalten:

    SELECT
      *
    FROM
      ML.GLOBAL_EXPLAIN(MODEL `bqml_tutorial.penguins_model`)
  4. Die Antwort sollte in etwa so aussehen:

    Ausgabe von ML.GLOBAL_EXPLAIN

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.

  • Sie können das von Ihnen erstellte Projekt löschen.
  • Sie können das Projekt aber auch behalten und das Dataset löschen.

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:

  1. Rufen Sie, falls erforderlich, die Seite "BigQuery" in der Google Cloud Console auf.

    Zur Seite "BigQuery"

  2. Wählen Sie im Navigationsbereich das Dataset bqml_tutorial aus, das Sie erstellt haben.

  3. Klicken Sie rechts im Fenster auf Delete dataset (Dataset löschen). Dadurch werden das Dataset, die Tabelle und alle Daten gelöscht.

  4. Bestätigen Sie im Dialogfeld Delete dataset (Dataset löschen) den Löschbefehl. Geben Sie dazu den Namen des Datasets (bqml_tutorial) ein und klicken Sie auf Delete (Löschen).

Projekt löschen

So löschen Sie das Projekt:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Nächste Schritte