1. סקירה כללית
BigQuery ML (BQML) מאפשר למשתמשים ליצור ולהפעיל מודלים של למידת מכונה ב-BigQuery באמצעות שאילתות SQL. המטרה היא להפוך את למידת המכונה לנגישה יותר, ולאפשר למשתמשי SQL ליצור מודלים באמצעות הכלים הקיימים שלהם, וגם להגביר את מהירות הפיתוח על ידי ביטול הצורך בהעברת נתונים.
מה תפַתחו
תשתמשו במערך הנתונים לדוגמה של Analytics 360 כדי ליצור מודל שינבא אם מבקר יבצע עסקה.
מה תלמדו
איך ליצור, להעריך ולהשתמש במודלים של למידת מכונה ב-BigQuery
הדרישות
- דפדפן, כמו Chrome או Firefox
- ידע בסיסי ב-SQL או ב-BigQuery
- מסמכי תיעוד של BQML
2. הגדרה ודרישות
הגדרת סביבה בקצב אישי
- נכנסים אל Cloud Console ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.



חשוב לזכור את מזהה הפרויקט, שהוא שם ייחודי בכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא יתאים לכם, מצטערים!). בהמשך ה-codelab הזה נתייחס אליו כאל PROJECT_ID.
- לאחר מכן, תצטרכו להפעיל את החיוב ב-Cloud Console כדי להשתמש במשאבים של Google Cloud.
העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי אפילו לא תצטרכו לשלם בכלל. חשוב לפעול לפי ההוראות בקטע 'ניקוי' כדי להשבית את המשאבים, וכך לא תחויבו אחרי שתסיימו את המדריך הזה. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.
פתיחת המסוף של BigQuery
ב-Google Developer Console, לוחצים על סמל התפריט בפינה הימנית העליונה של המסך.

גוללים לתחתית התפריט ולוחצים על BigQuery:

מסוף BigQuery ייפתח בכרטיסייה חדשה בדפדפן, כך:

אבל אין כאן כלום! למזלכם, יש המון מערכי נתונים ציבוריים שזמינים ב-BigQuery, ואתם יכולים לעיין בהם.
3. יצירת מערך נתונים
כדי ליצור מערך נתונים, לוחצים על החץ לצד שם הפרויקט ובוחרים באפשרות יצירת מערך נתונים חדש.

לאחר מכן, נותנים שם למערך הנתונים bqml_codelab ולוחצים על ok.

4. יצירת מודל
רגרסיה לוגיסטית ב-Analytics 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 dataset בממשק המשתמש. בקטע פרטים, אמורים להופיע פרטים בסיסיים על המודל ואפשרויות האימון ששימשו ליצירת המודל. בקטע Training Stats (נתוני אימון), אמורה להופיע טבלה דומה לזו:

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. מעולה!
סיימתם את ה-Codelab הזה. רוצים לנסות אתגר? נסו ליצור מודל רגרסיה ליניארית באמצעות BQML.
מה נכלל
- יצירת מודל רגרסיה לוגיסטית בינארית
- הערכת המודל
- שימוש במודל כדי ליצור תחזיות
השלבים הבאים
- מידע נוסף על BQML מופיע במאמרי העזרה.