使用人口動態洞察嵌入內容

準備真值資料

如要使用人口動態嵌入,實際資料必須匯總至支援的地理邊界。由於全球各地的行政邊界類型不盡相同,您可以選擇使用通用數學格線系統 (例如 S2 儲存格) 或當地行政區域 (例如縣市或區,視特定國家/地區的資料集而定),對齊資料。

方法 1:將嵌入併入現有模型

  • 準備現有的模型基礎真值:使用嵌入做為地理空間共變數,以強化現有模型。
  • 訓練錯誤修正模型:將嵌入項目整合至模型,以原始模型輸出內容、預期值或實際資料,以及嵌入項目訓練新的錯誤修正模型,藉此改善現有模型。

方法 2:針對特定用途調整

  • 選擇預測模型:任何模型 (例如 GBDT、MLP 或線性) 都可用於預測。
  • 使用嵌入進行預測:將人口動態嵌入做為輸入特徵,搭配其他脈絡資料,提高預測準確度。

查詢範例

請將 your-project.your_dataset.embeddings_table 替換為實際的專案、資料集和目標資料表名稱。

SQL:擷取嵌入內容

這項查詢會擷取已佈建資料集中 S2 儲存格的嵌入向量和管理中繼資料。

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:尋找類似地點

這項查詢會找出行為相似的地點,不需要外部資料。

這項函式會使用 ML.DISTANCE 函式計算餘弦相似度,並傳回目標 S2 儲存格最相符的結果。這種做法支援擴展規劃情境,例如根據現有成功地點的設定檔,判斷要在何處開設新商店。

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:彙整顧客資料

這個範例說明如何使用行為嵌入,擴充您自己的內部資料 (例如商店成效資料表)。確認內部資料包含相符的 S2 儲存格權杖 (十六進位字串)。

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:載入機器學習資料

嵌入會儲存為 BigQuery 陣列。如要在機器學習程式庫中使用這些資料,您必須將資料欄轉換為 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)