Gerçek doğru verilerini hazırlama
Nüfus Dinamikleri yerleştirmelerini kullanmak için gerçek doğru verilerinizin desteklenen bir coğrafi sınırda toplanması gerekir. 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ı gerçek doğru verilerini hazırlama: Mevcut bir modeli geliştirmek için yerleştirilmiş öğeleri coğrafi ortak değişkenler olarak kullanın.
- Hata düzeltme modeli eğitme: Yerleştirmeleri, orijinal model çıkışını, beklenen değeri veya gerçek doğruyu ve yerleştirmeleri alarak yeni bir hata düzeltme modeli öğrenen bir modele entegre ederek mevcut bir modeli iyileştirin.
2. seçenek: Belirli kullanım alanları için ayarlama
- Tahmin modeli seçme: 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 doğru verileriniz posta kodları, sürüş süresi eş zamanlıları veya ticaret alanları gibi özel poligonlar kullanıyorsa sınır birleştirme işlemi gerçekleştirebilirsiniz. Bu işlem, birden fazla S2 hücre vektörünü hedef poligon için tek bir temsilde birleştirir. Doğru ağırlıklandırma metodolojisini seçmek, birleştirilmiş yerleştirmenin alt 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ğaza performansı veya tüketici davranışı modelleme gibi insan odaklı kullanım alanları için nüfus ağırlıklı toplama yöntemini kullanın.
Demografik veriler için alana göre ağırlıklandırılmış 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 bozduğunda ortaya çıkar.
Bu sorunu çözmek için BigQuery'de popülasyon ağırlıklı ortalama hesaplayabilirsiniz. Bu yaklaşımda, kesişen her S2 hücre 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 alana göre ağırlıklı toplama yöntemini kullanın. Bu, nüfus dağılımından bağımsız olarak bölgeleri değerlendirmeniz gereken arazi kullanımı analizi, yapılaşma çalışmaları veya altyapı planlaması için kullanışlıdır.
Bu senaryolarda, fiziksel arazi alanı insan nüfusu yoğunluğundan daha önemlidir. Bu sayede, poligon sınırındaki her kilometrekare, birleştirilmiş vektöre eşit katkıda bulunur.
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üşümü
Nüfus Dinamikleri Analizleri, birincil mekansal birim olarak S2 hücresi 12. seviye jetonlarını (geo_id sütununda 7 karakterlik onaltılık dizeler olarak depolanır) kullanır. Nokta koordinatlarını veya özel uzamsal 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ını kullanabilirsiniz. Daha fazla bilgi için S2 Seviye 12 onaltılık jetondan S2 hücre geometrisi alma başlıklı makaleyi inceleyin.
Nokta koordinatlarını S2 Seviye 12 onaltılık jetonlara dönüştürme
Enlem/boylam nokta koordinatlarını Population Dynamics Insights'taki 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, New York'taki Times Meydanı'nın nokta koordinatlarını (enlem 40.75796, boylam -73.98554) karşılık gelen S2 12. seviye onaltılık jetona 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ı içeren 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. WKT veya GeoJSON biçimindeki ticaret alanları, doğrudan teslimat bölgeleri ya da 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 Seviye 12 hücrelerini ayıklamak için S2_COVERINGCELLIDS kullanın.
Aşağıdaki sorgu, Midtown Manhattan'daki özel bir poligonu kapsayan tüm S2 Seviye 12 onaltılık jetonları 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 Seviyesi 12 onaltılık jetonundan alma
BigQuery GIS 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ürme işlevi 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 gibi bir Python istemci tarafı kitaplığı ve Folium gibi harita çıkarma araçları için bir poligon oluşturmak üzere shapely 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ı girin.
SQL: Yerleştirmeleri getirme
Bu sorgu, temel hazırlığı yapılmış 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 verilere gerek kalmadan davranışsal olarak benzer konumları tanımlar.
Kosinüs benzerliğini hesaplamak için ML.DISTANCE işlevini kullanır ve hedef 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ı belirleme gibi genişleme planlama senaryolarını destekler.
S2 hücrelerini haritada görselleştirmek için S2 hücre kimliğini ilgili çokgen geometrisine dönüştürmeniz veya bu ikisini birleştirmeniz gerekir. Bunun nedeni, bu veri kümesinde enlem ve boylam noktaları yerine S2 hücre jetonlarının kullanılmasıdır.
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ışsal yerleştirmelerle nasıl zenginleştireceğiniz gösterilmektedir. Dahili verilerinizin eşleşen S2 hücre jetonlarını (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