הגבלת ערכים חזויים למודל פעולות על ציר הזמן מסוג ARIMA_PLUS

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

הנתונים של new_york.citibike_trips משמשים לאימון המודלים במדריך הזה. מערך הנתונים הזה מכיל מידע על נסיעות ב-Citi Bike בניו יורק.

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

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

  • כדי ליצור את מערך הנתונים, אתם צריכים את ההרשאה 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.

מטרות

במדריך הזה תשתמשו ב:

  • ההצהרה CREATE MODEL לצורך יצירת מודל של סדרת זמנים.
  • הפונקציה ML.FORECAST: לחיזוי של סך הביקורים היומיים.

עלויות

במדריך הזה נעשה שימוש ברכיבים של 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. Enable the BigQuery API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

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

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

  7. Enable the BigQuery API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the 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 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)

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

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

SQL

בשאילתה הבאה, הפסוקית FROM bigquery-public-data.new_york.citibike_trips מציינת שמתבצעת שליחת שאילתה על הטבלה citibike_trips במערך הנתונים new_york.

בהצהרה SELECT, השאילתה משתמשת בפונקציה EXTRACT כדי לחלץ את פרטי התאריך מהעמודה starttime. השאילתה משתמשת בסעיף COUNT(*) כדי לקבל את המספר הכולל של הנסיעות ב-Citi Bike ביום.

#standardSQL
SELECT
  EXTRACT(DATE from starttime) AS date,
  COUNT(*) AS num_trips
FROM
`bigquery-public-data`.new_york.citibike_trips
GROUP BY date

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

  1. ב Google Cloud מסוף, לוחצים על הלחצן Compose new query.

  2. מזינים את שאילתת GoogleSQL הבאה בעורך השאילתות.

    #standardSQL
    SELECT
     EXTRACT(DATE from starttime) AS date,
     COUNT(*) AS num_trips
    FROM
     `bigquery-public-data`.new_york.citibike_trips
    GROUP BY date
  3. לוחצים על Run. תוצאות השאילתה דומות לתוצאות הבאות.

    פלט השאילתה.

  4. משתמשים במסוף Google Cloud כדי ליצור תרשים של נתוני סדרת הזמנים. בחלונית Query results, לוחצים על הכרטיסייה Visualization. בחלונית הגדרות התצוגה החזותית, בוחרים באפשרות עמודות בתפריט סוג התצוגה החזותית:

    Result_visualization.

BigQuery DataFrames

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

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

בדוגמה הבאה, bigquery-public-data.new_york.citibike_trips מציין שמתבצעת שאילתה בטבלה citibike_trips במערך הנתונים new_york.

import bigframes.pandas as bpd

df = bpd.read_gbq("bigquery-public-data.new_york.citibike_trips")

features = bpd.DataFrame(
    {
        "num_trips": df.starttime,
        "date": df["starttime"].dt.date,
    }
)
num_trips = features.groupby(["date"]).count()

num_trips.plot.line()

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

יצירת מודל של סדרת זמן

יצירת מודל של סדרת זמנים באמצעות נתוני הנסיעות של NYC Citi Bike.

השאילתה הבאה ב-GoogleSQL יוצרת מודל שמבצע תחזית של סך הנסיעות היומיות באופניים. ההצהרה CREATE MODEL יוצרת ומאמנת מודל בשם bqml_tutorial.nyc_citibike_arima_model.

#standardSQL
CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model
  OPTIONS (
    model_type = 'ARIMA_PLUS',
    time_series_timestamp_col = 'date',
    time_series_data_col = 'num_trips',
    time_series_id_col = 'start_station_id')
AS
SELECT
  EXTRACT(DATE FROM starttime) AS date,
  COUNT(*) AS num_trips,
  start_station_id
FROM
  `bigquery-public-data`.new_york.citibike_trips
WHERE starttime > '2014-07-11' AND starttime < '2015-02-11'
GROUP BY date, start_station_id;

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

מריצים את שאילתת CREATE MODEL כדי ליצור ולאמן את המודל:

  1. ב Google Cloud מסוף, לוחצים על הלחצן Compose new query.

  2. מזינים את שאילתת GoogleSQL הבאה בעורך השאילתות.

    #standardSQL
    CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model
    OPTIONS (
      model_type = 'ARIMA_PLUS',
      time_series_timestamp_col = 'date',
      time_series_data_col = 'num_trips',
      time_series_id_col = 'start_station_id')
    AS
    SELECT
    EXTRACT(DATE FROM starttime) AS date,
    COUNT(*) AS num_trips,
    start_station_id
    FROM
    `bigquery-public-data`.new_york.citibike_trips
    WHERE starttime > '2014-07-11' AND starttime < '2015-02-11'
    GROUP BY date, start_station_id;
  3. לוחצים על Run.

    השאילתה נמשכת כ-80 שניות, ולאחר מכן אפשר לגשת למודל (nyc_citibike_arima_model). מכיוון שהשאילתה משתמשת בהצהרה CREATE MODEL כדי ליצור מודל, אין תוצאות לשאילתה.

חיזוי של סדרת הזמן והצגת התוצאות באופן חזותי

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

לשם כך, בצע את הצעדים הבאים:

  1. ב Google Cloud מסוף, לוחצים על הלחצן Compose new query.

  2. מזינים את שאילתת GoogleSQL הבאה בעורך השאילתות.

    #standardSQL
    SELECT
    forecast_timestamp AS forecast_timestamp,
    start_station_id AS start_station_id,
    history_value AS history_value,
    forecast_value AS forecast_value
    FROM
    (
      (
         SELECT
         DATE(forecast_timestamp) AS forecast_timestamp,
         NULL AS history_value,
         forecast_value AS forecast_value,
         start_station_id AS start_station_id,
         FROM
         ML.FORECAST(
            MODEL bqml_tutorial.`nyc_citibike_arima_model`,
            STRUCT(
               365 AS horizon,
               0.9 AS confidence_level))
      )
      UNION ALL
      (
         SELECT
         DATE(date_name) AS forecast_timestamp,
         num_trips AS history_value,
         NULL AS forecast_value,
         start_station_id AS start_station_id,
         FROM
         (
            SELECT
               EXTRACT(DATE FROM starttime) AS date_name,
               COUNT(*) AS num_trips,
               start_station_id AS start_station_id
            FROM
               `bigquery-public-data`.new_york.citibike_trips
            WHERE
               starttime > '2014-07-11'
               AND starttime < '2015-02-11'
            GROUP BY
               date_name, start_station_id
         )
      )
    )
    WHERE start_station_id = 79
    ORDER BY
    forecast_timestamp, start_station_id
  3. לוחצים על Run. תוצאות השאילתה דומות לתוצאות הבאות:

    BQUI_chart.

  4. משתמשים במסוף Google Cloud כדי ליצור תרשים של נתוני סדרת הזמנים. בחלונית Query results, לוחצים על הכרטיסייה Visualization:

    Result_visualization.

מהתרשים אפשר לראות שהערכים החזויים של המספר הכולל היומי של נסיעות Citi Bike שבהן start_station_id=79 הם מספרים שליליים, וזה לא שימושי. שימוש במודל עם מגבלות משפר את הנתונים החזויים.

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

יצירת מודל של סדרת זמן עם מגבלות, באמצעות נתוני הנסיעות של NYC Citi Bike.

השאילתה הבאה ב-GoogleSQL יוצרת מודל שמבצע תחזית של סך הנסיעות היומיות באופניים. ההצהרה CREATE MODEL יוצרת ומאמנת מודל בשם bqml_tutorial.nyc_citibike_arima_model_with_limits. ההבדל העיקרי בין המודל הזה לבין המודל שיצרתם קודם הוא האפשרות forecast_limit_lower_bound=0 שנוספה. האפשרות הזו גורמת למודל לחזות רק ערכים שגדולים מ-0, על סמך הערכים בעמודה שצוינה בארגומנט time_series_data_col, במקרה הזה num_trips.

#standardSQL
CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model
   OPTIONS (
      model_type = 'ARIMA_PLUS',
      time_series_timestamp_col = 'date',
      time_series_data_col = 'num_trips',
      time_series_id_col = 'start_station_id',
      forecast_limit_lower_bound = 0)
   AS
   SELECT
   EXTRACT(DATE FROM starttime) AS date,
   COUNT(*) AS num_trips,
   start_station_id
   FROM
   `bigquery-public-data`.new_york.citibike_trips
   WHERE starttime > '2014-07-11' AND starttime < '2015-02-11'
   GROUP BY date, start_station_id;

מריצים את שאילתת CREATE MODEL כדי ליצור ולאמן את המודל:

  1. ב Google Cloud מסוף, לוחצים על הלחצן Compose new query.

  2. מזינים את שאילתת GoogleSQL הבאה בעורך השאילתות.

    #standardSQL
    CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model
    OPTIONS (
      model_type = 'ARIMA_PLUS',
      time_series_timestamp_col = 'date',
      time_series_data_col = 'num_trips',
      time_series_id_col = 'start_station_id',
      forecast_limit_lower_bound = 0)
    AS
    SELECT
    EXTRACT(DATE FROM starttime) AS date,
    COUNT(*) AS num_trips,
    start_station_id
    FROM
    `bigquery-public-data`.new_york.citibike_trips
    WHERE starttime > '2014-07-11' AND starttime < '2015-02-11'
    GROUP BY date, start_station_id;
  3. לוחצים על Run.

    השלמת השאילתה נמשכת כ-100 שניות, ואחריה אפשר לגשת למודל (nyc_citibike_arima_model_with_limits). מכיוון שהשאילתה משתמשת בהצהרת CREATE MODEL כדי ליצור מודל, אין תוצאות לשאילתה.

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

  1. ב Google Cloud מסוף, לוחצים על הלחצן Compose new query.

  2. מזינים את שאילתת GoogleSQL הבאה בעורך השאילתות.

    #standardSQL
    SELECT
    forecast_timestamp AS forecast_timestamp,
    start_station_id AS start_station_id,
    history_value AS history_value,
    forecast_value AS forecast_value
    FROM
    (
      (
         SELECT
         DATE(forecast_timestamp) AS forecast_timestamp,
         NULL AS history_value,
         forecast_value AS forecast_value,
         start_station_id AS start_station_id,
         FROM
         ML.FORECAST(
            MODEL bqml_tutorial.`nyc_citibike_arima_model`,
            STRUCT(
               365 AS horizon,
               0.9 AS confidence_level))
      )
      UNION ALL
      (
         SELECT
         DATE(date_name) AS forecast_timestamp,
         num_trips AS history_value,
         NULL AS forecast_value,
         start_station_id AS start_station_id,
         FROM
         (
            SELECT
               EXTRACT(DATE FROM starttime) AS date_name,
               COUNT(*) AS num_trips,
               start_station_id AS start_station_id
            FROM
               `bigquery-public-data`.new_york.citibike_trips
            WHERE
               starttime > '2014-07-11'
               AND starttime < '2015-02-11'
            GROUP BY
               date_name, start_station_id
         )
      )
    )
    WHERE start_station_id = 79
    ORDER BY forecast_timestamp, start_station_id
  3. לוחצים על Run.

    BQUI_chart.

  4. משתמשים במסוף Google Cloud כדי ליצור תרשים של נתוני סדרת הזמנים. בחלונית Query results, לוחצים על הכרטיסייה Visualization:

    Result_visualization.

מודל ARIMA PLUS מזהה שהמספר הכולל היומי של נסיעות Citi Bike, שבו start_station_id=79, נמצא בירידה. ערכי התחזית העתידיים יתבססו על המגמה הזו, וככל שהתחזית תהיה רחוקה יותר בעתיד, המספרים יהיו קטנים יותר. בתרשים אפשר לראות שהערכים החזויים של המספר הכולל היומי של נסיעות Citi Bike הם start_station_id=79 מספרים חיוביים, וזה יותר שימושי. המודל עם המגבלות מזהה שהמספר הכולל היומי של נסיעות Citi Bike שבהן start_station_id=79 יורד, אבל הוא עדיין מספק ערכי תחזית משמעותיים.

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

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

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

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

    לדף BigQuery

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

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

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

מחיקת פרויקט

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

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

    כניסה לדף Manage resources

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

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