Przygotowanie danych podstawowych
Aby używać wektorów dystrybucyjnych dynamiki populacji, dane podstawowe muszą być zagregowane do obsługiwanego obszaru geograficznego. Ponieważ typy granic administracyjnych różnią się na całym świecie, możesz dopasować dane za pomocą uniwersalnych matematycznych systemów siatki (np. komórek S2) lub lokalnych regionów administracyjnych (takich jak hrabstwa lub okręgi, w zależności od konkretnego zbioru danych kraju).
Opcja 1. Włączanie wektorów dystrybucyjnych do istniejącego modelu
- Przygotuj dane podstawowe na podstawie istniejącego modelu: użyj wektorów dystrybucyjnych jako kowariantów geoprzestrzennych, aby ulepszyć istniejący model.
- Trenuj model korekcji błędów: ulepsz istniejący model, integrując wektory dystrybucyjne z modelem, który wykorzystuje dane wyjściowe oryginalnego modelu, oczekiwaną wartość lub dane podstawowe oraz wektory dystrybucyjne, aby nauczyć się nowego modelu korekcji błędów.
Opcja 2. Dostosowywanie do konkretnych przypadków użycia
- Wybierz model prognozowania: do prognozowania można użyć dowolnego modelu, np. GBDT, MLP lub liniowego.
- Użyj wektorów dystrybucyjnych do prognozowania: użyj wektorów dystrybucyjnych dynamiki populacji jako cech wejściowych wraz z innymi danymi kontekstowymi, aby zwiększyć dokładność prognoz.
Przykładowe zapytania
Zastąp your-project.your_dataset.embeddings_table rzeczywistą nazwą projektu, zbioru danych i tabeli docelowej.
SQL: pobieranie wektorów dystrybucyjnych
To zapytanie pobiera wektor dystrybucyjny i metadane administracyjne dla komórek S2 w udostępnionym zbiorze danych.
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: znajdowanie podobnych lokalizacji
To zapytanie identyfikuje lokalizacje podobne pod względem zachowania bez konieczności korzystania z danych zewnętrznych.
Używa funkcji ML.DISTANCE do obliczania podobieństwa cosinusowego, zwracając najlepsze dopasowania dla docelowej komórki S2. To podejście obsługuje scenariusze planowania ekspansji, takie jak określanie, gdzie otworzyć nowy sklep na podstawie profilu skutecznej istniejącej lokalizacji.
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: łączenie danych klientów
Ten przykład pokazuje, jak wzbogacić własne dane wewnętrzne (np. tabelę skuteczności sklepu) o wektory dystrybucyjne zachowań. Upewnij się, że dane wewnętrzne zawierają pasujące tokeny komórek S2 (ciągi szesnastkowe).
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: wczytywanie danych na potrzeby uczenia maszynowego
Wektory dystrybucyjne są przechowywane jako tablice BigQuery. Aby używać ich w bibliotekach uczenia maszynowego, musisz przekonwertować kolumnę na macierz 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)