使用“人口动态分析洞见”嵌入

准备标准答案数据

如需使用人口动态嵌入,您的标准答案数据必须汇总到受支持的地理边界。由于行政边界类型因国家/地区而异,因此您可以使用通用数学网格系统(例如 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)