יצירת מודל של למידת מכונה ב-BigQuery ML באמצעות SQL

במדריך הזה מוסבר איך ליצור מודל רגרסיה לוגיסטית באמצעות שאילתות SQL של BigQuery ML.

‫BigQuery ML מאפשר ליצור ולאמן מודלים של למידת מכונה ב-BigQuery באמצעות שאילתות SQL. השימוש ב-BigQuery ML מאפשר לכם להשתמש בכלים מוכרים כמו כלי העריכה של BigQuery SQL, וכך להפוך את למידת המכונה לנגישה יותר. בנוסף, הוא מאפשר לכם לפתח מודלים מהר יותר כי אתם לא צריכים להעביר נתונים לסביבת למידת מכונה נפרדת.

במדריך הזה משתמשים במערך נתונים לדוגמה של Google Analytics ל-BigQuery כדי ליצור מודל שמנבא אם מבקר באתר יבצע עסקה. מידע על הסכימה של מערך הנתונים של Analytics זמין במאמר סכימת BigQuery Export במרכז העזרה של Analytics.

במאמר עבודה עם מודלים באמצעות ממשק משתמש מוסבר איך ליצור מודלים באמצעות ממשק המשתמש של מסוף Cloud de Confiance .

מטרות

במדריך הזה מוסבר איך לבצע את הפעולות הבאות:

עלויות

במדריך הזה נעשה שימוש ברכיבים של Cloud de Confiance by S3NSשחלים עליהם חיובים, כולל הרכיבים הבאים:

  • BigQuery
  • BigQuery ML

מידע נוסף על העלויות ב-BigQuery זמין בדף תמחור ב-BigQuery.

מידע נוסף על העלויות של BigQuery ML זמין במאמר תמחור ב-BigQuery ML.

התפקידים הנדרשים

  • כדי ליצור מודל ולהריץ הסקה, צריך לקבל את התפקידים הבאים:

    • עריכה של נתוני BigQuery ‏ (roles/bigquery.dataEditor)
    • משתמש BigQuery‏ (roles/bigquery.user)

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

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

    Go to project selector

  2. Verify that billing is enabled for your Cloud de Confiance 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 Cloud de Confiance 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 Cloud de Confiance 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, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    להפעלת ה-API

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

יוצרים מערך נתונים ב-BigQuery לאחסון מודל ה-ML.

המסוף

  1. במסוף Cloud de Confiance , עוברים לדף BigQuery.

    לדף BigQuery

  2. בחלונית Explorer, לוחצים על שם הפרויקט.

  3. לוחצים על הצגת פעולות > יצירת מערך נתונים.

  4. בדף Create dataset, מבצעים את הפעולות הבאות:

    • בשדה Dataset ID (מזהה מערך הנתונים), מזינים bqml_tutorial.

    • בקטע Location type, בוחרים באפשרות Multi-region ואז בוחרים באפשרות US.

    • משאירים את הגדרות ברירת המחדל שנותרו כמו שהן ולוחצים על 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. במסוף Cloud de Confiance , עוברים לדף BigQuery.

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

from bigframes.ml.linear_model import LogisticRegression
import bigframes.pandas as bpd

# Start by selecting the data you'll use for training. `read_gbq` accepts
# either a SQL query or a table ID. Since this example selects from multiple
# tables via a wildcard, use SQL to define this data. Watch issue
# https://github.com/googleapis/python-bigquery-dataframes/issues/169
# for updates to `read_gbq` to support wildcard tables.

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 into a single DataFrame
# to use as training data.
features = bpd.DataFrame(
    {
        "os": operating_system,
        "is_mobile": is_mobile,
        "country": country,
        "pageviews": pageviews,
    }
)

# Logistic Regression model splits data into two classes, giving the
# a confidence score that the data is in one of the classes.
model = LogisticRegression()
model.fit(features, label)

# The model.fit() call above created a temporary model.
# Use the to_gbq() method to write to a permanent location.
model.to_gbq(
    your_model_id,  # For example: "bqml_tutorial.sample_model",
    replace=True,
)

הצגת נתוני ההפסד של המודל

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

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

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

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

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

  1. במסוף Cloud de Confiance , עוברים לדף BigQuery.

    כניסה ל-BigQuery

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

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

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

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

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

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

  1. במסוף Cloud de Confiance , עוברים לדף BigQuery.

    כניסה ל-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

# Select model you'll use for evaluating. `read_gbq_model` loads model data from a
# BigQuery, but you could also use the `model` object from the previous steps.
model = bpd.read_gbq_model(
    your_model_id,  # For example: "bqml_tutorial.sample_model",
)

# 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)
features = bpd.DataFrame(
    {
        "os": operating_system,
        "is_mobile": is_mobile,
        "country": country,
        "pageviews": pageviews,
    }
)

# Some models include a convenient .score(X, y) method for evaluation with a preset accuracy metric:

# 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']('https://developers.google.com/machine-learning/crash-course/classification/video-lecture')
# in the Machine Learning Crash Course.

model.score(features, label)
#    precision    recall  accuracy  f1_score  log_loss   roc_auc
# 0   0.412621  0.079143  0.985074  0.132812  0.049764  0.974285
# [1 rows x 6 columns]

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

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

SQL

  1. במסוף Cloud de Confiance , עוברים לדף BigQuery.

    כניסה ל-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

# Select model you'll use for predicting.
# `read_gbq_model` loads model data from
# BigQuery, but you could also use the `model`
# object from the previous steps.
model = bpd.read_gbq_model(
    your_model_id,  # For example: "bqml_tutorial.sample_model",
)

# 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 Logistic Regression predict method to predict results
# using your model.
# Find more information here in
# [BigFrames](https://cloud.google.com/python/docs/reference/bigframes/latest/bigframes.ml.linear_model.LogisticRegression#bigframes_ml_linear_model_LogisticRegression_predict)

predictions = model.predict(features)

# Call groupby method to group predicted_label by country.
# Call sum method to get the total_predicted_label 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    220
# Taiwan             8
# Canada             7
# India              2
# Japan              2
# Turkey             2
# Australia          1
# Brazil             1
# Germany            1
# Guyana             1
# Name: predicted_label, dtype: Int64

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

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

SQL

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

  1. במסוף Cloud de Confiance , עוברים לדף BigQuery.

    כניסה ל-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

# Select model you'll use for predicting.
# `read_gbq_model` loads model data from
# BigQuery, but you could also use the `model`
# object from the previous steps.
model = bpd.read_gbq_model(
    your_model_id,  # For example: "bqml_tutorial.sample_model",
)

# 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,
    }
)

predictions = model.predict(features)

# Call groupby method to group predicted_label by visitor.
# Call sum method to get the total_predicted_label 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    4
# 0376394056092189113    2
# 0456807427403774085    2
# 057693500927581077     2
# 112288330928895942     2
# 1280993661204347450    2
# 2105122376016897629    2
# 2158257269735455737    2
# 2969418676126258798    2
# 489038402765684003     2
# Name: predicted_label, dtype: Int64

הסרת המשאבים

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

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

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

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

  1. במסוף Cloud de Confiance , עוברים לדף BigQuery.

    כניסה ל-BigQuery

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

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

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

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

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

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

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

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

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

    כניסה לדף Manage resources

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

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