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 Developer Console، انقر على رمز القائمة في أعلى يمين الشاشة.
مرِّر لأسفل القائمة وصولاً إلى الجزء السفلي، وانقر على BigQuery:
سيؤدي هذا إلى فتح وحدة تحكم BigQuery في علامة تبويب متصفح جديدة، والتي تبدو كما يلي:
ولكن، لا يوجد شيء هنا! لحسن الحظ، هناك الكثير من مجموعات البيانات العامة المتاحة في BigQuery يمكنك استكشافها.
3- إنشاء مجموعة بيانات
لإنشاء مجموعة بيانات، انقر على السهم بجانب اسم مشروعك واختَر إنشاء مجموعة بيانات جديدة.
بعد ذلك، قم بتسمية مجموعة البيانات bqml_codelab وانقر فوق "OK" (موافق).
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 في واجهة المستخدم. ضمن التفاصيل، من المفترض أن تظهر بعض معلومات النموذج الأساسية وخيارات التدريب المستخدَمة لإنتاج النموذج. ضمن إحصاءات التدريب، من المفترض أن يظهر لك جدول مشابه لما يلي:
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، يُرجى الرجوع إلى المستندات.