ליצור מודל למידת מכונה ב-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)

לפני שמתחילים

  1. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. 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

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the project.
    3. 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.

    4. 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

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the project.
    3. Click Grant access.
    4. 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.

    5. Click Select a role, then search for the role.
    6. To grant additional roles, click Add another role and add each additional role.
    7. Click Save.
  4. ‫BigQuery מופעל באופן אוטומטי בפרויקטים חדשים. כדי להפעיל את BigQuery בפרויקט קיים, עוברים אל

    מפעילים את BigQuery API, אם הוא עדיין לא מופעל.

    התפקידים שנדרשים כדי להפעיל ממשקי API

    כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם אתם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, אתם יכולים לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים?

    להפעלת ה-API

יצירת קבוצת נתונים

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

המסוף

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על Explorer:

    כפתור מודגש לחלונית Explorer.

    אם החלונית הימנית לא מוצגת, לוחצים על Expand left pane כדי לפתוח אותה.

  3. ב-Explorer, מרחיבים את הפרויקט ולוחצים על Datasets.

  4. בדף Datasets, לוחצים על Create dataset.

  5. בחלונית Create dataset:

    • בשדה Dataset ID, מזינים bqml_tutorial.

    • בקטע Data location (מיקום הנתונים), בוחרים באפשרות US (ארה"ב).

    משאירים את שאר הגדרות ברירת המחדל כמו שהן.

  6. לוחצים על Create dataset.

BQ

כדי ליצור קבוצת נתונים חדשה, משתמשים בפקודה bq mk --dataset.

  1. יוצרים מערך נתונים בשם bqml_tutorial ומגדירים את מיקום הנתונים ל-US:

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. מוודאים שמערך הנתונים נוצר:

    bq ls

API

מפעילים את השיטה datasets.insert עם משאב של מערך נתונים מוגדר:

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

BigQuery DataFrames

לפני שתנסו את הדוגמה הזו, פעלו לפי הוראות ההגדרה של BigQuery DataFrames שמפורטות במאמר התחלה מהירה ב-BigQuery באמצעות BigQuery DataFrames. מידע נוסף זמין במאמרי העזרה של BigQuery DataFrames.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת ADC לסביבת פיתוח מקומית.

import google.cloud.bigquery

bqclient = google.cloud.bigquery.Client()
bqclient.create_dataset("bqml_tutorial", exists_ok=True)

יצירת מודל רגרסיה לוגיסטית

יצירת מודל רגרסיה לוגיסטית באמצעות מערך הנתונים לדוגמה של Analytics ל-BigQuery.

SQL

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בעורך השאילתות, מריצים את ההצהרה הבאה:

    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 לסביבת פיתוח מקומית.

import bigframes.pandas as bpd
from bigframes.bigquery import ml

# Set partial ordering mode for BigQuery DataFrames.
# For more information, see the BigQuery DataFrames performance documentation:
# https://cloud.google.com/bigquery/docs/dataframes-performance#partial-ordering-mode
bpd.options.bigquery.ordering_mode = "partial"

# Start by selecting the data you'll use for training.
# The filters parameter limits the number of tables scanned by the query.

df = bpd.read_gbq_table(
    "bigquery-public-data.google_analytics_sample.ga_sessions_*",
    filters=[
        ("_table_suffix", ">=", "20160801"),
        ("_table_suffix", "<=", "20170630"),
    ],
)

# Extract the total number of transactions within
# the Google Analytics session.
#
# Because the totals column is a STRUCT data type, call
# Series.struct.field("transactions") to extract the transactions field.
# See the reference documentation below:
# https://cloud.google.com/python/docs/reference/bigframes/latest/bigframes.operations.structs.StructAccessor#bigframes_operations_structs_StructAccessor_field
transactions = df["totals"].struct.field("transactions")

# The "label" values represent the outcome of the model's
# prediction. In this case, the model predicts if there are any
# ecommerce transactions within the Google Analytics session.
# If the number of transactions is NULL, the value in the label
# column is set to 0. Otherwise, it is set to 1.
label = transactions.notnull().map({True: 1, False: 0}).rename("label")

# Extract the operating system of the visitor's device.
operating_system = df["device"].struct.field("operatingSystem")
operating_system = operating_system.fillna("")

# Extract whether the visitor's device is a mobile device.
is_mobile = df["device"].struct.field("isMobile")

# Extract the country from which the sessions originated, based on the IP address.
country = df["geoNetwork"].struct.field("country").fillna("")

# Extract the total number of page views within the session.
pageviews = df["totals"].struct.field("pageviews").fillna(0)

# Combine all the feature columns and the label column into a single DataFrame
# to use as training data.
training_data = bpd.DataFrame(
    {
        "label": label,
        "os": operating_system,
        "is_mobile": is_mobile,
        "country": country,
        "pageviews": pageviews,
    }
)

# A Logistic Regression model splits data into two classes, giving a
# confidence score that the data is in one of the classes.
#
# Use ml.create_model to create and train the model in BigQuery.
# The options parameter specifies the model type and the label column.
# For more information, see the BigQuery DataFrames API reference documentation:
# https://dataframes.bigquery.dev/reference/api/bigframes.bigquery.ml.create_model.html#bigframes.bigquery.ml.create_model
ml.create_model(
    your_model_id,  # For example: "bqml_tutorial.sample_model",
    options={
        "model_type": "LOGISTIC_REG",
        "input_label_cols": ["label"],
    },
    training_data=training_data,
    replace=True,
)

הצגת הנתונים הסטטיסטיים של אובדן המודל

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

האלגוריתמים של למידת המכונה פועלים על ידי שימוש בכמה דוגמאות שבהן החיזוי כבר ידוע (כמו הנתונים ההיסטוריים של רכישות המשתמשים) והתאמה חוזרת של משקלים שונים במודל, כך שהחיזויים של המודל יתאימו לערכים האמיתיים. כדי לעשות את זה, המודל ממזער את מידת הטעות שלו באמצעות מדד שנקרא "אובדן".

הציפייה היא שבכל איטרציה, אובדן המידע יצטמצם, באופן אידיאלי לאפס. ערך אובדן של אפס מציין שהמודל מדויק ב-100%.

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

במסוף Google Cloud אפשר לראות איך ערך ההפסד של המודל משתנה במהלך האיטרציות של אימון המודל:

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על Explorer:

    כפתור מודגש לחלונית Explorer.

    אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.

  3. בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ואז על מערך הנתונים bqml_tutorial.

  4. לוחצים על הכרטיסייה מודלים ואז על המודל sample_model.

  5. לוחצים על הכרטיסייה 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

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בעורך השאילתות, מריצים את ההצהרה הבאה:

    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 לסביבת פיתוח מקומית.

import bigframes.pandas as bpd
from bigframes.bigquery import ml

# Set partial ordering mode for BigQuery DataFrames.
# For more information, see the BigQuery DataFrames performance documentation:
# https://cloud.google.com/bigquery/docs/dataframes-performance#partial-ordering-mode
bpd.options.bigquery.ordering_mode = "partial"

# The filters parameter limits the number of tables scanned by the query.
# The date range scanned is July 1, 2017 to August 1, 2017. This is the
# data you're using to evaluate the predictive performance of the model.
# It was collected in the month immediately following the time period
# spanned by the training data.
df = bpd.read_gbq_table(
    "bigquery-public-data.google_analytics_sample.ga_sessions_*",
    filters=[
        ("_table_suffix", ">=", "20170701"),
        ("_table_suffix", "<=", "20170801"),
    ],
)

transactions = df["totals"].struct.field("transactions")
label = transactions.notnull().map({True: 1, False: 0}).rename("label")
operating_system = df["device"].struct.field("operatingSystem")
operating_system = operating_system.fillna("")
is_mobile = df["device"].struct.field("isMobile")
country = df["geoNetwork"].struct.field("country").fillna("")
pageviews = df["totals"].struct.field("pageviews").fillna(0)
eval_data = bpd.DataFrame(
    {
        "label": label,
        "os": operating_system,
        "is_mobile": is_mobile,
        "country": country,
        "pageviews": pageviews,
    }
)

# Use the ml.evaluate method to evaluate the model with test data.
# For more information, see the BigQuery DataFrames API reference documentation:
# https://dataframes.bigquery.dev/reference/api/bigframes.bigquery.ml.evaluate.html#bigframes.bigquery.ml.evaluate
#
# Because you performed a logistic regression, the results include the following columns:

# - precision — A metric for classification models. Precision identifies the frequency with
# which a model was correct when predicting the positive class.

# - recall — A metric for classification models that answers the following question:
# Out of all the possible positive labels, how many did the model correctly identify?

# - accuracy — Accuracy is the fraction of predictions that a classification model got right.

# - f1_score — A measure of the accuracy of the model. The f1 score is the harmonic average of
# the precision and recall. An f1 score's best value is 1. The worst value is 0.

# - log_loss — The loss function used in a logistic regression. This is the measure of how far the
# model's predictions are from the correct labels.

# - roc_auc — The area under the ROC curve. This is the probability that a classifier is more confident that
# a randomly chosen positive example
# is actually positive than that a randomly chosen negative example is positive.
# For more information, see Classification in the Machine Learning Crash Course:
# https://developers.google.com/machine-learning/crash-course/classification/video-lecture

ml.evaluate(
  evaluateodel_id,  # For example: "bqml_tutorial.sample_model",
    input_=eval_data,
)
#    precision    recall  accuracy  f1_score  log_loss   roc_auc
# 0   0.451613  0.078212  0.985316  0.133333  0.046824  0.980537
# [1 rows x 6 columns]

שימוש במודל כדי לחזות תוצאות

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

SQL

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בעורך השאילתות, מריצים את ההצהרה הבאה:

    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 לסביבת פיתוח מקומית.

import bigframes.pandas as bpd
from bigframes.bigquery import ml

# Set partial ordering mode for BigQuery DataFrames.
# For more information, see the BigQuery DataFrames performance documentation:
# https://cloud.google.com/bigquery/docs/dataframes-performance#partial-ordering-mode
bpd.options.bigquery.ordering_mode = "partial"

# The filters parameter limits the number of tables scanned by the query.
# The date range scanned is July 1, 2017 to August 1, 2017. This is the
# data you're using to make the prediction.
# It was collected in the month immediately following the time period
# spanned by the training data.
df = bpd.read_gbq_table(
    "bigquery-public-data.google_analytics_sample.ga_sessions_*",
    filters=[
        ("_table_suffix", ">=", "20170701"),
        ("_table_suffix", "<=", "20170801"),
    ],
)

operating_system = df["device"].struct.field("operatingSystem")
operating_system = operating_system.fillna("")
is_mobile = df["device"].struct.field("isMobile")
country = df["geoNetwork"].struct.field("country").fillna("")
pageviews = df["totals"].struct.field("pageviews").fillna(0)
features = bpd.DataFrame(
    {
        "os": operating_system,
        "is_mobile": is_mobile,
        "country": country,
        "pageviews": pageviews,
    }
)

# Use the ml.predict method to predict results using your model.
# For more information, see the BigQuery DataFrames API reference documentation:
# https://dataframes.bigquery.dev/reference/api/bigframes.bigquery.ml.predict.html#bigframes.bigquery.ml.predict

predictions = ml.predict(
    your_model_id,  # For example: "bqml_tutorial.sample_model",
    input_=features,
)

# Call groupby method to group predicted_label by country.
# Call sum method to get the total_predicted_purchases by country.
total_predicted_purchases = predictions.groupby(["country"])[
    ["predicted_label"]
].sum()

# Call the sort_values method with the parameter
# ascending = False to get the highest values.
# Call head method to limit to the 10 highest values.
total_predicted_purchases.sort_values(ascending=False).head(10)

# country
# United States    162
# Taiwan             5
# Canada             3
# India              2
# Japan              2
# Turkey             2
# Australia          1
# Brazil             1
# Germany            1
# Guyana             1
# Name: predicted_label, dtype: Int64

חיזוי רכישות לכל משתמש

לחזות את מספר העסקאות שכל מבקר באתר יבצע.

SQL

השאילתה הזו זהה לשאילתה שבקטע הקודם, חוץ מהסעיף GROUP BY. כאן משתמשים בסעיף GROUP BY – GROUP BY fullVisitorId – כדי לקבץ את התוצאות לפי מזהה המבקר.

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בעורך השאילתות, מריצים את ההצהרה הבאה:

    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 לסביבת פיתוח מקומית.


import bigframes.pandas as bpd
from bigframes.bigquery import ml

# Set partial ordering mode for BigQuery DataFrames.
# For more information, see the BigQuery DataFrames performance documentation:
# https://cloud.google.com/bigquery/docs/dataframes-performance#partial-ordering-mode
bpd.options.bigquery.ordering_mode = "partial"

# The filters parameter limits the number of tables scanned by the query.
# The date range scanned is July 1, 2017 to August 1, 2017. This is the
# data you're using to make the prediction.
# It was collected in the month immediately following the time period
# spanned by the training data.
df = bpd.read_gbq_table(
    "bigquery-public-data.google_analytics_sample.ga_sessions_*",
    filters=[
        ("_table_suffix", ">=", "20170701"),
        ("_table_suffix", "<=", "20170801"),
    ],
)

operating_system = df["device"].struct.field("operatingSystem")
operating_system = operating_system.fillna("")
is_mobile = df["device"].struct.field("isMobile")
country = df["geoNetwork"].struct.field("country").fillna("")
pageviews = df["totals"].struct.field("pageviews").fillna(0)
full_visitor_id = df["fullVisitorId"]

features = bpd.DataFrame(
    {
        "os": operating_system,
        "is_mobile": is_mobile,
        "country": country,
        "pageviews": pageviews,
        "fullVisitorId": full_visitor_id,
    }
)

# Use the ml.predict method to predict results using your model.
# For more information, see the BigQuery DataFrames API reference documentation:
# https://dataframes.bigquery.dev/reference/api/bigframes.bigquery.ml.predict.html#bigframes.bigquery.ml.predict

predictions = ml.predict(
    your_model_id,  # For example: "bqml_tutorial.sample_model",
    input_=features,
)

# Call groupby method to group predicted_label by visitor.
# Call sum method to get the total_predicted_purchases by visitor.
total_predicted_purchases = predictions.groupby(["fullVisitorId"])[
    ["predicted_label"]
].sum()

# Call the sort_values method with the parameter
# ascending = False to get the highest values.
# Call head method to limit to the 10 highest values.
total_predicted_purchases.sort_values(ascending=False).head(10)

# fullVisitorId
# 9417857471295131045    3
# 0376394056092189113    2
# 057693500927581077     2
# 112288330928895942     2
# 1280993661204347450    2
# 2969418676126258798    2
# 7420300501523012460    2
# 806992249032686650     2
# 8388931032955052746    2
# 0082806901961150595    1
# Name: predicted_label, dtype: Int64

הסרת המשאבים

כדי לא לצבור חיובים בחשבון Google Cloud על המשאבים שבהם השתמשתם בדף הזה, מבצעים את הפעולות הבאות.

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

מחיקת מערך הנתונים

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

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על Explorer:

    כפתור מודגש לחלונית Explorer.

  3. בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ואז על מערך הנתונים bqml_tutorial שיצרתם.

  4. לוחצים על Delete.

  5. בתיבת הדו-שיח Delete dataset, מאשרים את פקודת המחיקה על ידי הקלדת delete.

  6. לוחצים על Delete.

מחיקת הפרויקט

כדי למחוק את הפרויקט:

  1. במסוף Google Cloud , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.

המאמרים הבאים