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

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

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

במדריך הזה נעשה שימוש בנתונים ממערך הנתונים הציבורי bigquery-public-data.epa_historical_air_quality. קבוצת הנתונים הזו מכילה מידע על חומר חלקיקי (PM2.5), טמפרטורה ומהירות רוח שנאספו מדי יום מכמה ערים בארה"ב.

מטרות

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

עלויות

במדריך הזה נעשה שימוש ברכיבים של 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.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. במסוף 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.epa_historical_air_quality כדי לספק נתוני מזג אוויר יומיים. יוצרים גם את העמודות הבאות לשימוש כמשתני קלט למודל:

  • date: התאריך של התצפית
  • pm25 הערך הממוצע של PM2.5 בכל יום
  • wind_speed: מהירות הרוח הממוצעת בכל יום
  • temperature: הטמפרטורה הכי גבוהה בכל יום

בשאלת ה-GoogleSQL הבאה, הסעיף FROM bigquery-public-data.epa_historical_air_quality.*_daily_summary מציין שאתם מריצים שאילתה על הטבלאות *_daily_summary במערך הנתונים epa_historical_air_quality. הטבלאות האלה הן טבלאות מחולקות למחיצות (Partitions).

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

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

    כניסה ל-BigQuery

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

    CREATE TABLE `bqml_tutorial.seattle_air_quality_daily`
    AS
    WITH
      pm25_daily AS (
        SELECT
          avg(arithmetic_mean) AS pm25, date_local AS date
        FROM
          `bigquery-public-data.epa_historical_air_quality.pm25_nonfrm_daily_summary`
        WHERE
          city_name = 'Seattle'
          AND parameter_name = 'Acceptable PM2.5 AQI & Speciation Mass'
        GROUP BY date_local
      ),
      wind_speed_daily AS (
        SELECT
          avg(arithmetic_mean) AS wind_speed, date_local AS date
        FROM
          `bigquery-public-data.epa_historical_air_quality.wind_daily_summary`
        WHERE
          city_name = 'Seattle' AND parameter_name = 'Wind Speed - Resultant'
        GROUP BY date_local
      ),
      temperature_daily AS (
        SELECT
          avg(first_max_value) AS temperature, date_local AS date
        FROM
          `bigquery-public-data.epa_historical_air_quality.temperature_daily_summary`
        WHERE
          city_name = 'Seattle' AND parameter_name = 'Outdoor Temperature'
        GROUP BY date_local
      )
    SELECT
      pm25_daily.date AS date, pm25, wind_speed, temperature
    FROM pm25_daily
    JOIN wind_speed_daily USING (date)
    JOIN temperature_daily USING (date);

המחשת נתוני הקלט

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

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

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

    כניסה ל-BigQuery

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

    SELECT
      *
    FROM
      `bqml_tutorial.seattle_air_quality_daily`;
  3. כשהשאילתה מסתיימת, לוחצים על Open in (פתיחה ב) > Data Studio. ‫Data Studio ייפתח בכרטיסייה חדשה. מבצעים את השלבים הבאים בכרטיסייה החדשה.

  4. ב-Data Studio, לוחצים על הוספה > תרשים של סדרת זמנים.

  5. בחלונית תרשים, בוחרים בכרטיסייה הגדרה.

  6. בקטע Metric (מדד), מוסיפים את השדות pm25,‏ temperature ו-wind_speed, ומסירים את מדד ברירת המחדל Record Count (מספר הרשומות). התרשים שיתקבל ייראה כך:

    תרשים שמציג את מזג האוויר לאורך זמן.

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

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

יוצרים מודל של סדרת זמנים כדי לחזות את ערכי חומר חלקיקי, שמיוצגים בעמודה pm25, באמצעות הערכים בעמודות pm25, wind_speed ו-temperature כמשתני קלט. מאמנים את המודל על נתוני איכות האוויר מהטבלה bqml_tutorial.seattle_air_quality_daily, ובוחרים את הנתונים שנאספו בין 1 בינואר 2012 לבין 31 בדצמבר 2020.

בשאילתה הבאה, פסוקית OPTIONS(model_type='ARIMA_PLUS_XREG', time_series_timestamp_col='date', ...) מציינת שיוצרים מודל ARIMA עם רגרסורים חיצוניים. האפשרות auto_arima של ההצהרה CREATE MODEL מוגדרת כברירת מחדל ל-TRUE, כך שהאלגוריתם auto.ARIMA מכוונן אוטומטית את ההיפר-פרמטרים במודל. האלגוריתם מתאים עשרות מודלים פוטנציאליים ובוחר את המודל הטוב ביותר, שהוא המודל עם קריטריון המידע של אקייק (AIC) הנמוך ביותר. אפשרות data_frequency של הצהרות CREATE MODEL מוגדרת כברירת מחדל ל-AUTO_FREQUENCY, כך שתהליך האימון מסיק אוטומטית את תדירות הנתונים של סדרת הזמן של הקלט.

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

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

    כניסה ל-BigQuery

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

    CREATE OR REPLACE
      MODEL
        `bqml_tutorial.seattle_pm25_xreg_model`
      OPTIONS (
        MODEL_TYPE = 'ARIMA_PLUS_XREG',
        time_series_timestamp_col = 'date',  # Identifies the column that contains time points
        time_series_data_col = 'pm25')       # Identifies the column to forecast
    AS
    SELECT
      date,                                  # The column that contains time points
      pm25,                                  # The column to forecast
      temperature,                           # Temperature input to use in forecasting
      wind_speed                             # Wind speed input to use in forecasting
    FROM
      `bqml_tutorial.seattle_air_quality_daily`
    WHERE
      date
      BETWEEN DATE('2012-01-01')
      AND DATE('2020-12-31');

    השאילתה נמשכת כ-20 שניות, ואחריה אפשר לגשת אל מודל seattle_pm25_xreg_model. מכיוון שהשאילתה משתמשת בהצהרה CREATE MODEL כדי ליצור מודל, לא מוצגות תוצאות של השאילתה.

הערכת המודלים המועמדים

מעריכים את מודלים של סדרות עיתיות באמצעות הפונקציה ML.ARIMA_EVALUATE. הפונקציה ML.ARIMA_EVALUATE מציגה את מדדי ההערכה של כל המודלים המועמדים שהוערכו במהלך תהליך ההתאמה האוטומטית של היפרפרמטרים.

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

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

    כניסה ל-BigQuery

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

    SELECT
     *
    FROM
     ML.ARIMA_EVALUATE(MODEL `bqml_tutorial.seattle_pm25_xreg_model`);

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

    מדדי הערכה למודל של סדרת זמנים.

    עמודות הפלט non_seasonal_p, non_seasonal_d, non_seasonal_q ו-has_drift מגדירות מודל ARIMA בצינור העיבוד לאימון. עמודות הפלט log_likelihood, AIC ו-variance רלוונטיות לתהליך ההתאמה של מודל ARIMA.

    האלגוריתם auto.ARIMA משתמש במבחן KPSS כדי לקבוע את הערך הטוב ביותר ל-non_seasonal_d, שבמקרה הזה הוא 1. כאשר non_seasonal_d הוא 1, אלגוריתם auto.ARIMA מאמן 42 מודלים שונים של ARIMA במקביל. בדוגמה הזו, כל 42 המודלים האפשריים תקפים, ולכן הפלט מכיל 42 שורות, אחת לכל מודל ARIMA אפשרי. במקרים שבהם חלק מהמודלים לא תקפים, הם לא נכללים בפלט. המודלים האלה מוצגים בסדר עולה לפי AIC. למודל בשורה הראשונה יש את ערך ה-AIC הנמוך ביותר, והוא נחשב למודל הטוב ביותר. המודל הכי טוב נשמר כמודל הסופי ומשמש כשמפעילים פונקציות כמו ML.FORECAST במודל.

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

    העמודות has_holiday_effect, has_spikes_and_dips ו-has_step_changes מספקות מידע על נתוני סדרת הזמנים של הקלט, והן לא קשורות למודל ARIMA. העמודות האלה מוחזרות כי הערך של האפשרות decompose_time_series בהצהרה CREATE MODEL הוא TRUE. הערכים בעמודות האלה זהים בכל שורות הפלט.

    בעמודה error_message מוצגות שגיאות שהתרחשו במהלך תהליך ההתאמה.auto.ARIMA סיבה אפשרית לשגיאות היא שהעמודות שנבחרו non_seasonal_p, non_seasonal_d, non_seasonal_q ו-has_drift לא מאפשרות לייצב את סדרת הזמן. כדי לאחזר את הודעת השגיאה של כל המודלים המועמדים, מגדירים את האפשרות show_all_candidate_models לערך TRUE כשיוצרים את המודל.

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

בדיקת המקדמים של המודל

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

כדי לאחזר את המקדמים של המודל:

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

    כניסה ל-BigQuery

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

    SELECT
     *
    FROM
     ML.ARIMA_COEFFICIENTS(MODEL `bqml_tutorial.seattle_pm25_xreg_model`);

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

    מקדמים למודל של סדרת הזמנים.

    בעמודת הפלט ar_coefficients מוצגים מקדמי המודל של החלק האוטוגרסיבי (AR) של מודל ARIMA. באופן דומה, בעמודת הפלט ma_coefficients מוצגים מקדמי המודל של החלק של הממוצע הנע (MA) במודל ARIMA. שתי העמודות האלה מכילות ערכי מערך, והאורך שלהן שווה ל-non_seasonal_p ול-non_seasonal_q, בהתאמה. אפשר לראות בפלט של הפונקציה ML.ARIMA_EVALUATE שהמודל הכי טוב הוא בעל ערך non_seasonal_p של 0 וערך non_seasonal_q של 5. לכן, בפלט ML.ARIMA_COEFFICIENTS, הערך של ar_coefficients הוא מערך ריק והערך של ma_coefficients הוא מערך עם 5 רכיבים. הערך של intercept_or_drift הוא האיבר הקבוע במודל ARIMA.

    בעמודות הפלט processed_input, weight ו-category_weights מוצגים המשקלים של כל תכונה והחיתוך במודל הרגרסיה הלינארית. אם התכונה היא תכונה מספרית, המשקל שלה מופיע בעמודה weight. אם התכונה היא תכונה קטגורית, הערך category_weights הוא מערך של ערכי struct, שכל אחד מהם מכיל את השם והמשקל של קטגוריה נתונה.

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

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

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

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

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

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

    כניסה ל-BigQuery

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

    SELECT
      *
    FROM
      ML.FORECAST(
        MODEL `bqml_tutorial.seattle_pm25_xreg_model`,
        STRUCT(30 AS horizon, 0.8 AS confidence_level),
        (
          SELECT
            date,
            temperature,
            wind_speed
          FROM
            `bqml_tutorial.seattle_air_quality_daily`
          WHERE
            date > DATE('2020-12-31')
        ));

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

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

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

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

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

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

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

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

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

    כניסה ל-BigQuery

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

    SELECT
      *
    FROM
      ML.EVALUATE(
        MODEL `bqml_tutorial.seattle_pm25_xreg_model`,
        (
          SELECT
            date,
            pm25,
            temperature,
            wind_speed
          FROM
            `bqml_tutorial.seattle_air_quality_daily`
          WHERE
            date > DATE('2020-12-31')
        ),
        STRUCT(
          TRUE AS perform_aggregation,
          30 AS horizon));

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

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

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

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

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

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

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

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

    כניסה ל-BigQuery

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

    SELECT
      *
    FROM
      ML.EXPLAIN_FORECAST(
        MODEL `bqml_tutorial.seattle_pm25_xreg_model`,
        STRUCT(30 AS horizon, 0.8 AS confidence_level),
        (
          SELECT
            date,
            temperature,
            wind_speed
          FROM
            `bqml_tutorial.seattle_air_quality_daily`
          WHERE
            date > DATE('2020-12-31')
        ));

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

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

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

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

הסרת המשאבים

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

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