ग्राउंड ट्रुथ डेटा तैयार करना
जनसंख्या के आंकड़ों की एम्बेडिंग का इस्तेमाल करने के लिए, आपके वास्तविक डेटा को उस भौगोलिक सीमा के हिसाब से एग्रीगेट किया जाना चाहिए जिसके लिए यह सुविधा उपलब्ध है. दुनिया भर में, प्रशासनिक सीमा के टाइप अलग-अलग होते हैं. इसलिए, अपने डेटा को अलाइन करने के लिए, यूनिवर्सल गणितीय ग्रिड सिस्टम (जैसे कि S2 सेल) या स्थानीय प्रशासनिक क्षेत्रों (जैसे कि काउंटी या ज़िले, जो किसी देश के डेटासेट पर निर्भर करते हैं) का इस्तेमाल किया जा सकता है.
पहला विकल्प: मौजूदा मॉडल में एम्बेडिंग शामिल करना
- मॉडल पर आधारित मौजूदा सटीक डेटा तैयार करना: मौजूदा मॉडल को बेहतर बनाने के लिए, एम्बेडिंग को भौगोलिक डेटा के कोवैरिएट के तौर पर इस्तेमाल करें.
- गड़बड़ी ठीक करने वाले मॉडल को ट्रेन करें: मौजूदा मॉडल को बेहतर बनाएं. इसके लिए, एम्बेडिंग को ऐसे मॉडल में इंटिग्रेट करें जो ओरिजनल मॉडल के आउटपुट, अनुमानित वैल्यू या सटीक जानकारी, और एम्बेडिंग का इस्तेमाल करके, गड़बड़ी ठीक करने वाला नया मॉडल तैयार करता है.
दूसरा विकल्प: इस्तेमाल के खास उदाहरणों के लिए ट्यून करना
- अनुमान लगाने वाला मॉडल चुनें: अनुमान लगाने के लिए, किसी भी मॉडल का इस्तेमाल किया जा सकता है. जैसे, GBDT, MLP या लीनियर मॉडल.
- अनुमान लगाने के लिए एम्बेडिंग का इस्तेमाल करना: अनुमान को ज़्यादा सटीक बनाने के लिए, जनसंख्या के आंकड़ों की एम्बेडिंग को इनपुट सुविधाओं के तौर पर इस्तेमाल करें. साथ ही, कॉन्टेक्स्ट के हिसाब से अन्य डेटा का इस्तेमाल करें.
कस्टम बाउंड्री एग्रीगेशन
अगर आपके ग्राउंड ट्रुथ डेटा में पिन कोड, ड्राइव-टाइम आइसोक्रोन या कारोबार की जगह जैसे कस्टम पॉलीगॉन का इस्तेमाल किया जाता है, तो बाउंड्री एग्रीगेशन किया जा सकता है. इस प्रोसेस में, टारगेट पॉलीगॉन के लिए, कई S2 सेल वेक्टर को एक ही प्रज़ेंटेशन में शामिल किया जाता है. वज़न असाइन करने का सही तरीका चुनने से, एग्रीगेट की गई एम्बेडिंग आपके डाउनस्ट्रीम मॉडलिंग लक्ष्यों को सटीक तरीके से दिखाती है.
1. जनसंख्या के हिसाब से भारित औसत (PDI के लिए डिफ़ॉल्ट रूप से सुझाया गया)
लोगों की ज़रूरतों को ध्यान में रखकर इस्तेमाल किए जाने वाले मामलों के लिए, जनसंख्या के हिसाब से एग्रीगेशन का इस्तेमाल करें. जैसे, खुदरा स्टोर की परफ़ॉर्मेंस या उपभोक्ता के व्यवहार की मॉडलिंग.
जनसांख्यिकी (उम्र, लिंग, आय, शिक्षा वगैरह की जानकारी) डेटा के लिए, एरिया-वेटेड स्पैटियल एग्रीगेशन का इस्तेमाल करने से, मशीन लर्निंग की सुविधाएं खराब हो सकती हैं. ऐसा तब होता है, जब पार्क, इंडस्ट्रियल ज़ोन या पानी के स्रोत जैसे कम आबादी वाले इलाके, असल निवासियों की प्रोफ़ाइल को गलत तरीके से पेश करते हैं.
इस समस्या को हल करने के लिए, BigQuery में जनसंख्या के हिसाब से औसत निकाला जा सकता है. इस तरीके में, ज़्यादा रिज़ॉल्यूशन वाले जनसांख्यिकी डेटासेट का इस्तेमाल किया जाता है. जैसे, Earth Engine के डेटा कैटलॉग में मौजूद WorldPop. इससे, इंटरसेक्ट करने वाले हर S2 सेल सेगमेंट के सटीक घनत्व का हिसाब लगाया जाता है.
जनसंख्या के हिसाब से वज़न तय करने वाले वर्कफ़्लो को लागू करने का पूरा उदाहरण देखने के लिए, इंटरैक्टिव नोटबुक चलाएं.
2. क्षेत्र के हिसाब से वेटेड ऐवरेज
पर्यावरण या शारीरिक इस्तेमाल के उदाहरणों के लिए, एरिया-वेटेड एग्रीगेशन का इस्तेमाल करें. यह ज़मीन के इस्तेमाल का विश्लेषण करने, बने हुए माहौल के बारे में स्टडी करने या बुनियादी ढांचे की प्लानिंग के लिए फ़ायदेमंद है. इन मामलों में, आपको जनसंख्या के डिस्ट्रिब्यूशन से अलग, क्षेत्रों का आकलन करना होता है.
इन स्थितियों में, इंसानों की आबादी के घनत्व के मुकाबले ज़मीन का क्षेत्रफल ज़्यादा मायने रखता है. इससे यह पक्का होता है कि पॉलीगॉन की सीमा के अंदर मौजूद हर वर्ग किलोमीटर, एग्रीगेट किए गए वेक्टर में बराबर योगदान देता है.
इस तरीके में, हर S2 सेल के एम्बेडिंग वेक्टर को, टारगेट पॉलीगॉन में कवर किए गए भौगोलिक क्षेत्र के हिसाब से वेट किया जाता है.
जियोस्पेशल ऑपरेशंस और S2 सेल कन्वर्ज़न
जनसंख्या में बदलाव से जुड़ी अहम जानकारी, S2 सेल लेवल 12 के टोकन का इस्तेमाल करती है. ये टोकन, geo_id कॉलम में सात वर्णों वाली हेक्साडेसिमल स्ट्रिंग के तौर पर सेव किए जाते हैं. BigQuery में, पहले से मौजूद भौगोलिक फ़ंक्शन का इस्तेमाल करके, पॉइंट कोऑर्डिनेट या कस्टम स्पैटियल बाउंड्री को मैचिंग S2 सेल टोकन में बदला जा सकता है. S2 सेल टोकन को विज़ुअलाइज़ेशन के लिए पॉलीगॉन ज्यामिति में बदलने के लिए, क्लाइंट-साइड लाइब्रेरी का इस्तेमाल किया जा सकता है. ज़्यादा जानकारी के लिए, S2 लेवल 12 के हेक्स टोकन से S2 सेल की ज्यामिति पाना लेख पढ़ें.
पॉइंट के निर्देशांकों को S2 लेवल 12 के हेक्स टोकन में बदलना
जनसंख्या के आंकड़ों की अहम जानकारी में मौजूद geo_id कॉलम के साथ अक्षांश/देशांतर पॉइंट के कोऑर्डिनेट मैच करने के लिए, BigQuery के S2_CELLIDFROMPOINT फ़ंक्शन का इस्तेमाल करें. इसके साथ ही, ST_GEOGPOINT का इस्तेमाल करें.
BigQuery, S2 सेल आईडी को साइंड INT64 वैल्यू के तौर पर सेव करता है. इस वजह से, कुछ क्षेत्रों में सेल आईडी को नेगेटिव पूर्णांक के तौर पर आंका जाता है. यहां दिए गए उदाहरणों में, हमने TO_S2_HEX नाम का एक हेल्पर फ़ंक्शन तय किया है. यह फ़ंक्शन, पूर्णांक को स्टैंडर्ड हैक्साडेसिमल टोकन में बदलता है. साथ ही, 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 लेवल 12 के हेक्स टोकन से S2 सेल की ज्यामिति पाना
BigQuery के जीआईएस फ़ंक्शन, एकतरफ़ा कनवर्टर (ज्यामिति → S2 सेल आईडी) होते हैं. साथ ही, इनमें S2 सेल टोकन को पॉलीगॉन GEOGRAPHY में बदलने का फ़ंक्शन शामिल नहीं होता है.
विज़ुअलाइज़ेशन या स्पेशल विश्लेषण के लिए, S2 सेल टोकन की पॉलीगॉन ज्यामिति पाने के लिए, Python में क्लाइंट-साइड लाइब्रेरी का इस्तेमाल करें. जैसे, s2sphere का इस्तेमाल करके, सात वर्णों वाले 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;
एसक्यूएल: मिलती-जुलती जगहें ढूंढना
इस क्वेरी से, व्यवहार के हिसाब से मिलती-जुलती जगहों की पहचान की जाती है. इसके लिए, बाहरी डेटा की ज़रूरत नहीं होती.
यह कोसाइन समानता का हिसाब लगाने के लिए, 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: Join customer data
इस उदाहरण में बताया गया है कि व्यवहार से जुड़ी एम्बेडिंग का इस्तेमाल करके, अपने इंटरनल डेटा (जैसे, स्टोर की परफ़ॉर्मेंस टेबल) को कैसे बेहतर बनाया जा सकता है. पक्का करें कि आपके इंटरनल डेटा में, 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 पर सोर्स देखें