Klassifizierungsmodell anhand von Volkszählungsdaten erstellen und verwenden


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

  1. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  2. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  3. BigQuery API aktivieren.

    Aktivieren Sie die 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

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:

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

    BigQuery aufrufen

  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 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:

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

    BigQuery aufrufen

  2. 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;
    
  3. Die Antwort sollte in etwa so aussehen:

    Volkszählungsdaten

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:

  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 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`
    
  3. Maximieren Sie im Bereich Explorer das Dataset census und suchen Sie die Ansicht input_data.

  4. Klicken Sie auf den Namen der Ansicht, um das Informationsfenster zu öffnen. Das Ansichtsschema wird auf dem Tab Schema angezeigt.

    Abfrageergebnisse

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 der SELECT-Anweisung als Labelspalte verwendet werden soll. Hier ist die Labelspalte income_bracket, sodass das Modell anhand der anderen in dieser Zeile vorhandenen Werte lernt, welcher der beiden Werte von income_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 auf TRUE 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 Ansicht input_data ab, die die Trainingsdaten enthält. Die Klausel WHERE filtert die Zeilen in input_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:

  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
      `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'
    
  3. Maximieren Sie im Bereich Explorer das Dataset census und dann den Ordner Modelle.

  4. Klicken Sie auf das Modell census_model, um den Informationsbereich zu öffnen.

  5. 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:

    Informationen zum Clusterschema

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:

  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 `census.census_model`,
        (
        SELECT
          *
        FROM
          `census.input_data`
        WHERE
          dataframe = 'evaluation'
        )
      )
    
  3. Die Antwort sollte in etwa so aussehen:

    Ausgabe von ML.EVALUATE

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

Ausgabe von ML.EVALUATE

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:

  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 `census.census_model`,
        (
        SELECT
          *
        FROM
          `census.input_data`
        WHERE
          dataframe = 'prediction'
        )
      )
    
  3. Die Antwort sollte in etwa so aussehen:

    Ergebnisse von ML.PREDICT

    predicted_income_bracket ist der vorhergesagte Wert von income_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:

  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 `census.census_model`,
      (
      SELECT
        *
      FROM
        `census.input_data`
      WHERE
        dataframe = 'evaluation'),
      STRUCT(3 as top_k_features))
    
  3. Die Antwort sollte in etwa so aussehen:

    Ausgabe von ML.EXPLAIN_PREDICT

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:

  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:

    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'
    
  3. Führen Sie im Abfrageeditor die folgende Abfrage aus, um globale Erläuterungen zu erhalten:

    SELECT
      *
    FROM
      ML.GLOBAL_EXPLAIN(MODEL `census.census_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.

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. Klicken Sie im Navigationsbereich auf das Dataset census, das Sie erstellt haben.

  3. Klicken Sie rechts im Fenster auf Dataset löschen. Dadurch werden das Dataset und das Modell gelöscht.

  4. 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:

  1. Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

Nächste Schritte