1. نظرة عامة
تتيح خدمة BigQuery ML (BQML) للمستخدمين إنشاء نماذج تعلُّم الآلة وتنفيذها في BigQuery باستخدام طلبات SQL. الهدف هو إتاحة تعلُّم الآلة للجميع من خلال السماح لمستخدمي SQL بإنشاء نماذج باستخدام أدواتهم الحالية وزيادة سرعة التطوير من خلال إلغاء الحاجة إلى نقل البيانات.
ما ستنشئه
ستستخدِم مجموعة البيانات النموذجية في "إحصاءات 360" لإنشاء نموذج يتوقّع ما إذا كان الزائر سيُجري معاملة.
أهداف الدورة التعليمية
كيفية إنشاء نماذج تعلُّم الآلة وتقييمها واستخدامها في BigQuery
المتطلبات
2. الإعداد والمتطلبات
إعداد البيئة بالسرعة التي تناسبك
- سجِّل الدخول إلى Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.



تذكَّر رقم تعريف المشروع، وهو اسم فريد في جميع مشاريع Google Cloud (الاسم أعلاه مستخدَم حاليًا ولن يكون متاحًا لك، نأسف لذلك). سيتم الإشارة إليه لاحقًا في هذا الدرس العملي باسم PROJECT_ID.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console من أجل استخدام موارد Google Cloud.
لن تكلفك تجربة هذا الدرس التطبيقي حول الترميز الكثير من المال، إن لم تكلفك شيئًا على الإطلاق. احرص على اتّباع أي تعليمات في قسم "التنظيف" الذي ينصحك بكيفية إيقاف الموارد حتى لا تتحمّل رسومًا تتجاوز هذا البرنامج التعليمي. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.
فتح "وحدة تحكّم BigQuery"
في Google Play Console، انقر على رمز القائمة في أعلى يمين الشاشة.

انتقِل إلى أسفل القائمة وانقر على BigQuery:

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

ولكن لا يوجد أي شيء هنا! لحسن الحظ، تتوفّر الكثير من مجموعات البيانات العامة في BigQuery لتستكشفها.
3- إنشاء مجموعة بيانات
لإنشاء مجموعة بيانات، انقر على السهم بجانب اسم مشروعك واختَر إنشاء مجموعة بيانات جديدة.

بعد ذلك، أدخِل اسمًا لمجموعة البيانات bqml_codelab وانقر على "حسنًا".

4. إنشاء نموذج
الانحدار اللوجستي في "إحصاءات 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;
في هذه الحالة، نستخدم نظام التشغيل الخاص بجهاز الزائر، وما إذا كان الجهاز جوّالاً، وبلد الزائر، وعدد مرّات مشاهدة الصفحة كمعايير لتحديد ما إذا تمّت عملية شراء.
في هذه الحالة، "codelab" هو اسم مجموعة البيانات و "sample_model" هو اسم النموذج. نوع النموذج المحدّد هو الانحدار اللوجستي الثنائي. في هذه الحالة، label هو ما نحاول ملاءمته. يُرجى العِلم أنّه إذا كنت مهتمًا بعمود واحد فقط، هذه طريقة بديلة لضبط input_label_cols. سنحصر أيضًا بيانات التدريب بالبيانات التي تم جمعها من 1 أغسطس 2016 إلى 31 يونيو 2017. ونفعل ذلك لحفظ بيانات الشهر الأخير من أجل "التوقّع". بالإضافة إلى ذلك، سنقتصر على 100,000 نقطة بيانات لتوفير بعض الوقت. يمكنك إزالة السطر الأخير إذا لم تكن مستعجلاً.
يؤدي تنفيذ الأمر CREATE MODEL إلى إنشاء مهمة طلب بحث سيتم تنفيذها بشكل غير متزامن، ما يتيح لك مثلاً إغلاق نافذة واجهة مستخدم BigQuery أو إعادة تحميلها.
[اختياري] معلومات النموذج وإحصاءات التدريب
إذا كنت مهتمًا بذلك، يمكنك الحصول على معلومات حول النموذج من خلال النقر على sample_model ضمن مجموعة بيانات bqml_codelab في واجهة المستخدِم. ضمن التفاصيل، من المفترض أن تجد بعض المعلومات الأساسية عن النموذج وخيارات التدريب المستخدَمة لإنتاجه. ضمن إحصاءات التدريب، من المفترض أن يظهر لك جدول مشابه لما يلي:

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. من المفترض أن يظهر جدول مشابه لما يلي:

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 نتائج فقط. من المفترض أن يظهر جدول مشابه لما يلي:

توقُّع عمليات الشراء لكل مستخدم
إليك مثال آخر. في هذه المرة، نحاول توقّع عدد المعاملات التي يجريها كل زائر، ثم نرتب النتائج ونختار أفضل 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;
من المفترض أن يظهر جدول مشابه لما يلي:

7. تهانينا!
لقد انتهيت من هذا الدرس التطبيقي حول الترميز. هل تبحث عن تحدٍ؟ جرِّب إنشاء نموذج انحدار خطي باستخدام BQML.
المواضيع التي تناولناها
- إنشاء نموذج انحدار لوجستي ثنائي
- تقييم النموذج
- استخدام النموذج لوضع التوقعات
الخطوات التالية
- لمزيد من المعلومات عن BQML، يُرجى الرجوع إلى المستندات.