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

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

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

מה תפַתחו

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

מה תלמדו

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

הדרישות

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

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

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

96a9c957bc475304.pngb9a10ebdf5b5a448.pnga1e3c01a38fa61c2.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.

מה נכלל

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

השלבים הבאים