הגבלת ערכים חזויים למודל פעולות על ציר הזמן מסוג ARIMA_PLUS
במדריך הזה נסביר איך להשתמש במגבלות כדי לצמצם את התוצאות של התחזית שמוחזרות על ידי ARIMA_PLUS מודל של סדרת זמנים. במדריך הזה יוצרים שני מודלים של סדרות עיתיות על אותם נתונים, מודל אחד שמשתמש במגבלות ומודל אחד שלא משתמש במגבלות. כך תוכלו להשוות בין התוצאות שהתקבלו מהמודלים ולהבין את ההבדל שנוצר כתוצאה מהגדרת מגבלות.
הנתונים של new_york.citibike_trips משמשים לאימון המודלים במדריך הזה. מערך הנתונים הזה מכיל מידע על נסיעות ב-Citi Bike בניו יורק.
לפני שממשיכים במדריך הזה, כדאי להכיר את התחזיות של סדרות זמן יחידות. כדי לקבל מבוא לנושא הזה, כדאי לעבור על המדריך בנושא חיזוי של סדרת זמן יחידה מנתונים של Google Analytics.
ההרשאות הנדרשות
כדי ליצור את מערך הנתונים, אתם צריכים את ההרשאה
bigquery.datasets.createב-IAM.כדי ליצור את המודל, צריך את ההרשאות הבאות:
bigquery.jobs.createbigquery.models.createbigquery.models.getDatabigquery.models.updateData
כדי להריץ הסקה, אתם צריכים את ההרשאות הבאות:
bigquery.models.getDatabigquery.jobs.create
במאמר מבוא ל-IAM יש מידע נוסף על תפקידים והרשאות ב-IAM ב-BigQuery.
מטרות
במדריך הזה תשתמשו ב:
- ההצהרה
CREATE MODELלצורך יצירת מודל של סדרת זמנים. - הפונקציה
ML.FORECAST: לחיזוי של סך הביקורים היומיים.
עלויות
במדריך הזה נעשה שימוש ברכיבים של Google Cloudשחלים עליהם חיובים, כולל הרכיבים הבאים:
- BigQuery
- BigQuery ML
מידע נוסף על העלויות ב-BigQuery זמין בדף תמחור ב-BigQuery.
מידע נוסף על העלויות של BigQuery ML זמין במאמר תמחור ב-BigQuery ML.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
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 theserviceusage.services.enablepermission. Learn how to grant roles.-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
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 theserviceusage.services.enablepermission. Learn how to grant roles.
יצירת מערך נתונים
יוצרים מערך נתונים ב-BigQuery לאחסון מודל ה-ML.המסוף
במסוף Google Cloud , עוברים לדף BigQuery.
בחלונית Explorer, לוחצים על שם הפרויקט.
לוחצים על הצגת פעולות > יצירת מערך נתונים.
בדף Create dataset, מבצעים את הפעולות הבאות:
בשדה Dataset ID (מזהה מערך הנתונים), מזינים
bqml_tutorial.בקטע Location type, בוחרים באפשרות Multi-region ואז בוחרים באפשרות US.
משאירים את הגדרות ברירת המחדל שנותרו כמו שהן ולוחצים על Create dataset (יצירת מערך נתונים).
BQ
כדי ליצור מערך נתונים חדש, משתמשים בפקודה bq mk --dataset.
יוצרים מערך נתונים בשם
bqml_tutorialעם מיקום הנתונים שמוגדר ל-US.bq mk --dataset \ --location=US \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
בודקים שמערך הנתונים נוצר:
bq ls
API
מבצעים קריאה לשיטה datasets.insert
עם משאב מוגדר של מערך נתונים.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrames
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של BigQuery DataFrames במדריך לתחילת העבודה עם BigQuery באמצעות BigQuery DataFrames. מידע נוסף מופיע במאמרי העזרה בנושא BigQuery DataFrames.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת ADC לסביבת פיתוח מקומית.
הדמיה של סדרת הזמנים שרוצים לחזות
לפני שיוצרים את המודל, כדאי לראות איך נראית סדרת הזמן של נתוני הקלט.
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
כדי להריץ את השאילתה, פועלים לפי השלבים הבאים:
ב Google Cloud מסוף, לוחצים על הלחצן Compose new query.
מזינים את שאילתת GoogleSQL הבאה בעורך השאילתות.
#standardSQL SELECT EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data`.new_york.citibike_trips GROUP BY date
לוחצים על Run. תוצאות השאילתה דומות לתוצאות הבאות.
משתמשים במסוף Google Cloud כדי ליצור תרשים של נתוני סדרת הזמנים. בחלונית Query results, לוחצים על הכרטיסייה 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.
התוצאה אמורה להיראות כך:
יצירת מודל של סדרת זמן
יצירת מודל של סדרת זמנים באמצעות נתוני הנסיעות של 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 כדי ליצור ולאמן את המודל:
ב Google Cloud מסוף, לוחצים על הלחצן Compose new query.
מזינים את שאילתת 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;
לוחצים על Run.
השאילתה נמשכת כ-80 שניות, ולאחר מכן אפשר לגשת למודל (
nyc_citibike_arima_model). מכיוון שהשאילתה משתמשת בהצהרהCREATE MODELכדי ליצור מודל, אין תוצאות לשאילתה.
חיזוי של סדרת הזמן והצגת התוצאות באופן חזותי
כדי להסביר איך התחזית של סדרת הזמן מחושבת, אפשר להציג באופן חזותי את כל רכיבי המשנה של סדרת הזמן, כמו עונתיות ומגמה, באמצעות הפונקציה ML.FORECAST.
לשם כך, בצע את הצעדים הבאים:
ב Google Cloud מסוף, לוחצים על הלחצן Compose new query.
מזינים את שאילתת 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
לוחצים על Run. תוצאות השאילתה דומות לתוצאות הבאות:
משתמשים במסוף Google Cloud כדי ליצור תרשים של נתוני סדרת הזמנים. בחלונית Query results, לוחצים על הכרטיסייה 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 כדי ליצור ולאמן את המודל:
ב Google Cloud מסוף, לוחצים על הלחצן Compose new query.
מזינים את שאילתת 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;
לוחצים על Run.
השלמת השאילתה נמשכת כ-100 שניות, ואחריה אפשר לגשת למודל (
nyc_citibike_arima_model_with_limits). מכיוון שהשאילתה משתמשת בהצהרתCREATE MODELכדי ליצור מודל, אין תוצאות לשאילתה.
חיזוי סדרת הזמנים באמצעות המודל עם הגבלות
ב Google Cloud מסוף, לוחצים על הלחצן Compose new query.
מזינים את שאילתת 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
לוחצים על Run.
משתמשים במסוף Google Cloud כדי ליצור תרשים של נתוני סדרת הזמנים. בחלונית Query results, לוחצים על הכרטיסייה 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 יכולות לעזור לכם לקבל ערכי תחזית משמעותיים יותר בתרחישים דומים לזה שמוצג כאן, למשל כשמנסים לחזות מחירי מניות או נתוני מכירות עתידיים.
מחיקת מערך נתונים
אם מוחקים פרויקט, כל מערכי הנתונים וכל הטבלאות בפרויקט נמחקים. אם אתם מעדיפים להשתמש מחדש בפרויקט, אתם יכולים למחוק את מערך הנתונים שיצרתם במדריך הזה:
אם צריך, פותחים את הדף BigQuery במסוףGoogle Cloud .
בחלונית הניווט, לוחצים על מערך הנתונים bqml_tutorial שיצרתם.
בצד שמאל של החלון, לוחצים על מחיקת מערך נתונים. הפעולה הזו מוחקת את מערך הנתונים, את הטבלה ואת כל הנתונים.
בתיבת הדו-שיח מחיקת מערך נתונים, מקלידים את שם מערך הנתונים (
bqml_tutorial) כדי לאשר את פקודת המחיקה, ואז לוחצים על מחיקה.
מחיקת פרויקט
כדי למחוק את הפרויקט:
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
המאמרים הבאים
- איך מבצעים כמה תחזיות של סדרות עיתיות באמצעות שאילתה יחידה מנתוני נסיעות של NYC Citi Bike
- איך מאיצים את ARIMA_PLUS כדי לאפשר חיזוי של מיליון סדרות זמן תוך שעות
- מידע נוסף על למידת מכונה זמין בקורס המקוצר על למידת מכונה.
- סקירה כללית של BigQuery ML זמינה במאמר מבוא ל-BigQuery ML.
- מידע נוסף על מסוף Google Cloud זמין במאמר בנושא שימוש במסוף Google Cloud .