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

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

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

מטרות

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

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

עלויות

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

  • BigQuery
  • BigQuery ML

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

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

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

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

    מפעילים את BigQuery API.

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

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    להפעלת ה-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 לאחסון מודל ה-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)

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

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

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

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

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

SQL

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

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

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

    כניסה ל-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. בחלונית הימנית, לוחצים על כלי הניתוחים:

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

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

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

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

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

BigQuery DataFrames

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

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

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

import bigframes.pandas as bpd

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"] = bpd.Series("training", index=input_data.index,).case_when(
    [
        (((input_data["functional_weight"] % 10) == 8), "evaluation"),
        (((input_data["functional_weight"] % 10) == 9), "prediction"),
    ]
)
del input_data["functional_weight"]

יצירת מודל של עצים משופרים

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

SQL

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

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

    כניסה ל-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 דרך חלונית הסייר. השאילתה משתמשת בהצהרת CREATE MODEL כדי ליצור מודל, ולכן לא מוצגות תוצאות של השאילתה.

BigQuery DataFrames

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

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

from bigframes.ml import ensemble

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

# create and train the model
tree_model = ensemble.XGBClassifier(
    n_estimators=1,
    booster="gbtree",
    tree_method="hist",
    max_iterations=1,  # For a more accurate model, try 50 iterations.
    subsample=0.85,
)
tree_model.fit(X, y)

tree_model.to_gbq(
    your_model_id,  # For example: "your-project.bqml_tutorial.tree_model"
    replace=True,
)

הערכת המודל

SQL

כדי להעריך את המודל, פועלים לפי השלבים הבאים:

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

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

# Select model you'll use for predictions. `read_gbq_model` loads model
# data from BigQuery, but you could also use the `tree_model` object
# from the previous step.
tree_model = bpd.read_gbq_model(
    your_model_id,  # For example: "your-project.bqml_tutorial.tree_model"
)

# input_data is defined in an earlier step.
evaluation_data = input_data[input_data["dataframe"] == "evaluation"]
X = evaluation_data.drop(columns=["income_bracket", "dataframe"])
y = evaluation_data["income_bracket"]

# The score() method evaluates how the model performs compared to the
# actual data. Output DataFrame matches that of ML.EVALUATE().
score = tree_model.score(X, y)
score.peek()
# 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. במסוף Cloud de Confiance , עוברים לדף BigQuery.

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

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

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

predictions = tree_model.predict(prediction_data)
predictions.peek()
# 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 במסוףCloud de Confiance .

    לדף BigQuery

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

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

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

מחיקת פרויקט

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

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

    כניסה לדף Manage resources

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

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