Grundwahrheitsdaten vorbereiten
Wenn Sie Einbettungen für die Bevölkerungsdynamik 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) abstimmen.
Option 1: Einbettungen in ein vorhandenes Modell einbeziehen
- Vorhandene modellbasierte Grundwahrheit vorbereiten: Verwenden Sie die Einbettungen als raumbezogene Kovariaten, um ein vorhandenes Modell zu verbessern.
- Modell zur Fehlerkorrektur trainieren: Verbessern Sie ein vorhandenes Modell, indem Sie die Einbettungen in ein Modell einbeziehen, 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 jedes Modell verwendet werden, z. B. GBDT, MLP oder linear.
- Einbettungen für Vorhersagen verwenden: Verwenden Sie Einbettungen für die Bevölkerungsdynamik 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 (empfohlener Standard für PDI)
Verwenden Sie die bevölkerungsgewichtete Aggregation für nutzerorientierte Anwendungsfälle wie die Leistung von Einzelhandelsgeschäften oder die Modellierung 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 verzerren.
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 relevanter 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 nach der geografischen Fläche gewichtet, die sie innerhalb des Zielpolygons abdeckt.
Raumbezogene Vorgänge und S2-Zellkonvertierung
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. Sie können die
integrierten geografischen Funktionen
in BigQuery verwenden, um Punktkoordinaten oder benutzerdefinierte räumliche Grenzen in
entsprechende S2-Zellen-Tokens zu konvertieren. Um S2-Zellen-Tokens zur Visualisierung in Polygongeometrien zu konvertieren, können Sie clientseitige Bibliotheken verwenden. Weitere Informationen finden Sie unter S2-Zellgeometrie aus einem S2-Hex-Token der Ebene 12 abrufen.
Punktkoordinaten in S2-Hex-Tokens der Ebene 12 konvertieren
Um Breiten-/Längengrad-Punktkoordinaten 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-Zell-IDs als signierte INT64-Werte gespeichert. Dadurch werden Zell-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 konvertiert und nach der S2-Geometriespezifikation nachgestellte Nullen entfernt.
Die folgende Abfrage konvertiert 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:
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 konvertieren Sie eine vorhandene Punkttabelle mit den Spalten latitude und longitude in verknüpfbare S2-Tokens:
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`;
S2-Zellen-Tokens der Ebene 12 für ein Polygon generieren
Wenn Ihre Daten benutzerdefinierte Grenzlinien verwenden (z. B. Handelsgebiete, Lieferzonen oder Postleitzahlen im WKT- oder GeoJSON-Format), konvertieren Sie die Textdarstellung mit ST_GEOGFROM in eine GEOGRAPHY 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-Zellgeometrie aus einem S2-Hex-Token der Ebene 12 abrufen
BigQuery GIS-Funktionen sind unidirektionale Konverter (Geometrie → S2-Zell-ID) und enthalten keine Funktion zum Konvertieren eines S2-Zellen-Tokens in eine Polygon-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 suchen
Mit dieser Abfrage werden Standorte mit ähnlichem Verhalten ermittelt, ohne dass externe Daten erforderlich sind.
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 für die Expansionsplanung, z. B. um zu ermitteln, wo ein neues Geschäft eröffnet werden soll, basierend auf dem Profil eines erfolgreichen bestehenden Standorts.
Wenn Sie S2-Zellen auf einer Karte visualisieren möchten, müssen Sie die S2-Zellen-ID in die entsprechende Polygongeometrie konvertieren oder mit ihr verknüpfen, da in diesem Dataset S2-Zellen-Tokens anstelle von Breiten- und Längengradpunkten 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 Geschäftsleistung) mit Verhaltensdaten 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 konvertieren.
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 ansehen