জনসংখ্যার ডায়নামিক ইনসাইট এম্বেডিং ব্যবহার করুন

বাস্তবিক সত্য ডেটা প্রস্তুত করুন

পপুলেশন ডায়নামিক্স এম্বেডিং ব্যবহার করতে, আপনার বাস্তবিক সত্য ডেটা অবশ্যই একটি সমর্থিত ভৌগোলিক সীমানায় একত্রিত করতে হবে। বিশ্বজুড়ে প্রশাসনিক সীমানার ধরন আলাদা আলাদা হওয়ার কারণে, আপনি ইউনিভার্সাল গাণিতিক গ্রিড সিস্টেম (যেমন, S2 সেল) অথবা স্থানীয় প্রশাসনিক অঞ্চল (যেমন, কাউন্টি বা জেলা, নির্দিষ্ট দেশের ডেটাসেটের উপর নির্ভর করে) ব্যবহার করে আপনার ডেটা অ্যালাইন করতে পারবেন।

বিকল্প ১: আগে থেকে থাকা মডেলে এম্বেডিং যোগ করা

  • আগে থেকে থাকা মডেল-ভিত্তিক গ্রাউন্ড ট্রুথ প্রস্তুত করা: আগে থেকে থাকা মডেলকে আরও উন্নত করতে, এম্বেডিংকে জিওস্পেশিয়াল কোভেরিয়েট হিসেবে ব্যবহার করুন।
  • ভুল সংশোধনকারী মডেলকে প্রশিক্ষণ দিন: একটি মডেলের মধ্যে এম্বেডিং যোগ করে আগে থেকে থাকা মডেলকে উন্নত করুন। এই মডেলটি আসল মডেলের আউটপুট, প্রত্যাশিত ভ্যালু বা গ্রাউন্ড ট্রুথ এবং এম্বেডিং নেয় যাতে একটি নতুন ভুল সংশোধনকারী মডেল শিখতে পারে।

বিকল্প ২: নির্দিষ্ট ব্যবহারের ক্ষেত্রে টিউন করা

  • পূর্বাভাস মডেল বেছে নিন: পূর্বাভাসের জন্য GBDT, MLP বা লিনিয়ারের মতো যেকোনও মডেল ব্যবহার করা যেতে পারে।
  • পূর্বাভাস দেওয়ার জন্য এম্বেডিং ব্যবহার করা: পূর্বাভাসের নির্ভুলতা উন্নত করতে, অন্যান্য প্রাসঙ্গিক ডেটার পাশাপাশি ইনপুট ফিচার হিসেবে জনসংখ্যার ডায়নামিক এম্বেডিং ব্যবহার করুন।

কাস্টম বাউন্ডারি অ্যাগ্রিগেশন

আপনার বাস্তবিক সত্য ডেটা যদি কাস্টম পলিগন ব্যবহার করে, যেমন পোস্টাল কোড, ড্রাইভ-টাইম আইসোক্রোন বা ট্রেড এরিয়া, তাহলে আপনি বাউন্ডারি এগ্রিগেশন করতে পারবেন। এই প্রসেস একাধিক S2 সেল ভেক্টরকে টার্গেট পলিগনের জন্য একটি উপস্থাপনায় একত্রিত করে। সঠিক ওয়েটিং পদ্ধতি বেছে নিলে, এগ্রিগেট করা এম্বেডিং আপনার ডাউনস্ট্রিম মডেলিং লক্ষ্যকে সঠিকভাবে প্রতিফলিত করে।

মানুষ-কেন্দ্রিক ব্যবহারের ক্ষেত্রে জনসংখ্যা-ভারিত অ্যাগ্রিগেশন ব্যবহার করুন, যেমন রিটেল স্টোরের পারফর্ম্যান্স বা গ্রাহকের আচরণ সংক্রান্ত মডেলিং।

জনসংখ্যা সংক্রান্ত ডেটার জন্য এরিয়া-ওয়েটেড স্পেশিয়াল অ্যাগ্রিগেশন ব্যবহার করলে আপনার মেশিন লার্নিং ফিচার বিকৃত হয়ে যেতে পারে। জনবসতিহীন এলাকা, যেমন পার্ক, শিল্পাঞ্চল বা জলাশয়, প্রকৃত বাসিন্দাদের প্রোফাইলকে বিকৃত করলে এটি ঘটে।

এটি সমাধান করতে, আপনি BigQuery-তে জনসংখ্যা-ওয়েটেড গড় পারফর্ম করতে পারেন। এই পদ্ধতি প্রতিটি ইন্টারসেক্টিং S2 সেল সেগমেন্টের সঠিক ঘনত্ব গণনা করতে, Earth Engine Data Catalog-এ WorldPop-এর মতো হাই-রেজোলিউশন ডেমোগ্রাফিক ডেটাসেট ব্যবহার করে।

জনসংখ্যার ওজন অনুযায়ী ওয়ার্কফ্লো প্রয়োগের সম্পূর্ণ উদাহরণ দেখতে, ইন্ট্যার‍্যাক্টিভ নোটবুক রান করান।

২. এলাকা-ভিত্তিক ওয়েটেড গড়

পরিবেশগত বা শারীরিক ব্যবহারের ক্ষেত্রে, এর পরিবর্তে এরিয়া-ওয়েটেড অ্যাগ্রিগেশন ব্যবহার করুন। এটি জমির ব্যবহার বিশ্লেষণ, বিল্ট এনভাইরনমেন্ট স্টাডি বা পরিকাঠামো পরিকল্পনার জন্য উপযোগী যেখানে আপনাকে জনসংখ্যার বন্টন নির্বিশেষে অঞ্চলগুলি মূল্যায়ন করতে হবে।

এইসব ক্ষেত্রে, মানুষের জনসংখ্যার ঘনত্বের চেয়ে ভৌগোলিক এলাকা বেশি প্রাসঙ্গিক। এটি নিশ্চিত করে যে পলিগন সীমানার মধ্যে প্রতিটি বর্গ কিলোমিটার এগ্রিগেটেড ভেক্টরে সমানভাবে অবদান রাখে।

এই পদ্ধতির অধীনে, প্রতিটি উপাদান S2 কোষের এম্বেডিং ভেক্টরকে টার্গেট বহুভুজ ক্ষেত্রের মধ্যে এটি যে ভৌগোলিক পৃষ্ঠের ক্ষেত্রফল কভার করে তা দিয়ে ওয়েট করা হয়।

জিওস্পেশিয়াল অপারেশন ও S2 সেল কনভার্সন

Population Dynamics Insights, S2 সেল লেভেল ১২ টোকেন (geo_id কলামে ৭-অক্ষরের হেক্সাডেসিমেল স্ট্রিং হিসেবে স্টোর করা) প্রাথমিক স্পেশিয়াল ইউনিট হিসেবে ব্যবহার করে। আপনি BigQuery-তে বিল্ট-ইন জিওগ্রাফি ফাংশন ব্যবহার করে পয়েন্ট কোঅর্ডিনেট বা কাস্টম স্পেশিয়াল বাউন্ডারিকে ম্যাচিং S2 সেল টোকেনে কনভার্ট করতে পারবেন। S2 সেল টোকেনকে ভিজ্যুয়ালাইজেশনের জন্য পলিগন জিওমেট্রিতে কনভার্ট করতে, আপনি ক্লায়েন্ট-সাইড লাইব্রেরি ব্যবহার করতে পারেন। আরও তথ্যের জন্য, S2 লেভেল ১২ হেক্স টোকেন থেকে S2 সেল জিওমেট্রি পান দেখুন।

পয়েন্ট কোঅর্ডিনেটকে S2 লেভেল ১২ হেক্স টোকেনে কনভার্ট করা

জনসংখ্যার ডায়নামিক ইনসাইটে geo_id কলামের সাথে lat/lng পয়েন্ট কোঅর্ডিনেট মেলাতে, BigQuery S2_CELLIDFROMPOINT ফাংশনটি ST_GEOGPOINT-এর সাথে কম্বাইন করে ব্যবহার করুন।

BigQuery, S2 সেল আইডিকে সাইন করা INT64 ভ্যালু হিসেবে স্টোর করে, যার ফলে নির্দিষ্ট কিছু অঞ্চলে সেল আইডিকে নেগেটিভ ইন্টিজার হিসেবে মূল্যায়ন করা হয়। নিচের উদাহরণে, আমরা TO_S2_HEX নামের একটি সহায়ক ফাংশন সংজ্ঞায়িত করেছি যা পূর্ণসংখ্যাকে একটি স্ট্যান্ডার্ড হেক্সাডেসিমেল টোকেনে কনভার্ট করে এবং S2 জ্যামিতির স্পেসিফিকেশন অনুযায়ী ট্রেলিং জিরো বাদ দেয়।

নিম্নলিখিত কোয়েরি, নিউ ইয়র্ক সিটির টাইমস স্কোয়ারের পয়েন্ট কোঅর্ডিনেটকে (অক্ষাংশ 40.75796, দ্রাঘিমাংশ -73.98554) সংশ্লিষ্ট 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 লেভেল ১২ সেল টোকেন কভার করে জেনারেট করুন

আপনার ডেটা যদি কাস্টম এলাকার সীমানা (যেমন ট্রেড এরিয়া, ডেলিভারি জোন বা WKT বা GeoJSON ফর্ম্যাটে পোস্টাল কোড) ব্যবহার করে, তাহলে টেক্সট রিপ্রেজেন্টেশনকে GEOGRAPHY-এ কনভার্ট করুন ST_GEOGFROM ব্যবহার করে এবং S2_COVERINGCELLIDS ব্যবহার করে সব ইন্টারসেক্ট করা S2 লেভেল ১২ সেল এক্সট্র্যাক্ট করুন।

নিম্নলিখিত কোয়েরি মিডটাউন ম্যানহাটনে কাস্টম পলিগন কভার করে এমন সব 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 সেল জিওমেট্রি পান

BigQuery GIS ফাংশন হল একমুখী কনভার্টার (Geometry → S2 Cell ID) এবং এতে 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;

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)