הגבלת ערכי התחזית במודל 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.
לפני שמתחילים
-
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, if it is not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.
יצירת קבוצת נתונים
כדי ליצור מערך נתונים ב-BigQuery, בוחרים אחת מהאפשרויות הבאות:המסוף
נכנסים לדף BigQuery במסוף Google Cloud .
בחלונית הימנית, לוחצים על Explorer:

אם החלונית הימנית לא מוצגת, לוחצים על Expand left pane כדי לפתוח אותה.
ב-Explorer, מרחיבים את הפרויקט ולוחצים על Datasets.
בדף Datasets, לוחצים על Create dataset.
בחלונית Create dataset:
בשדה Dataset ID, מזינים
bqml_tutorial.בקטע Data location (מיקום הנתונים), בוחרים באפשרות 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. בחלונית Visualization configuration, בוחרים באפשרות Bar בשדה Visualization type:
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 שיצרתם.
לוחצים על מחיקת מערך הנתונים בצד שמאל של החלון. הפעולה הזו מוחקת את מערך הנתונים, את הטבלה ואת כל הנתונים.
בתיבת הדו-שיח Delete dataset, מאשרים את פקודת המחיקה על ידי הקלדת שם מערך הנתונים (
bqml_tutorial) ולוחצים על Delete.
מחיקת הפרויקט
כדי למחוק את הפרויקט:
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
המאמרים הבאים
- איך מבצעים חיזוי של כמה סדרות זמנים באמצעות שאילתה אחת מנתוני הנסיעות של NYC Citi Bike.
- איך מאיצים את ARIMA_PLUS כדי לאפשר חיזוי של מיליון סדרות זמנים תוך שעות.
- מידע נוסף על למידת מכונה זמין בקורס המקוצר על למידת מכונה.
- לסקירה כללית על BigQuery ML, קראו את המאמר מבוא ל-BigQuery ML.
- מידע נוסף על מסוף Google Cloud זמין במאמר שימוש במסוף Google Cloud .