استخدام عمليات التضمين في "إحصاءات حول ديناميات السكان"

إعداد بيانات الواقع الأساسي

لاستخدام تضمينات "ديناميكيات السكان"، يجب تجميع بيانات الواقع في حدود جغرافية متوافقة. بما أنّ أنواع الحدود الإدارية تختلف على مستوى العالم، يمكنك مواءمة بياناتك باستخدام أنظمة شبكات رياضية عالمية (مثل خلايا S2) أو مناطق إدارية محلية (مثل المقاطعات أو المناطق، حسب مجموعة بيانات البلد المحدّد).

الخيار 1: دمج التضمينات في نموذج حالي

  • إعداد البيانات الواقعية الحالية المستندة إلى النماذج: يمكنك استخدام التضمينات كمتغيرات مشتركة جغرافية مكانية لتحسين نموذج حالي.
  • تدريب نموذج تصحيح الأخطاء: يمكنك تحسين نموذج حالي من خلال دمج التضمينات في نموذج يأخذ مخرجات النموذج الأصلي، والقيمة المتوقعة أو الواقعية، والتضمينات لتعلم نموذج جديد لتصحيح الأخطاء.

الخيار 2: تحسين الأداء لحالات استخدام معيّنة

  • اختَر نموذج تنبؤي: يمكن استخدام أي نموذج، مثل GBDT أو MLP أو نموذج خطي، لوضع التوقّعات.
  • استخدام التضمينات لإجراء التوقعات: استخدِم تضمينات "ديناميكيات السكان" كميزات إدخال، إلى جانب بيانات سياقية أخرى، لتحسين دقة التوقعات.

تجميع الحدود المخصّصة

إذا كانت بيانات المصدر الموثوق تستخدم مضلّعات مخصّصة، مثل الرموز البريدية أو خطوط تساوي الزمن لمدة القيادة أو المناطق التجارية، يمكنك إجراء تجميع للحدود. تجمع هذه العملية بين متجهات خلايا S2 متعددة في تمثيل واحد للمضلّع المستهدَف. يضمن اختيار منهجية الترجيح المناسبة أن تعكس التضمينات المجمّعة أهداف النمذجة النهائية بدقة.

استخدِم التجميع المرجَّح حسب عدد السكان لحالات الاستخدام التي تركّز على المستخدمين، مثل أداء متاجر البيع بالتجزئة أو وضع نماذج لسلوك المستهلكين.

يمكن أن يؤدي استخدام تجميع مكاني مرجّح حسب المساحة للبيانات الديمغرافية إلى تشويه ميزات تعلُّم الآلة. يحدث ذلك عندما تؤدي المناطق غير المأهولة، مثل الحدائق أو المناطق الصناعية أو المسطحات المائية، إلى تشويه الملف الشخصي للسكان الفعليين.

لحلّ هذه المشكلة، يمكنك إجراء متوسط مرجّح حسب عدد السكان في BigQuery. تستخدم هذه الطريقة مجموعات بيانات ديمغرافية عالية الدقة، مثل WorldPop في كتالوج بيانات Earth Engine، لاحتساب الكثافة الدقيقة لكل جزء من خلايا S2 المتقاطعة.

للاطّلاع على مثال كامل على تنفيذ سير عمل مرجّح حسب عدد السكان، يمكنك تشغيل دفتر الملاحظات التفاعلي.

2. المتوسط المرجَّح للمنطقة

بالنسبة إلى حالات الاستخدام البيئية أو المادية، استخدِم التجميع المرجَّح حسب المساحة بدلاً من ذلك. هذه البيانات مفيدة في تحليل استخدام الأراضي أو دراسات البيئة الحضرية أو التخطيط للبنية التحتية حيث يجب تقييم المناطق بغض النظر عن توزيع السكان.

في هذه السيناريوهات، تكون مساحة الأرض المادية أكثر صلة من الكثافة السكانية البشرية. ويضمن ذلك أنّ كل كيلومتر مربّع ضمن حدود المضلّع يساهم بشكل متساوٍ في المتّجه المجمّع.

بموجب هذه الطريقة، يتم ترجيح متجه التضمين لكل خلية S2 مكوّنة حسب المساحة الجغرافية التي تغطيها داخل المضلّع المستهدف.

العمليات الجغرافية المكانية وتحويل الخلايا S2

تستخدِم "إحصاءات ديناميكية سكانية" رموزًا مميزة لمربّعات S2 من المستوى 12 (مخزَّنة في العمود geo_id كسلاسل سداسية عشرية مكوّنة من 7 أحرف) كوحدة مكانية أساسية. يمكنك استخدام الدوال الجغرافية المضمّنة في BigQuery لتحويل إحداثيات النقاط أو الحدود المكانية المخصّصة إلى رموز مميزة مطابقة لخلية S2. لتحويل رموز مميزة لخلايا S2 إلى أشكال هندسية مضلّعة بغرض العرض المرئي، يمكنك استخدام مكتبات من جهة العميل. لمزيد من المعلومات، يُرجى الاطّلاع على الحصول على الشكل الهندسي لخلية S2 من رمز مميّز سداسي عشري من المستوى 12 في S2.

تحويل إحداثيات النقاط إلى رموز S2 المميزة السداسية العشرية من المستوى 12

لمطابقة إحداثيات نقاط خطوط العرض/الطول مع عمود geo_id في "إحصاءات ديناميكيات السكان"، استخدِم دالة S2_CELLIDFROMPOINT في BigQuery مع ST_GEOGPOINT.

يخزّن BigQuery أرقام تعريف خلايا S2 كقيم INT64 موقَّعة، ما يؤدي إلى تقييم أرقام تعريف الخلايا في مناطق معيّنة كأعداد صحيحة سالبة. في الأمثلة أدناه، نحدّد دالة مساعِدة باسم TO_S2_HEX تحوّل العدد الصحيح إلى رمز مميّز عادي بنظام العد الستة عشري وتزيل الأصفار اللاحقة وفقًا لمواصفات S2 Geometry.

يحوّل طلب البحث التالي إحداثيات النقطة في ميدان تايمز سكوير في مدينة نيويورك (خط العرض 40.75796 وخط الطول -73.98554) إلى الرمز المميز السداسي العشري المقابل من المستوى 12 في نظام 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
  '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 المتقاطعة.

يستخرج طلب البحث التالي جميع الرموز المميزة السداسية من المستوى 12 في 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')
);

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 هي محوّلات أحادية الاتجاه (Geometry → S2 Cell ID) ولا تتضمّن دالة لتحويل رمز مميّز لخلية S2 إلى مضلّع GEOGRAPHY. للحصول على شكل هندسي مضلّع لرمز مميّز لخلايا S2 من أجل العرض المرئي أو التحليل المكاني، استخدِم مكتبة من جهة العميل في Python، مثل s2sphere لفك ترميز رمز مميّز لخلايا S2 يتألف من 7 أحرف إلى إحداثيات الحدود، و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)