Préparer les données de vérité terrain
Pour utiliser les représentations vectorielles continues de la dynamique des populations, vos données de vérité terrain doivent être agrégées selon une limite géographique compatible. Comme les types de limites administratives varient à l'échelle mondiale, vous pouvez aligner vos données à l'aide de systèmes de grille mathématiques universels (comme les cellules S2) ou de régions administratives locales (comme les comtés ou les districts, selon l'ensemble de données spécifique au pays).
Option 1 : Intégrer des représentations vectorielles continues dans un modèle existant
- Préparer les données de vérité terrain basées sur un modèle existant : utilisez les représentations vectorielles continues comme covariables géospatiales pour améliorer un modèle existant.
- Entraîner un modèle de correction des erreurs : améliorez un modèle existant en intégrant les représentations vectorielles continues dans un modèle qui prend en compte la sortie du modèle d'origine, la valeur attendue ou la vérité terrain, et les représentations vectorielles continues pour apprendre un nouveau modèle de correction des erreurs.
Option 2 : Optimiser pour des cas d'utilisation spécifiques
- Choisir un modèle de prédiction : vous pouvez utiliser n'importe quel modèle, tel que GBDT, MLP ou linéaire, pour les prédictions.
- Utiliser des représentations vectorielles continues pour la prédiction : utilisez les représentations vectorielles continues de la dynamique des populations comme caractéristiques d'entrée, ainsi que d'autres données contextuelles, pour améliorer la précision des prédictions.
Agrégation de limites personnalisée
Si vos données de vérité terrain utilisent des polygones personnalisés, tels que des codes postaux, des isochrones de temps de trajet ou des zones de chalandise, vous pouvez effectuer une agrégation de limites. Ce processus combine plusieurs vecteurs de cellule S2 en une seule représentation pour le polygone cible. Le choix de la bonne méthodologie de pondération garantit que la représentation vectorielle continue agrégée reflète avec précision vos objectifs de modélisation en aval.
1. Moyenne pondérée par la population (valeur par défaut recommandée pour le PDI)
Utilisez l'agrégation pondérée par la population pour les cas d'utilisation centrés sur l'humain, tels que les performances des magasins de détail ou la modélisation du comportement des consommateurs.
L'utilisation d'une agrégation spatiale pondérée par zone pour les données démographiques peut déformer vos caractéristiques de machine learning. Cela se produit lorsque des zones non peuplées, telles que des parcs, des zones industrielles ou des étendues d'eau, faussent le profil des résidents réels.
Pour résoudre ce problème, vous pouvez effectuer une moyenne pondérée par la population dans BigQuery. Cette approche utilise des ensembles de données démographiques haute résolution, tels que WorldPop dans le catalogue de données Earth Engine, pour calculer la densité précise de chaque segment de cellule S2 qui se croisent.
Pour voir un exemple d'implémentation complet d'un workflow pondéré par la population, exécutez le notebook interactif.
2. Moyenne pondérée par zone
Pour les cas d'utilisation environnementaux ou physiques, utilisez plutôt l'agrégation pondérée par zone. Cela est utile pour l'analyse de l'utilisation des sols, les études sur l'environnement bâti ou la planification des infrastructures, où vous devez évaluer les régions indépendamment de la répartition de la population.
Dans ces scénarios, la superficie physique est plus pertinente que la densité de population humaine. Cela garantit que chaque kilomètre carré à l'intérieur de la limite du polygone contribue de manière égale au vecteur agrégé.
Avec cette méthode, le vecteur de représentation vectorielle continue de chaque cellule S2 constituante est pondéré par la superficie géographique qu'il couvre dans le polygone cible.
Opérations géospatiales et conversion de cellules S2
Population Dynamics Insights utilise des jetons de cellule S2 de niveau 12 (stockés dans la colonne geo_id sous forme de chaînes hexadécimales de sept caractères) comme unité spatiale principale. Vous pouvez utiliser les
fonctions géographiques intégrées
de BigQuery pour convertir les coordonnées de points ou les limites spatiales personnalisées en
jetons de cellule S2 correspondants. Pour convertir des jetons de cellule S2 en géométries de polygone à des fins de visualisation, vous pouvez utiliser des bibliothèques côté client. Pour en savoir plus, consultez Obtenir
la géométrie d'une cellule S2 à partir d'un jeton hexadécimal S2 de niveau 12.
Convertir des coordonnées de points en jetons hexadécimaux S2 de niveau 12
Pour faire correspondre les coordonnées de points de latitude/longitude avec la colonne geo_id dans Population Dynamics Insights, utilisez la fonction BigQuery S2_CELLIDFROMPOINT combinée à ST_GEOGPOINT.
BigQuery stocke les ID de cellule S2 sous forme de valeurs INT64 signées, ce qui fait que les ID de cellule de certaines régions sont évalués comme des entiers négatifs. Dans les exemples ci-dessous, nous définissons une fonction d'assistance appelée TO_S2_HEX qui convertit l'entier en jeton hexadécimal standard et supprime les zéros de fin conformément à la spécification de géométrie S2.
La requête suivante convertit les coordonnées de points de Times Square, à New York (latitude 40.75796, longitude -73.98554) en jeton hexadécimal S2 de niveau 12 correspondant :
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;
Pour convertir une table de points existante avec des colonnes latitude et longitude en jetons S2 pouvant être joints :
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`;
Générer des jetons de cellule S2 de niveau 12 couvrant un polygone
Si vos données utilisent des limites de zone personnalisées (telles que des zones de chalandise, des zones de livraison ou des codes postaux au format WKT ou GeoJSON), convertissez la représentation textuelle en GEOGRAPHY à l'aide de ST_GEOGFROM et utilisez S2_COVERINGCELLIDS pour extraire toutes les cellules S2 de niveau 12 qui se croisent.
La requête suivante extrait tous les jetons hexadécimaux S2 de niveau 12 couvrant un polygone personnalisé dans le centre de Manhattan :
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;
Obtenir la géométrie d'une cellule S2 à partir d'un jeton hexadécimal S2 de niveau 12
Les fonctions SIG de BigQuery sont des convertisseurs unidirectionnels (Geometry → ID de cellule S2) et n'incluent pas de fonction permettant de convertir un jeton de cellule S2 en GEOGRAPHY de polygone.
Pour obtenir la géométrie de polygone d'un jeton de cellule S2 à des fins de visualisation ou d'analyse spatiale
, utilisez une bibliothèque côté client en Python, telle que
s2sphere
pour décoder un jeton de cellule S2 de sept caractères en coordonnées de limites, et
shapely
pour construire un polygone pour les outils de cartographie tels que Folium :
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)
Exemples de requêtes
Remplacez your-project.your_dataset.embeddings_table par le nom réel de votre projet, de votre ensemble de données et de votre table cible.
SQL : Récupérer des représentations vectorielles continues
Cette requête récupère le vecteur de représentation vectorielle continue et les métadonnées administratives des cellules S2 de votre ensemble de données provisionné.
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 : Rechercher des lieux similaires
Cette requête identifie des lieux similaires en termes de comportement sans nécessiter de données externes.
Elle utilise la fonction ML.DISTANCE pour calculer la similarité cosinus, en renvoyant les meilleures correspondances pour une cellule S2 cible. Cette approche est compatible avec les scénarios de planification d'expansion, par exemple pour déterminer où ouvrir un nouveau magasin en fonction du profil d'un établissement existant qui fonctionne bien.
Pour visualiser les cellules S2 sur une carte, vous devez convertir ou joindre l'ID de cellule S2 à sa géométrie de polygone correspondante, car cet ensemble de données utilise des jetons de cellule S2 au lieu de points de latitude et de longitude.
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 : Joindre des données client
Cet exemple montre comment enrichir vos propres données internes (par exemple, une table de performances de magasin) avec des représentations vectorielles continues comportementales. Assurez-vous que vos données internes incluent des jetons de cellule S2 correspondants (chaînes hexadécimales).
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 : Charger des données pour le machine learning
Les représentations vectorielles continues sont stockées sous forme de tableaux BigQuery. Pour les utiliser dans des bibliothèques de ML, vous devez convertir la colonne en matrice NumPy.
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)
Exécuter dans Google Colab
Afficher la source sur GitHub