Menyiapkan data kebenaran dasar
Untuk menggunakan embedding Population Dynamics, data kebenaran dasar Anda harus diagregasi ke batas geografis yang didukung. Karena jenis batas administratif bervariasi secara global, Anda dapat menyelaraskan data menggunakan sistem grid 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
- Menyiapkan kebenaran dasar berbasis model yang ada: Gunakan embedding sebagai kovariat geospasial untuk meningkatkan model yang ada.
- Melatih model koreksi error: Tingkatkan model yang ada dengan mengintegrasikan embedding ke dalam model yang menggunakan output model asli, nilai yang diharapkan atau kebenaran dasar, dan embedding untuk mempelajari model koreksi error baru.
Opsi 2: Menyesuaikan untuk kasus penggunaan tertentu
- Memilih model prediksi: Model apa pun, seperti GBDT, MLP, atau linear, dapat digunakan untuk prediksi.
- Menggunakan embedding untuk prediksi: Gunakan embedding Population Dynamics sebagai fitur input, bersama dengan data kontekstual lainnya, untuk meningkatkan akurasi prediksi.
Agregasi batas kustom
Jika data kebenaran dasar 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 pembobotan yang tepat akan memastikan embedding yang diagregasi secara akurat mencerminkan sasaran pemodelan hilir Anda.
1. Rata-rata tertimbang populasi (default yang direkomendasikan untuk PDI)
Gunakan agregasi tertimbang populasi untuk kasus penggunaan yang berpusat pada manusia, seperti performa toko retail atau pemodelan perilaku konsumen.
Menggunakan agregasi spasial tertimbang area untuk data demografi dapat mengubah fitur machine learning Anda. Hal ini terjadi saat area yang tidak berpenghuni, seperti taman, zona industri, atau badan air, mendistorsi profil penduduk sebenarnya.
Untuk mengatasi masalah ini, Anda dapat melakukan rata-rata tertimbang populasi di BigQuery. Pendekatan ini menggunakan set data demografi 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 tertimbang populasi, jalankan notebook interaktif.
2. Rata-rata tertimbang area
Untuk kasus penggunaan lingkungan atau fisik, gunakan agregasi tertimbang 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, luas lahan fisik lebih relevan daripada kepadatan populasi manusia. Hal ini memastikan setiap kilometer persegi dalam batas poligon berkontribusi secara merata ke vektor yang diagregasi.
Dengan metode ini, vektor embedding setiap sel S2 konstituen diberi bobot berdasarkan luas permukaan geografis yang dicakupnya dalam poligon target.
Operasi geospasial &konversi sel S2
Population Dynamics Insights 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 ke token hex S2 Level 12
Untuk mencocokkan koordinat titik lintang/bujur dengan kolom geo_id di Population Dynamics Insights, gunakan fungsi S2_CELLIDFROMPOINT BigQuery yang dikombinasikan dengan ST_GEOGPOINT.
BigQuery menyimpan ID sel S2 sebagai nilai INT64 yang ditandatangani, yang menyebabkan ID sel di wilayah tertentu dievaluasi sebagai bilangan bulat negatif. Dalam contoh di bawah, kita menentukan fungsi helper bernama TO_S2_HEX yang mengonversi bilangan bulat menjadi token heksadesimal standar dan menghapus nol di akhir sesuai spesifikasi Geometri S2.
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 berpotongan.
Kueri berikut mengekstrak semua token hex S2 Level 12 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 S2 Level 12
Fungsi GIS BigQuery 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 menjadi 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.
Kueri ini menggunakan fungsi ML.DISTANCE untuk menghitung kesamaan kosinus, yang menampilkan kecocokan teratas untuk sel S2 target. Pendekatan ini mendukung skenario perencanaan ekspansi, seperti menentukan tempat untuk membuka toko baru berdasarkan profil lokasi yang 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 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: Menggabungkan data pelanggan
Contoh ini menunjukkan cara memperkaya data internal Anda sendiri (misalnya, tabel performa toko) dengan embedding 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)
Jalankan di Google Colab
Lihat sumber di GitHub