Korzystanie z osadzonych informacji o dynamice populacji

Przygotowywanie danych podstawowych

Aby korzystać z osadzania danych o dynamice populacji, musisz zagregować dane podstawowe do obsługiwanego obszaru geograficznego. Rodzaje granic administracyjnych różnią się na całym świecie, dlatego 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 dotyczącego danego kraju).

Opcja 1. Włączenie wektorów dystrybucyjnych do istniejącego modelu

  • Przygotuj dane podstawowe oparte na istniejącym modelu: użyj wektorów jako zmiennych współzależnych geoprzestrzennych, aby ulepszyć istniejący model.
  • Trenowanie modelu korekty błędów: ulepszanie istniejącego modelu przez zintegrowanie osadzeń z modelem, który przyjmuje dane wyjściowe oryginalnego modelu, oczekiwaną wartość lub dane podstawowe oraz osadzenia, aby nauczyć się nowego modelu korekty 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żywaj osadzeń do prognozowania: używaj osadzeń dynamiki populacji jako cech wejściowych wraz z innymi danymi kontekstowymi, aby zwiększyć dokładność prognozowania.

Agregacja niestandardowych granic

Jeśli dane referencyjne wykorzystują niestandardowe wielokąty, takie jak kody pocztowe, izochrony czasu dojazdu lub obszary handlowe, możesz przeprowadzić agregację granic. Ten proces łączy wiele wektorów komórek S2 w jedną reprezentację docelowego wielokąta. Wybór odpowiedniej metodologii ważenia zapewnia, że zagregowane osadzanie dokładnie odzwierciedla cele modelowania niższego rzędu.

W przypadku zastosowań skoncentrowanych na człowieku, takich jak wydajność sklepów detalicznych czy modelowanie zachowań konsumentów, używaj agregacji ważonej według liczby ludności.

Stosowanie agregacji przestrzennej ważonej obszarem w przypadku danych demograficznych może zniekształcić cechy uczenia maszynowego. Dzieje się tak, gdy niezamieszkane obszary, takie jak parki, strefy przemysłowe lub zbiorniki wodne, zniekształcają profil rzeczywistych mieszkańców.

Aby rozwiązać ten problem, możesz obliczyć średnią ważoną populacją w BigQuery. Ta metoda wykorzystuje zbiory danych demograficznych o wysokiej rozdzielczości, takie jak WorldPop w katalogu danych Earth Engine, do obliczania dokładnej gęstości każdego przecinającego się segmentu komórki S2.

Aby zobaczyć pełny przykład wdrożenia przepływu pracy z ważeniem populacji, uruchom interaktywny notatnik.

2. Średnia ważona według obszaru

W przypadku zastosowań związanych z ochroną środowiska lub fizyką używaj agregacji ważonej według obszaru. Jest to przydatne w analizie użytkowania gruntów, badaniach środowiska zabudowanego lub planowaniu infrastruktury, w których musisz oceniać regiony niezależnie od rozmieszczenia ludności.

W takich przypadkach powierzchnia lądu jest ważniejsza niż gęstość zaludnienia. Dzięki temu każdy kilometr kwadratowy w granicach wielokąta ma taki sam udział w zagregowanym wektorze.

W tej metodzie wektor osadzania każdej komórki S2 jest ważony przez powierzchnię geograficzną, którą obejmuje w docelowym wielokącie.

Przykłady zapytań

Zastąp your-project.your_dataset.embeddings_table nazwą rzeczywistego projektu, zbioru danych i tabeli docelowej.

SQL: pobieranie wektorów dystrybucyjnych

To zapytanie pobiera wektor osadzania i metadane administracyjne 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 podobne pod względem zachowań lokalizacje bez konieczności korzystania z danych zewnętrznych.

Do obliczania podobieństwa cosinusowego używa funkcji ML.DISTANCE, która zwraca najlepsze dopasowania dla docelowej komórki S2. To podejście pomaga w planowaniu rozwoju, np. w określaniu, gdzie otworzyć nowy sklep na podstawie profilu skutecznej lokalizacji.

Aby wizualizować komórki S2 na mapie, musisz przekonwertować identyfikator komórki S2 na odpowiadającą mu geometrię wielokąta lub połączyć je ze sobą, ponieważ ten zbiór danych używa tokenów komórek S2 zamiast punktów szerokości i długości geograficznej.

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 wzbogacać własne dane wewnętrzne (np. tabelę skuteczności sklepu) o wektory dystrybucyjne dotyczące 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

Osadzanie jest przechowywane jako tablice BigQuery. Aby używać ich w bibliotekach ML, 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)