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