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 der raumbezogenen Analyse verfügbare geografische Funktionen. Weitere Informationen zu raumbezogenen Analysen finden Sie unter Einführung in raumbezogene Analysen.
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 von Google Cloud 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.
Hinweis
- Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
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 Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.
-
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 Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.
- BigQuery ist in neuen Projekten automatisch aktiviert.
Zum Aktivieren von BigQuery in einem vorhandenen Projekt wechseln Sie zu
BigQuery API aktivieren.
.
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. Denn 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 StringKennington
enthalten.
- Schritt 4: Mit der Funktion
- 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:
Rufen Sie in der Google Cloud Console die Seite „BigQuery“ auf.
Klicken Sie im Navigationsbereich im Abschnitt Ressourcen auf den Namen Ihres Projekts.
Klicken Sie rechts im Detailbereich auf Create Dataset (Dataset erstellen).
Führen Sie auf der Seite Dataset erstellen die folgenden Schritte aus:
- Geben Sie unter Dataset-ID
bqml_tutorial
ein. Wählen Sie als Data location (Speicherort der Daten) die Option 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.
- Geben Sie unter Dataset-ID
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 raumbezogenen Analysefunktionen ST_DISTANCE
und ST_GEOGPOINT
. Weitere Informationen zu diesen Funktionen finden Sie unter Geografische Funktionen.
Weitere Informationen zu raumbezogenen Analysen finden Sie unter Einführung in raumbezogene Analysen.
Abfrage ausführen
So führen Sie die Abfrage aus, die die Trainingsdaten für das Modell kompiliert:
Klicken Sie in der Google Cloud Console auf Neue Abfrage erstellen.
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
Klicken Sie auf Run (Ausführen).
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.
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. Auf diesem Tab wird der Davies-Bouldin-Index angezeigt.
Abfrage CREATE MODEL
ausführen
So führen Sie die Abfrage aus, mit der das k-Means-Modell erstellt wird:
Klicken Sie in der Google Cloud Console auf Neue Abfrage erstellen.
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
Klicken Sie auf Ausführen.
Maximieren Sie im Navigationsbereich im Abschnitt Ressourcen den Namen Ihres Projekts, klicken Sie auf bqml_tutorial und dann auf london_station_clusters.
Klicken Sie auf den Tab Schema (Schema). Das Modellschema führt die vier Radstationsattribute auf, die BigQuery ML zum Clustern verwendet hat. Es sollte wie unten dargestellt aussehen.
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.
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:
Klicken Sie in der Google Cloud Console auf Neue Abfrage erstellen.
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')))
Klicken Sie auf Run (Ausführen).
Sobald die Abfrage abgeschlossen ist, klicken Sie unterhalb des Textbereichs der Abfrage auf den Tab Results (Ergebnisse). Das Ergebnis sollte wie unten dargestellt aussehen.
Schritt 5: Modell verwenden, um datengestützte Entscheidungen zu treffen
Die Bewertungsergebnisse können Sie bei der Interpretation der verschiedenen Cluster unterstützen.
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
undCluster#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
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.
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:
Rufen Sie, falls erforderlich, die Seite "BigQuery" in der Google Cloud Console auf.
Wählen Sie im Navigationsbereich das Dataset bqml_tutorial aus, das Sie erstellt haben.
Klicken Sie rechts im Fenster auf Delete dataset (Dataset löschen). Dadurch werden das Dataset und das Modell gelöscht.
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:
- 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