Подготовьте данные для проверки достоверности.
Для использования эмбеддингов динамики населения ваши данные наземной проверки должны быть агрегированы по поддерживаемой географической границе. Поскольку типы административных границ различаются по всему миру, вы можете выравнивать свои данные, используя либо универсальные математические сетки (например, ячейки S2), либо локальные административные регионы (например, округа или районы, в зависимости от конкретного набора данных по стране).
Вариант 1: Встроить эмбеддинги в существующую модель.
- Подготовьте существующие эталонные данные на основе модели: используйте эмбеддинги в качестве геопространственных ковариат для улучшения существующей модели.
- Обучение модели коррекции ошибок: улучшение существующей модели путем интеграции эмбеддингов в модель, которая принимает исходные выходные данные модели, ожидаемое значение или истинные значения и эмбеддинги для обучения новой модели коррекции ошибок.
Вариант 2: Настройка под конкретные сценарии использования.
- Выберите модель прогнозирования: для прогнозирования можно использовать любую модель, например, GBDT, MLP или линейную.
- Используйте эмбеддинги для прогнозирования: используйте эмбеддинги динамики популяций в качестве входных признаков, наряду с другими контекстными данными, для повышения точности прогнозирования.
Пользовательская агрегация границ
Если ваши данные для проверки достоверности информации используют пользовательские полигоны, такие как почтовые индексы, изохроны времени в пути или торговые зоны, вы можете выполнить агрегацию границ. Этот процесс объединяет несколько векторов ячеек S2 в единое представление для целевого полигона. Выбор правильной методики взвешивания гарантирует, что агрегированное представление точно отражает ваши дальнейшие цели моделирования.
1. Средневзвешенное значение по численности населения (рекомендуемое значение по умолчанию для PDI)
Используйте агрегирование с учетом численности населения для решения задач, ориентированных на человека, таких как анализ эффективности работы розничных магазинов или моделирование поведения потребителей.
Использование пространственной агрегации демографических данных с учетом площади может исказить характеристики машинного обучения. Это происходит, когда незаселенные территории, такие как парки, промышленные зоны или водоемы, искажают профиль реальных жителей.
Для решения этой проблемы можно выполнить усреднение по численности населения в BigQuery. Этот подход использует высокоточные демографические наборы данных, такие как WorldPop в каталоге данных Earth Engine , для расчета точной плотности каждого пересекающегося сегмента ячейки S2.
Чтобы увидеть полный пример реализации процесса, учитывающего численность населения, запустите интерактивный блокнот.
2. Средневзвешенное по площади значение
Для анализа экологических или физических аспектов используйте агрегирование с учетом площади. Это полезно для анализа землепользования, исследований застроенной среды или планирования инфраструктуры, где необходимо оценивать регионы независимо от распределения населения.
В этих сценариях физическая площадь территории имеет большее значение, чем плотность населения. Это гарантирует, что каждый квадратный километр в пределах границ полигона вносит равный вклад в агрегированный вектор.
При этом методе вектор встраивания каждой составляющей ячейки S2 взвешивается в соответствии с географической площадью поверхности, которую она покрывает в пределах целевого многоугольника.
Геопространственные операции и преобразование ячеек S2
В Population Dynamics Insights в качестве основной пространственной единицы используются токены ячеек S2 уровня 12 (хранящиеся в столбце geo_id в виде 7-символьных шестнадцатеричных строк). Вы можете использовать встроенные географические функции BigQuery для преобразования точечных координат или пользовательских пространственных границ в соответствующие токены ячеек S2. Для преобразования токенов ячеек S2 в полигональные геометрии для визуализации можно использовать клиентские библиотеки. Дополнительную информацию см. в разделе «Получение геометрии ячеек S2 из шестнадцатеричного токена S2 уровня 12» .
Преобразовать координаты точек в шестиугольные токены S2 уровня 12.
Для сопоставления координат точки (широта/долгота) со столбцом geo_id в Population Dynamics Insights используйте функцию BigQuery S2_CELLIDFROMPOINT в сочетании с ST_GEOGPOINT .
BigQuery хранит идентификаторы ячеек S2 в виде знаковых значений INT64 , из-за чего идентификаторы ячеек в определенных регионах могут принимать значения отрицательных целых чисел. В приведенных ниже примерах мы определяем вспомогательную функцию TO_S2_HEX , которая преобразует целое число в стандартный шестнадцатеричный токен и удаляет конечные нули в соответствии со спецификацией геометрии S2.
Следующий запрос преобразует координаты точки Таймс-сквер, Нью-Йорк (широта 40.75796 , долгота -73.98554 ) в соответствующий шестнадцатеричный токен уровня S2 12:
CREATE TEMP FUNCTION TO_S2_HEX(s2_int INT64) RETURNS STRING AS ( RTRIM(FORMAT('%x%015x', (s2_int >> 60) & 0xF, s2_int & 0x0FFFFFFFFFFFFFFF), '0') ); SELECT 'Times Square, NYC' AS location_name, TO_S2_HEX(S2_CELLIDFROMPOINT(ST_GEOGPOINT(-73.98554, 40.75796), level => 12)) AS geo_id;
Для преобразования существующей таблицы точек со столбцами latitude и longitude в объединяемые токены S2:
CREATE TEMP FUNCTION TO_S2_HEX(s2_int INT64) RETURNS STRING AS ( RTRIM(FORMAT('%x%015x', (s2_int >> 60) & 0xF, s2_int & 0x0FFFFFFFFFFFFFFF), '0') ); SELECT store_id, TO_S2_HEX(S2_CELLIDFROMPOINT(ST_GEOGPOINT(longitude, latitude), level => 12)) AS geo_id FROM `your-project.internal_data.store_locations`;
Сгенерировать токены ячеек S2 уровня 12 для многоугольника.
Если ваши данные используют пользовательские границы областей (например, торговые зоны, зоны доставки или почтовые индексы в формате WKT или GeoJSON), преобразуйте текстовое представление в GEOGRAPHY с помощью ST_GEOGFROM и используйте S2_COVERINGCELLIDS для извлечения всех пересекающихся ячеек S2 уровня 12.
Следующий запрос извлекает все шестнадцатеричные токены S2 уровня 12, покрывающие заданный полигон в центре Манхэттена:
CREATE TEMP FUNCTION TO_S2_HEX(s2_int INT64) RETURNS STRING AS ( RTRIM(FORMAT('%x%015x', (s2_int >> 60) & 0xF, s2_int & 0x0FFFFFFFFFFFFFFF), '0') ); WITH CustomBoundary AS ( SELECT ST_GEOGFROM('POLYGON((-73.99 40.75, -73.97 40.75, -73.97 40.76, -73.99 40.76, -73.99 40.75))') AS geom ) SELECT TO_S2_HEX(s2_id) AS geo_id FROM CustomBoundary, UNNEST(S2_COVERINGCELLIDS(geom, min_level => 12, max_level => 12)) AS s2_id;
Получите геометрию ячейки S2 из шестиугольного токена S2 12-го уровня.
Функции BigQuery GIS являются односторонними преобразователями (Геометрия → Идентификатор ячейки S2) и не включают функцию преобразования токена ячейки S2 в полигональную GEOGRAPHY . Для получения полигональной геометрии токена ячейки S2 для визуализации или пространственного анализа используйте клиентскую библиотеку на Python, например s2sphere для декодирования 7-символьного токена ячейки S2 в его граничные координаты, и shapely для построения полигона для картографических инструментов, таких как Folium:
import s2sphere from shapely.geometry import Polygon def s2_token_to_polygon(s2_token: str) -> Polygon: """Converts a 7-character S2 cell token into a Shapely Polygon.""" cell_id = s2sphere.CellId.from_token(s2_token) cell = s2sphere.Cell(cell_id) # Extract the 4 corner vertices of the S2 cell vertices = [] for i in range(4): vertex = cell.get_vertex(i) lat_lng = s2sphere.LatLng.from_point(vertex) vertices.append((lat_lng.lng().degrees, lat_lng.lat().degrees)) # Close the polygon loop vertices.append(vertices[0]) return Polygon(vertices) # Example: Get boundary for S2 token '549056f' cell_polygon = s2_token_to_polygon('549056f') print(cell_polygon.wkt)
Примеры запросов
Замените 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 с соответствующей полигональной геометрией, поскольку в этом наборе данных используются токены ячеек 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