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

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

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

מה תפַתחו

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

מה תלמדו

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

הדרישות

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

הגדרת סביבה בקצב אישי

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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

  1. לאחר מכן, תצטרכו להפעיל את החיוב ב-Cloud Console כדי להשתמש במשאבים של Google Cloud.

העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי אפילו לא תצטרכו לשלם בכלל. חשוב לפעול לפי ההוראות בקטע 'ניקוי' כדי להשבית את המשאבים, וכך לא תחויבו אחרי שתסיימו את המדריך הזה. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.

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

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

select-bq_0.png

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

select-bq.png

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

8b0218390329e8cf.png

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

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

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

4f51bf57291a59db.png

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

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

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.

מה נכלל

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

השלבים הבאים