במדריך הזה תלמדו איך להשתמש במודל של סדרת זמנים עם כמה משתנים כדי לחזות את הערך העתידי של עמודה נתונה, על סמך הערך ההיסטורי של כמה מאפייני קלט.
במדריך הזה נחזה סדרת זמנים אחת. ערכי התחזית מחושבים פעם אחת לכל נקודת זמן בנתוני הקלט.
במדריך הזה נעשה שימוש בנתונים ממערך הנתונים שזמין לכולם bigquery-public-data.epa_historical_air_quality. קבוצת הנתונים הזו מכילה מידע על חומר חלקיקי (PM2.5), טמפרטורה ומהירות הרוח שנאסף מדי יום מכמה ערים בארה"ב.
מטרות
במדריך הזה מוסבר איך לבצע את הפעולות הבאות:
- יצירת מודל של סדרת זמנים כדי לחזות ערכי PM2.5 באמצעות ההצהרה
CREATE MODEL. - הערכת המידע על הממוצע הנע המשולב האוטו-רגרסיבי (ARIMA) במודל באמצעות הפונקציה
ML.ARIMA_EVALUATE. - בדיקת מקדמי המודל באמצעות הפונקציה
ML.ARIMA_COEFFICIENTS. - אחזור ערכי ה-PM2.5 החזויים מהמודל באמצעות הפונקציה
ML.FORECAST. - הערכת הדיוק של המודל באמצעות הפונקציה
ML.EVALUATE. - אחזור רכיבים של סדרת הזמן, כמו עונתיות, מגמה ושיוך תכונות, באמצעות הפונקציה
ML.EXPLAIN_FORECAST. אפשר לבדוק את הרכיבים האלה של סדרת הזמן כדי להסביר את הערכים החזויים.
עלויות
במדריך הזה משתמשים ברכיבים של Google Cloudשהשימוש בהם כרוך בתשלום, כולל:
- BigQuery
- BigQuery ML
למידע נוסף על העלויות של BigQuery, קראו את הדף תמחור ב-BigQuery.
לפני שמתחילים
-
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.
- BigQuery מופעל באופן אוטומטי בפרויקטים חדשים.
כדי להפעיל את BigQuery בפרויקט קיים, עוברים אל
מפעילים את BigQuery API, אם הוא עדיין לא מופעל.
התפקידים שנדרשים כדי להפעיל ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם אתם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, אתם יכולים לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים?
ההרשאות הנדרשות
כדי ליצור את קבוצת הנתונים, אתם צריכים את ההרשאה
bigquery.datasets.createב-IAM.כדי ליצור את המודל, צריך את ההרשאות הבאות:
bigquery.jobs.createbigquery.models.createbigquery.models.getDatabigquery.models.updateData
כדי להריץ הסקה, צריך את ההרשאות הבאות:
bigquery.models.getDatabigquery.jobs.create
במאמר מבוא ל-IAM תוכלו לקרוא מידע נוסף על התפקידים וההרשאות של IAM ב-BigQuery.
יצירת קבוצת נתונים
כדי ליצור מערך נתונים ב-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-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).
כדי ליצור את טבלת נתוני הקלט:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על 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.
כדי להציג את נתוני סדרת הזמנים:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על Run:
SELECT * FROM `bqml_tutorial.seattle_air_quality_daily`;
כשהשאילתה מסתיימת, לוחצים על Open in > Data Studio. Data Studio ייפתח בכרטיסייה חדשה. מבצעים את השלבים הבאים בכרטיסייה החדשה.
ב-Looker Studio, לוחצים על Insert > Time series chart.
בחלונית תרשים, בוחרים בכרטיסייה הגדרה.
בקטע 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 מכוונן באופן אוטומטי את הפרמטרים של היפר-מודל במודל. האלגוריתם מתאים עשרות מודלים מועמדים ובוחר את המודל הטוב ביותר, שהוא המודל עם קריטריון המידע של Akaike (AIC) הנמוך ביותר.
ערך ברירת המחדל של האפשרות data_frequency בהצהרות CREATE MODEL הוא AUTO_FREQUENCY, כך שתהליך האימון מסיק באופן אוטומטי את תדירות הנתונים של סדרת הזמן של הקלט.
כדי ליצור את המודל:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על 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 מציגה את מדדי ההערכה של כל המודלים המועמדים שהוערכו במהלך התהליך של כוונון היפר-פרמטרים אוטומטי.
כדי להעריך את המודל:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על 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.
כדי לאחזר את המקדמים של המודל:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על 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, שבו כל ערך struct מכיל את השם והמשקל של קטגוריה נתונה.למידע נוסף על עמודות הפלט, ראו הפונקציה
ML.ARIMA_COEFFICIENTS.
שימוש במודל לחיזוי נתונים
חיזוי ערכים עתידיים של סדרות זמנים באמצעות הפונקציה ML.FORECAST.
בשאילתת GoogleSQL הבאה, הסעיף STRUCT(30 AS horizon, 0.8 AS confidence_level) מציין שהשאילתה חוזה 30 נקודות זמן עתידיות, ויוצרת מרווח חיזוי עם רמת סמך של 80%.
כדי לחזות נתונים באמצעות המודל, פועלים לפי השלבים הבאים:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על 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 מספקת את הנתונים עם המאפיינים העתידיים, שמשמשים לחיזוי הערכים העתידיים להשוואה עם הנתונים בפועל.
כדי להעריך את רמת הדיוק של המודל:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על 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, הסעיף STRUCT(30 AS horizon, 0.8 AS confidence_level) שמשמש בפונקציה ML.EXPLAIN_FORECAST מציין שהשאילתה חוזה 30 נקודות זמן עתידיות ויוצרת רווח בר-סמך של 80% לחיזוי.
כדי להסביר את תוצאות המודל:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על 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 בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים הנפרדים.
- אתם יכולים למחוק את הפרויקט שיצרתם.
- אפשר גם להשאיר את הפרויקט ולמחוק את מערך הנתונים.
מחיקת מערך הנתונים
מחיקת הפרויקט תסיר את כל מערכי הנתונים ואת כל הטבלאות בפרויקט. אם אתם מעדיפים להשתמש שוב בפרויקט, אתם יכולים למחוק את קבוצת הנתונים שיצרתם במדריך הזה:
אם צריך, פותחים את הדף של BigQuery במסוףGoogle Cloud .
בניווט, לוחצים על מערך הנתונים bqml_tutorial שיצרתם.
לוחצים על מחיקת מערך הנתונים בצד שמאל של החלון. הפעולה הזו מוחקת את מערך הנתונים, את הטבלה ואת כל הנתונים.
בתיבת הדו-שיח Delete dataset, מאשרים את פקודת המחיקה על ידי הקלדת שם מערך הנתונים (
bqml_tutorial) ולוחצים על Delete.
מחיקת הפרויקט
כדי למחוק את הפרויקט:
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
המאמרים הבאים
- איך יוצרים תחזית של סדרת זמנים אחת באמצעות מודל חד-משתני
- איך יוצרים תחזית של כמה סדרות זמנים באמצעות מודל חד-משתני
- איך משנים את קנה המידה של מודל חד-משתני כשיוצרים תחזית של כמה סדרות זמנים על פני שורות רבות
- איך יוצרים תחזית היררכית של כמה סדרות זמנים באמצעות מודל חד-משתני
- לסקירה כללית על BigQuery ML, קראו את המאמר מבוא ל-AI ול-ML ב-BigQuery.