יצירת מודל של למידת מכונה ב-BigQuery ML באמצעות SQL
במדריך הזה מוסבר איך ליצור מודל רגרסיה לוגיסטית באמצעות שאילתות SQL של BigQuery ML.
BigQuery ML מאפשר ליצור ולאמן מודלים של למידת מכונה ב-BigQuery באמצעות שאילתות SQL. השימוש ב-BigQuery ML מאפשר לכם להשתמש בכלים מוכרים כמו כלי העריכה של BigQuery SQL, וכך להפוך את למידת המכונה לנגישה יותר. בנוסף, הוא מאפשר לכם לפתח מודלים מהר יותר כי אתם לא צריכים להעביר נתונים לסביבת למידת מכונה נפרדת.
במדריך הזה משתמשים במערך נתונים לדוגמה של Google Analytics ל-BigQuery כדי ליצור מודל שמנבא אם מבקר באתר יבצע עסקה. מידע על הסכימה של מערך הנתונים של Analytics זמין במאמר סכימת BigQuery Export במרכז העזרה של Analytics.
במאמר עבודה עם מודלים באמצעות ממשק משתמש מוסבר איך ליצור מודלים באמצעות ממשק המשתמש של מסוף Cloud de Confiance .
מטרות
במדריך הזה מוסבר איך לבצע את הפעולות הבאות:
- שימוש במשפט
CREATE MODELכדי ליצור מודל רגרסיה לוגיסטית בינארית. - שימוש בפונקציה
ML.EVALUATEלהערכת המודל. - שימוש בפונקציה
ML.PREDICTכדי ליצור תחזיות באמצעות המודל.
עלויות
במדריך הזה נעשה שימוש ברכיבים של Cloud de Confiance by S3NSשחלים עליהם חיובים, כולל הרכיבים הבאים:
- BigQuery
- BigQuery ML
מידע נוסף על העלויות ב-BigQuery זמין בדף תמחור ב-BigQuery.
מידע נוסף על העלויות של BigQuery ML זמין במאמר תמחור ב-BigQuery ML.
התפקידים הנדרשים
כדי ליצור מודל ולהריץ הסקה, צריך לקבל את התפקידים הבאים:
- עריכה של נתוני BigQuery (
roles/bigquery.dataEditor) - משתמש BigQuery (
roles/bigquery.user)
- עריכה של נתוני BigQuery (
לפני שמתחילים
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
-
Make sure that you have the following role or roles on the project: BigQuery Data Editor, BigQuery Job User, Service Usage Admin
Check for the roles
-
In the Cloud de Confiance console, go to the IAM page.
Go to IAM - Select the project.
-
In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.
- For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.
Grant the roles
-
In the Cloud de Confiance console, go to the IAM page.
Go to IAM - Select the project.
- Click Grant access.
-
In the New principals field, enter your user identifier. This is typically the identifier for a user in a workforce identity pool. For details, see Represent workforce pool users in IAM policies, or contact your administrator.
- Click Select a role, then search for the role.
- To grant additional roles, click Add another role and add each additional role.
- Click Save.
-
- BigQuery מופעל באופן אוטומטי בפרויקטים חדשים.
כדי להפעיל את BigQuery בפרויקט קיים, עוברים אל
מפעילים את BigQuery API.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידים
יצירת מערך נתונים
יוצרים מערך נתונים ב-BigQuery לאחסון מודל ה-ML.המסוף
במסוף Cloud de Confiance , עוברים לדף BigQuery.
בחלונית Explorer, לוחצים על שם הפרויקט.
לוחצים על הצגת פעולות > יצירת מערך נתונים.
בדף Create dataset, מבצעים את הפעולות הבאות:
בשדה Dataset ID (מזהה מערך הנתונים), מזינים
bqml_tutorial.בקטע Location type, בוחרים באפשרות Multi-region ואז בוחרים באפשרות US.
משאירים את הגדרות ברירת המחדל שנותרו כמו שהן ולוחצים על Create dataset (יצירת מערך נתונים).
BQ
כדי ליצור מערך נתונים חדש, משתמשים בפקודה bq mk --dataset.
יוצרים מערך נתונים בשם
bqml_tutorialעם מיקום הנתונים שמוגדר ל-US.bq mk --dataset \ --location=US \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
בודקים שמערך הנתונים נוצר:
bq ls
API
מבצעים קריאה לשיטה datasets.insert
עם משאב מוגדר של מערך נתונים.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrames
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של BigQuery DataFrames במדריך לתחילת העבודה עם BigQuery באמצעות BigQuery DataFrames. מידע נוסף מופיע במאמרי העזרה בנושא BigQuery DataFrames.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת ADC לסביבת פיתוח מקומית.
יצירת מודל רגרסיה לוגיסטית
יצירת מודל רגרסיה לוגיסטית באמצעות מערך הנתונים לדוגמה של Analytics ל-BigQuery.
SQL
במסוף Cloud de Confiance , עוברים לדף BigQuery.
בעורך השאילתות, מריצים את ההצהרה הבאה:
CREATE OR REPLACE MODEL `bqml_tutorial.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 '20170630'
השלמת השאילתה נמשכת כמה דקות. אחרי שהאיטרציה הראשונה מסתיימת, המודל (
sample_model) מופיע בחלונית הניווט. מכיוון שהשאילתה משתמשת בהצהרתCREATE MODELכדי ליצור מודל, לא מוצגות תוצאות של השאילתה.
פרטי השאילתה
ההצהרה CREATE MODEL יוצרת את המודל ואז מאמנת אותו באמצעות הנתונים שאוחזרו על ידי ההצהרה SELECT של השאילתה.
הפסקה OPTIONS(model_type='logistic_reg') יוצרת מודל של רגרסיה
לוגיסטית. מודל רגרסיה לוגיסטית מפצל נתוני קלט לשתי קטגוריות, ואז מעריך את ההסתברות שהנתונים נמצאים באחת מהקטגוריות. מה שאתם מנסים לזהות, למשל אם אימייל הוא ספאם, מיוצג על ידי 1, וערכים אחרים מיוצגים על ידי 0. ההסתברות שערך נתון שייך לסיווג שאתם מנסים לזהות מצוינת על ידי ערך בין 0 ל-1.
לדוגמה, אם אימייל מקבל הערכת הסתברות של 0.9, אז יש סיכוי של 90% שהאימייל הוא ספאם.
ההצהרה SELECT בשאילתה הזו מאחזרת את העמודות הבאות שבהן המודל משתמש כדי לחזות את ההסתברות שלקוח ישלים עסקה:
-
totals.transactions: המספר הכולל של עסקאות מסחר אלקטרוני במהלך הסשן. אם מספר העסקאות הואNULL, הערך בעמודהlabelמוגדר כ-0. אחרת, הערך מוגדר כ-1. הערכים האלה מייצגים את התוצאות האפשריות. יצירת כינוי בשםlabelהיא חלופה להגדרת האפשרותinput_label_cols=בהצהרהCREATE MODEL. -
device.operatingSystem: מערכת ההפעלה של המכשיר של המבקר. -
device.isMobile– מציין אם המכשיר של המבקר הוא מכשיר נייד. -
geoNetwork.country: המדינה שממנה הגיעו הסשנים באתר, על סמך כתובת ה-IP. -
totals.pageviews: המספר הכולל של הצפיות בדף במהלך הסשן.
הפסקה FROM – גורמת לשאילתה לאמן את המודל באמצעות טבלאות לדוגמה bigquery-public-data.google_analytics_sample.ga_sessions.
הטבלאות האלה מחולקות למקטעים לפי תאריך, ולכן צריך לצבור אותן באמצעות תו כללי בשם הטבלה: google_analytics_sample.ga_sessions_*.
הפסקה WHERE — _TABLE_SUFFIX BETWEEN '20160801' AND '20170630'
— מגבילה את מספר הטבלאות שנסרקות על ידי השאילתה. טווח התאריכים שנסרק הוא 1 באוגוסט 2016 עד 30 ביוני 2017.
BigQuery DataFrames
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של BigQuery DataFrames במדריך לתחילת העבודה עם BigQuery באמצעות BigQuery DataFrames. מידע נוסף מופיע במאמרי העזרה בנושא BigQuery DataFrames.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת ADC לסביבת פיתוח מקומית.
הצגת נתוני ההפסד של המודל
למידת מכונה היא תהליך של יצירת מודל שיכול להשתמש בנתונים כדי לבצע חיזוי. המודל הוא בעצם פונקציה שמקבלת קלט ומבצעת חישובים על הקלט כדי ליצור פלט – חיזוי.
אלגוריתמים של למידת מכונה פועלים על ידי שימוש בכמה דוגמאות שבהן החיזוי כבר ידוע (כמו נתונים היסטוריים של רכישות משתמשים), ועל ידי שינוי חוזר ונשנה של משקלים שונים במודל, כך שהחיזויים של המודל יתאימו לערכים האמיתיים. הוא עושה את זה על ידי מזעור הטעות של המודל באמצעות מדד שנקרא loss (הפסד).
הציפייה היא שבכל איטרציה, אובדן המידע יקטן, באופן אידיאלי עד לאפס. הפסד של אפס אומר שהמודל מדויק ב-100%.
במהלך אימון המודל, BigQuery ML מפצל באופן אוטומטי את נתוני הקלט לקבוצות אימון והערכה, כדי למנוע התאמת יתר של המודל. הפעולה הזו נדרשת כדי שאלגוריתם האימון לא יתאים את עצמו לנתוני האימון בצורה כל כך מדויקת שהוא לא יוכל להכליל דוגמאות חדשות.
אפשר להשתמש במסוף Cloud de Confiance כדי לראות איך הפסד המודל משתנה במהלך איטרציות האימון של המודל:
במסוף Cloud de Confiance , עוברים לדף BigQuery.
בחלונית הימנית, לוחצים על כלי הניתוחים:

אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.
בחלונית Explorer מרחיבים את הפרויקט, לוחצים על Datasets ואז לוחצים על מערך הנתונים
bqml_tutorial.לוחצים על הכרטיסייה מודלים ואז על המודל
sample_model.לוחצים על הכרטיסייה Training (אימון) ומסתכלים על הגרף Loss (הפסד). בתרשים Loss מוצג השינוי במדד ההפסד לאורך האיטרציות במערך נתוני האימון. אם מעבירים את הסמן מעל התרשים, אפשר לראות שיש קווים להפסד באימון ולהפסד בהערכה. מכיוון שביצעתם רגרסיה לוגיסטית, ערך ההפסד של האימון מחושב כהפסד לוגי, באמצעות נתוני האימון. הפסד ההערכה הוא הפסד הלוג שחושב על נתוני ההערכה. שני סוגי ההפסדים מייצגים ערכי הפסד ממוצעים, שמחושבים כממוצע של כל הדוגמאות במערכי הנתונים המתאימים לכל איטרציה.
אפשר גם לראות את תוצאות אימון המודל באמצעות הפונקציה ML.TRAINING_INFO.
הערכת המודל
מעריכים את הביצועים של המודל באמצעות הפונקציה ML.EVALUATE. הפונקציה ML.EVALUATE מעריכה את הערכים החזויים שנוצרו על ידי המודל ביחס לנתונים בפועל. כדי לחשב מדדים ספציפיים של רגרסיה לוגיסטית, אפשר להשתמש בפונקציית ה-SQL ML.ROC_CURVE או בפונקציית ה-BigQuery DataFrames bigframes.ml.metrics.roc_curve.
במדריך הזה משתמשים במודל סיווג בינארי שמזהה עסקאות. הערכים בעמודה label הם שני הסיווגים שנוצרו על ידי המודל: 0 (ללא עסקאות) ו-1 (בוצעה עסקה).
SQL
במסוף Cloud de Confiance , עוברים לדף BigQuery.
בעורך השאילתות, מריצים את ההצהרה הבאה:
SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.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'))
התוצאות אמורות להיראות כך:
+--------------------+---------------------+---------------------+---------------------+---------------------+--------------------+ | precision | recall | accuracy | f1_score | log_loss | roc_auc | +--------------------+---------------------+---------------------+---------------------+---------------------+--------------------+ | 0.468503937007874 | 0.11080074487895716 | 0.98534315834767638 | 0.17921686746987953 | 0.04624221101176898 | 0.98174125874125873 | +--------------------+---------------------+---------------------+---------------------+---------------------+--------------------+
מכיוון שביצעתם רגרסיה לוגיסטית, התוצאות כוללות את העמודות הבאות:
precision: מדד למודלים של סיווג. המדד 'דיוק' מציין את התדירות שבה המודל צדק כשחזה את המחלקה החיובית.
recall: מדד למודלים של סיווג שעונה על השאלה הבאה: מתוך כל התוויות החיוביות האפשריות, כמה זוהו נכון על ידי המודל?
accuracy: הדיוק הוא החלק היחסי של התחזיות שהמודל למיון הצליח לנחש נכון.
f1_score: מדד לדיוק של המודל. ציון f1 הוא הממוצע ההרמוני של הדיוק וההחזרה. הערך הכי טוב של ציון F1 הוא 1. הערך הכי גרוע הוא 0.
log_loss: פונקציית ההפסד שמשמשת ברגרסיה לוגיסטית. זהו מדד המרחק בין התחזיות של המודל לבין התוויות הנכונות.
roc_auc: השטח מתחת לעקומת ROC. זהו הסיכוי שסיווג יהיה בטוח יותר שדוגמה חיובית שנבחרה באופן אקראי היא חיובית, מאשר שדוגמה שלילית שנבחרה באופן אקראי היא חיובית. מידע נוסף זמין במאמר בנושא סיווג בקורס המזורז ללימוד מכונת למידה.
פרטי השאילתה
ההצהרה הראשונית SELECT מאחזרת את העמודות מהמודל.
הפסקה FROM משתמשת בפונקציה ML.EVALUATE מול המודל שלכם.
ההצהרה SELECT והפסוקית FROM שמוטמעים בתוך שאילתת המשנה זהים לאלה שבשאילתה CREATE MODEL.
הפסקה WHERE — _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'
— מגבילה את מספר הטבלאות שנסרקות על ידי השאילתה. טווח התאריכים שנסרק הוא 1 ביולי 2017 עד 1 באוגוסט 2017. אלה הנתונים שבהם אתם משתמשים כדי להעריך את יכולת החיזוי של המודל. הוא נאסף בחודש
שמגיע מיד אחרי התקופה שמוצגת בנתוני האימון.
BigQuery DataFrames
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של BigQuery DataFrames במדריך לתחילת העבודה עם BigQuery באמצעות BigQuery DataFrames. מידע נוסף מופיע במאמרי העזרה בנושא BigQuery DataFrames.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת ADC לסביבת פיתוח מקומית.
שימוש במודל כדי לחזות תוצאות
שימוש במודל כדי לחזות את מספר העסקאות שבוצעו על ידי מבקרים באתר מכל מדינה.
SQL
במסוף Cloud de Confiance , עוברים לדף BigQuery.
בעורך השאילתות, מריצים את ההצהרה הבאה:
SELECT country, SUM(predicted_label) as total_predicted_purchases FROM ML.PREDICT(MODEL `bqml_tutorial.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
התוצאות אמורות להיראות כך:
+----------------+---------------------------+ | country | total_predicted_purchases | +----------------+---------------------------+ | United States | 220 | | Taiwan | 8 | | Canada | 7 | | India | 2 | | Turkey | 2 | | Japan | 2 | | Italy | 1 | | Brazil | 1 | | Singapore | 1 | | Australia | 1 | +----------------+---------------------------+
פרטי השאילתה
ההצהרה הראשונית SELECT מאחזרת את העמודה country ומסכמת את העמודה predicted_label. העמודה predicted_label נוצרת על ידי הפונקציה ML.PREDICT. כשמשתמשים בפונקציה ML.PREDICT, שם עמודת הפלט של המודל הוא predicted_<label_column_name>. במודלים של רגרסיה לינארית, predicted_label הוא הערך המשוער של label.
במודלים של רגרסיה לוגיסטית, predicted_label היא התווית שמתארת בצורה הכי טובה את ערך נתוני הקלט שצוין, כלומר 0 או 1.
הפונקציה ML.PREDICT משמשת לחיזוי תוצאות באמצעות המודל.
ההצהרה SELECT והפסוקית FROM שמוטמעים בתוך שאילתת המשנה זהים לאלה שבשאילתה CREATE MODEL.
הפסקה WHERE — _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'
— מגבילה את מספר הטבלאות שנסרקות על ידי השאילתה. טווח התאריכים שנסרק הוא 1 ביולי 2017 עד 1 באוגוסט 2017. אלה הנתונים שלגביהם אתם מבצעים תחזיות. הוא נאסף בחודש שמיד אחרי התקופה שמוצגת בנתוני האימון.
הסעיפים GROUP BY ו-ORDER BY מקבצים את התוצאות לפי מדינה וממיינים אותן לפי סכום הרכישות הצפויות בסדר יורד.
הסעיף LIMIT משמש כאן להצגת 10 התוצאות הראשונות בלבד.
BigQuery DataFrames
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של BigQuery DataFrames במדריך לתחילת העבודה עם BigQuery באמצעות BigQuery DataFrames. מידע נוסף מופיע במאמרי העזרה בנושא BigQuery DataFrames.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת ADC לסביבת פיתוח מקומית.
חיזוי רכישות לכל משתמש
לספק תחזית של מספר העסקאות שכל מבקר באתר יבצע.
SQL
השאילתה הזו זהה לשאילתה שבקטע הקודם, למעט הסעיף GROUP BY. כאן נעשה שימוש בפסוקית GROUP BY – GROUP BY fullVisitorId
– כדי לקבץ את התוצאות לפי מזהה המבקר.
במסוף Cloud de Confiance , עוברים לדף BigQuery.
בעורך השאילתות, מריצים את ההצהרה הבאה:
SELECT fullVisitorId, SUM(predicted_label) as total_predicted_purchases FROM ML.PREDICT(MODEL `bqml_tutorial.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
התוצאות אמורות להיראות כך:
+---------------------+---------------------------+ | fullVisitorId | total_predicted_purchases | +---------------------+---------------------------+ | 9417857471295131045 | 4 | | 112288330928895942 | 2 | | 2158257269735455737 | 2 | | 489038402765684003 | 2 | | 057693500927581077 | 2 | | 2969418676126258798 | 2 | | 5073919761051630191 | 2 | | 7420300501523012460 | 2 | | 0456807427403774085 | 2 | | 2105122376016897629 | 2 | +---------------------+---------------------------+
BigQuery DataFrames
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של BigQuery DataFrames במדריך לתחילת העבודה עם BigQuery באמצעות BigQuery DataFrames. מידע נוסף מופיע במאמרי העזרה בנושא BigQuery DataFrames.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת ADC לסביבת פיתוח מקומית.
הסרת המשאבים
כדי לא לצבור חיובים לחשבון Cloud de Confiance על המשאבים שבהם השתמשתם בדף הזה, פועלים לפי השלבים הבאים:
אתם יכולים למחוק את הפרויקט שיצרתם, או לשמור את הפרויקט ולמחוק את מערך הנתונים.
מחיקת מערך הנתונים
אם מוחקים פרויקט, כל מערכי הנתונים וכל הטבלאות בפרויקט נמחקים. אם אתם מעדיפים להשתמש מחדש בפרויקט, אתם יכולים למחוק את מערך הנתונים שיצרתם במדריך הזה:
במסוף Cloud de Confiance , עוברים לדף BigQuery.
בחלונית הימנית, לוחצים על כלי הניתוחים:

בחלונית Explorer מרחיבים את הפרויקט, לוחצים על Datasets ואז לוחצים על מערך הנתונים
bqml_tutorialשיצרתם.לוחצים על Delete.
בתיבת הדו-שיח מחיקת מערך נתונים, מקלידים
deleteכדי לאשר את פקודת המחיקה.לוחצים על Delete.
מחיקת הפרויקט
כדי למחוק את הפרויקט:
- במסוף Cloud de Confiance , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
המאמרים הבאים
- מידע נוסף על למידת מכונה זמין בקורס המקוצר על למידת מכונה.
- סקירה כללית של BigQuery ML זמינה במאמר מבוא ל-BigQuery ML.
- מידע נוסף על מסוף Cloud de Confiance זמין במאמר בנושא שימוש במסוף Cloud de Confiance .