グラウンド トゥルース データを準備する
人口動態エンベディングを使用するには、グラウンド トゥルース データをサポートされている地理的境界に集約する必要があります。行政境界の種類は世界中で異なるため、普遍的な数学的グリッド システム(S2 セルなど)またはローカルの行政地域(特定の国のデータセットに応じて、郡や地区など)を使用してデータを調整できます。
オプション 1: 既存のモデルにエンベディングを組み込む
- 既存のモデルベースのグラウンド トゥルースを準備する: エンベディングを地理空間共変量として使用して、既存のモデルを強化します。
- エラー修正モデルをトレーニングする: エンベディングを、元のモデル出力、期待値またはグラウンド トゥルース、エンベディングを入力として受け取り、新しいエラー修正モデルを学習するモデルに統合して、既存のモデルを改善します。
オプション 2: 特定のユースケースに合わせて調整する
- 予測モデルを選択します。GBDT、MLP、線形などの任意のモデルを予測に使用できます。
- 予測にエンベディングを使用する: 人口動態エンベディングを入力特徴として他のコンテキスト データとともに使用して、予測精度を向上させます。
カスタム境界集計
グラウンド トゥルース データで郵便番号、運転時間等時線、商圏などのカスタム ポリゴンを使用している場合は、境界集計を実行できます。このプロセスでは、複数の S2 セルベクトルを結合して、ターゲット ポリゴンの単一の表現を作成します。適切な重み付け方法を選択することで、集約されたエンベディングがダウンストリーム モデリングの目標を正確に反映します。
1. 人口加重平均(PDI の推奨デフォルト)
人口重み付け集計は、小売店のパフォーマンスや消費者行動のモデリングなど、人間中心のユースケースで使用します。
人口統計データに面積加重空間集計を使用すると、ML の特徴が歪む可能性があります。これは、公園、工業地帯、水域などの人口の少ない地域が、実際の居住者のプロファイルを歪める場合に発生します。
この問題を解決するには、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 セル トークン(16 進文字列)が含まれていることを確認します。
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: ML 用データを読み込む
エンベディングは BigQuery 配列として保存されます。ML ライブラリで使用するには、列を 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 上のソースを見る