k-Means-Clustering-Modelle erstellen

BigQuery ML unterstützt das unüberwachte Lernen. So können Sie den k-means-Algorithmus anwenden, um Daten in Clustern zu gruppieren. Anders als bei überwachtem maschinellem Lernen, bei dem es um vorhersagende Analysen geht, beschäftigt sich das unüberwachte Lernen mit beschreibenden Analysen. Es dient also dazu, dass Sie Ihre Daten verstehen, um datengestützte Entscheidungen treffen zu können.

In dieser Anleitung verwenden Sie ein k-Means-Modell in BigQuery ML, um aus Daten des öffentlichen Datasets zum Fahrradverleih in London Cluster zu bilden. Die Daten zum Londoner Fahrradverleih enthalten die Anzahl der verliehenen Fahrräder des "Santander Cycle Hire Scheme" in London von 2011 bis heute. Außerdem enthalten die Daten Zeitstempel zu Leihbeginn und -ende, Namen von Verleihstationen und Fahrtdauer.

Die Abfragen in dieser Anleitung verwenden in BigQuery GIS verfügbare geografische Funktionen. Weitere Informationen zu BigQuery GIS finden Sie in der Einführung zu BigQuery GIS.

Lernziele

In dieser Anleitung können Sie:

  • Ein k-Means-Clustering-Modell erstellen
  • Datengestützte Entscheidungen auf der Grundlage der Clustervisualisierung in BigQuery ML treffen

Kosten

In dieser Anleitung werden kostenpflichtige Komponenten der Cloud Platform verwendet, darunter:

  • BigQuery
  • BigQuery ML

Informationen zu den Kosten für BigQuery finden Sie auf der Seite BigQuery-Preise.

Informationen zu den Kosten für BigQuery ML finden Sie auf der Seite BigQuery ML – Preise.

Vorbereitung

  1. Melden Sie sich bei Ihrem Google-Konto an.

    Wenn Sie noch kein Konto haben, registrieren Sie sich hier für ein neues Konto.

  2. Wählen Sie in der Cloud Console auf der Projektauswahlseite ein Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  4. BigQuery ist in neuen Projekten automatisch aktiviert. Zum Aktivieren von BigQuery in einem vorhandenen Projekt wechseln Sie zu Aktivieren Sie die BigQuery API.

    Aktivieren Sie die API

    .

Einführung

Es ist möglich, dass Ihre Daten natürliche Datengruppierungen und Cluster von Daten enthalten. Damit Sie datengestützte Entscheidungen treffen können, möchten Sie diese Gruppierungen vielleicht deskriptiv ermitteln. Es kann zum Beispiel sein, dass ein Händler natürliche Gruppierungen von Kunden mit ähnlichen Kaufgewohnheiten und -orten identifizieren möchte. Dieser Vorgang wird als Kundensegmentierung bezeichnet.

Für die Kundensegmentierung können Daten wie unter anderem das besuchte Geschäft, die gekauften Artikel oder der Preis herangezogen werden. Sie würden dann ein Modell erstellen, um nachvollziehen zu können, wie sich diese Gruppen von Kundenidentitäten zusammensetzen. Anhand dessen können Sie Artikel entwickeln, von denen sich Gruppenmitglieder angesprochen fühlen.

Außerdem können Sie unter den gekauften Artikeln Produktgruppen finden. Dabei würden Artikel unter anderem anhand der Person, die sie gekauft haben, des Kaufzeitpunktes und des -ortes in Clustern zusammengefasst werden. Auch dafür würden Sie ein Modell erstellen, um die Eigenschaften einer Produktgruppe zu bestimmen. So können Sie fundierte Entscheidungen darüber treffen, wie das Cross-Selling verbessert werden kann.

In dieser Anleitung erstellen Sie mit BigQuery ML ein k-Means-Modell, das die Daten zum Fahrradverleih in London anhand von Attributen zu Radstationen clustert.

Die Erstellung eines k-means-Modells umfasst die folgenden Schritte:

  • Schritt 1: Dataset erstellen, um das Modell zu speichern
    Im ersten Schritt erstellen Sie ein Dataset, in dem das Modell gespeichert wird.
  • Schritt 2: Trainingsdaten prüfen
    Der nächste Schritt dient der Prüfung der Daten, die Sie für das Training des Clustering-Modells verwenden. Dazu führen Sie für die Tabelle london_bicycles eine Abfrage aus. Da k-Means ein unüberwachtes Lernverfahren ist, sind für das Modelltraining weder Labels erforderlich noch müssen die Daten in Trainingsdaten und Bewertungsdaten aufgeteilt werden.
  • Schritt 3: k-Means-Modell erstellen
    Im dritten Schritt erstellen Sie das k-Means-Modell. Bei der Erstellung des Modells ist das Clustering-Feld station_name und Sie gruppieren die Daten basierend auf dem Attribut "Radstation", z. B. der Entfernung der Radstation vom Stadtzentrum.
  • Schritt 4: Mit der Funktion ML.PREDICT den Cluster einer Radstation vorhersagen
    Als Nächstes verwenden Sie die Funktion ML.PREDICT, um den Cluster für einen bestimmten Satz von Radstationen vorherzusagen. Sie prognostizieren Cluster für alle Namen von Radstationen, die den String Kennington enthalten.
  • Schritt 5: Modell verwenden, um datengestützte Entscheidungen zu treffen
    Im letzten Schritt setzen Sie das Modell ein, um datengestützte Entscheidungen zu treffen. So können Sie etwa anhand der Modellergebnisse bestimmen, für welche Stationen zusätzliche Kapazitäten vorteilhaft wären.

Schritt 1: Dataset erstellen

Im ersten Schritt erstellen Sie ein BigQuery-Dataset, um das Modell zu speichern. So erstellen Sie ein Dataset:

  1. Öffnen Sie in der Cloud Console die BigQuery-Web-UI.

    Zur BigQuery-Web-UI

  2. Klicken Sie im Navigationsbereich im Abschnitt Resources (Ressourcen) auf den Namen Ihres Projekts.

  3. Klicken Sie rechts im Detailbereich auf Create Dataset (Dataset erstellen).

    Dataset erstellen

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

    • Geben Sie unter Dataset ID (Dataset-ID) bqml_tutorial ein.
    • Wählen Sie als Data location (Speicherort der Daten) die Option European Union (EU) (Europäische Union (EU)) aus. Das öffentliche Dataset zum Fahrradverleih in London wird am multiregionalen Standort EU gespeichert. Ihr Dataset sollte sich am selben Standort befinden.

      Seite

  5. Lassen Sie alle anderen Standardeinstellungen unverändert und klicken Sie auf Create Dataset (Dataset erstellen).

Schritt 2: Trainingsdaten prüfen

Als Nächstes prüfen Sie die Daten, die Sie für das Training des k-means-Modells verwenden. In dieser Anleitung clustern Sie Radstationen anhand der folgenden Attribute:

  • Dauer des Verleihs
  • Anzahl der Fahrten pro Tag
  • Entfernung zum Stadtzentrum

Mit der folgenden Abfrage werden die Trainingsdaten kompiliert. Diese Abfrage ist weiter unten in dieser Anleitung in der CREATE MODEL-Anweisung enthalten.

WITH
  hs AS (
  SELECT
    h.start_station_name AS station_name,
    IF
    (EXTRACT(DAYOFWEEK
      FROM
        h.start_date) = 1
      OR EXTRACT(DAYOFWEEK
      FROM
        h.start_date) = 7,
      "weekend",
      "weekday") AS isweekday,
    h.duration,
    ST_DISTANCE(ST_GEOGPOINT(s.longitude,
        s.latitude),
      ST_GEOGPOINT(-0.1,
        51.5))/1000 AS distance_from_city_center
  FROM
    `bigquery-public-data.london_bicycles.cycle_hire` AS h
  JOIN
    `bigquery-public-data.london_bicycles.cycle_stations` AS s
  ON
    h.start_station_id = s.id
  WHERE
    h.start_date BETWEEN CAST('2015-01-01 00:00:00' AS TIMESTAMP)
    AND CAST('2016-01-01 00:00:00' AS TIMESTAMP) ),
  stationstats AS (
  SELECT
    station_name,
    AVG(duration) AS duration,
    COUNT(duration) AS num_trips,
    MAX(distance_from_city_center) AS distance_from_city_center
  FROM
    hs
  GROUP BY
    station_name )
SELECT
  *
FROM
  stationstats
ORDER BY
  distance_from_city_center ASC

Abfragedetails

Diese Abfrage extrahiert Daten zum Fahrradverleih, darunter start_station_name und duration, und verbindet sie mit Informationen zu Radstationen, einschließlich distance-from-city-center. Anschließend werden Attribute der Station, einschließlich der durchschnittlichen Fahrtzeit und der Anzahl der Fahrten, in stationstats berechnet und das Bahnhofsattribut distance_from_city_center wird durchlaufen.

Diese Abfrage verwendet die Klausel WITH, um Unterabfragen zu definieren. Außerdem nutzt sie die Funktionen ST_DISTANCE und ST_GEOGPOINT von BigQuery GIS. Weitere Informationen zu diesen Funktionen finden Sie unter Geografische Funktionen. Weitere Informationen zu BigQuery GIS finden Sie in der Einführung in BigQuery GIS.

Abfrage ausführen

So führen Sie die Abfrage aus, die die Trainingsdaten für das Modell kompiliert:

  1. Klicken Sie in der BigQuery-Web-UI auf Compose new query (Neue Abfrage erstellen).

  2. Geben Sie in den Textbereich im Abfrageeditor die folgende Standard-SQL-Abfrage ein.

    WITH
      hs AS (
      SELECT
        h.start_station_name AS station_name,
        IF
        (EXTRACT(DAYOFWEEK
          FROM
            h.start_date) = 1
          OR EXTRACT(DAYOFWEEK
          FROM
            h.start_date) = 7,
          "weekend",
          "weekday") AS isweekday,
        h.duration,
        ST_DISTANCE(ST_GEOGPOINT(s.longitude,
            s.latitude),
          ST_GEOGPOINT(-0.1,
            51.5))/1000 AS distance_from_city_center
      FROM
        `bigquery-public-data.london_bicycles.cycle_hire` AS h
      JOIN
        `bigquery-public-data.london_bicycles.cycle_stations` AS s
      ON
        h.start_station_id = s.id
      WHERE
        h.start_date BETWEEN CAST('2015-01-01 00:00:00' AS TIMESTAMP)
        AND CAST('2016-01-01 00:00:00' AS TIMESTAMP) ),
      stationstats AS (
      SELECT
        station_name,
        AVG(duration) AS duration,
        COUNT(duration) AS num_trips,
        MAX(distance_from_city_center) AS distance_from_city_center
      FROM
        hs
      GROUP BY
        station_name )
    SELECT
      *
    FROM
      stationstats
    ORDER BY
      distance_from_city_center ASC
    
    
  3. Klicken Sie auf Run (Ausführen).

  4. Sobald die Abfrage abgeschlossen ist, klicken Sie unterhalb des Textbereichs der Abfrage auf den Tab Results (Ergebnisse). Auf dem Tab "Results" (Ergebnisse) werden die Spalten angezeigt, die zum Trainieren Ihres Modells verwendet wurden: station_name, duration, num_trips, distance_from_city_center. Das Ergebnis sollte wie unten dargestellt aussehen.

    Abfrageergebnisse

Schritt 3: k-Means-Modell erstellen

Nachdem Sie nun die Trainingsdaten geprüft haben, geht es an die Erstellung eines k-Means-Modells mit den Daten.

Sie können ein k-Means-Modell mithilfe der Anweisung CREATE MODEL mit der Option model_type=kmeans erstellen. Die folgende Abfrage fügt eine CREATE MODEL-Anweisung zur vorherigen Abfrage hinzu und entfernt die id-Felder aus den Daten.

CREATE OR REPLACE MODEL
  bqml_tutorial.london_station_clusters OPTIONS(model_type='kmeans',
    num_clusters=4) AS
WITH
  hs AS (
  SELECT
    h.start_station_name AS station_name,
  IF
    (EXTRACT(DAYOFWEEK
      FROM
        h.start_date) = 1
      OR EXTRACT(DAYOFWEEK
      FROM
        h.start_date) = 7,
      "weekend",
      "weekday") AS isweekday,
    h.duration,
    ST_DISTANCE(ST_GEOGPOINT(s.longitude,
        s.latitude),
      ST_GEOGPOINT(-0.1,
        51.5))/1000 AS distance_from_city_center
  FROM
    `bigquery-public-data.london_bicycles.cycle_hire` AS h
  JOIN
    `bigquery-public-data.london_bicycles.cycle_stations` AS s
  ON
    h.start_station_id = s.id
  WHERE
    h.start_date BETWEEN CAST('2015-01-01 00:00:00' AS TIMESTAMP)
    AND CAST('2016-01-01 00:00:00' AS TIMESTAMP) ),
  stationstats AS (
  SELECT
    station_name,
    isweekday,
    AVG(duration) AS duration,
    COUNT(duration) AS num_trips,
    MAX(distance_from_city_center) AS distance_from_city_center
  FROM
    hs
  GROUP BY
    station_name, isweekday)
SELECT
  * EXCEPT(station_name, isweekday)
FROM
  stationstats

Abfragedetails

Die Anweisung CREATE MODEL gibt die gewünschte Anzahl von Clustern an, in diesem Fall vier. In der SELECT-Anweisung schließt die Klausel EXCEPT die Spalte station_name aus, da station_name kein Feature ist. Mit der Abfrage wird pro "station_name" eine eindeutige Zeile erstellt und in der SELECT-Anweisung werden nur die Features genannt.

Wenn Sie die Option num_clusters weglassen, wählt BigQuery ML eine angemessene Standardeinstellung basierend auf der Gesamtzahl der Zeilen in den Trainingsdaten aus. Eine weitere Möglichkeit, eine passende Anzahl zu ermitteln, ist eine Hyperparameter-Abstimmung. Zur Bestimmung einer optimalen Clusterzahl würden Sie dabei die Abfrage CREATE MODEL für verschiedene Werte von num_clusters ausführen, den Fehlermesswert suchen und den Punkt auswählen, an dem er minimal ist. Den Fehlermesswert erhalten Sie, wenn Sie das Modell auswählen und dann den Tab Training anklicken. Dort wird der Davies-Bouldin-Index angezeigt.

Tab

Abfrage CREATE MODEL ausführen

So führen Sie die Abfrage aus, mit der das k-Means-Modell erstellt wird:

  1. Klicken Sie in der BigQuery-Web-UI auf Compose new query (Neue Abfrage erstellen).

  2. Geben Sie in den Textbereich im Abfrageeditor die folgende Standard-SQL-Abfrage ein.

    CREATE OR REPLACE MODEL
      bqml_tutorial.london_station_clusters OPTIONS(model_type='kmeans',
        num_clusters=4) AS
    WITH
      hs AS (
      SELECT
        h.start_station_name AS station_name,
      IF
        (EXTRACT(DAYOFWEEK
          FROM
            h.start_date) = 1
          OR EXTRACT(DAYOFWEEK
          FROM
            h.start_date) = 7,
          "weekend",
          "weekday") AS isweekday,
        h.duration,
        ST_DISTANCE(ST_GEOGPOINT(s.longitude,
            s.latitude),
          ST_GEOGPOINT(-0.1,
            51.5))/1000 AS distance_from_city_center
      FROM
        `bigquery-public-data.london_bicycles.cycle_hire` AS h
      JOIN
        `bigquery-public-data.london_bicycles.cycle_stations` AS s
      ON
        h.start_station_id = s.id
      WHERE
        h.start_date BETWEEN CAST('2015-01-01 00:00:00' AS TIMESTAMP)
        AND CAST('2016-01-01 00:00:00' AS TIMESTAMP) ),
      stationstats AS (
      SELECT
        station_name,
        isweekday,
        AVG(duration) AS duration,
        COUNT(duration) AS num_trips,
        MAX(distance_from_city_center) AS distance_from_city_center
      FROM
        hs
      GROUP BY
        station_name, isweekday)
    SELECT
      * EXCEPT(station_name, isweekday)
    FROM
      stationstats
    
  3. Klicken Sie auf Run (Ausführen).

  4. Maximieren Sie in der BigQuery-Web-UI im Abschnitt Resources (Ressourcen) Ihren Projektnamen, klicken Sie auf bqml_tutorial und anschließend auf london_station_clusters.

  5. Klicken Sie auf den Tab Schema. Das Modellschema führt die vier Radstationsattribute auf, die BigQuery ML zum Clustern verwendet hat. Es sollte wie unten dargestellt aussehen.

    Informationen zum Clusterschema

  6. Klicken Sie auf den Tab Evaluation (Bewertung). In diesem Tab werden Visualisierungen der durch das k-Means-Modell identifizierten Cluster angezeigt. Unter Numerical Features (Numerische Features) werden in Balkendiagrammen bis zu zehn der wichtigsten numerischen Featurewerte für jeden Schwerpunkt angezeigt. Im Drop-down-Menü können Sie auswählen, welche Features angezeigt werden sollen.

    Balkendiagramme zu numerischen Features

Schritt 4: Mit der Funktion ML.PREDICT den Cluster einer Radstation vorhersagen

Mit der Funktion ML.PREDICT können Sie den Cluster ermitteln, zu dem eine bestimmte Radstation gehört. Die folgende Abfrage sagt den Cluster jeder Radstation vorher, deren Name den String "Kennington" enthält.

WITH
  hs AS (
  SELECT
    h.start_station_name AS station_name,
    IF
    (EXTRACT(DAYOFWEEK
      FROM
        h.start_date) = 1
      OR EXTRACT(DAYOFWEEK
      FROM
        h.start_date) = 7,
      "weekend",
      "weekday") AS isweekday,
    h.duration,
    ST_DISTANCE(ST_GEOGPOINT(s.longitude,
        s.latitude),
      ST_GEOGPOINT(-0.1,
        51.5))/1000 AS distance_from_city_center
  FROM
    `bigquery-public-data.london_bicycles.cycle_hire` AS h
  JOIN
    `bigquery-public-data.london_bicycles.cycle_stations` AS s
  ON
    h.start_station_id = s.id
  WHERE
    h.start_date BETWEEN CAST('2015-01-01 00:00:00' AS TIMESTAMP)
    AND CAST('2016-01-01 00:00:00' AS TIMESTAMP) ),
  stationstats AS (
  SELECT
    station_name,
    AVG(duration) AS duration,
    COUNT(duration) AS num_trips,
    MAX(distance_from_city_center) AS distance_from_city_center
  FROM
    hs
  GROUP BY
    station_name )
SELECT
  * EXCEPT(nearest_centroids_distance)
FROM
  ML.PREDICT( MODEL bqml_tutorial.london_station_clusters,
    (
    SELECT
      *
    FROM
      stationstats
    WHERE
      REGEXP_CONTAINS(station_name, 'Kennington')))

Abfragedetails

Diese Abfrage verwendet die Funktion REGEXP_CONTAINS, um in der Spalte station_name alle Einträge zu finden, die den String "Kennington" enthalten. Anhand dieser Werte prognostiziert die Funktion ML.PREDICT, welche Cluster diese Stationen enthalten würden.

Abfrage ML.PREDICT ausführen

So führen Sie die Abfrage ML.PREDICT aus:

  1. Klicken Sie in der BigQuery-Web-UI auf Compose new query (Neue Abfrage erstellen).

  2. Geben Sie in den Textbereich im Abfrageeditor die folgende Standard-SQL-Abfrage ein.

    WITH
      hs AS (
      SELECT
        h.start_station_name AS station_name,
        IF
        (EXTRACT(DAYOFWEEK
          FROM
            h.start_date) = 1
          OR EXTRACT(DAYOFWEEK
          FROM
            h.start_date) = 7,
          "weekend",
          "weekday") AS isweekday,
        h.duration,
        ST_DISTANCE(ST_GEOGPOINT(s.longitude,
            s.latitude),
          ST_GEOGPOINT(-0.1,
            51.5))/1000 AS distance_from_city_center
      FROM
        `bigquery-public-data.london_bicycles.cycle_hire` AS h
      JOIN
        `bigquery-public-data.london_bicycles.cycle_stations` AS s
      ON
        h.start_station_id = s.id
      WHERE
        h.start_date BETWEEN CAST('2015-01-01 00:00:00' AS TIMESTAMP)
        AND CAST('2016-01-01 00:00:00' AS TIMESTAMP) ),
      stationstats AS (
      SELECT
        station_name,
        AVG(duration) AS duration,
        COUNT(duration) AS num_trips,
        MAX(distance_from_city_center) AS distance_from_city_center
      FROM
        hs
      GROUP BY
        station_name )
    SELECT
      * EXCEPT(nearest_centroids_distance)
    FROM
      ML.PREDICT( MODEL bqml_tutorial.london_station_clusters,
        (
        SELECT
          *
        FROM
          stationstats
        WHERE
          REGEXP_CONTAINS(station_name, 'Kennington')))
    
    
  3. Klicken Sie auf Run (Ausführen).

  4. Sobald die Abfrage abgeschlossen ist, klicken Sie unterhalb des Textbereichs der Abfrage auf den Tab Results (Ergebnisse). Das Ergebnis sollte wie unten dargestellt aussehen.

    Ergebnisse von ML.PREDICT

Schritt 5: Modell verwenden, um datengestützte Entscheidungen zu treffen

Die Bewertungsergebnisse können Sie bei der Interpretation der verschiedenen Cluster unterstützen.

Balkendiagramme zu numerischen Features

In diesem Beispiel zeigt Cluster#3 eine belebte Radstation in der Nähe des Stadtzentrums. Cluster#2 zeigt eine zweite, weniger ausgelastete Station in der Innenstadt. Cluster#1 zeigt eine weniger ausgelastete Station am Stadtrand, an der längere Mietzeiten verzeichnet werden. Cluster#4 zeigt eine weitere Vorstadtstation, an der kürzere Fahrten erfasst werden. Mit diesen Ergebnissen können Sie die Daten nun nutzen, um fundierte Entscheidungen zu treffen. Beispiel:

  • Angenommen, Sie müssen eine neue Art Schloss ausprobieren. Welchen Radstations-Cluster sollten Sie für dieses Experiment wählen? Die Stationen in Cluster#1, Cluster#2 und Cluster#4 scheinen sich logisch betrachtet zu eignen, weil sie nicht die am stärksten frequentierten Stationen sind.

  • In einer weiteren Annahme möchten Sie in einigen Radstationen Rennräder bereitstellen. Welche Stationen wären hierfür die richtige Wahl? Cluster#1 ist die Gruppe von Stationen, die weit vom Stadtzentrum entfernt sind und an denen die längsten Fahrten verzeichnet werden. Hier haben Sie Ihre Kandidaten für Rennräder.

Bereinigen

So vermeiden Sie, dass Ihrem Google Cloud Platform-Konto die in dieser Anleitung verwendeten Ressourcen in Rechnung gestellt werden:

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

Datasets 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. Öffnen Sie ggf. die BigQuery-Web-UI.

    Zur BigQuery-Web-UI

  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 und das Modell 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. Wechseln Sie in der 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 Beenden, um das Projekt zu löschen.

Weitere Informationen