بدء استخدام BigQuery ML

1. نظرة عامة

تتيح BigQuery ML (BQML) للمستخدمين إنشاء نماذج تعلُّم الآلة وتنفيذها في BigQuery باستخدام استعلامات SQL. يتلخص الهدف في إضفاء الطابع الديمقراطي على التعلم الآلي من خلال تمكين ممارسي SQL (لغة الاستعلام البنيوية) من إنشاء نماذج باستخدام أدواتهم الحالية، وزيادة سرعة التطوير من خلال الحد من الحاجة إلى حركة البيانات.

ما الذي ستنشئه

ستستخدم نموذج مجموعة بيانات "إحصاءات 360" لإنشاء نموذج يتنبأ بما إذا كان الزائر سيجري معاملة أم لا.

ما ستتعرَّف عليه

كيفية إنشاء نماذج تعلُّم الآلة وتقييمها واستخدامها في BigQuery

المتطلبات

2. الإعداد والمتطلبات

إعداد بيئة ذاتية

  1. سجِّل الدخول إلى Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

يُرجى تذكُّر رقم تعريف المشروع، وهو اسم فريد في جميع مشاريع Google Cloud (سبق أن تم استخدام الاسم أعلاه ولن يكون مناسبًا لك). ستتم الإشارة إليها لاحقًا في هذا الدرس التطبيقي حول الترميز باسم PROJECT_ID.

  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد Google Cloud.

إنّ تنفيذ هذا الدرس التطبيقي حول الترميز لن يكون مكلفًا أو مكلفًا على الإطلاق. احرص على اتّباع أي تعليمات في قسم "الحذف سريعًا". الذي يقدم لك نصائح حول كيفية إيقاف تشغيل الموارد حتى لا تتكبّد أي فواتير خارج نطاق هذا البرنامج التعليمي. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج فترة تجريبية مجانية بقيمة 300 دولار أمريكي.

فتح وحدة تحكّم BigQuery

في Google Developer Console، انقر على رمز القائمة في أعلى يمين الشاشة.

select-bq_0.png

مرِّر لأسفل القائمة وصولاً إلى الجزء السفلي، وانقر على BigQuery:

select-bq.png

سيؤدي هذا إلى فتح وحدة تحكم BigQuery في علامة تبويب متصفح جديدة، والتي تبدو كما يلي:

8b0218390329e8cf.png

ولكن، لا يوجد شيء هنا! لحسن الحظ، هناك الكثير من مجموعات البيانات العامة المتاحة في BigQuery يمكنك استكشافها.

3- إنشاء مجموعة بيانات

لإنشاء مجموعة بيانات، انقر على السهم بجانب اسم مشروعك واختَر إنشاء مجموعة بيانات جديدة.

4f51bf57291a59db.png

بعد ذلك، قم بتسمية مجموعة البيانات bqml_codelab وانقر فوق "OK" (موافق).

63e32478a5652fbc.png

4. إنشاء نموذج

الانحدار اللوجستي لخدمة "إحصاءات Google 360"

الآن، دعنا ننتقل إلى مهمتنا. نوضّح في ما يلي كيفية إنشاء نموذج للتنبؤ بما إذا كان الزائر سيجري معاملة أم لا.

#standardSQL
CREATE OR REPLACE MODEL `bqml_codelab.sample_model` 
OPTIONS(model_type='logistic_reg') AS
SELECT
  IF(totals.transactions IS NULL, 0, 1) AS label,
  IFNULL(device.operatingSystem, "") AS os,
  device.isMobile AS is_mobile,
  IFNULL(geoNetwork.country, "") AS country,
  IFNULL(totals.pageviews, 0) AS pageviews
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20160801' AND '20170631'
LIMIT 100000;

نستخدم هنا نظام تشغيل جهاز الزائر، سواء كان الجهاز المذكور جهازًا جوّالاً، وبلد الزائر، وعدد مشاهدات الصفحة كمعايير لتحديد ما إذا كان قد تم إجراء المعاملة أم لا.

في هذه الحالة، سيكون "الدرس التطبيقي حول الترميز" هو اسم مجموعة البيانات و" sample_model" هو اسم نموذجنا. نوع النموذج المحدّد هو الانحدار اللوجستي الثنائي. في هذه الحالة، label هو ما نحاول تلاءمه. لاحظ أنه إذا كنت مهتمًا فقط بعمود واحد، فهذه طريقة بديلة لإعداد input_label_cols. كما نقصر بيانات التدريب على تلك التي تم جمعها من 1 آب (أغسطس) 2016 إلى 31 حزيران (يونيو) 2017. ونحن نفعل ذلك لحفظ بيانات الشهر الأخير من أجل "التنبؤ". بالإضافة إلى ذلك، وضعنا حدًا أقصى لـ 100,000 نقطة بيانات لتوفير بعض الوقت. يمكنك إزالة السطر الأخير إذا لم تكن مستعجلاً.

يؤدي تشغيل الأمر CREATE MODEL إلى إنشاء مهمة طلب بحث سيتم تشغيلها بشكل غير متزامن بحيث يمكنك، على سبيل المثال، إغلاق نافذة واجهة مستخدم BigQuery أو تحديثها.

[اختياري] معلومات الطراز إحصاءات التدريب

إذا كنت مهتمًا، يمكنك الحصول على معلومات حول النموذج بالنقر على sample_model ضمن مجموعة بيانات bqml_codelab في واجهة المستخدم. ضمن التفاصيل، من المفترض أن تظهر بعض معلومات النموذج الأساسية وخيارات التدريب المستخدَمة لإنتاج النموذج. ضمن إحصاءات التدريب، من المفترض أن يظهر لك جدول مشابه لما يلي:

b8bd9548a0d89165.png

5- تقييم النموذج

تقييم النموذج

#standardSQL
SELECT
  *
FROM
  ml.EVALUATE(MODEL `bqml_codelab.sample_model`, (
SELECT
  IF(totals.transactions IS NULL, 0, 1) AS label,
  IFNULL(device.operatingSystem, "") AS os,
  device.isMobile AS is_mobile,
  IFNULL(geoNetwork.country, "") AS country,
  IFNULL(totals.pageviews, 0) AS pageviews
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'));

إذا تم استخدام طلب البحث أعلاه مع نموذج الانحدار الخطي، يعرض الأعمدة التالية: mean_absolute_error، وmean_squared_error، وmean_squared_log_error، وmedian_absolute_error، وr2_score، وexplained_variance. في حال استخدام طلب البحث أعلاه مع نموذج انحدار لوجستي، سيتم عرض الأعمدة التالية: precision، recall، accuracy، f1_score، log_loss، roc_auc. يُرجى الرجوع إلى مسرد مصطلحات تعلُّم الآلة أو إجراء بحث على Google لفهم كيفية احتساب كل من هذه المقاييس ومعنى كل منها.

فعليًا، ستدرك أنّ الجزأين SELECT وFROM من طلب البحث متطابقان مع الجزأين أثناء التدريب. يعكس الجزء WHERE التغيير في الإطار الزمني، ويشير الجزء FROM إلى أنّنا نستدعي ml.EVALUATE. من المفترض أن يظهر لك جدول مشابه لما يلي:

1c7779f6028730cc.png

6- استخدام النموذج

توقّع عمليات الشراء لكل بلد

هنا نحاول التنبؤ بعدد المعاملات التي أجراها الزوار من كل بلد، وفرز النتائج، وتحديد أهم 10 بلدان حسب عمليات الشراء.

#standardSQL
SELECT
  country,
  SUM(predicted_label) as total_predicted_purchases
FROM
  ml.PREDICT(MODEL `bqml_codelab.sample_model`, (
SELECT
  IFNULL(device.operatingSystem, "") AS os,
  device.isMobile AS is_mobile,
  IFNULL(totals.pageviews, 0) AS pageviews,
  IFNULL(geoNetwork.country, "") AS country
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'))
GROUP BY country
ORDER BY total_predicted_purchases DESC
LIMIT 10;

لاحظ أن هذا الاستعلام مشابه جدًا لاستعلام التقييم الذي أوضحناه في القسم السابق. بدلاً من ml.EVALUATE، نستخدم ml.PREDICT هنا ونُلف جزء BQML من الاستعلام باستخدام أوامر SQL العادية. في الواقع، نحن مهتمون بالبلد ومجموع عمليات الشراء لكل بلد، إذًا هذا ما SELECT وGROUP BY وORDER BY. نستخدم LIMIT هنا لضمان حصولنا على أهم 10 نتائج فقط. من المفترض أن يظهر لك جدول مشابه لما يلي:

e639f7a409741dcb.png

توقّع عمليات الشراء لكل مستخدم

إليك مثال آخر. وهذه المرة نحاول فيها التنبؤ بعدد المعاملات التي يجريها كل زائر، وفرز النتائج وتحديد أعلى 10 زائرين حسب المعاملات.

#standardSQL
SELECT
  fullVisitorId,
  SUM(predicted_label) as total_predicted_purchases
FROM
  ml.PREDICT(MODEL `bqml_codelab.sample_model`, (
SELECT
  IFNULL(device.operatingSystem, "") AS os,
  device.isMobile AS is_mobile,
  IFNULL(totals.pageviews, 0) AS pageviews,
  IFNULL(geoNetwork.country, "") AS country,
  fullVisitorId
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'))
GROUP BY fullVisitorId
ORDER BY total_predicted_purchases DESC
LIMIT 10;

من المفترض أن يظهر لك جدول مشابه لما يلي:

2be1d8fa96e10178.png

7. تهانينا!

لقد انتهيت من هذا الدرس التطبيقي حول الترميز. هل تبحث عن تحدٍ؟ حاوِل إنشاء نموذج انحدار خطّي باستخدام BQML.

النقاط التي تناولناها

  • إنشاء نموذج انحدار لوجستي ثنائي
  • تقييم النموذج
  • استخدام النموذج لوضع التوقّعات

الخطوات التالية

  • لمزيد من المعلومات حول BQML، يُرجى الرجوع إلى المستندات.