Menggunakan sematan Insight Dinamika Populasi

Menyiapkan data kebenaran nyata

Untuk menggunakan sematan Dinamika Populasi, data kebenaran dasar Anda harus diagregasi ke batas geografis yang didukung. Karena jenis batas administratif bervariasi secara global, Anda dapat menyelaraskan data menggunakan sistem petak matematika universal (seperti sel S2) atau wilayah administratif lokal (seperti kabupaten atau distrik, bergantung pada set data negara tertentu).

Opsi 1: Menggabungkan embedding ke dalam model yang ada

  • Siapkan kebenaran dasar berbasis model yang ada: Gunakan embedding sebagai kovariat geospasial untuk meningkatkan kualitas model yang ada.
  • Melatih model koreksi kesalahan: Tingkatkan kualitas model yang ada dengan mengintegrasikan sematan ke dalam model yang menggunakan output model asli, nilai yang diharapkan atau kebenaran dasar, dan sematan untuk mempelajari model koreksi kesalahan baru.

Opsi 2: Menyesuaikan untuk kasus penggunaan tertentu

  • Pilih model prediksi: Model apa pun, seperti GBDT, MLP, atau linear, dapat digunakan untuk prediksi.
  • Menggunakan penyematan untuk prediksi: Gunakan penyematan Dinamika Populasi sebagai fitur input, bersama dengan data kontekstual lainnya, untuk meningkatkan akurasi prediksi.

Agregasi batas kustom

Jika data sebenarnya Anda menggunakan poligon kustom, seperti kode pos, isokron waktu tempuh, atau area perdagangan, Anda dapat melakukan agregasi batas. Proses ini menggabungkan beberapa vektor sel S2 menjadi satu representasi untuk poligon target. Memilih metodologi pemberian bobot yang tepat memastikan penyematan gabungan secara akurat mencerminkan sasaran pemodelan hilir Anda.

Gunakan agregasi berbobot populasi untuk kasus penggunaan yang berfokus pada manusia, seperti performa toko retail atau pemodelan perilaku konsumen.

Penggunaan agregasi spasial berbobot area untuk data demografis dapat memengaruhi fitur machine learning Anda. Hal ini terjadi ketika area yang tidak berpenghuni, seperti taman, zona industri, atau perairan, mendistorsi profil penduduk sebenarnya.

Untuk mengatasinya, Anda dapat menghitung rata-rata berbobot populasi di BigQuery. Pendekatan ini menggunakan set data demografis beresolusi tinggi, seperti WorldPop di Katalog Data Earth Engine, untuk menghitung kepadatan yang tepat dari setiap segmen sel S2 yang berpotongan.

Untuk melihat contoh penerapan lengkap alur kerja berbobot populasi, jalankan notebook interaktif.

2. Rata-rata tertimbang area

Untuk kasus penggunaan lingkungan atau fisik, gunakan agregasi berbobot area. Hal ini berguna untuk analisis penggunaan lahan, studi lingkungan buatan, atau perencanaan infrastruktur yang mengharuskan Anda menilai wilayah terlepas dari distribusi populasi.

Dalam skenario ini, area daratan fisik lebih relevan daripada kepadatan populasi manusia. Hal ini memastikan setiap kilometer persegi dalam batas poligon berkontribusi secara setara pada vektor gabungan.

Dengan metode ini, vektor sematan setiap sel S2 penyusun diberi bobot berdasarkan luas permukaan geografis yang dicakupnya dalam poligon target.

Operasi geospasial & konversi sel S2

Insight Dinamika Populasi menggunakan token sel S2 Level 12 (disimpan di kolom geo_id sebagai string heksadesimal 7 karakter) sebagai unit spasial utamanya. Anda dapat menggunakan fungsi geografi bawaan di BigQuery untuk mengonversi koordinat titik atau batas spasial kustom menjadi token sel S2 yang cocok. Untuk mengonversi token sel S2 menjadi geometri poligon untuk visualisasi, Anda dapat menggunakan library sisi klien. Untuk mengetahui informasi selengkapnya, lihat Mendapatkan geometri sel S2 dari token hex S2 Level 12.

Mengonversi koordinat titik menjadi token hex S2 Level 12

Untuk mencocokkan koordinat titik lat/lng dengan kolom geo_id di Insight Dinamika Populasi, gunakan fungsi S2_CELLIDFROMPOINT BigQuery yang dikombinasikan dengan ST_GEOGPOINT.

BigQuery menyimpan ID sel S2 sebagai nilai INT64 bertanda, yang menyebabkan ID sel di region tertentu dievaluasi sebagai bilangan bulat negatif. Dalam contoh di bawah, kita menentukan fungsi bantuan yang disebut TO_S2_HEX yang mengonversi bilangan bulat menjadi token heksadesimal standar dan menghapus nol di akhir sesuai spesifikasi S2 Geometry.

Kueri berikut mengonversi koordinat titik untuk Times Square, NYC (Lintang 40.75796, Bujur -73.98554) menjadi token hex S2 Level 12 yang sesuai:

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;

Untuk mengonversi tabel titik yang ada dengan kolom latitude dan longitude menjadi token S2 yang dapat digabungkan:

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

Membuat token sel S2 Level 12 yang mencakup poligon

Jika data Anda menggunakan batas area kustom (seperti area perdagangan, zona pengiriman, atau kode pos dalam format WKT atau GeoJSON), konversi representasi teks ke GEOGRAPHY menggunakan ST_GEOGFROM dan gunakan S2_COVERINGCELLIDS untuk mengekstrak semua sel S2 Level 12 yang beririsan.

Kueri berikut mengekstrak semua token hex Level 12 S2 yang mencakup poligon kustom di 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;

Mendapatkan geometri sel S2 dari token hex Level 12 S2

Fungsi BigQuery GIS adalah konverter satu arah (Geometri → ID Sel S2) dan tidak menyertakan fungsi untuk mengonversi token sel S2 menjadi GEOGRAPHY poligon. Untuk mendapatkan geometri poligon token sel S2 untuk visualisasi atau analisis spasial, gunakan library sisi klien di Python seperti s2sphere untuk mendekode token sel S2 7 karakter ke dalam koordinat batasnya, dan shapely untuk membuat poligon untuk alat pemetaan seperti 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)

Contoh kueri

Ganti your-project.your_dataset.embeddings_table dengan nama project, set data, dan tabel target Anda yang sebenarnya.

SQL: Mengambil embedding

Kueri ini mengambil vektor embedding dan metadata administratif untuk sel S2 dalam set data yang disediakan.

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: Menemukan lokasi serupa

Kueri ini mengidentifikasi lokasi yang serupa secara perilaku tanpa memerlukan data eksternal.

Fungsi ini menggunakan fungsi ML.DISTANCE untuk menghitung kemiripan kosinus, yang menampilkan kecocokan teratas untuk sel S2 target. Pendekatan ini mendukung skenario perencanaan ekspansi, seperti menentukan lokasi untuk membuka toko baru berdasarkan profil lokasi yang sudah ada dan berhasil.

Untuk memvisualisasikan sel S2 di peta, Anda harus mengonversi atau menggabungkan ID sel S2 ke geometri poligon yang sesuai, karena set data ini menggunakan token sel S2, bukan titik garis lintang dan bujur.

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: Gabungkan data pelanggan

Contoh ini menunjukkan cara memperkaya data internal Anda sendiri (misalnya, tabel performa toko) dengan sematan perilaku. Pastikan data internal Anda menyertakan token sel S2 yang cocok (string hex).

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: Memuat data untuk machine learning

Embedding disimpan sebagai Array BigQuery. Untuk menggunakannya di library ML, Anda harus mengonversi kolom menjadi matriks 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)