ใช้การฝังข้อมูลเชิงลึกเกี่ยวกับพลวัตของประชากร

เตรียมข้อมูลความจริงพื้นฐาน

หากต้องการใช้การฝังไดนามิกของประชากร คุณต้องรวบรวมข้อมูลความจริงพื้นฐาน ไปยังขอบเขตทางภูมิศาสตร์ที่รองรับ เนื่องจากประเภทขอบเขตการบริหารแตกต่างกันไปทั่วโลก คุณจึงจัดแนวข้อมูลได้โดยใช้ระบบกริดทางคณิตศาสตร์สากล (เช่น เซลล์ S2) หรือเขตการบริหารท้องถิ่น (เช่น เขตหรืออำเภอ ทั้งนี้ขึ้นอยู่กับชุดข้อมูลของประเทศนั้นๆ)

ตัวเลือกที่ 1: รวมการฝังลงในโมเดลที่มีอยู่

  • เตรียมข้อมูลความจริงที่ได้จากการสังเกตการณ์ตามโมเดลที่มีอยู่: ใช้การฝังเป็นตัวแปร ร่วมเชิงพื้นที่เพื่อปรับปรุงโมเดลที่มีอยู่
  • ฝึกโมเดลแก้ไขข้อผิดพลาด: ปรับปรุงโมเดลที่มีอยู่โดยการผสานรวม การฝังลงในโมเดลที่ใช้เอาต์พุตโมเดลเดิม ค่าที่คาดไว้หรือข้อมูลที่เป็นความจริง และการฝังเพื่อฝึกโมเดลแก้ไขข้อผิดพลาดใหม่

ตัวเลือกที่ 2: ปรับแต่งสำหรับ Use Case ที่เฉพาะเจาะจง

  • เลือกโมเดลการคาดการณ์: สามารถใช้โมเดลใดก็ได้ เช่น GBDT, MLP หรือเชิงเส้น สำหรับการคาดการณ์
  • ใช้การฝังเพื่อการคาดการณ์: ใช้การฝังพลวัตของประชากรเป็นฟีเจอร์อินพุต ร่วมกับข้อมูลเชิงบริบทอื่นๆ เพื่อปรับปรุงความแม่นยำในการคาดการณ์

การรวมขอบเขตที่กำหนดเอง

หากข้อมูลความจริงพื้นฐานใช้รูปหลายเหลี่ยมที่กำหนดเอง เช่น รหัสไปรษณีย์ เส้นชั้นความสูงของเวลาในการขับรถ หรือพื้นที่การค้า คุณสามารถทำการรวบรวมขอบเขตได้ กระบวนการนี้ รวมเวกเตอร์ของเซลล์ S2 หลายรายการไว้ในการแสดงเดียวสำหรับรูปหลายเหลี่ยมเป้าหมาย การเลือกวิธีการถ่วงน้ำหนักที่เหมาะสมจะช่วยให้มั่นใจได้ว่าการฝังแบบรวมจะแสดงเป้าหมายการสร้างโมเดลขั้นปลายได้อย่างถูกต้อง

ใช้การรวบรวมข้อมูลแบบถ่วงน้ำหนักตามประชากรสำหรับกรณีการใช้งานที่เน้นมนุษย์เป็นศูนย์กลาง เช่น ประสิทธิภาพของร้านค้าปลีกหรือการสร้างแบบจำลองพฤติกรรมผู้บริโภค

การใช้การรวมเชิงพื้นที่แบบถ่วงน้ำหนักตามพื้นที่สำหรับข้อมูลประชากรอาจทำให้ฟีเจอร์แมชชีนเลิร์นนิงบิดเบือน กรณีนี้เกิดขึ้นเมื่อพื้นที่ที่ไม่มีประชากร เช่น สวนสาธารณะ เขตอุตสาหกรรม หรือแหล่งน้ำ บิดเบือนโปรไฟล์ของผู้อยู่อาศัยจริง

หากต้องการแก้ไขปัญหานี้ คุณสามารถคำนวณค่าเฉลี่ยถ่วงน้ำหนักตามประชากรใน BigQuery วิธีนี้ใช้ชุดข้อมูลประชากรที่มีความละเอียดสูง เช่น WorldPop ใน แคตตาล็อกข้อมูล Earth Engine เพื่อคำนวณความหนาแน่นที่แม่นยำของแต่ละกลุ่มเซลล์ S2 ที่ตัดกัน

หากต้องการดูตัวอย่างการติดตั้งใช้งานเวิร์กโฟลว์แบบถ่วงน้ำหนักตามประชากรที่สมบูรณ์ ให้เรียกใช้ Notebook แบบอินเทอร์แอกทีฟ

2. ค่าเฉลี่ยแบบถ่วงน้ำหนักตามพื้นที่

สำหรับกรณีการใช้งานด้านสิ่งแวดล้อมหรือทางกายภาพ ให้ใช้การรวมข้อมูลแบบถ่วงน้ำหนักตามพื้นที่แทน ซึ่งมีประโยชน์สำหรับการวิเคราะห์การใช้ที่ดิน การศึกษาเกี่ยวกับสภาพแวดล้อมที่สร้างขึ้น หรือการวางแผนโครงสร้างพื้นฐานในกรณีที่คุณต้องประเมินภูมิภาคโดยไม่คำนึงถึงการกระจายตัวของประชากร

ในกรณีเหล่านี้ พื้นที่ทางกายภาพมีความเกี่ยวข้องมากกว่าความหนาแน่นของประชากร วิธีนี้ช่วยให้มั่นใจได้ว่าทุกตารางกิโลเมตรภายในขอบเขตรูปหลายเหลี่ยม จะมีส่วนร่วมอย่างเท่าเทียมกันในเวกเตอร์รวม

ในวิธีนี้ เวกเตอร์การฝังของเซลล์ S2 องค์ประกอบแต่ละเซลล์จะได้รับการถ่วงน้ำหนักตาม พื้นที่ผิวทางภูมิศาสตร์ที่ครอบคลุมภายในรูปหลายเหลี่ยมเป้าหมาย

การดำเนินการทางภูมิสารสนเทศและการแปลงเซลล์ S2

ข้อมูลเชิงลึกเกี่ยวกับพลวัตของประชากรใช้โทเค็น S2 Cell ระดับ 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 ซึ่งจะแปลงจำนวนเต็มเป็นโทเค็นเลขฐาน 16 มาตรฐานและตัดเลข 0 ต่อท้ายตามข้อกำหนดของ S2 Geometry

คําค้นหาต่อไปนี้จะแปลงพิกัดจุดสําหรับไทม์สแควร์ นิวยอร์ก (ละติจูด 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 เป็นตัวแปลงทางเดียว (Geometry → รหัสเซลล์ S2) และ ไม่มีฟังก์ชันในการแปลงโทเค็นเซลล์ 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 บนแผนที่ คุณต้องแปลงหรือผนวก ID เซลล์ 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 หากต้องการใช้ในไลบรารี 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)