1. סקירה כללית
BigQuery ML (BQML) מאפשר למשתמשים ליצור ולהפעיל מודלים של למידת מכונה ב-BigQuery באמצעות שאילתות SQL. המטרה היא לאפשר למתרגלי SQL לבנות מודלים באמצעות הכלים הקיימים שלהם ולהגביר את מהירות הפיתוח על ידי ביטול הצורך בתנועת נתונים.
מה תפַתחו
תוכלו להשתמש במערך הנתונים לדוגמה של Analytics 360 כדי ליצור מודל שחוזה אם מבקר יבצע עסקה.
מה תלמדו
איך ליצור, להעריך ולהשתמש במודלים של למידת מכונה ב-BigQuery
למה תזדקק?
- דפדפן, כמו Chrome או Firefox
- ידע בסיסי ב-SQL או ב-BigQuery
- מסמכי התיעוד של BQML
2. הגדרה ודרישות
הגדרת סביבה בקצב עצמאי
- נכנסים למסוף Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.
חשוב לזכור את מזהה הפרויקט, שם ייחודי לכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא מתאים לכם, סליחה). בהמשך ב-Codelab הזה, היא תיקרא PROJECT_ID
.
- בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים של Google Cloud.
מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. חשוב לבצע את כל ההוראות בקטע 'ניקוי' שמסביר איך להשבית משאבים כדי שלא תצברו חיובים מעבר למדריך הזה. משתמשים חדשים ב-Google Cloud זכאים להצטרף לתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.
פתיחת המסוף של BigQuery
ב-Google Developer Console, לוחצים על סמל התפריט בפינה הימנית העליונה של המסך.
גוללים למטה בתפריט התחתון ולוחצים על BigQuery:
הפעולה הזו תפתח את מסוף BigQuery בכרטיסייה חדשה בדפדפן, שנראית כך:
אבל, אין כאן כלום! למרבה המזל, יש ב-BigQuery המון מערכי נתונים ציבוריים שניתן לחקור.
3. יצירת מערך נתונים
כדי ליצור מערך נתונים, לוחצים על החץ שליד שם הפרויקט ובוחרים באפשרות יצירת מערך נתונים חדש.
לאחר מכן, נותנים שם למערך הנתונים bqml_codelab ולוחצים על 'אישור'.
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 בממשק המשתמש. בקטע פרטים יופיעו כמה אפשרויות אימון ומידע בסיסי על המודל שמשמש ליצירת המודל. בקטע נתונים סטטיסטיים של אימון, אמורה להופיע טבלה דומה לזו:
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 זמין במסמכי העזרה.