デベロッパー向けドキュメント
サービスの説明
Population Dynamics Insights(PDI)は、人間の行動と環境との相互作用に関するデータを、特定の場所における簡潔で分析可能なエンベディング(または「デジタル フィンガープリント」)に抽出するエンベディング データセットです。
これらのエンベディングは、検索トレンド、混雑状況のトレンド、環境条件(地図、大気質、天気)などの集約データのパターンを捉え、人々が周囲の環境とどのように関わっているかについての、位置情報に固有の豊富なスナップショットを提供します。空間と時間を集約したこれらのエンベディングは、プライバシーを確保しながら、公衆衛生から社会経済モデリングまで、さまざまなアプリケーションでニュアンスのある空間分析と予測を可能にします。
プロダクトの概要
人口動態エンベディングは、豊富な特徴セットでトレーニングされ、凝縮されたベクトル表現に変換された専用の機械学習モデルを使用して生成されます。これらのエンベディングは、次のデータでトレーニングされ、生成されます。
- 検索トレンドの集計: 検索データに反映された地域ごとの関心事や懸念事項。
- 集計されたマップデータ(混雑状況を含む): 地域内のアメニティ、サービス、ビジネスと、地域の訪問傾向。
- 気象と大気質の集計: 気温や大気質など、気候に関連する指標。
これらの特徴は郵便番号レベルで集約され、プライバシーを保護するローカライズされたコンテキスト認識型エンベディングが生成されます。PDI は継続的な時系列データセットであり、新しいデータスライスが毎月処理され、パーティション分割されます。データは、次のカレンダー月の最終日までに更新され、データテーブルに追加されます(たとえば、2 月のデータは 3 月 31 日までに公開されます)。
前提条件
人口動態のエンベディングにアクセスするには、アクセス権が付与されている必要があります。アクセス権がない場合は、営業担当者またはカスタマー エンジニアリング担当者にお問い合わせください。
- Cloud Console で Analytics Hub API を有効にします。
- Cloud コンソールで BigQuery API を有効にします。
- BigQuery プロダクトの基本的な知識がある。
- サブスクライバーのタスクを実行するには、アカウントに Analytics Hub サブスクリプション オーナー(
roles/analyticshub.subscriptionOwner)のロールがあることを確認します。 - データセットを作成するには、アカウントに BigQuery ユーザー(
roles/bigquery.user)のロールがあることを確認します。
推奨されるトレーニング
エンベディングや BigQuery Machine Learning の使用が初めての場合は、分析を開始する前に次のトレーニング資料を完了することを強くおすすめします。
- 機械学習集中講座: エンベディング: 機械学習モデルがエンベディングを使用して、高次元データを低次元空間に変換しながら、セマンティックな関係を保持する方法についての基礎的でペースの速い概要。
- ベクトル検索とエンベディングの概要: ベクトル エンベディング、意味的類似性、より広範な Google Cloud エコシステム内でエンベディングを活用する方法を紹介する、Google Cloud Skills Boost の実践的なラボです。
- BigQuery Machine Learning(BQML)チュートリアル: PDI データセットは BigQuery でホストされているため、データをエクスポートすることなく、標準 SQL を使用してエンベディングで機械学習モデルを直接トレーニングして実行できます。
エンベディングを使用する
データを理解する
分析を開始する前に、スキーマ構造を確認してください。
データセットの編成
エンベディングは、国またはテストリージョンごとに個別の BigQuery テーブルに整理されます。
エンベディング ベクトルの構造
features 列は 330 次元のベクトルです(BigQuery の REPEATED FLOAT 配列として保存されます)。配列の各セクションは、人口動態モデルによって抽出された特定のデータシグナルに対応しています。
この構造を理解することで、特徴の除去(たとえば、検索行動が売上を予測する程度を天気と比較して判断する)が可能になります。
| ベクトル インデックス | データソース | 説明 |
|---|---|---|
| 0 ~ 127 | 集計された検索トレンド | 地域ごとの関心事や懸念事項(「ジム」、「インフルエンザの症状」、「高級品」などの検索)を把握します。 |
| 128 ~ 255 | マップと混雑状況 | 建造物(病院、公園、学校などのスポット)と人の訪問をキャプチャして、関心のある場所を表示します。 |
| 256 ~ 329 | 天気と大気質 | 環境コンテキスト(気温、降水量、大気質)を取得します。 |
キー列とメタデータ
エンベディング テーブルには、地理空間分析、フィルタリング、他のサービスとの相互運用を可能にする空間メタデータと時間メタデータが含まれています。
1 つの郵便番号が行政境界(郡の境界など)をまたぐことがあるため、行政区域フィールドは配列として提供されます。
geo_id: この郵便番号に関連付けられた一意のプレイス ID。geo_name: 地域を表す郵便番号の文字列(例:'90210')。administrative_area_level_1_names: 最上位の境界の人間の読める名前のリスト(ARRAY<STRING>)(例:['California'])。administrative_area_level_1_ids: この郵便番号が交差する最上位の行政境界(州や都道府県など)の一意のプレイス ID のリスト(ARRAY<STRING>)。administrative_area_level_2_names: セカンダリ境界の人間が読める名前のリスト(ARRAY<STRING>)(例:['Los Angeles County'])。administrative_area_level_2_ids: この郵便番号が交差する二次行政区域(郡や区など)の一意のプレイス ID のリスト(ARRAY<STRING>)。features: 330 次元のコア エンベディング ベクトル。ネイティブにARRAY<FLOAT64>として保存されます。Python を使用して Pandas に読み込むには、フラット化するか NumPy 行列に変換する必要があります。snapshot_date:YYYY-MM-DD形式のDATE。月の初日のみを使用するように標準化されています。入力特徴量が集計されてエンベディング データが生成された特定の月次タイムスライスを表します。たとえば、2026 年 4 月のデータは2026-04-01の形式になります。
グラウンド トゥルース データを準備する
Population Dynamics エンベディングを使用するには、グラウンド トゥルース データをサポートされている地理的境界(郵便番号)に集計する必要があります。
オプション 1: 既存のモデルにエンベディングを組み込む
- 既存のモデルベースのグラウンド トゥルースを準備する: エンベディングを地理空間共変量として使用して、既存のモデルを強化します。
- エラー修正モデルをトレーニングする: エンベディングを、元のモデルの出力、期待値またはグラウンド トゥルース、エンベディングを受け取って新しいエラー修正モデルを学習するモデルに統合して、既存のモデルを改善します。
オプション 2: 特定のユースケースに合わせて調整する
- 予測モデルのタイプを選択する: GBDT、MLP、線形などのモデルを予測に使用できます。
- 予測にエンベディングを使用する: 人口動態エンベディングを他のコンテキスト データとともに、入力特徴として使用して、予測の精度を高めます。
クイックスタートのコード スニペット
これらのスニペットを使用して、アクセス権を確認し、データ形式を把握します。
1. SQL: 特定の月のエンベディングを取得する
PDI は時系列データセットであるため、通常は snapshot_date でフィルタして、複数の月にわたって重複する郵便番号が返されないようにする必要があります。日付は常に -01 に設定する必要があります。
SELECT
snapshot_date,
geo_name AS postal_code,
geo_id AS place_id,
features -- The 330-dim vector
FROM
`your-project.population_dynamics___us___domestic.v1_postal_code.embeddings_table`
WHERE
snapshot_date = '2025-10-01' -- You must use the first of the month ('-01')
LIMIT 10;
2. SQL: 行政区域でフィルタする(配列のネスト解除)
郵便番号は複数の行政境界にまたがる可能性があるため、administrative_area_* フィールドは配列として保存されます。特定の州(「カリフォルニア」など)内のすべての郵便番号をフィルタするには、BigQuery の UNNEST() 関数を使用する必要があります。
SELECT
snapshot_date,
geo_name AS postal_code,
admin1_name
FROM
your-project.population_dynamics___us___domestic.v1_postal_code.embeddings_table,
UNNEST(administrative_area_level_1_names) AS admin1_name
WHERE
-- On or after October 2025
snapshot_date >= '2025-10-01' -- You must use the first of the month ('-01')
AND admin1_name = 'California'
LIMIT 10;
3. SQL: 類似する場所を見つける
このクエリは、外部データを必要とせずに、行動が類似している場所を特定します。ML.DISTANCE 関数を使用してコサイン類似度を計算し、対象の郵便番号の上位一致を返します。
WITH TargetLocation AS (
SELECT features AS target_vector
FROM `your-project.population_dynamics___us___domestic.v1_postal_code.embeddings_table`
WHERE snapshot_date = '2025-10-01' -- You must use the first of the month ('-01')
AND geo_name = '90210' -- Replace with your target postal code
LIMIT 1
)
SELECT
t.geo_name AS postal_code,
-- 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.population_dynamics___us___domestic.v1_postal_code.embeddings_table` t,
TargetLocation p
WHERE
t.snapshot_date = '2025-10-01' -- You must use the first of the month ('-01')
AND t.geo_name != '90210' -- Exclude the target itself
ORDER BY
similarity_score DESC
LIMIT 20;
4. SQL: 顧客データの結合
この例では、郵便番号で結合して、行動エンベディングを使用して独自の内部データ(店舗のパフォーマンス テーブルなど)を拡充する方法を示します。
SELECT
store.store_id,
store.postal_code,
store.total_revenue,
embeddings.features AS pdi_vector
FROM
`your-project.internal_data.store_performance` AS store
JOIN
`your-project.population_dynamics___us___domestic.v1_postal_code.embeddings_table` AS embeddings
ON
store.postal_code = embeddings.geo_name
WHERE
embeddings.snapshot_date = '2025-10-01' -- You must use the first of the month ('-01')
5. Python: 機械学習用のデータの読み込み
エンベディングは BigQuery 配列として保存されます。ML ライブラリで使用するには、列を NumPy 行列に変換する必要があります。
from google.cloud import bigquery
import numpy as np
import pandas as pd
client = bigquery.Client()
query = """
SELECT
geo_name,
features -- Returns as a list of floats
FROM
`your-project.population_dynamics___us___domestic.v1_postal_code.embeddings_table`
WHERE
snapshot_date = '2025-10-01' -- You must use the first of the month ('-01')
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)
よくある質問
未加工の入力データ(特定の検索クエリやモビリティ トレースなど)にアクセスできますか?
いいえ。人口動態エンベディングは、集計されたプライバシー保護シグナルから生成されます。ユーザーのプライバシーを保護するため、特定のユーザーの追跡情報、個々の検索履歴、未加工の移動パターンは提供されません。エンベディングは、これらの動作の潜在表現を提供します。これは、生分析ではなく、モデリングと予測用に最適化されています。
エンベディングの生成に使用する検索語句はどのように選択されますか?
検索クエリの生データではなく、ナレッジグラフ(KG)エンティティを使用します。たとえば、「テイラー スウィフトの彼氏」や「KC タイトエンド」などのクエリは、どちらも同じ基盤となる KG エンティティ(「トラビス ケルシー」)にマッピングされます。このアプローチは言語に依存せず、より広範なセマンティック カテゴリをキャプチャし、プライバシーを大幅に強化します。
ベクトル ディメンションは解釈可能ですか(たとえば、ディメンション 5 は「コーヒー」ですか)?
いいえ、ベクトルは潜在表現です。特徴は ML モデルによって学習されるため、最終的なベクトル インデックスから特定のソース入力への単純なセマンティック マッピングや 1 対 1 の変換はありません。どのインデックス ブロックがどのデータセットから派生しているかはわかっています(たとえば、インデックス 0 ~ 127 は検索トレンドを表します)が、インデックス 5 などの特定のインデックスは単一のキーワードにマッピングされません。代わりに、モデルによって学習された複雑な抽象的な特徴を表します。
データセットにポリゴンの境界(シェープファイル)は含まれていますか?
いいえ。このデータセットは郵便番号(geo_name)とそれに関連付けられたプレイス ID(geo_id)を提供しますが、未加工のポリゴン ジオメトリ(WKT など)は含まれていません。
ユースケースに応じて、次のアプローチをおすすめします。
- Google マップでの可視化の場合: geo_id で提供されるプレイス ID を使用して、データドリブン スタイル設定を使用して地図上に境界線を直接スタイル設定してレンダリングできます。これらの境界は視覚的な表示には最適ですが、未加工のジオメトリ ファイルとしてエクスポートすることはできません。
- 空間結合と分析の場合: 生の空間ポリゴンが必要な場合は、geo_name 郵便番号を使用して、このデータセットを一般公開の境界データセット(BigQuery 一般公開データセットで利用可能なものなど)と結合することをおすすめします。
エンベディング データセットの時間枠は何ですか?
PDI エンベディングは毎月更新され、新しい月がデータセットに追加されます。データは snapshot_date 列(YYYY-MM-DD 形式)で表され、特定の月の場所の行動と物理的なフィンガープリントを反映した安定したベースラインが提供されます。