准备标准答案数据
如需使用人口动态嵌入,您的标准答案数据必须汇总到受支持的地理边界。由于行政边界类型因国家/地区而异,因此您可以使用通用数学网格系统(例如 S2 单元格)或本地行政区域(例如县或区,具体取决于特定国家/地区的数据集)来对齐数据。
方法 1:将嵌入纳入现有模型
- 准备基于现有模型的真实数据:使用嵌入作为地理空间协变量来增强现有模型。
- 训练错误校正模型:通过将嵌入内容集成到模型中来改进现有模型,该模型会获取原始模型输出、预期值或标准答案以及嵌入内容,以学习新的错误校正模型。
方法 2:针对特定应用场景进行调优
- 选择预测模型:任何模型(例如 GBDT、MLP 或线性模型)均可用于预测。
- 使用嵌入进行预测:将人口动态嵌入与其他情境数据一起用作输入特征,以提高预测准确性。
自定义边界聚合
如果您的实际数据使用自定义多边形(例如邮政编码、驾车时间等时线或商圈),您可以执行边界聚合。此过程会将多个 S2 单元格向量合并为目标多边形的单个表示形式。选择合适的加权方法可确保汇总后的嵌入向量准确反映您的下游建模目标。
1. 按人口加权的平均值(PDI 的推荐默认值)
对于以人为本的应用场景(例如零售商店绩效或消费者行为建模),请使用按人口加权的聚合。
对人口统计数据使用面积加权的空间聚合可能会扭曲机器学习特征。当公园、工业区或水体等无人居住的区域扭曲了实际居民的个人资料时,就会出现这种情况。
如需解决此问题,您可以在 BigQuery 中执行人口加权平均值计算。此方法使用高分辨率的人口统计数据集(例如 Earth Engine 数据目录中的 WorldPop),来计算每个相交的 S2 单元格段的精确密度。
如需查看人口加权工作流的完整实现示例,请运行交互式笔记本。
2. 面积加权平均值
对于环境或物理用例,请改用面积加权聚合。 这对于土地利用分析、建成环境研究或基础设施规划非常有用,因为在这些情况下,您必须评估区域,而无论人口分布如何。
在这些情况下,陆地面积比人口密度更相关。这样可确保多边形边界内的每个平方公里对汇总向量的贡献相同。
在此方法下,每个组成 S2 单元格的嵌入向量都会根据其在目标多边形内覆盖的地理表面积进行加权。
查询示例
将 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 单元格的最佳匹配项。这种方法支持扩展规划方案,例如根据现有成功位置的资料确定新店的开设位置。
如需在地图上直观呈现 S2 单元格,您必须将 S2 单元格 ID 转换为或联接到其对应的多边形几何图形,因为此数据集使用 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)
在 Google Colab 中运行
在 GitHub 上查看源代码