Grundwahrheitsdaten vorbereiten
Wenn Sie Einbettungen für Population Dynamics verwenden möchten, müssen Ihre Grundwahrheitsdaten auf eine unterstützte geografische Grenze aggregiert werden. Da sich die Typen von Verwaltungsgrenzen weltweit unterscheiden, können Sie Ihre Daten entweder mit universellen mathematischen Gridsystemen (z. B. S2-Zellen) oder mit lokalen Verwaltungsregionen (z. B. Landkreisen oder Bezirken, je nach Datensatz des jeweiligen Landes) ausrichten.
Option 1: Einbettungen in ein vorhandenes Modell einbinden
- Vorhandene modellbasierte Grundwahrheit vorbereiten: Verwenden Sie die Einbettungen als räumliche Kovariaten, um ein vorhandenes Modell zu verbessern.
- Modell zur Fehlerkorrektur trainieren: Verbessern Sie ein vorhandenes Modell, indem Sie die Einbettungen in ein Modell einbinden, das die ursprüngliche Modellausgabe, den erwarteten Wert oder die Grundwahrheit und die Einbettungen verwendet, um ein neues Modell zur Fehlerkorrektur zu trainieren.
Option 2: Für bestimmte Anwendungsfälle optimieren
- Vorhersagemodell auswählen: Für Vorhersagen kann ein beliebiges Modell verwendet werden, z. B. GBDT, MLP oder linear.
- Einbettungen für Vorhersagen verwenden: Verwenden Sie Einbettungen für Population Dynamics zusammen mit anderen Kontextdaten als Eingabefeatures, um die Vorhersagegenauigkeit zu verbessern.
Benutzerdefinierte Grenzaggregation
Wenn Ihre Grundwahrheitsdaten benutzerdefinierte Polygone verwenden, z. B. Postleitzahlen, Isochronen für die Fahrzeit oder Handelsgebiete, können Sie eine Grenzaggregation durchführen. Bei diesem Vorgang werden mehrere S2-Zellvektoren zu einer einzelnen Darstellung für das Zielpolygon kombiniert. Durch die Auswahl der richtigen Gewichtungsmethode wird sichergestellt, dass die aggregierte Einbettung Ihre nachgelagerten Modellierungsziele genau widerspiegelt.
1. Bevölkerungsgewichteter Durchschnitt (empfohlene Standardeinstellung für PDI)
Verwenden Sie die bevölkerungsgewichtete Aggregation für nutzerorientierte Anwendungsfälle wie die Modellierung der Einzelhandelsleistung oder des Verbraucherverhaltens.
Wenn Sie eine flächengewichtete räumliche Aggregation für demografische Daten verwenden, können Ihre Features für maschinelles Lernen verzerrt werden. Das passiert, wenn unbewohnte Gebiete wie Parks, Industriezonen oder Gewässer das Profil der tatsächlichen Einwohner verfälschen.
Um dieses Problem zu beheben, können Sie in BigQuery einen bevölkerungsgewichteten Durchschnitt berechnen. Bei diesem Ansatz werden demografische Datensätze mit hoher Auflösung wie WorldPop im Earth Engine Data Catalog, verwendet, um die genaue Dichte jedes sich überschneidenden S2-Zellsegments zu berechnen.
Ein vollständiges Implementierungsbeispiel für einen bevölkerungsgewichteten Workflow finden Sie im interaktiven Notebook.
2. Flächengewichteter Durchschnitt
Verwenden Sie für Umwelt- oder physikalische Anwendungsfälle stattdessen die flächengewichtete Aggregation. Das ist nützlich für Analysen der Landnutzung, Studien zur bebauten Umwelt oder Infrastrukturplanung, bei denen Sie Regionen unabhängig von der Bevölkerungsverteilung bewerten müssen.
In diesen Szenarien ist die physische Landfläche wichtiger als die Bevölkerungsdichte. So trägt jeder Quadratkilometer innerhalb der Polygongrenze gleichermaßen zum aggregierten Vektor bei.
Bei dieser Methode wird der Einbettungsvektor jeder einzelnen S2-Zelle mit der geografischen Fläche gewichtet, die sie innerhalb des Zielpolygons abdeckt.
Georäumliche Vorgänge und S2-Zellenkonvertierung
Population Dynamics Insights verwendet S2-Zellen-Tokens der Ebene 12 (in der Spalte geo_id als 7-stellige Hexadezimalstrings gespeichert) als primäre räumliche Einheit. Mit den
integrierten Geografiefunktionen
in BigQuery können Sie Punktkoordinaten oder benutzerdefinierte räumliche Grenzen in
entsprechende S2-Zellen-Tokens umwandeln. Um S2-Zellen-Tokens zur Visualisierung in Polygongeometrien umzuwandeln, können Sie clientseitige Bibliotheken verwenden. Weitere Informationen finden Sie unter S2-Zellengeometrie aus einem S2-Hex-Token der Ebene 12 abrufen.
Punktkoordinaten in S2-Hex-Tokens der Ebene 12 umwandeln
Um Längen- und Breitengradkoordinaten mit der Spalte geo_id in Population Dynamics Insights abzugleichen, verwenden Sie die BigQuery-Funktion S2_CELLIDFROMPOINT in Kombination mit ST_GEOGPOINT.
In BigQuery werden S2-Zellen-IDs als signierte INT64-Werte gespeichert. Dadurch werden Zellen-IDs in bestimmten Regionen als negative Ganzzahlen ausgewertet. In den folgenden Beispielen definieren wir eine Hilfsfunktion namens TO_S2_HEX, die die Ganzzahl in ein standardmäßiges Hexadezimal-Token umwandelt und gemäß der S2-Geometriespezifikation nachfolgende Nullen entfernt.
Die folgende Abfrage wandelt Punktkoordinaten für den Times Square in New York City (Breitengrad 40.75796, Längengrad -73.98554) in das entsprechende S2-Hex-Token der Ebene 12 um:
CREATE TEMP FUNCTION TO_S2_HEX(s2_int INT64) RETURNS STRING AS ( RTRIM(FORMAT('%x%015x', (s2_int >> 60) & 0xF, s2_int & 0x0FFFFFFFFFFFFFFF), '0') ); SELECT 'Times Square, NYC' AS location_name, TO_S2_HEX(S2_CELLIDFROMPOINT(ST_GEOGPOINT(-73.98554, 40.75796), level => 12)) AS geo_id;
So wandeln Sie eine vorhandene Punkttabelle mit den Spalten latitude und longitude in verknüpfbare S2-Tokens um:
CREATE TEMP FUNCTION TO_S2_HEX(s2_int INT64) RETURNS STRING AS ( RTRIM(FORMAT('%x%015x', (s2_int >> 60) & 0xF, s2_int & 0x0FFFFFFFFFFFFFFF), '0') ); SELECT store_id, TO_S2_HEX(S2_CELLIDFROMPOINT(ST_GEOGPOINT(longitude, latitude), level => 12)) AS geo_id FROM `your-project.internal_data.store_locations`;
Überlappende S2-Zellen-Tokens der Ebene 12 für ein Polygon generieren
Wenn Ihre Daten benutzerdefinierte Flächenbegrenzungen verwenden (z. B. Handelsgebiete, Lieferzonen oder Postleitzahlen im WKT- oder GeoJSON-Format), wandeln Sie die Textdarstellung mit ST_GEOGFROM in ein GEOGRAPHY-Objekt um und verwenden Sie S2_COVERINGCELLIDS, um alle sich überschneidenden S2-Zellen der Ebene 12 zu extrahieren.
Die folgende Abfrage extrahiert alle S2-Hex-Tokens der Ebene 12, die ein benutzerdefiniertes Polygon in Midtown Manhattan abdecken:
CREATE TEMP FUNCTION TO_S2_HEX(s2_int INT64) RETURNS STRING AS ( RTRIM(FORMAT('%x%015x', (s2_int >> 60) & 0xF, s2_int & 0x0FFFFFFFFFFFFFFF), '0') ); WITH CustomBoundary AS ( SELECT ST_GEOGFROM('POLYGON((-73.99 40.75, -73.97 40.75, -73.97 40.76, -73.99 40.76, -73.99 40.75))') AS geom ) SELECT TO_S2_HEX(s2_id) AS geo_id FROM CustomBoundary, UNNEST(S2_COVERINGCELLIDS(geom, min_level => 12, max_level => 12)) AS s2_id;
S2-Zellengeometrie aus einem S2-Hex-Token der Ebene 12 abrufen
BigQuery GIS-Funktionen sind unidirektionale Konverter (Geometrie → S2-Zellen-ID) und enthalten keine Funktion zum Umwandeln eines S2-Zellen-Tokens in ein Polygon vom Typ GEOGRAPHY.
Um die Polygongeometrie eines S2-Zellen-Tokens für die Visualisierung oder räumliche
Analyse zu erhalten, verwenden Sie eine clientseitige Bibliothek in Python wie
s2sphere
um ein 7-stelliges S2-Zellen-Token in seine Grenzkoordinaten zu decodieren, und
shapely
um ein Polygon für Kartentools wie Folium zu erstellen:
import s2sphere from shapely.geometry import Polygon def s2_token_to_polygon(s2_token: str) -> Polygon: """Converts a 7-character S2 cell token into a Shapely Polygon.""" cell_id = s2sphere.CellId.from_token(s2_token) cell = s2sphere.Cell(cell_id) # Extract the 4 corner vertices of the S2 cell vertices = [] for i in range(4): vertex = cell.get_vertex(i) lat_lng = s2sphere.LatLng.from_point(vertex) vertices.append((lat_lng.lng().degrees, lat_lng.lat().degrees)) # Close the polygon loop vertices.append(vertices[0]) return Polygon(vertices) # Example: Get boundary for S2 token '549056f' cell_polygon = s2_token_to_polygon('549056f') print(cell_polygon.wkt)
Beispielabfragen
Ersetzen Sie your-project.your_dataset.embeddings_table durch den Namen Ihres tatsächlichen Projekts, Datasets und der Zieltabellen.
SQL: Einbettungen abrufen
Diese Abfrage ruft den Einbettungsvektor und die administrativen Metadaten für die S2-Zellen in Ihrem bereitgestellten Dataset ab.
SELECT geo_id, administrative_area_level_1_name AS state, administrative_area_level_2_name AS county, features -- The 330-dim vector FROM `your-project.your_dataset.embeddings_table` LIMIT 10;
SQL: Ähnliche Standorte finden
Mit dieser Abfrage werden Standorte mit ähnlichem Verhalten ohne externe Daten ermittelt.
Dabei wird die Funktion ML.DISTANCE verwendet, um die Kosinusähnlichkeit zu berechnen und die besten Übereinstimmungen für eine Ziel-S2-Zelle zurückzugeben. Dieser Ansatz unterstützt Szenarien zur Expansionsplanung, z. B. um zu ermitteln, wo eine neue Filiale eröffnet werden soll, basierend auf dem Profil eines erfolgreichen bestehenden Standorts.
Um S2-Zellen auf einer Karte zu visualisieren, müssen Sie die S2-Zellen-ID in die entsprechende Polygongeometrie umwandeln oder mit ihr verknüpfen, da in diesem Dataset S2-Zellen-Tokens anstelle von Längen- und Breitengradpunkten verwendet werden.
WITH TargetLocation AS ( SELECT features AS target_vector FROM `your-project.your_dataset.embeddings_table` -- Replace with your target S2 hex token (e.g., '80ead45') WHERE geo_id = 'YOUR_TARGET_S2_TOKEN' ) SELECT t.geo_id, t.administrative_area_level_1_name AS state, t.administrative_area_level_2_name AS county, -- Calculate Similarity (1.0 is identical, 0.0 is dissimilar) (1 - ML.DISTANCE(t.features, p.target_vector, 'COSINE')) AS similarity_score FROM `your-project.your_dataset.embeddings_table` t, TargetLocation p WHERE t.geo_id != 'YOUR_TARGET_S2_TOKEN' -- Exclude the target itself ORDER BY similarity_score DESC LIMIT 20;
SQL: Kundendaten verknüpfen
In diesem Beispiel wird gezeigt, wie Sie Ihre eigenen internen Daten (z. B. eine Tabelle zur Filialleistung) mit Verhaltens-Einbettungen anreichern. Ihre internen Daten müssen übereinstimmende S2-Zellen-Tokens (Hex-Strings) enthalten.
SELECT store.store_id, store.s2_token, store.total_revenue, embeddings.features AS pdfm_vector FROM `your-project.internal_data.store_performance` AS store JOIN `your-project.your_dataset.embeddings_table` AS embeddings ON -- Join based on the S2 hex token string store.s2_token = embeddings.geo_id
Python: Daten für maschinelles Lernen laden
Die Einbettungen werden als BigQuery-Arrays gespeichert. Wenn Sie sie in ML-Bibliotheken verwenden möchten, müssen Sie die Spalte in eine NumPy-Matrix umwandeln.
from google.cloud import bigquery import numpy as np import pandas as pd client = bigquery.Client() query = """ SELECT geo_id, features -- Returns as a list of floats FROM `your-project.your_dataset.embeddings_table` LIMIT 1000 """ # 1. Load data into DataFrame df = client.query(query).to_dataframe() # 2. Convert the 'features' column (Series of Lists) into a Matrix (2D Array) X_matrix = np.stack(df['features'].values) print(f"Data Loaded. Matrix Shape: {X_matrix.shape}") # Output: Data Loaded. Matrix Shape: (1000, 330)
In Google Colab ausführen
Quelle auf GitHub anzeigen