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

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

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

במדריך הזה נעשה שימוש בנתונים מהטבלאות הציבוריות bigquery-public-data.iowa_liquor_sales.sales ו-bigquery-public-data.covid19_weathersource_com.postal_code_day_history. הטבלה bigquery-public-data.iowa_liquor_sales.sales מכילה נתוני מכירות של משקאות חריפים שנאספו מכמה ערים במדינת איווה. בטבלה bigquery-public-data.covid19_weathersource_com.postal_code_day_history מופיעים נתוני מזג אוויר היסטוריים, כמו טמפרטורה ולחות, מכל העולם.

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

מטרות

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

עלויות

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

  • BigQuery
  • BigQuery ML

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

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

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

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. 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

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

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

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

  6. ‫BigQuery מופעל באופן אוטומטי בפרויקטים חדשים. כדי להפעיל את BigQuery בפרויקט קיים, עוברים אל

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

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

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

    להפעלת ה-API

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

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

המסוף

  1. במסוף Google Cloud , עוברים לדף 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-public-data.iowa_liquor_sales.sales ו-bigquery-public-data.covid19_weathersource_com.postal_code_day_history כדי לנתח איך מזג האוויר משפיע על הסוג והמספר של הפריטים שהוזמנו על ידי חנויות משקאות חריפים. יוצרים גם את העמודות הנוספות הבאות שאפשר להשתמש בהן כמשתני קלט למודל:

  • date: תאריך ההזמנה
  • store_number: המספר הייחודי של החנות שביצעה את ההזמנה
  • item_number: המספר הייחודי של הפריט שהוזמן
  • bottles_sold: מספר הבקבוקים שהוזמנו מהפריט המשויך
  • temperature: הטמפרטורה הממוצעת במיקום החנות בתאריך ההזמנה
  • humidity: הלחות הממוצעת במיקום החנות בתאריך ההזמנה

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

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

    כניסה ל-BigQuery

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

    CREATE OR REPLACE TABLE
      `bqml_tutorial.iowa_liquor_sales_with_weather` AS
    WITH
      sales AS (
        SELECT
          DATE,
          store_number,
          item_number,
          bottles_sold,
          SAFE_CAST(SAFE_CAST(zip_code AS FLOAT64) AS INT64) AS zip_code
        FROM
          `bigquery-public-data.iowa_liquor_sales.sales` AS sales
        WHERE
          SAFE_CAST(zip_code AS FLOAT64) IS NOT NULL
      ),
      aggregated_sales AS (
        SELECT
          DATE,
          store_number,
          item_number,
          ANY_VALUE(zip_code) AS zip_code,
          SUM(bottles_sold) AS bottles_sold,
        FROM
          sales
        GROUP BY
          DATE,
          store_number,
          item_number
      ),
      weather AS (
        SELECT
          DATE,
          SAFE_CAST(postal_code AS INT64) AS zip_code,
          avg_temperature_air_2m_f AS temperature,
          avg_humidity_specific_2m_gpkg AS humidity,
        FROM
          `bigquery-public-data.covid19_weathersource_com.postal_code_day_history`
        WHERE
          country = 'US' AND
          SAFE_CAST(postal_code AS INT64) IS NOT NULL
      )
    SELECT
      aggregated_sales.date,
      aggregated_sales.store_number,
      aggregated_sales.item_number,
      aggregated_sales.bottles_sold,
      weather.temperature AS temperature,
      weather.humidity AS humidity
    FROM
      aggregated_sales
      LEFT JOIN weather ON aggregated_sales.zip_code=weather.zip_code
      AND aggregated_sales.DATE=weather.DATE;

יצירת מודל של סדרת זמנים

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

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

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

    כניסה ל-BigQuery

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

    CREATE
    OR REPLACE MODEL `bqml_tutorial.multi_time_series_arimax_model`
    OPTIONS(
      model_type = 'ARIMA_PLUS_XREG',
      time_series_id_col = ['store_number', 'item_number'],
      time_series_data_col = 'bottles_sold',
      time_series_timestamp_col = 'date'
    )
    AS SELECT
      *
    FROM
      `bqml_tutorial.iowa_liquor_sales_with_weather`
    WHERE
      DATE < DATE('2022-09-01');

    השאילתה תימשך כ-38 דקות, ולאחר מכן תוכלו לגשת למודל multi_time_series_arimax_model. מכיוון שהשאילתה משתמשת בהצהרת CREATE MODEL כדי ליצור מודל, לא מוצגות תוצאות של השאילתה.

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

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

בשאילתת GoogleSQL הבאה, סעיף STRUCT(5 AS horizon, 0.8 AS confidence_level) מציין שהשאילתה חוזה 5 נקודות זמן עתידיות, ומפיקה מרווח ודאות ברמת סמך של 80%.

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

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

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

    כניסה ל-BigQuery

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

    SELECT
      *
    FROM
      ML.FORECAST (
        model `bqml_tutorial.multi_time_series_arimax_model`,
        STRUCT (5 AS horizon, 0.8 AS confidence_level),
        (
          SELECT
            * EXCEPT (bottles_sold)
          FROM
            `bqml_tutorial.iowa_liquor_sales_with_weather`
          WHERE
            DATE>=DATE('2022-09-01')
        )
      );

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

    נתונים צפויים לגבי מספר הבקבוקים שנמכרו.

    השורות של הפלט מסודרות לפי הערך של store_number, אחר כך לפי הערך של item_ID, ואז בסדר כרונולוגי לפי הערך בעמודה forecast_timestamp. בתחזית של סדרת זמן, מרווח החיזוי, שמיוצג על ידי הערכים בעמודות prediction_interval_lower_bound ו-prediction_interval_upper_bound, חשוב לא פחות מהערך בעמודה forecast_value. הערך של forecast_value הוא נקודת האמצע של מרווח החיזוי. מרווח החיזוי תלוי בערכים של העמודות standard_error ו-confidence_level.

    מידע נוסף על עמודות הפלט זמין במאמר ML.FORECAST.

הסבר על תוצאות התחזית

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

בדומה לפונקציה ML.FORECAST, הפונקציה ML.EXPLAIN_FORECAST משתמשת בסעיף STRUCT(5 AS horizon, 0.8 AS confidence_level) כדי לציין שהשאילתה חוזה 30 נקודות זמן עתידיות ומפיקה רווח חיזוי עם רמת סמך של 80%.

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

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

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

    כניסה ל-BigQuery

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

    SELECT
      *
    FROM
      ML.EXPLAIN_FORECAST (
        model `bqml_tutorial.multi_time_series_arimax_model`,
        STRUCT (5 AS horizon, 0.8 AS confidence_level),
        (
          SELECT
            * EXCEPT (bottles_sold)
          FROM
            `bqml_tutorial.iowa_liquor_sales_with_weather`
          WHERE
            DATE >= DATE('2022-09-01')
        )
      );

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

    תשע העמודות הראשונות של הפלט של נתוני התחזית וההסברים לתחזית. עמודות הפלט העשירית עד השבע-עשרה של נתוני התחזית וההסברים לתחזית. שש עמודות הפלט האחרונות של נתוני התחזית והסברים על התחזית.

    שורות הפלט מסודרות בסדר כרונולוגי לפי ערך העמודה time_series_timestamp.

    מידע נוסף על עמודות הפלט זמין במאמר ML.EXPLAIN_FORECAST.

הערכת הדיוק של התחזיות

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

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

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

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

    כניסה ל-BigQuery

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

    SELECT
      *
    FROM
      ML.EVALUATE (
        model `bqml_tutorial.multi_time_series_arimax_model`,
        (
          SELECT
            *
          FROM
           `bqml_tutorial.iowa_liquor_sales_with_weather`
          WHERE
            DATE >= DATE('2022-09-01')
        )
      );

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

    מדדי הערכה של המודל.

    מידע נוסף על עמודות הפלט זמין במאמר ML.EVALUATE.

שימוש במודל כדי לזהות אנומליות

כדי לזהות אנומליות בנתוני האימון, משתמשים בפונקציה ML.DETECT_ANOMALIES.

בשילתא הבאה, פסוקית STRUCT(0.95 AS anomaly_prob_threshold) גורמת לפונקציה ML.DETECT_ANOMALIES לזהות נקודות נתונים אנומליות ברמת סמך של 95%.

כדי לזהות אנומליות בנתוני האימון:

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

    כניסה ל-BigQuery

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

    SELECT
      *
    FROM
      ML.DETECT_ANOMALIES (
        model `bqml_tutorial.multi_time_series_arimax_model`,
        STRUCT (0.95 AS anomaly_prob_threshold)
      );

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

    מידע על זיהוי אנומליות בנתוני האימון.

    בעמודה anomaly_probability בתוצאות מופיעה הסבירות לכך שערך נתון בעמודה bottles_sold הוא אנומליה.

    מידע נוסף על עמודות הפלט זמין במאמר ML.DETECT_ANOMALIES.

זיהוי חריגות בנתונים חדשים

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

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

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

    כניסה ל-BigQuery

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

    SELECT
      *
    FROM
      ML.DETECT_ANOMALIES (
        model `bqml_tutorial.multi_time_series_arimax_model`,
        STRUCT (0.95 AS anomaly_prob_threshold),
        (
          SELECT
            *
          FROM
            `bqml_tutorial.iowa_liquor_sales_with_weather`
          WHERE
            DATE >= DATE('2022-09-01')
        )
      );

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

    מידע על זיהוי אנומליות בנתונים חדשים.

הסרת המשאבים

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

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

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

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

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

    לדף BigQuery

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

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

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

מחיקת פרויקט

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

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

    כניסה לדף Manage resources

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

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