Temel doğruluk verilerini hazırlama
Nüfus Dinamikleri yerleştirmelerini kullanmak için kesin referans verileriniz desteklenen bir coğrafi sınıra göre toplanmalıdır. Yönetim sınırı türleri dünya genelinde farklılık gösterdiğinden verilerinizi evrensel matematiksel ızgara sistemlerini (ör. S2 hücreleri) veya yerel idari bölgeleri (ör. belirli ülke veri kümesine bağlı olarak ilçeler ya da bölgeler) kullanarak hizalayabilirsiniz.
1. seçenek: Yerleştirmeleri mevcut bir modele dahil etme
- Mevcut modele dayalı kesin referans verileri hazırlama: Mevcut bir modeli geliştirmek için gömmeleri coğrafi uzamsal kovaryantlar olarak kullanın.
- Hata düzeltme modeli eğitme: Yerleştirmeleri, yeni bir hata düzeltme modeli öğrenmek için orijinal model çıkışını, beklenen değeri veya kesin referansı ve yerleştirmeleri alan bir modele entegre ederek mevcut bir modeli iyileştirin.
2. seçenek: Belirli kullanım alanları için ayarlama
- Tahmin modeli seçin: Tahminler için GBDT, MLP veya doğrusal gibi herhangi bir model kullanılabilir.
- Tahmin için yerleştirmeleri kullanma: Tahmin doğruluğunu artırmak için diğer bağlamsal verilerle birlikte giriş özellikleri olarak Population Dynamics yerleştirmelerini kullanın.
Özel sınır toplama
Gerçek verilerinizde posta kodları, sürüş süresi izokronları veya ticaret alanları gibi özel poligonlar kullanılıyorsa sınır toplama işlemi gerçekleştirebilirsiniz. Bu işlem, hedef poligon için birden fazla S2 hücre vektörünü tek bir temsilde birleştirir. Doğru ağırlıklandırma metodolojisini seçmek, toplanan yerleştirmenin aşağı akış modelleme hedeflerinizi doğru şekilde yansıtmasını sağlar.
1. Nüfus ağırlıklı ortalama (PDI için önerilen varsayılan değer)
Perakende mağazası performansı veya tüketici davranış modellemesi gibi insan odaklı kullanım alanları için nüfus ağırlıklı toplama kullanın.
Demografik veriler için alana göre ağırlıklandırılmış bir mekansal toplama kullanmak makine öğrenimi özelliklerinizi bozabilir. Bu durum, parklar, sanayi bölgeleri veya su kütleleri gibi yerleşim olmayan alanlar gerçek sakinlerin profilini çarpıttığında ortaya çıkar.
Bu sorunu çözmek için BigQuery'de nüfus ağırlıklı ortalama hesaplayabilirsiniz. Bu yaklaşımda, kesişen her S2 hücresi segmentinin kesin yoğunluğunu hesaplamak için Earth Engine Veri Kataloğu'ndaki WorldPop gibi yüksek çözünürlüklü demografik veri kümeleri kullanılır.
Nüfus ağırlıklı iş akışının eksiksiz bir uygulama örneğini görmek için etkileşimli not defterini çalıştırın.
2. Alana göre ağırlıklı ortalama
Çevresel veya fiziksel kullanım alanları için bunun yerine alana göre ağırlıklı toplama kullanın. Bu özellik, nüfus dağılımından bağımsız olarak bölgeleri değerlendirmeniz gereken arazi kullanım analizi, yapılandırılmış çevre çalışmaları veya altyapı planlaması için kullanışlıdır.
Bu senaryolarda, fiziksel arazi alanı insan nüfus yoğunluğundan daha önemlidir. Bu, poligon sınırları içindeki her bir kilometrekarenin, toplanan vektöre eşit şekilde katkıda bulunmasını sağlar.
Bu yöntemde, her bir bileşen S2 hücresinin yerleştirme vektörü, hedef poligon içinde kapsadığı coğrafi yüzey alanına göre ağırlıklandırılır.
Coğrafi işlemler ve S2 hücre dönüştürme
Nüfus Dinamikleri Analizleri, birincil mekansal birimi olarak S2 hücre düzeyi 12 jetonlarını (geo_id sütununda 7 karakterlik onaltılık dizeler olarak saklanır) kullanır. Nokta koordinatlarını veya özel mekansal sınırları eşleşen S2 hücre jetonlarına dönüştürmek için BigQuery'deki
yerleşik coğrafya işlevlerini kullanabilirsiniz. S2 hücre jetonlarını görselleştirme için poligon geometrilerine dönüştürmek üzere istemci tarafı kitaplıkları kullanabilirsiniz. Daha fazla bilgi için S2 Seviye 12 altıgen jetonundan S2 hücre geometrisi alma başlıklı makaleyi inceleyin.
Nokta koordinatlarını S2 düzeyi 12 onaltılık jetonlarına dönüştürme
Enlem/boylam noktası koordinatlarını Nüfus Dinamiği Analizleri'ndeki geo_id sütunuyla eşleştirmek için ST_GEOGPOINT ile birlikte BigQuery S2_CELLIDFROMPOINT işlevini kullanın.
BigQuery, S2 hücre kimliklerini işaretli INT64 değerleri olarak depolar. Bu durum, belirli bölgelerdeki hücre kimliklerinin negatif tam sayılar olarak değerlendirilmesine neden olur. Aşağıdaki örneklerde, tam sayıyı standart onaltılık jetona dönüştüren ve S2 Geometry spesifikasyonuna göre sondaki sıfırları kaldıran TO_S2_HEX adlı bir yardımcı işlev tanımlıyoruz.
Aşağıdaki sorgu, Times Square, NYC'nin nokta koordinatlarını (enlem 40.75796, boylam -73.98554) karşılık gelen S2 Seviye 12 onaltılık jetonuna dönüştürür:
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;
latitude ve longitude sütunları olan mevcut bir nokta tablosunu birleştirilebilir S2 jetonlarına dönüştürmek için:
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`;
Bir poligon için S2 seviyesi 12 hücre jetonları oluşturma
Verilerinizde özel alan sınırları (ör. ticari alanlar, teslimat bölgeleri veya WKT ya da GeoJSON biçimindeki posta kodları) kullanılıyorsa metin gösterimini GEOGRAPHY kullanarak ST_GEOGFROM biçimine dönüştürün ve kesişen tüm S2 12. seviye hücreleri ayıklamak için S2_COVERINGCELLIDS kullanın.
Aşağıdaki sorgu, Midtown Manhattan'daki özel bir poligonu kapsayan tüm S2 12. seviye altıgen jetonlarını ayıklar:
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;
S2 hücre geometrisini S2 Seviye 12 onaltılık jetonundan alma
BigQuery CBS işlevleri tek yönlü dönüştürücülerdir (Geometri → S2 Hücre Kimliği) ve S2 hücre jetonunu çokgene dönüştüren bir işlev içermez GEOGRAPHY.
Görselleştirme veya mekansal analiz için bir S2 hücre jetonunun poligon geometrisini elde etmek üzere, 7 karakterlik bir S2 hücre jetonunu sınır koordinatlarına çözmek için s2sphere ve Folium gibi harita çıkarma araçları için bir poligon oluşturmak üzere shapely gibi Python'da bir istemci tarafı kitaplığı kullanın:
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)
Sorgu örnekleri
your-project.your_dataset.embeddings_table yerine gerçek projenizi, veri kümenizi ve hedef tablo adınızı yazın.
SQL: Yerleştirmeleri getirme
Bu sorgu, sağlanan veri kümenizdeki S2 hücreleri için yerleştirme vektörünü ve yönetim meta verilerini alır.
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: Benzer konumları bulma
Bu sorgu, harici veri gerektirmeden davranışsal olarak benzer konumları tanımlar.
Kosinüs benzerliğini hesaplamak için ML.DISTANCE işlevini kullanır ve hedef bir S2 hücresi için en iyi eşleşmeleri döndürür. Bu yaklaşım, başarılı bir mevcut konumun profiline göre yeni bir mağazanın nerede açılacağını belirlemek gibi genişleme planlama senaryolarını destekler.
Bu veri kümesi enlem ve boylam noktaları yerine S2 hücre jetonları kullandığından, S2 hücrelerini haritada görselleştirmek için S2 hücre kimliğini karşılık gelen poligon geometrisine dönüştürmeniz veya bu geometriyle birleştirmeniz gerekir.
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: Müşteri verilerini birleştirme
Bu örnekte, kendi dahili verilerinizi (ör. mağaza performansı tablosu) davranış yerleştirmeleriyle nasıl zenginleştireceğiniz gösterilmektedir. Dahili verilerinizin eşleşen S2 hücre jetonları (onaltılık dizeler) içerdiğinden emin olun.
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: Makine öğrenimi için veri yükleme
Yerleştirmeler BigQuery dizileri olarak depolanır. Bunları makine öğrenimi kitaplıklarında kullanmak için sütunu NumPy matrisine dönüştürmeniz gerekir.
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)
Google Colab'de çalıştır
Kaynağı GitHub'da görüntüle