תחילת העבודה עם BigQuery ML

1. סקירה כללית

BigQuery ML (BQML) מאפשר למשתמשים ליצור ולהפעיל מודלים של למידת מכונה ב-BigQuery באמצעות שאילתות SQL. המטרה היא לאפשר למתרגלי SQL לבנות מודלים באמצעות הכלים הקיימים שלהם ולהגביר את מהירות הפיתוח על ידי ביטול הצורך בתנועת נתונים.

מה תפַתחו

תוכלו להשתמש במערך הנתונים לדוגמה של Analytics 360 כדי ליצור מודל שחוזה אם מבקר יבצע עסקה.

מה תלמדו

איך ליצור, להעריך ולהשתמש במודלים של למידת מכונה ב-BigQuery

למה תזדקק?

2. הגדרה ודרישות

הגדרת סביבה בקצב עצמאי

  1. נכנסים למסוף Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

חשוב לזכור את מזהה הפרויקט, שם ייחודי לכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא מתאים לכם, סליחה). בהמשך ב-Codelab הזה, היא תיקרא PROJECT_ID.

  1. בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים של Google Cloud.

מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. חשוב לבצע את כל ההוראות בקטע 'ניקוי' שמסביר איך להשבית משאבים כדי שלא תצברו חיובים מעבר למדריך הזה. משתמשים חדשים ב-Google Cloud זכאים להצטרף לתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.

פתיחת המסוף של BigQuery

ב-Google Developer Console, לוחצים על סמל התפריט בפינה הימנית העליונה של המסך.

Select-bq_0.png

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

select-bq.png

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

8b0218390329e8cf.png

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

3. יצירת מערך נתונים

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

4f51bf57291a59db.png

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

63e32478a5652fbc.png

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 בממשק המשתמש. בקטע פרטים יופיעו כמה אפשרויות אימון ומידע בסיסי על המודל שמשמש ליצירת המודל. בקטע נתונים סטטיסטיים של אימון, אמורה להופיע טבלה דומה לזו:

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. מעולה!

סיימתם עם Codelab. רוצה למצוא אתגר? נסו ליצור מודל של רגרסיה ליניארית באמצעות BQML.

אילו נושאים דיברנו?

  • יצירת מודל רגרסיה לוגיסטי בינארי
  • להעריך את המודל
  • שימוש במודל כדי ליצור תחזיות

השלבים הבאים