Utilizzare gli incorporamenti degli approfondimenti sulle dinamiche della popolazione

Preparare i dati di fatto

Per utilizzare gli incorporamenti di Insight sulle dinamiche della popolazione, i dati di fatto devono essere aggregati a un confine geografico supportato. Poiché i tipi di confini amministrativi variano a livello globale, puoi allineare i dati utilizzando sistemi di griglie matematiche universali (come le celle S2) o regioni amministrative locali (come contee o distretti, a seconda del set di dati specifico del paese).

Opzione 1: incorpora gli incorporamenti in un modello esistente

  • Prepara i dati di fatto esistenti basati sul modello: utilizza gli incorporamenti come covariate geospaziali per migliorare un modello esistente.
  • Addestra un modello di correzione degli errori: migliora un modello esistente integrando gli incorporamenti in un modello che prende l'output del modello originale, il valore previsto o i dati di fatto e gli incorporamenti per apprendere un nuovo modello di correzione degli errori.

Opzione 2: ottimizza per casi d'uso specifici

  • Scegli un modello di previsione: per le previsioni è possibile utilizzare qualsiasi modello, ad esempio GBDT, MLP o lineare.
  • Utilizza gli incorporamenti per la previsione: utilizza gli incorporamenti di Insight sulle dinamiche della popolazione come caratteristiche di input, insieme ad altri dati contestuali, per migliorare l'accuratezza delle previsioni.

Aggregazione dei confini personalizzata

Se i dati di fatto utilizzano poligoni personalizzati, come codici postali, isocrone di tempo di guida o aree commerciali, puoi eseguire un'aggregazione dei confini. Questa procedura combina più vettori di celle S2 in una singola rappresentazione per il poligono di destinazione. La scelta della metodologia di ponderazione corretta garantisce che l'incorporamento aggregato rifletta accuratamente gli obiettivi di modellazione downstream.

Utilizza l'aggregazione ponderata in base alla popolazione per i casi d'uso incentrati sull'uomo, come il rendimento dei negozi al dettaglio o la modellazione del comportamento dei consumatori.

L'utilizzo di un'aggregazione spaziale ponderata in base all'area per i dati demografici può distorcere le caratteristiche di machine learning. Ciò si verifica quando le aree non popolate, come parchi, zone industriali o corpi idrici, distorcono il profilo dei residenti effettivi.

Per risolvere il problema, puoi eseguire una media ponderata in base alla popolazione in BigQuery. Questo approccio utilizza set di dati demografici ad alta risoluzione, come WorldPop nel catalogo dei dati di Earth Engine, per calcolare la densità precisa di ogni segmento di cella S2 intersecante.

Per visualizzare un esempio di implementazione completa di un flusso di lavoro ponderato in base alla popolazione, esegui il notebook interattivo.

2. Media ponderata in base all'area

Per i casi d'uso ambientali o fisici, utilizza invece l'aggregazione ponderata in base all'area. È utile per l'analisi dell'uso del suolo, gli studi sull'ambiente costruito o la pianificazione delle infrastrutture in cui devi valutare le regioni indipendentemente dalla distribuzione della popolazione.

In questi scenari, l'area di terra fisica è più pertinente della densità della popolazione umana. In questo modo, ogni chilometro quadrato all'interno del confine del poligono contribuisce in egual misura al vettore aggregato.

Con questo metodo, il vettore di incorporamento di ogni cella S2 costituente viene ponderato in base alla superficie geografica che copre all'interno del poligono di destinazione.

Operazioni geospaziali e conversione delle celle S2

Insight sulle dinamiche della popolazione utilizza i token di livello 12 delle celle S2 (memorizzati nella colonna geo_id come stringhe esadecimali di 7 caratteri) come unità spaziale principale. Puoi utilizzare le funzioni geografiche integrate in BigQuery per convertire le coordinate dei punti o i confini spaziali personalizzati in token di celle S2 corrispondenti. Per convertire i token di celle S2 in geometrie poligonali per la visualizzazione, puoi utilizzare le librerie lato client. Per ulteriori informazioni, vedi Ottenere la geometria delle celle S2 da un token esadecimale di livello 12 delle celle S2 .

Convertire le coordinate dei punti in token esadecimali di livello 12 delle celle S2

Per abbinare le coordinate dei punti di latitudine/longitudine alla colonna geo_id in Insight sulle dinamiche della popolazione, utilizza la funzione S2_CELLIDFROMPOINT di BigQuery combinata con ST_GEOGPOINT.

BigQuery archivia gli ID delle celle S2 come valori INT64 con segno, il che fa sì che gli ID delle celle in determinate regioni vengano valutati come numeri interi negativi. Negli esempi riportati di seguito, definiamo una funzione di assistenza denominata TO_S2_HEX che converte il numero intero in un token esadecimale standard e rimuove gli zeri finali in base alla specifica della geometria S2.

La query seguente converte le coordinate dei punti di Times Square, New York (latitudine 40.75796, longitudine -73.98554) nel token esadecimale di livello 12 delle celle S2 corrispondente:

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;

Per convertire una tabella di punti esistente con le colonne latitude e longitude in token S2 unibili:

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`;

Generare token di celle S2 di livello 12 di copertura per un poligono

Se i dati utilizzano confini di aree personalizzate (ad esempio aree commerciali, zone di consegna o codici postali in formato WKT o GeoJSON), converti la rappresentazione testuale in un GEOGRAPHY utilizzando ST_GEOGFROM e utilizza S2_COVERINGCELLIDS per estrarre tutte le celle S2 di livello 12 intersecanti.

La query seguente estrae tutti i token esadecimali di livello 12 delle celle S2 che coprono un poligono personalizzato a 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;

Ottenere la geometria delle celle S2 da un token esadecimale di livello 12 delle celle S2

Le funzioni GIS di BigQuery sono convertitori unidirezionali (Geometry → ID cella S2) e non includono una funzione per convertire un token di cella S2 in un GEOGRAPHY poligonale. Per ottenere la geometria poligonale di un token di cella S2 per la visualizzazione o l'analisi spaziale, utilizza una libreria lato client in Python come s2sphere per decodificare un token di cella S2 di 7 caratteri nelle coordinate del confine e shapely per costruire un poligono per gli strumenti di mappatura come 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)

Esempi di query

Sostituisci your-project.your_dataset.embeddings_table con il progetto, il set di dati e il nome della tabella di destinazione effettivi.

SQL: recuperare gli incorporamenti

Questa query recupera il vettore di incorporamento e i metadati amministrativi per le celle S2 nel set di dati di cui hai eseguito il provisioning.

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: trovare località simili

Questa query identifica le località simili dal punto di vista comportamentale senza richiedere dati esterni.

Utilizza la funzione ML.DISTANCE per calcolare la similarità del coseno, restituendo le corrispondenze principali per una cella S2 di destinazione. Questo approccio supporta gli scenari di pianificazione dell'espansione, ad esempio la determinazione della posizione in cui aprire un nuovo negozio in base al profilo di una località esistente di successo.

Per visualizzare le celle S2 su una mappa, devi convertire o unire l'ID della cella S2 alla geometria poligonale corrispondente, perché questo set di dati utilizza i token di celle S2 anziché i punti di latitudine e longitudine.

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: unire i dati cliente

Questo esempio mostra come arricchire i dati interni (ad esempio una tabella del rendimento del negozio) con gli incorporamenti comportamentali. Assicurati che i dati interni includano i token di celle S2 corrispondenti (stringhe esadecimali).

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: caricare i dati per il machine learning

Gli incorporamenti vengono archiviati come array BigQuery. Per utilizzarli nelle librerie ML, devi convertire la colonna in una 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)