Prepara los datos de verdad fundamental
Para usar las incorporaciones de Population Dynamics, tus datos de verdad fundamental deben agregarse a un límite geográfico compatible. Debido a que los tipos de límites administrativos varían a nivel global, puedes alinear tus datos con sistemas de cuadrícula matemática universales (como las celdas S2) o regiones administrativas locales (como condados o distritos, según el conjunto de datos específico del país).
Opción 1: Incorpora incorporaciones en un modelo existente
- Prepara la verdad fundamental basada en el modelo existente: Usa las incorporaciones como covariables geoespaciales para mejorar un modelo existente.
- Entrena un modelo de corrección de errores: Mejora un modelo existente integrando las incorporaciones en un modelo que tome el resultado del modelo original, el valor esperado o la verdad fundamental, y las incorporaciones para aprender un nuevo modelo de corrección de errores.
Opción 2: Ajusta para casos de uso específicos
- Elige un modelo de predicción: Se puede usar cualquier modelo, como GBDT, MLP o lineal, para las predicciones.
- Usa incorporaciones para la predicción: Usa las incorporaciones de Population Dynamics como atributos de entrada, junto con otros datos contextuales, para mejorar la precisión de la predicción.
Agregación de límites personalizados
Si tus datos de verdad fundamental usan polígonos personalizados, como códigos postales, isócronas de tiempo de viaje o áreas comerciales, puedes realizar una agregación de límites. Este proceso combina varios vectores de celdas S2 en una sola representación para el polígono objetivo. Elegir la metodología de ponderación correcta garantiza que la incorporación agregada refleje con precisión tus objetivos de modelado descendente.
1. Promedio ponderado por población (opción predeterminada recomendada para PDI)
Usa la agregación ponderada por población para casos de uso centrados en las personas, como el rendimiento de las tiendas minoristas o el modelado del comportamiento del consumidor.
Usar una agregación espacial ponderada por área para los datos demográficos puede distorsionar tus atributos de aprendizaje automático. Esto ocurre cuando las áreas no pobladas, como parques, zonas industriales o cuerpos de agua, distorsionan el perfil de los residentes reales.
Para resolver este problema, puedes realizar un promedio ponderado por población en BigQuery. Este método usa conjuntos de datos demográficos de alta resolución, como WorldPop en el Catálogo de datos de Earth Engine, para calcular la densidad precisa de cada segmento de celda S2 que se cruza.
Para ver un ejemplo de implementación completo de un flujo de trabajo ponderado por población, ejecuta el notebook interactivo.
2. Promedio ponderado por área
Para casos de uso ambientales o físicos, usa la agregación ponderada por área en su lugar. Esto es útil para el análisis del uso del suelo, los estudios del entorno construido o la planificación de la infraestructura en los que debes evaluar las regiones, independientemente de la distribución de la población.
En estas situaciones, el área física es más relevante que la densidad de población humana. Esto garantiza que cada kilómetro cuadrado dentro del límite del polígono contribuya por igual al vector agregado.
Con este método, el vector de incorporación de cada celda S2 constituyente se pondera según el área geográfica que cubre dentro del polígono objetivo.
Operaciones geoespaciales y conversión de celdas S2
Population Dynamics Insights usa tokens de celdas S2 de nivel 12 (almacenados en la columna geo_id como cadenas hexadecimales de 7 caracteres) como su unidad espacial principal. Puedes usar las
funciones geográficas integradas
en BigQuery para convertir las coordenadas de puntos o los límites espaciales personalizados en
tokens de celdas S2 coincidentes. Para convertir tokens de celdas S2 en geometrías de polígonos para la visualización, puedes usar bibliotecas del cliente. Para obtener más información, consulta Obtén
la geometría de celdas S2 a partir de un token hexadecimal de nivel 12 de S2
token.
Convierte coordenadas de puntos en tokens hexadecimales de nivel 12 de S2
Para hacer coincidir las coordenadas de puntos de latitud y longitud con la columna geo_id en Population Dynamics Insights, usa la función S2_CELLIDFROMPOINT de BigQuery combinada con ST_GEOGPOINT.
BigQuery almacena los IDs de celdas S2 como valores INT64 firmados, lo que hace que los IDs de celdas en ciertas regiones se evalúen como números enteros negativos. En los siguientes ejemplos, definimos una función auxiliar llamada TO_S2_HEX que convierte el número entero en un token hexadecimal estándar y quita los ceros finales según la especificación de S2 Geometry.
La siguiente consulta convierte las coordenadas de puntos de Times Square, Nueva York (latitud 40.75796, longitud -73.98554) en su token hexadecimal de nivel 12 de S2 correspondiente:
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;
Para convertir una tabla de puntos existente con columnas latitude y longitude en tokens S2 que se puedan unir, haz lo siguiente:
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`;
Genera tokens de celdas S2 de nivel 12 de cobertura para un polígono
Si tus datos usan límites de área personalizados (como áreas comerciales, zonas de entrega o códigos postales en formato WKT o GeoJSON), convierte la representación de texto en un GEOGRAPHY con ST_GEOGFROM y usa S2_COVERINGCELLIDS para extraer todas las celdas S2 de nivel 12 que se cruzan.
La siguiente consulta extrae todos los tokens hexadecimales de nivel 12 de S2 que cubren un polígono personalizado en Midtown 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;
Obtén la geometría de celdas S2 a partir de un token hexadecimal de nivel 12 de S2
Las funciones de GIS de BigQuery son convertidores unidireccionales (Geometry → ID de celda S2) y no incluyen una función para convertir un token de celda S2 en un GEOGRAPHY de polígono.
Para obtener la geometría de polígonos de un token de celda S2 para la visualización o el análisis espacial, usa una biblioteca del cliente en Python, como
s2sphere
para decodificar un token de celda S2 de 7 caracteres en sus coordenadas de límite y
shapely
para construir un polígono para herramientas de mapas como 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)
Ejemplos de consultas
Reemplaza your-project.your_dataset.embeddings_table por el proyecto, el conjunto de datos y el nombre de la tabla de destino reales.
SQL: Recupera incorporaciones
Esta consulta recupera el vector de incorporación y los metadatos administrativos de las celdas S2 en tu conjunto de datos aprovisionado.
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: Busca ubicaciones similares
Esta consulta identifica ubicaciones similares en función del comportamiento sin necesidad de datos externos.
Usa la función ML.DISTANCE para calcular la similitud del coseno y mostrar las coincidencias principales para una celda S2 de destino. Este método admite situaciones de planificación de expansión, como determinar dónde abrir una tienda nueva en función del perfil de una ubicación existente exitosa.
Para visualizar las celdas S2 en un mapa, debes convertir o unir el ID de celda S2 a su geometría de polígonos correspondiente, ya que este conjunto de datos usa tokens de celdas S2 en lugar de puntos de latitud y longitud.
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: Une datos de clientes
En este ejemplo, se muestra cómo enriquecer tus propios datos internos (por ejemplo, una tabla de rendimiento de la tienda) con incorporaciones de comportamiento. Asegúrate de que tus datos internos incluyan tokens de celdas S2 coincidentes (cadenas hexadecimales).
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: Carga datos para el aprendizaje automático
Las incorporaciones se almacenan como arrays de BigQuery. Para usarlas en bibliotecas de AA, debes convertir la columna en una matriz de 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)
Ejecutar en Google Colab
Ver código fuente en GitHub