실측 데이터 준비
인구 역학 임베딩을 사용하려면 실측 데이터를 지원되는 지리적 경계로 집계해야 합니다. 전 세계적으로 행정 경계 유형이 다양하므로 범용 수학 그리드 시스템 (예: 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 셀 토큰 (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: 머신러닝을 위한 데이터 로드
임베딩은 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 소스 보기