ליצור מודל למידת מכונה ב-BigQuery ML באמצעות SQL
במדריך הזה נסביר איך ליצור מודל רגרסיה לוגיסטית באמצעות שאילתות SQL ב-BigQuery ML.
בעזרת BigQuery ML אתם יכולים ליצור ולאמן מודלים של למידת מכונה ב-BigQuery באמצעות שאילתות SQL. כך למידת המכונה הופכת לנגישה יותר, כי אתם יכולים להשתמש בכלים מוכרים כמו עורך ה-SQL של BigQuery, וגם קצב הפיתוח גדל כי לא צריך להעביר נתונים לסביבה נפרדת של למידת מכונה.
במדריך הזה תשתמשו במערך הנתונים לדוגמה של Google Analytics ל-BigQuery כדי ליצור מודל שחוזה אם מבקר באתר יבצע עסקה. למידע על הסכימה של קבוצת הנתונים של Analytics, קראו את המאמר סכימת BigQuery Export במרכז העזרה של Analytics.
במאמר עבודה עם מודלים באמצעות ממשק משתמש מוסבר איך ליצור מודלים באמצעות ממשק המשתמש של מסוף Google Cloud .
מטרות
במדריך הזה מוסבר איך לבצע את הפעולות הבאות:
- שימוש בהצהרה
CREATE MODELכדי ליצור מודל רגרסיה לוגיסטית בינארית. - שימוש בפונקציה
ML.EVALUATEכדי להעריך את המודל. - שימוש בפונקציה
ML.PREDICTכדי ליצור חיזויים באמצעות המודל.
עלויות
במדריך הזה משתמשים ברכיבים של Google Cloud, והשימוש בהם כרוך בתשלום, כולל:
- BigQuery
- BigQuery ML
למידע נוסף על העלויות של BigQuery, קראו את הדף תמחור ב-BigQuery.
למידע נוסף על העלויות של BigQuery ML, קראו את המאמר תמחור ב-BigQuery ML.
התפקידים הנדרשים
כדי ליצור מודל ולהריץ הסקה, צריך לקבל את התפקידים הבאים:
- עריכה של נתוני BigQuery (
roles/bigquery.dataEditor) - משתמש BigQuery (
roles/bigquery.user)
- עריכה של נתוני BigQuery (
לפני שמתחילים
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud 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 Google Cloud 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 Google Cloud 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 Google Cloud 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, צריך את ההרשאה
serviceusage.services.enable. אם אתם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, אתם יכולים לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים?
יצירת קבוצת נתונים
כדי ליצור מערך נתונים ב-BigQuery, בוחרים אחת מהאפשרויות הבאות:המסוף
נכנסים לדף BigQuery במסוף Google Cloud .
בחלונית הימנית, לוחצים על Explorer:

אם החלונית הימנית לא מוצגת, לוחצים על Expand left pane כדי לפתוח אותה.
ב-Explorer, מרחיבים את הפרויקט ולוחצים על Datasets.
בדף Datasets, לוחצים על Create dataset.
בחלונית Create dataset:
בשדה Dataset ID, מזינים
bqml_tutorial.בקטע Data location (מיקום הנתונים), בוחרים באפשרות 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
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מריצים את ההצהרה הבאה:
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 לסביבת פיתוח מקומית.
הצגת הנתונים הסטטיסטיים של אובדן המודל
למידת מכונה היא יצירת מודל שיכול להשתמש בנתונים כדי לבצע חיזוי. המודל הוא למעשה פונקציה שמקבלת קלט ומבצעת עליו חישובים כדי להפיק פלט – חיזוי.
האלגוריתמים של למידת המכונה פועלים על ידי שימוש בכמה דוגמאות שבהן החיזוי כבר ידוע (כמו הנתונים ההיסטוריים של רכישות המשתמשים) והתאמה חוזרת של משקלים שונים במודל, כך שהחיזויים של המודל יתאימו לערכים האמיתיים. כדי לעשות את זה, המודל ממזער את מידת הטעות שלו באמצעות מדד שנקרא "אובדן".
הציפייה היא שבכל איטרציה, אובדן המידע יצטמצם, באופן אידיאלי לאפס. ערך אובדן של אפס מציין שהמודל מדויק ב-100%.
במהלך אימון המודל, BigQuery ML מפצל באופן אוטומטי את נתוני הקלט לקבוצות אימון והערכה, כדי למנוע התאמת יתר (overfitting) של המודל. זה הכרחי כדי שאלגוריתם האימון לא יתאים את עצמו באופן הדוק מדי לנתוני האימון, כך שהוא לא יוכל להכליל דוגמאות חדשות.
במסוף Google Cloud אפשר לראות איך ערך ההפסד של המודל משתנה במהלך האיטרציות של אימון המודל:
נכנסים לדף BigQuery במסוף Google Cloud .
בחלונית הימנית, לוחצים על Explorer:

אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.
בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ואז על מערך הנתונים
bqml_tutorial.לוחצים על הכרטיסייה מודלים ואז על המודל
sample_model.לוחצים על הכרטיסייה Training ומסתכלים על התרשים Loss. בתרשים Loss מוצג השינוי במדד האובדן במהלך החזרות על מערך נתוני האימון. אם תעבירו את הסמן מעל התרשים, תראו שיש קווים ל-Training loss ול-Evaluation loss. מכיוון שביצעתם רגרסיה לוגיסטית, ערך אובדן האימון מחושב כאובדן לוגריתמי, באמצעות נתוני האימון. ההפסד בהערכה הוא ההפסד ביומן שמחושב לפי נתוני ההערכה. שני סוגי האובדן מייצגים ערכי אובדן ממוצעים, שמחושבים על סמך כל הדוגמאות בקבוצות הנתונים המתאימות לכל איטרציה.
אפשר גם לראות את תוצאות אימון המודל באמצעות הפונקציה ML.TRAINING_INFO.
הערכת המודל
מעריכים את ביצועי המודל באמצעות הפונקציה ML.EVALUATE או הפונקציה bigframes.bigquery.ml.evaluate BigQuery DataFrames.
הפונקציות ML.EVALUATE ו-bigframes.bigquery.ml.evaluate מעריכות את הערכים החזויים שנוצרו על ידי המודל ביחס לנתונים בפועל. כדי לחשב מדדים ספציפיים לרגרסיה לוגיסטית, אפשר להשתמש בפונקציה ML.ROC_CURVE.
במדריך הזה משתמשים במודל סיווג בינארי שמזהה עסקאות. הערכים בעמודה label הם שתי המחלקות שנוצרו על ידי המודל: 0 (אין עסקאות) ו-1 (בוצעה עסקה).
SQL
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מריצים את ההצהרה הבאה:
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
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מריצים את ההצהרה הבאה:
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 – כדי לקבץ את התוצאות לפי מזהה המבקר.
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מריצים את ההצהרה הבאה:
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 לסביבת פיתוח מקומית.
הסרת המשאבים
כדי לא לצבור חיובים בחשבון Google Cloud על המשאבים שבהם השתמשתם בדף הזה, מבצעים את הפעולות הבאות.
אתם יכולים למחוק את הפרויקט שיצרתם, או להשאיר את הפרויקט ולמחוק את מערך הנתונים.
מחיקת מערך הנתונים
מחיקת הפרויקט תסיר את כל מערכי הנתונים ואת כל הטבלאות בפרויקט. אם אתם מעדיפים להשתמש שוב בפרויקט, אתם יכולים למחוק את קבוצת הנתונים שיצרתם במדריך הזה:
נכנסים לדף BigQuery במסוף Google Cloud .
בחלונית הימנית, לוחצים על Explorer:

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