ביצוע סיווג באמצעות מודל של עצים מחוזקים

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

במדריך הזה משתמשים במערך הנתונים bigquery-public-data.ml_datasets.census_adult_income. קבוצת נתונים זו מכילה את המידע הדמוגרפי ומידע על ההכנסה של תושבי ארה"ב מהשנים 2000 ו-2010.

מטרות

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

  • יצירת מודל משופר של עצי החלטה כדי לחזות את קבוצת ההכנסה של המשיבים במפקד האוכלוסין באמצעות ההצהרה CREATE MODEL.
  • הערכת המודל באמצעות הפונקציה ML.EVALUATE.
  • קבלת חיזויים מהמודל באמצעות הפונקציה ML.PREDICT.

עלויות

במדריך הזה משתמשים ברכיבים של Google Cloudשהשימוש בהם כרוך בתשלום, כולל:

  • BigQuery
  • BigQuery ML

למידע נוסף על העלויות של BigQuery, קראו את הדף תמחור ב-BigQuery.

כאן תוכלו לקרוא מידע נוסף על העלויות של BigQuery ML.

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

  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. ‫BigQuery מופעל באופן אוטומטי בפרויקטים חדשים. כדי להפעיל את BigQuery בפרויקט קיים, עוברים אל

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

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

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

    להפעלת ה-API

ההרשאות הנדרשות

  • כדי ליצור את קבוצת הנתונים, אתם צריכים את ההרשאה bigquery.datasets.create ב-IAM.

  • כדי ליצור את המודל, צריך את ההרשאות הבאות:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • כדי להריץ הסקה, צריך את ההרשאות הבאות:

    • bigquery.models.getData
    • bigquery.jobs.create

במאמר מבוא ל-IAM תוכלו לקרוא מידע נוסף על התפקידים וההרשאות של IAM ב-BigQuery.

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

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

הכנת הנתונים לדוגמה

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

  • גיל
  • סוג העבודה שבוצעה
  • מצב משפחתי
  • רמת השכלה
  • מקצוע
  • שעות עבודה בשבוע

העמודה education לא נכללת בנתוני האימון, כי העמודות education ו-education_num מבטאות את רמת ההשכלה של המשיב בפורמטים שונים.

כדי להפריד את הנתונים לקבוצות של אימון, הערכה וחיזוי, יוצרים עמודה חדשה של dataframe שנגזרת מהעמודה functional_weight. ‫80% מהנתונים משמשים לאימון המודל, ו-20% הנותרים משמשים להערכה ולחיזוי.

SQL

כדי להכין את הנתונים לדוגמה, יוצרים תצוגה שתכיל את נתוני האימון. התצוגה הזו משמשת את ההצהרה CREATE MODEL בהמשך המדריך.

מריצים את השאילתה שמכינה את הנתונים לדוגמה:

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

    כניסה ל-BigQuery

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

    CREATE OR REPLACE VIEW
      `bqml_tutorial.input_data` AS
    SELECT
      age,
      workclass,
      marital_status,
      education_num,
      occupation,
      hours_per_week,
      income_bracket,
      CASE
        WHEN MOD(functional_weight, 10) < 8 THEN 'training'
        WHEN MOD(functional_weight, 10) = 8 THEN 'evaluation'
        WHEN MOD(functional_weight, 10) = 9 THEN 'prediction'
      END AS dataframe
    FROM
      `bigquery-public-data.ml_datasets.census_adult_income`;
  3. בחלונית הימנית, לוחצים על Explorer:

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

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

  4. בחלונית Explorer, מחפשים את מערך הנתונים bqml_tutorial.

  5. לוחצים על מערך הנתונים ואז על סקירה כללית > טבלאות.

  6. לוחצים על התצוגה input_data כדי לפתוח את חלונית המידע. הסכימה של התצוגה מופיעה בכרטיסייה Schema.

BigQuery DataFrames

יוצרים DataFrame בשם input_data. בהמשך המדריך תשתמשו ב-input_data כדי לאמן את המודל, להעריך אותו ולבצע חיזויים.

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

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

import bigframes.pandas as bpd

# 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"

input_data = bpd.read_gbq(
    "bigquery-public-data.ml_datasets.census_adult_income",
    columns=(
        "age",
        "workclass",
        "marital_status",
        "education_num",
        "occupation",
        "hours_per_week",
        "income_bracket",
        "functional_weight",
    ),
)
input_data["dataframe"] = input_data["functional_weight"].case_when(
    [
        (((input_data["functional_weight"] % 10) == 8), "evaluation"),
        (((input_data["functional_weight"] % 10) == 9), "prediction"),
        (True, "training"),
    ]
)
del input_data["functional_weight"]

יצירת מודל משופר של עצי החלטה

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

SQL

כדי ליצור את המודל:

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

    כניסה ל-BigQuery

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

    CREATE MODEL `bqml_tutorial.tree_model`
    OPTIONS(MODEL_TYPE='BOOSTED_TREE_CLASSIFIER',
            BOOSTER_TYPE = 'GBTREE',
            NUM_PARALLEL_TREE = 1,
            MAX_ITERATIONS = 50,
            TREE_METHOD = 'HIST',
            EARLY_STOP = FALSE,
            SUBSAMPLE = 0.85,
            INPUT_LABEL_COLS = ['income_bracket'])
    AS SELECT * EXCEPT(dataframe)
    FROM `bqml_tutorial.input_data`
    WHERE dataframe = 'training';

    אחרי שהשאילתה מסתיימת, אפשר לגשת למודל tree_model דרך החלונית Explorer. מכיוון שהשאילתה משתמשת בהצהרת CREATE MODEL כדי ליצור מודל, לא מוצגות תוצאות שאילתה.

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"

# input_data is defined in an earlier step.
training_data = input_data[input_data["dataframe"] == "training"].drop(
    columns=["dataframe"]
)

# 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: "your-project.bqml_tutorial.tree_model"
    options={
        "model_type": "BOOSTED_TREE_CLASSIFIER",
        "booster_type": "GBTREE",
        "num_parallel_tree": 1,
        "max_iterations": 1,  # For a more accurate model, try 50 iterations.
        "tree_method": "HIST",
        "early_stop": False,
        "subsample": 0.85,
        "input_label_cols": ["income_bracket"],
    },
    training_data=training_data,
    replace=True,
)

הערכת המודל

SQL

כדי להעריך את המודל:

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

    כניסה ל-BigQuery

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

      SELECT
        *
      FROM
        ML.EVALUATE (MODEL `bqml_tutorial.tree_model`,
          (
          SELECT
            *
          FROM
            `bqml_tutorial.input_data`
          WHERE
            dataframe = 'evaluation'
          )
        );

    התוצאות אמורות להיראות כך:

    +---------------------+---------------------+---------------------+-------------------+---------------------+---------------------+
    | precision           | recall              | accuracy            | f1_score          | log_loss            | roc_auc             |
    +---------------------+---------------------+---------------------+-------------------+-------------------------------------------+
    | 0.67192429022082023 | 0.57880434782608692 | 0.83942963422194672 | 0.621897810218978 | 0.34405456040833338 | 0.88733566433566435 |
    +---------------------+---------------------+ --------------------+-------------------+---------------------+---------------------+
    

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"

# input_data is defined in an earlier step.
evaluation_data = input_data[input_data["dataframe"] == "evaluation"]

# 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
ml.evaluate(
    your_model_id,  # For example: "your-project.bqml_tutorial.tree_model"
    input_=evaluation_data,
)
# Output:
#    precision    recall  accuracy  f1_score  log_loss   roc_auc
# 0   0.671924  0.578804  0.839429  0.621897  0.344054  0.887335

מדדי ההערכה מצביעים על ביצועים טובים של המודל, במיוחד העובדה שציון roc_auc גדול מ-0.8.

למידע נוסף על מדדי ההערכה, ראו פלט.

שימוש במודל כדי לחזות סיווגים

SQL

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

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

    כניסה ל-BigQuery

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

      SELECT
        *
      FROM
        ML.PREDICT (MODEL `bqml_tutorial.tree_model`,
          (
          SELECT
            *
          FROM
            `bqml_tutorial.input_data`
          WHERE
            dataframe = 'prediction'
          )
        );

העמודות הראשונות של התוצאות אמורות להיראות כך:

  +---------------------------+--------------------------------------+-------------------------------------+
  | predicted_income_bracket  | predicted_income_bracket_probs.label | predicted_income_bracket_probs.prob |
  +---------------------------+--------------------------------------+-------------------------------------+
  |  <=50K                    |  >50K                                | 0.05183430016040802                 |
  +---------------------------+--------------------------------------+-------------------------------------+
  |                           |  <50K                                | 0.94816571474075317                 |
  +---------------------------+--------------------------------------+-------------------------------------+
  |  <=50K                    |  >50K                                | 0.00365859130397439                 |
  +---------------------------+--------------------------------------+-------------------------------------+
  |                           |  <50K                                | 0.99634140729904175                 |
  +---------------------------+--------------------------------------+-------------------------------------+
  |  <=50K                    |  >50K                                | 0.037775970995426178                |
  +---------------------------+--------------------------------------+-------------------------------------+
  |                           |  <50K                                | 0.96222406625747681                 |
  +---------------------------+--------------------------------------+-------------------------------------+
  

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"

# input_data is defined in an earlier step.
prediction_data = input_data[input_data["dataframe"] == "prediction"]

# 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
ml.predict(
    your_model_id,  # For example: "your-project.bqml_tutorial.tree_model"
    input_=prediction_data,
)
# Output:
# predicted_income_bracket   predicted_income_bracket_probs.label  predicted_income_bracket_probs.prob
#                   <=50K                                   >50K                   0.05183430016040802
#                                                           <50K                   0.94816571474075317
#                   <=50K                                   >50K                   0.00365859130397439
#                                                           <50K                   0.99634140729904175
#                   <=50K                                   >50K                   0.037775970995426178
#                                                           <50K                   0.96222406625747681

השדה predicted_income_bracket מכיל את הערך החזוי מהמודל. בעמודה predicted_income_bracket_probs.label מוצגות שתי התוויות שהמודל היה צריך לבחור ביניהן, ובעמודה predicted_income_bracket_probs.prob מוצגת ההסתברות שהתווית הנתונה היא הנכונה.

למידע נוסף על עמודות הפלט, ראו מודלים של סיווג.

הסרת המשאבים

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

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

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

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

  1. אם צריך, פותחים את הדף של BigQuery במסוףGoogle Cloud .

    כניסה לדף BigQuery

  2. בניווט, לוחצים על מערך הנתונים bqml_tutorial שיצרתם.

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

  4. בתיבת הדו-שיח Delete dataset, מאשרים את פקודת המחיקה על ידי הקלדת שם מערך הנתונים (bqml_tutorial) ולוחצים על Delete.

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

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

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

    כניסה לדף Manage resources

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

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