
لماذا يحقّق موقع إلكتروني أداءً جيدًا بينما يحقّق موقع آخر أداءً ضعيفًا على الرغم من توفر الموظفين والمستودع والممارسات التشغيلية نفسها؟ تواجه الأنشطة التجارية التي لديها مواقع جغرافية متعددة صعوبة في تفسير هذا التفاوت في الأداء على مستوى محفظتها. عادةً ما يكمن الجواب مخفيًا في البيئة الخارجية. من خلال الاستفادة من بيانات نقاط الاهتمام، يمكننا تجاوز التفسيرات العرضية وتحديد بدقة كيف تؤثر الكثافة التنافسية المحلية وخصائص الحي على نجاح الموقع.
يوضّح هذا الدليل كيفية تحديد تأثير المحيط المحلي في نجاح الموقع الإلكتروني باستخدام إحصاءات الأماكن وBigQuery ML. ستدمج بيانات أداء موقعك الإلكتروني الخاصة مع إشارات جغرافية مكانية خارجية لتحديد العوامل التي تحسّن الأداء.
سنستخدم مجموعة بيانات من مواقع إلكترونية في لندن لإنشاء نموذج انحدار خطي. تستفيد سير العمل هذه من الفهرسة المكانية H3، يقسّم هذا النظام المدينة إلى خلايا سداسية منتظمة. ومن خلال تجميع البيانات البيئية في هذه الخلايا، يمكنك تدريب نموذج لتوقّع الأداء المحتمل لأي حي في المدينة، وليس فقط المواقع الحالية.
ستتعرّف على كيفية:
- ميزات المهندس: تجميع البيانات الإجمالية لنقاط الاهتمام (POIs) مثل الصالات الرياضية والمؤسسات التعليمية ومحطات النقل العام ضمن نطاق 500 متر من مواقعك.
- تدريب نموذج: استخدِم BigQuery ML لإنشاء نموذج انحدار يربط بين هذه الميزات البيئية ومقاييس الأداء الداخلية.
- تقييم المدينة: طبِّق النموذج المدرَّب على شبكة H3 الكاملة في لندن لتحديد المواقع الجغرافية الواعدة التي يمكن التوسّع فيها في المستقبل.
إذا كنت مبتدئًا في استخدام BigQuery ML، يُرجى الاطّلاع على مقدمة عن BigQuery ML للتعرّف على المفاهيم الأساسية وأنواع النماذج المتوافقة.

لاستكشاف سير العمل هذا في بيئة تفاعلية، شغِّل دفتر الملاحظات التالي. يوضّح هذا الفيديو كيفية إنشاء نموذج توقّعي باستخدام BigQuery ML وتصوُّر الفرص على مستوى المدينة باستخدام فهرسة H3 المكانية.
المتطلبات الأساسية
قبل البدء، تأكَّد من توفّر ما يلي:
مشروع Google Cloud:
- مشروع Google Cloud تم تفعيل الفوترة فيه
الوصول إلى البيانات:
- اشتراك Places Insights في BigQuery
- جدول خاص بك يتضمّن المواقع الجغرافية للمواقع الإلكترونية مع مقياس أداء (مثل الأرباح) يمكنك العثور على مثال لمجموعة بيانات في مراجع البرنامج التعليمي.
منصة خرائط Google:
- مفتاح واجهة برمجة التطبيقات
- واجهات برمجة التطبيقات التالية مفعّلة لمفتاحك:
بيئة Python ومكتباتها:
- بيئة Python، مثل Colab Enterprise في Google Cloud Console
- تم تثبيت المكتبات التالية:
المكتبة الوصف pandas-gbqالتفاعل مع BigQuery geopandasالتعامل مع عمليات البيانات الجغرافية المكانية foliumإنشاء خرائط تفاعلية shapelyالتلاعب بالأشكال الهندسية
أذونات "إدارة الهوية وإمكانية الوصول":
- تأكَّد من أنّ حساب المستخدم أو حساب الخدمة لديه أدوار إدارة الهوية وإمكانية الوصول (IAM) التالية:
الدور رقم التعريف محرِّر بيانات BigQuery roles/bigquery.dataEditorمستخدم BigQuery roles/bigquery.user
- تأكَّد من أنّ حساب المستخدم أو حساب الخدمة لديه أدوار إدارة الهوية وإمكانية الوصول (IAM) التالية:
الوعي بالتكلفة:
- يستخدم هذا البرنامج التعليمي مكوّنات Google Cloud قابلة للفوترة. يُرجى الانتباه إلى
التكاليف المحتملة المرتبطة بما يلي:
- BigQuery ML: يتم تحصيل رسوم مقابل خانات الحوسبة المستخدَمة. اطّلِع على أسعار BigQuery ML.
- Places Insights: يتم تحصيل الرسوم استنادًا إلى استخدام الطلبات.
- يستخدم هذا البرنامج التعليمي مكوّنات Google Cloud قابلة للفوترة. يُرجى الانتباه إلى
التكاليف المحتملة المرتبطة بما يلي:
هندسة الخصائص باستخدام Places Insights
لعزل العوامل الخارجية التي تؤثر في أداء الموقع الإلكتروني، عليك تحويل بيانات نقاط الاهتمام الأولية إلى ميزات قابلة للقياس. عليك احتساب كثافة وسائل الراحة أو أنواع الأماكن المحددة، مثل الصالات الرياضية والمدارس ومحطات النقل العام، ضمن نطاق 500 متر من كل موقع. ستعتمد وسائل الراحة التي تختارها على ما تعتقد أنّه قد يكون الأكثر صلة بنشاطك التجاري.

نستخدم Python ومكتبة pandas-gbq في هذه الخطوة. يتيح لك هذا الأسلوب تنفيذ استعلام SELECT WITH AGGREGATION_THRESHOLD، وهو مطلوب للوصول إلى مجموعة بيانات "إحصاءات حول الأماكن"، وحفظ النتائج في جدول جديد في مشروعك. لمزيد من المعلومات حول كيفية استخدام بيانات Places Insights، راجِع مقالة الاستعلام عن مجموعة البيانات مباشرةً.
تنفيذ طلب هندسة الخصائص
شغِّل نص Python البرمجي التالي في بيئتك (مثل Colab Enterprise). يربط هذا النص البرمجي بيانات موقعك الإلكتروني الداخلية بمجموعة بيانات Places Insights.
from google.cloud import bigquery
import pandas_gbq
# Configuration
project_id = 'your_project_id'
dataset_id = 'your_dataset_id'
features_table_id = f'{dataset_id}.site_features'
client = bigquery.Client(project=project_id)
# Define the Feature Engineering Query
# We count specific amenities within 500m of each site in London.
sql = f"""
SELECT WITH AGGREGATION_THRESHOLD
internal.store_id,
internal.store_performance,
-- Feature Engineering: count nearby POIs by type
COUNTIF('gym' IN UNNEST(places.types)) AS gym_count,
COUNTIF('restaurant' IN UNNEST(places.types)) AS restaurant_count,
COUNTIF('school' IN UNNEST(places.types)) AS school_count,
COUNTIF('transit_station' IN UNNEST(places.types)) AS transit_count,
COUNTIF('clothing_store' IN UNNEST(places.types)) AS clothing_store_count
FROM
`{dataset_id}.site_performance` AS internal
JOIN
`places_insights___gb.places` AS places
ON ST_DWITHIN(internal.location, places.point, 500)
WHERE
places.business_status = 'OPERATIONAL'
GROUP BY
internal.store_id, internal.store_performance
"""
print("1. Running Feature Engineering Query...")
# Execute the query and download results to a Pandas DataFrame
df_features = client.query(sql).to_dataframe()
print(f"2. Saving features to: {features_table_id}...")
# Upload the engineered features to a permanent BigQuery table
pandas_gbq.to_gbq(
dataframe=df_features,
destination_table=features_table_id,
project_id=project_id,
if_exists='replace'
)
print(" Success! Training data ready.")
فهم الطلب
ST_DWITHIN: تنشئ هذه الدالة الجغرافية المكانية نطاقًا جغرافيًا يبلغ 500 متر حول كل موقع جغرافي، وتحدّد جميع نقاط Places Insights التي تقع ضمن هذا النطاق.COUNTIF: تحسب هذه الدالة كثافة أنواع الأماكن المحدّدة (مثل "صالة رياضية" أو "مدرسة") لكل موقع. تصبح هذه الأعداد ميزات الإدخال (X) لنموذج تعلُّم الآلة.-
pandas_gbq.to_gbq: تعمل هذه الدالة على تخزين نتائج طلب البحث في جدول جديد (site_features). يعمل هذا الجدول الدائم كمجموعة بيانات تدريبية نظيفة لنموذج BigQuery ML.
للحصول على تطبيقات أكثر تقدّمًا في العالم الحقيقي، ننصحك باحتساب الميزات على مسافات متعدّدة (مثل 250 مترًا و500 متر و1 كيلومتر) واستكشاف سمات أخرى في Places Insights، مثل rating أو price_level أو regular_opening_hours. اطّلِع على أنواع الأماكن المتوافقة ومرجع المخطط الأساسي للحصول على القائمة الكاملة بسمات "إحصاءات الأماكن".
تدريب النموذج باستخدام BigQuery ML
بعد حفظ الميزات المصمَّمة في جدول site_features، يمكنك الآن تدريب نموذج الانحدار الخطي.
يتعلّم هذا النموذج الأوزان المثالية (β) لكل ميزة بيئية (X) من أجل توقّع أداء موقعك الإلكتروني (Y).

التعامل مع القيم الشاذة باستخدام التحجيم القوي
غالبًا ما تحتوي البيانات الجغرافية المكانية على قيم متطرفة يمكن أن تشوّه النماذج الخطية العادية. على سبيل المثال، قد يضم موقع في "ويست إند" في لندن 200 مطعم ضمن مسافة 500 متر، بينما يضم موقع في الضواحي مطعمَين فقط. في حال استخدام التسوية العادية (المتوسط/الانحراف المعياري)، يؤدي القيم المتطرفة (200) إلى تحريف التوزيع وإجبار النموذج على منح الأولوية لمطابقة هذه القيمة المتطرفة.
لحلّ هذه المشكلة، نستخدم التحجيم القوي (ML.ROBUST_SCALER) ضمن تعريف النموذج. تؤدي هذه الطريقة إلى توسيع نطاق الميزات استنادًا إلى الوسيط والمدى الربيعي، ما يجعل النموذج مرنًا في التعامل مع القيم المتطرفة ويضمن أنّه يتعلّم من التوزيع النموذجي لمواقعك الإلكترونية.
إنشاء النموذج
نفِّذ طلب بحث SQL التالي في BigQuery لإنشاء النموذج وتدريبه.
نستخدم عبارة
TRANSFORM
لتطبيق توسيع نطاق قوي على جميع ميزات الإدخال. نضبط أيضًا
optimize_strategy = 'NORMAL_EQUATION' لأنّها طريقة التدريب الأكثر فعالية
لمجموعات البيانات الصغيرة نسبيًا، مثل مجموعة نموذجية من
المواقع الجغرافية للمتاجر. أخيرًا، نستبعد القيم المتطرفة ذات الأداء العالي (store_performance <
75) لتركيز النموذج على توقّع أنماط النمو النموذجية.
CREATE OR REPLACE MODEL `your_project.your_dataset.site_performance_model`
TRANSFORM(
store_performance,
-- Feature Engineering inside the model artifact
-- These stats are calculated on the TRAINING split only
ML.ROBUST_SCALER(gym_count) OVER() AS scaled_gym_count,
ML.ROBUST_SCALER(restaurant_count) OVER() AS scaled_restaurant_count,
ML.ROBUST_SCALER(school_count) OVER() AS scaled_school_count,
ML.ROBUST_SCALER(transit_count) OVER() AS scaled_transit_count,
ML.ROBUST_SCALER(clothing_store_count) OVER() AS scaled_clothing_store_count
)
OPTIONS(
model_type = 'LINEAR_REG',
input_label_cols = ['store_performance'],
-- OPTIMIZATION PARAMETERS
optimize_strategy = 'NORMAL_EQUATION', -- Exact mathematical solution (fast for small data)
data_split_method = 'AUTO_SPLIT', -- Automatically reserves ~20% for evaluation
-- DIAGNOSTICS
enable_global_explain = TRUE -- Essential to see feature importance
)
AS
SELECT
gym_count,
restaurant_count,
school_count,
transit_count,
clothing_store_count,
store_performance
FROM
`your_project.your_dataset.site_features`
WHERE
store_performance < 75;
تقييم أداء النموذج
قبل أن تثق في إحصاءات النموذج حول العوامل التي تحسّن أداء الموقع الإلكتروني، عليك التأكّد من دقة توقعاته.
بعد التدريب، استخدِم الدالة ML.EVALUATE لتقييم توقّعات النموذج مقارنةً بمجموعة بيانات "محتجزة" لم يتم استخدامها أثناء التدريب.
SELECT
*
FROM
ML.EVALUATE(MODEL `your_project.your_dataset.site_performance_model`);
راجِع نتيجة R2
(r2_score) ومتوسط الخطأ المطلق
(mean_absolute_error) لتحديد ما إذا كان نموذجك جاهزًا للنشر:
- تقيس درجة R2 مقدار تباين الأداء الذي تفسّره في الواقع العوامل البيئية الخارجية (نقاط الاهتمام القريبة). تعني النتيجة 0.70 في مقياس R2 أنّ% 70 من نجاح الموقع الإلكتروني مرتبط بالبيئة المحلية. وكلما اقتربت القيمة من 1.0، كان الارتباط أقوى بين وسائل الراحة البيئية وأداء الموقع الإلكتروني.
- يخبرك متوسّط الخطأ المطلق عن متوسط الخطأ بالنقاط. على سبيل المثال، يعني متوسط الخطأ المطلق البالغ 1.5 أنّ توقّعات النموذج تكون عادةً ضمن نطاق +/- 1.5 نقطة من نتيجة الأداء الفعلية.
تحديد مشاكل انخفاض الدرجات وحلّها
إذا كانت نتيجة R2 منخفضة، ننصحك بإجراء التحسينات التالية:
- توسيع أنواع العناصر: أضِف أنواع أماكن مختلفة إلى طلب البحث (مثل
tourist_attractionوsubway_station). - تعديل نصف قطر منطقة الجذب: غيِّر مسافة
ST_DWITHIN. قد يكون نطاق جغرافي 500 متر واسعًا جدًا بالنسبة إلى مقهى، ولكنّه صغير جدًا بالنسبة إلى متجر أثاث. - زيادة حجم البيانات: تأكَّد من أنّك تُجري التدريب على عدد كافٍ من المواقع الجغرافية للمتاجر للعثور على نمط ذي دلالة إحصائية.
تسجيل نتائج المدينة باستخدام ميزة "الفهرسة المكانية H3"
نستخدم نظام الفهرسة المكانية H3 لتقسيم مدينة لندن إلى شبكة موحّدة من الخلايا السداسية (الدقة 8، حوالي 0.7 كيلومتر مربع). ومن خلال تجميع بيانات Places Insights في هذه الخلايا، يمكننا تطبيق النموذج المدرَّب على كل حي، وتحديد المناطق العالية الإمكانات التي تتطابق مع الملف البيئي للمواقع الإلكترونية الأفضل أداءً.
تنفيذ طلب البحث عن العملاء المحتملين
لإنشاء هذه الشبكة، نستخدم الدالة
PLACES_COUNT_PER_H3
المقدَّمة من مجموعة بيانات Places Insights (يمكنك الاطّلاع على مزيد من المعلومات حول الاستعلام عن
Places Insights باستخدام دوال
Places Count).
تحسب هذه الدالة عدد نقاط الاهتمام لخلايا شبكة H3 في عملية واحدة.
نفِّذ طلب SQL التالي لتنفيذ ثلاث خطوات في عملية تنفيذ واحدة:
- الفهرسة والعدّ باستخدام نظام H3: نستدعي
PLACES_COUNT_PER_H3باستخدام كائن إعداد بتنسيق JSON للعثور على جميع الأماكن التشغيلية ضمن دائرة نصف قطرها 25 كيلومترًا من وسط لندن. نطلب هذه البيانات بشكل منفصل لكل نوع من وسائل الراحة (صالات رياضية ومدارس وما إلى ذلك) ونجمعها باستخدامUNION ALL. - تغيير التنسيق (هندسة الخصائص): لأنّ نموذج تعلُّم الآلة يتوقّع أعمدة الخصائص مميّزة (مثل
gym_countوrestaurant_count)، نجمع الخلايا ونستخدم التجميع الشرطي(SUM(IF(...)))لتغيير تنسيق البيانات إلى المخطط الصحيح. - التوقّع: نقدّم ميزات الشبكة المحورية هذه مباشرةً إلى الدالة
ML.PREDICTلإنشاء نتيجة أداء لكل حي.
WITH combined_counts AS (
-- Gyms
SELECT h3_cell_index, geography, count, 'gym' AS type
FROM `places_insights___gb.PLACES_COUNT_PER_H3`(
JSON_OBJECT(
'geography', ST_BUFFER(ST_GEOGPOINT(-0.1278, 51.5074), 25000), -- 25km radius around London
'h3_resolution', 8,
'business_status', ['OPERATIONAL'],
'types', ['gym']
)
)
UNION ALL
-- Restaurants
SELECT h3_cell_index, geography, count, 'restaurant' AS type
FROM `places_insights___gb.PLACES_COUNT_PER_H3`(
JSON_OBJECT(
'geography', ST_BUFFER(ST_GEOGPOINT(-0.1278, 51.5074), 25000),
'h3_resolution', 8,
'business_status', ['OPERATIONAL'],
'types', ['restaurant']
)
)
UNION ALL
-- Schools
SELECT h3_cell_index, geography, count, 'school' AS type
FROM `places_insights___gb.PLACES_COUNT_PER_H3`(
JSON_OBJECT(
'geography', ST_BUFFER(ST_GEOGPOINT(-0.1278, 51.5074), 25000),
'h3_resolution', 8,
'business_status', ['OPERATIONAL'],
'types', ['school']
)
)
UNION ALL
-- Transit Stations
SELECT h3_cell_index, geography, count, 'transit_station' AS type
FROM `places_insights___gb.PLACES_COUNT_PER_H3`(
JSON_OBJECT(
'geography', ST_BUFFER(ST_GEOGPOINT(-0.1278, 51.5074), 25000),
'h3_resolution', 8,
'business_status', ['OPERATIONAL'],
'types', ['transit_station']
)
)
UNION ALL
-- Clothing Stores
SELECT h3_cell_index, geography, count, 'clothing_store' AS type
FROM `places_insights___gb.PLACES_COUNT_PER_H3`(
JSON_OBJECT(
'geography', ST_BUFFER(ST_GEOGPOINT(-0.1278, 51.5074), 25000),
'h3_resolution', 8,
'business_status', ['OPERATIONAL'],
'types', ['clothing_store']
)
)
),
aggregated_features AS (
-- Pivot the stacked rows back into standard feature columns for the ML Model
SELECT
h3_cell_index AS h3_index,
ANY_VALUE(geography) AS h3_geography,
SUM(IF(type = 'gym', count, 0)) AS gym_count,
SUM(IF(type = 'restaurant', count, 0)) AS restaurant_count,
SUM(IF(type = 'school', count, 0)) AS school_count,
SUM(IF(type = 'transit_station', count, 0)) AS transit_count,
SUM(IF(type = 'clothing_store', count, 0)) AS clothing_store_count
FROM
combined_counts
GROUP BY
h3_cell_index
)
-- Feed the pivoted features into the model
SELECT
h3_index,
predicted_store_performance,
h3_geography,
gym_count,
restaurant_count
FROM
ML.PREDICT(MODEL `your_project.your_dataset.site_performance_model`,
(SELECT * FROM aggregated_features)
)
ORDER BY
predicted_store_performance DESC;
تفسير النتائج
يعرض طلب البحث جدولاً يمثّل فيه كل صف منطقة سداسية في لندن.
h3_index: المعرّف الفريد للخلية السداسية.predicted_store_performance: هي النتيجة المقدَّرة التي يحصل عليها الموقع الإلكتروني من النموذج في هذه الخلية، استنادًا إلى البيئة المحيطة فقط.h3_geography: تمثّل هذه السمة شكل المضلّع الهندسي للخلية، وسنستخدمها في العرض المرئي في الخطوة التالية.
تشير القيم المرتفعة إلى المناطق التي يتطابق فيها عدد المدارس والصالات الرياضية ووسائل النقل مع الأنماط المتوفّرة في المواقع الحالية الأكثر نجاحًا.
عرض "خريطة العملاء المحتملين"
لتحويل البيانات إلى إجراءات، يمكنك عرض النتائج على خريطة. في حين أنّ الناتج الجدول يوفر نتائج أولية، تكشف الخريطة عن مجموعات مكانية وممرات ذات إمكانات عالية لا تظهر بوضوح في القائمة.
في دفتر الملاحظات المرفق، نستخدم مكتبة geopandas لتحليل هندسة المضلّع H3 وfolium لعرض خريطة تفاعلية.
والنتيجة هي خريطة تظليل نسبي حيث يتم تلوين كل خلية سداسية وفقًا للنتيجة المتوقّعة.

تفسير الخريطة:
- المناطق النشطة (الصفراء/الخضراء): هذه المناطق لديها نتائج عالية متوقّعة للأداء. وتتضمّن هذه المناطق الكثافة المثالية من المدارس والصالات الرياضية ووسائل النقل العام التي ترتبط بالمواقع الجغرافية الناجحة. وهي خيارات مثالية لاختيار مواقع إلكترونية جديدة.
- المناطق الباردة (أرجواني): تفتقر هذه المناطق إلى الميزات البيئية الداعمة المتوفّرة بالقرب من أفضل المواقع أداءً.
- الفحص التفاعلي: في بيئة دفتر الملاحظات، يمكنك تمرير مؤشر الماوس فوق أي خلية للاطّلاع على الأعداد المحدّدة للمرافق (مثل "صالات رياضية: 12") التي ساهمت في تحقيق هذه النتيجة المحدّدة.
الخاتمة
لقد تمكّنت بنجاح من دمج بيانات التشغيل الداخلية مع Places Insights لتشخيص أداء الموقع الإلكتروني. من خلال تحليل أوزان النموذج، حدّدت خصائص الحي المحدّدة التي تتوافق مع مقاييسك الحالية. باستخدام نظام الفهرسة المكانية H3، وسّعت نطاق هذا التحليل من بضع مئات من المواقع إلى آلاف الأحياء المحتملة في جميع أنحاء لندن.
الإجراءات التالية
- توسيع نطاق هندسة الميزات: أضِف أنواع أماكن أكثر تحديدًا إلى طلب البحث، وذلك لتحديد العوامل التي تجذب عدد الزيارات إلى المتجر.
- استكشاف النماذج المتقدّمة: على الرغم من أنّ الانحدار الخطي يوفّر قابلية تفسير واضحة، يمكنك تجربة
BOOSTED_TREE_REGRESSORفي BigQuery ML مع استراتيجية مناسبة للتحقّق من الصحة المتقاطعة من أجل رصد العلاقات غير الخطية. - تحويل الخريطة إلى أداة عملية: يمكنك تصدير نتائج شبكة H3 إلى لوحة بيانات مخصّصة باستخدام واجهة برمجة التطبيقات JavaScript لخرائط Google لمشاركة هذه الإحصاءات مع فريقك.
المساهمون
- هنريك Valve | مهندس DevX
- Gennadii Donchyts | مهندس إرشاد العملاء المتعاقدين
التشغيل في Google Colab
عرض المصدر على GitHub