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