Usa las incorporaciones de las Estadísticas de dinámica de población

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.

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)