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

במדריך הזה תלמדו איך ליצור מודל פירוק לגורמים של מטריצה ולאמן אותו על נתוני סשנים של משתמשים ב-Google Analytics 360, שנמצאים בטבלה הציבורית GA360_test.ga_sessions_sample. לאחר מכן, אתם משתמשים במודל פירוק לגורמים של מטריצה כדי ליצור המלצות לתוכן למשתמשים באתר.

שימוש במידע עקיף על העדפות הלקוחות, כמו משך הסשן של המשתמש, לאימון המודל נקרא אימון באמצעות משוב משתמע. מודלים של פירוק לגורמים של מטריצה מאומנים באמצעות אלגוריתם Weighted-Alternating Least Squares כשמשתמשים במשוב משתמע כנתוני אימון.

מטרות

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

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

עלויות

במדריך הזה משתמשים ברכיבים של 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"
  }
}

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

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

כדי ליצור את טבלת נתוני האימון:

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

    כניסה ל-BigQuery

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

    CREATE OR REPLACE TABLE `bqml_tutorial.analytics_session_data`
    AS
    WITH
      visitor_page_content AS (
        SELECT
          fullVisitorID,
          (
            SELECT
              MAX(
                IF(
                  index = 10,
                  value,
                  NULL))
            FROM
              UNNEST(hits.customDimensions)
          ) AS latestContentId,
          (LEAD(hits.time, 1) OVER (PARTITION BY fullVisitorId ORDER BY hits.time ASC) - hits.time)
            AS session_duration
        FROM
          `cloud-training-demos.GA360_test.ga_sessions_sample`,
          UNNEST(hits) AS hits
        WHERE
          # only include hits on pages
          hits.type = 'PAGE'
        GROUP BY
          fullVisitorId,
          latestContentId,
          hits.time
      )
    # aggregate web stats
    SELECT
      fullVisitorID AS visitorId,
      latestContentId AS contentId,
      SUM(session_duration) AS session_duration
    FROM
      visitor_page_content
    WHERE
      latestContentId IS NOT NULL
    GROUP BY
      fullVisitorID,
      latestContentId
    HAVING
      session_duration > 0
    ORDER BY
      latestContentId;
  3. לצפות בקבוצת משנה של נתוני האימון. בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על Run:

    SELECT * FROM `bqml_tutorial.analytics_session_data` LIMIT 5;

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

    +---------------------+-----------+------------------+
    | visitorId           | contentId | session_duration |
    +---------------------+-----------+------------------+
    | 7337153711992174438 | 100074831 | 44652            |
    +---------------------+-----------+------------------+
    | 5190801220865459604 | 100170790 | 121420           |
    +---------------------+-----------+------------------+
    | 2293633612703952721 | 100510126 | 47744            |
    +---------------------+-----------+------------------+
    | 5874973374932455844 | 100510126 | 32109            |
    +---------------------+-----------+------------------+
    | 1173698801255170595 | 100676857 | 10512            |
    +---------------------+-----------+------------------+
    

יצירת המודל

יוצרים מודל של פירוק לגורמים של מטריצה ומאמנים אותו על הנתונים בטבלה analytics_session_data. המודל מאומן לחזות דירוג מהימנות לכל צמד של visitorId-contentId. דירוג רמת הסמך נוצר באמצעות מרכוז ושינוי קנה מידה לפי משך הסשן החציוני. רשומות שבהן משך הסשן ארוך יותר מפי 3.33 מהחציון מסוננות כחריגות.

ההצהרה הבאה ב-CREATE MODEL משתמשת בעמודות האלה כדי ליצור המלצות:

  • ‫visitorId – מזהה המבקר.
  • contentId – Content ID.
  • ‫rating – הדירוג המשתמע מ-0 עד 1 שמחושב לכל צמד של מבקר ותוכן, ממורכז ומותאם.
  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

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

    CREATE OR REPLACE MODEL `bqml_tutorial.mf_implicit`
      OPTIONS (
        MODEL_TYPE = 'matrix_factorization',
        FEEDBACK_TYPE = 'implicit',
        USER_COL = 'visitorId',
        ITEM_COL = 'contentId',
        RATING_COL = 'rating',
        L2_REG = 30,
        NUM_FACTORS = 15)
    AS
    SELECT
      visitorId,
      contentId,
      0.3 * (1 + (session_duration - 57937) / 57937) AS rating
    FROM `bqml_tutorial.analytics_session_data`
    WHERE 0.3 * (1 + (session_duration - 57937) / 57937) < 1;

    השאילתה מסתיימת תוך כ-10 דקות, ואז המודל mf_implicit מופיע בחלונית Explorer. מכיוון שהשאילתה משתמשת בהצהרת CREATE MODEL כדי ליצור מודל, לא מוצגות תוצאות שאילתה.

קבלת נתונים סטטיסטיים על האימונים

אפשר גם לראות את הנתונים הסטטיסטיים של אימון המודל במסוףGoogle Cloud .

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

כדי לראות את נתוני האימון של המודל:

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

    כניסה ל-BigQuery

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

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

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

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

  4. לוחצים על מערך הנתונים bqml_tutorial. אפשר גם להשתמש בתכונת החיפוש או במסננים כדי למצוא את מערך הנתונים.

  5. לוחצים על הכרטיסייה Models.

  6. לוחצים על המודל mf_implicit ואז על הכרטיסייה אימון.

  7. בקטע תצוגה, לוחצים על טבלה. התוצאות אמורות להיראות כך:

    +-----------+--------------------+--------------------+
    | Iteration | Training Data Loss | Duration (seconds) |
    +-----------+--------------------+--------------------+
    |  5        | 0.0027             | 47.27              |
    +-----------+--------------------+--------------------+
    |  4        | 0.0028             | 39.60              |
    +-----------+--------------------+--------------------+
    |  3        | 0.0032             | 55.57              |
    +-----------+--------------------+--------------------+
    |  ...      | ...                | ...                |
    +-----------+--------------------+--------------------+
    

    העמודה Training Data Loss מייצגת את מדד האובדן שמחושב אחרי אימון המודל. מכיוון שמדובר במודל פירוק לגורמים של מטריצה, בעמודה הזו מוצגת השגיאה הריבועית הממוצעת.

הערכת המודל

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

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

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

    כניסה ל-BigQuery

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

    SELECT
      *
    FROM
      ML.EVALUATE(MODEL `bqml_tutorial.mf_implicit`);

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

    +------------------------+-----------------------+---------------------------------------+---------------------+
    | mean_average_precision |  mean_squared_error   | normalized_discounted_cumulative_gain |    average_rank     |
    +------------------------+-----------------------+---------------------------------------+---------------------+
    |     0.4434341257478137 | 0.0013381759837648962 |                    0.9433280547112802 | 0.24031636088594222 |
    +------------------------+-----------------------+---------------------------------------+---------------------+
    

    למידע נוסף על הפלט של הפונקציה ML.EVALUATE, ראו פלט.

קבלת הדירוגים החזויים לקבוצת משנה של זוגות מבקרים-תוכן

משתמשים ב-ML.RECOMMEND כדי לקבל את הדירוג החזוי לכל פריט תוכן עבור חמישה מבקרים באתר.

כדי לקבל דירוגים חזויים, צריך לפעול לפי השלבים הבאים:

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

    כניסה ל-BigQuery

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

    SELECT
      *
    FROM
      ML.RECOMMEND(
        MODEL `bqml_tutorial.mf_implicit`,
        (
          SELECT
            visitorId
          FROM
            `bqml_tutorial.analytics_session_data`
          LIMIT 5
        ));

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

    +-------------------------------+---------------------+-----------+
    | predicted_rating_confidence   | visitorId           | contentId |
    +-------------------------------+---------------------+-----------+
    | 0.0033608418060270262         | 7337153711992174438 | 277237933 |
    +-------------------------------+---------------------+-----------+
    | 0.003602395397293956          | 7337153711992174438 | 158246147 |
    +-------------------------------+---------------------+--  -------+
    | 0.0053197670652785356         | 7337153711992174438 | 299389988 |
    +-------------------------------+---------------------+-----------+
    | ...                           | ...                 | ...       |
    +-------------------------------+---------------------+-----------+
    

יצירת המלצות

משתמשים בדירוגים החזויים כדי ליצור את חמשת Content ID המומלצים לכל מזהה מבקר.

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

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

    כניסה ל-BigQuery

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

    CREATE OR REPLACE TABLE `bqml_tutorial.recommend_content`
    AS
    SELECT
      *
    FROM
      ML.RECOMMEND(MODEL `bqml_tutorial.mf_implicit`);
  3. בוחרים את חמש התוצאות המובילות לכל מבקר. בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על Run:

    SELECT
      visitorId,
      ARRAY_AGG(
        STRUCT(contentId, predicted_rating_confidence)
        ORDER BY predicted_rating_confidence DESC
        LIMIT 5) AS rec
    FROM
      `bqml_tutorial.recommend_content`
    GROUP BY
      visitorId;

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

    +---------------------+-----------------+---------------------------------+
    | visitorId           | rec:contentId   | rec:predicted_rating_confidence |
    +---------------------+-----------------+-------------------------  ------+
    | 867526255058981688  | 299804319       | 0.88170525357178664             |
    |                     | 299935287       | 0.54699439944935124             |
    |                     | 299410466       | 0.53424780863188659             |
    |                     | 299826767       | 0.46949603950374219             |
    |                     | 299809748       | 0.3379991197434149              |
    +---------------------+-----------------+---------------------------------+
    | 2434264018925667659 | 299824032       | 1.3903516407308065              |
    |                     | 299410466       | 0.9921995618196483              |
    |                     | 299903877       | 0.92333625294129218             |
    |                     | 299816215       | 0.91856701667757279             |
    |                     | 299852437       | 0.86973661454890561             |
    +---------------------+-----------------+---------------------------------+
    | ...                 | ...             | ...                             |
    +---------------------+-----------------+---------------------------------+
    

הסרת המשאבים

כדי להימנע מחיובים בחשבון 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.

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