เตรียมข้อมูลที่เป็นความจริง
หากต้องการใช้การฝังข้อมูลพลวัตของประชากร คุณต้องรวมข้อมูลที่เป็นความจริงไว้ในขอบเขตทางภูมิศาสตร์ที่รองรับ เนื่องจากประเภทขอบเขตการปกครองแตกต่างกันไปทั่วโลก คุณจึงสามารถจัดแนวข้อมูลได้โดยใช้ระบบกริดทางคณิตศาสตร์สากล (เช่น เซลล์ S2) หรือภูมิภาคการปกครองท้องถิ่น (เช่น เขตหรืออำเภอ ทั้งนี้ขึ้นอยู่กับชุดข้อมูลของประเทศนั้นๆ)
ตัวเลือกที่ 1: รวมการฝังข้อมูลเข้ากับโมเดลที่มีอยู่
- เตรียมข้อมูลที่เป็นความจริงตามโมเดลที่มีอยู่: ใช้การฝังข้อมูลเป็นตัวแปรย่อยทางภูมิสารสนเทศเพื่อปรับปรุงโมเดลที่มีอยู่
- ฝึกโมเดลการแก้ไขข้อผิดพลาด: ปรับปรุงโมเดลที่มีอยู่โดยผสานรวมการฝังข้อมูลเข้ากับโมเดลที่ใช้เอาต์พุตโมเดลเดิม ค่าที่คาดหวังหรือข้อมูลที่เป็นความจริง และการฝังข้อมูลเพื่อเรียนรู้โมเดลการแก้ไขข้อผิดพลาดใหม่
ตัวเลือกที่ 2: ปรับแต่งสำหรับกรณีการใช้งานที่เฉพาะเจาะจง
- เลือกโมเดลการคาดการณ์: คุณสามารถใช้โมเดลใดก็ได้ เช่น GBDT, MLP หรือโมเดลเชิงเส้นสำหรับการคาดการณ์
- ใช้การฝังข้อมูลสำหรับการคาดการณ์: ใช้การฝังข้อมูลพลวัตของประชากรเป็นฟีเจอร์อินพุตควบคู่ไปกับข้อมูลตามบริบทอื่นๆ เพื่อปรับปรุงความแม่นยำในการคาดการณ์
การรวมข้อมูลตามขอบเขตที่กำหนดเอง
หากข้อมูลที่เป็นความจริงของคุณใช้รูปหลายเหลี่ยมที่กำหนดเอง เช่น รหัสไปรษณีย์ เส้นชั้นความสูงของเวลาเดินทาง หรือพื้นที่การค้า คุณสามารถรวมข้อมูลตามขอบเขตได้ กระบวนการนี้จะรวมเวกเตอร์เซลล์ S2 หลายรายการไว้ในการแสดงผลเดียวสำหรับรูปหลายเหลี่ยมเป้าหมาย การเลือกวิธีการถ่วงน้ำหนักที่เหมาะสมจะช่วยให้การฝังข้อมูลที่รวมแล้วสะท้อนเป้าหมายการสร้างโมเดลปลายทางได้อย่างแม่นยำ
1. ค่าเฉลี่ยแบบถ่วงน้ำหนักตามประชากร (ค่าเริ่มต้นที่แนะนำสำหรับ PDI)
ใช้การรวมข้อมูลแบบถ่วงน้ำหนักตามประชากรสำหรับกรณีการใช้งานที่เน้นผู้คนเป็นหลัก เช่น ประสิทธิภาพของร้านค้าปลีกหรือการสร้างโมเดลพฤติกรรมผู้บริโภค
การใช้การรวมข้อมูลเชิงพื้นที่แบบถ่วงน้ำหนักตามพื้นที่สำหรับข้อมูลประชากรอาจทำให้ฟีเจอร์แมชชีนเลิร์นนิงบิดเบือนไป ซึ่งจะเกิดขึ้นเมื่อพื้นที่ที่ไม่มีผู้คนอาศัยอยู่ เช่น สวนสาธารณะ เขตอุตสาหกรรม หรือแหล่งน้ำ บิดเบือนโปรไฟล์ของผู้อยู่อาศัยจริง
หากต้องการแก้ไขปัญหานี้ คุณสามารถคำนวณค่าเฉลี่ยแบบถ่วงน้ำหนักตามประชากรใน BigQuery ได้ แนวทางนี้ใช้ชุดข้อมูลประชากรที่มีความละเอียดสูง เช่น WorldPop ในแคตตาล็อกข้อมูล Earth Engine เพื่อคำนวณความหนาแน่นที่แม่นยำของส่วนเซลล์ S2 ที่ตัดกันแต่ละส่วน
หากต้องการดูตัวอย่างการใช้งานเวิร์กโฟลว์แบบถ่วงน้ำหนักตามประชากรที่สมบูรณ์ ให้เรียกใช้สมุดบันทึกแบบโต้ตอบ
2. ค่าเฉลี่ยแบบถ่วงน้ำหนักตามพื้นที่
สำหรับกรณีการใช้งานด้านสิ่งแวดล้อมหรือทางกายภาพ ให้ใช้การรวมข้อมูลแบบถ่วงน้ำหนักตามพื้นที่แทน วิธีนี้มีประโยชน์สำหรับการวิเคราะห์การใช้ที่ดิน การศึกษาเกี่ยวกับสิ่งแวดล้อมที่มนุษย์สร้างขึ้น หรือการวางแผนโครงสร้างพื้นฐาน ซึ่งคุณต้องประเมินภูมิภาคโดยไม่คำนึงถึงการกระจายตัวของประชากร
ในสถานการณ์เหล่านี้ พื้นที่ทางกายภาพมีความเกี่ยวข้องมากกว่าความหนาแน่นของประชากร ซึ่งจะช่วยให้มั่นใจได้ว่าทุกๆ ตารางกิโลเมตรภายในขอบเขตของรูปหลายเหลี่ยมจะมีส่วนร่วมเท่ากันในเวกเตอร์ที่รวมแล้ว
ในวิธีนี้ เวกเตอร์การฝังข้อมูลของเซลล์ S2 แต่ละองค์ประกอบจะถูกถ่วงน้ำหนักตามพื้นที่ผิวทางภูมิศาสตร์ที่ครอบคลุมภายในรูปหลายเหลี่ยมเป้าหมาย
การดำเนินการทางภูมิสารสนเทศและการแปลงเซลล์ S2
ข้อมูลเชิงลึกเกี่ยวกับพลวัตของประชากรใช้โทเค็นเซลล์ S2 ระดับ 12 (จัดเก็บไว้ในคอลัมน์ geo_id เป็นสตริงเลขฐาน 16 7 อักขระ) เป็นหน่วยเชิงพื้นที่หลัก คุณสามารถใช้
ฟังก์ชันภูมิศาสตร์ในตัว
ใน BigQuery เพื่อแปลงพิกัดจุดหรือขอบเขตเชิงพื้นที่ที่กำหนดเองเป็น
โทเค็นเซลล์ S2 ที่ตรงกัน หากต้องการแปลงโทเค็นเซลล์ S2 เป็นรูปหลายเหลี่ยมเชิงเรขาคณิตสำหรับการแสดงภาพ คุณสามารถใช้ไลบรารีฝั่งไคลเอ็นต์ได้ ดูข้อมูลเพิ่มเติมได้ที่รับ
รูปหลายเหลี่ยมเชิงเรขาคณิตของเซลล์ S2 จากโทเค็นฐานสิบหกของเซลล์ S2 ระดับ 12
แปลงพิกัดจุดเป็นโทเค็นฐานสิบหกของเซลล์ S2 ระดับ 12
หากต้องการจับคู่พิกัดจุดละติจูด/ลองจิจูดกับคอลัมน์ geo_id ในข้อมูลเชิงลึกเกี่ยวกับพลวัตของประชากร ให้ใช้ฟังก์ชัน S2_CELLIDFROMPOINT ของ BigQuery ร่วมกับ 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
ฟังก์ชัน GIS ของ BigQuery เป็นตัวแปลงทางเดียว (รูปหลายเหลี่ยมเชิงเรขาคณิต → รหัสเซลล์ 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 บนแผนที่ คุณต้องแปลงหรือรวมรหัสเซลล์ 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)
เรียกใช้ใน Google Colab
ดูซอร์สโค้ดใน GitHub