במדריך הזה נלמד איך להשתמש במודל של סדרת זמנים עם כמה משתנים כדי לחזות את הערך העתידי של עמודה מסוימת, על סמך הערך ההיסטורי של כמה תכונות קלט.
במדריך הזה נחזה סדרת זמן אחת. הערכים החזויים מחושבים פעם אחת לכל נקודת זמן בנתוני הקלט.
במדריך הזה נעשה שימוש בנתונים ממערך הנתונים הציבורי 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.
מידע נוסף על העלויות של 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.
-
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). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (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, בוחרים באחת מהאפשרויות הבאות:
המסוף
במסוף Google Cloud , עוברים לדף BigQuery.
בחלונית הימנית, לוחצים על כלי הניתוחים:

אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.
בסייר, מרחיבים את הפרויקט ואז לוחצים על מערכי נתונים.
בדף Datasets (מערכי נתונים), לוחצים על Create dataset (יצירת מערך נתונים).
בחלונית Create dataset:
בשדה Dataset ID (מזהה קבוצת נתונים), מזינים
bqml_tutorial.בקטע Data location, בוחרים באפשרות US.
משאירים את שאר הגדרות ברירת המחדל כמו שהן.
לוחצים על יצירת מערך נתונים.
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. הטבלאות האלה הן טבלאות מחולקות למחיצות.
כדי ליצור את טבלת נתוני הקלט:
במסוף Google Cloud , עוברים לדף BigQuery.
בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על 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.
כדי להציג את נתוני סדרת הזמנים:
במסוף Google Cloud , עוברים לדף BigQuery.
בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על Run:
SELECT * FROM `bqml_tutorial.seattle_air_quality_daily`;
כשהשאילתה מסתיימת, לוחצים על Open in (פתיחה ב) > Data Studio. Data Studio ייפתח בכרטיסייה חדשה. מבצעים את השלבים הבאים בכרטיסייה החדשה.
ב-Data Studio, לוחצים על הוספה > תרשים של סדרת זמנים.
בחלונית תרשים, בוחרים בכרטיסייה הגדרה.
בקטע 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, כך שתהליך האימון מסיק אוטומטית את תדירות הנתונים של סדרת הזמן של הקלט.
כדי ליצור את המודל:
במסוף Google Cloud , עוברים לדף BigQuery.
בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על 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 מציגה את מדדי ההערכה של כל המודלים הפוטנציאליים שהוערכו במהלך תהליך האופטימיזציה האוטומטית של היפרפרמטרים.
כדי להעריך את המודל, פועלים לפי השלבים הבאים:
במסוף Google Cloud , עוברים לדף BigQuery.
בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על 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.
כדי לאחזר את המקדמים של המודל:
במסוף Google Cloud , עוברים לדף BigQuery.
בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על 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מוצגים המשקלים של כל תכונה והנקודה שבה הגרף חותך את ציר ה-Y במודל הרגרסיה הלינארית. אם התכונה היא תכונה מספרית, המשקל שלה מופיע בעמודהweight. אם התכונה היא תכונה קטגורית, הערךcategory_weightsהוא מערך של ערכי struct, שכל אחד מהם מכיל את השם והמשקל של קטגוריה נתונה.מידע נוסף על עמודות הפלט זמין במאמר בנושא הפונקציה
ML.ARIMA_COEFFICIENTS.
שימוש במודל לחיזוי נתונים
אפשר לחזות ערכים עתידיים של סדרות עיתיות באמצעות הפונקציה ML.FORECAST.
בשאילתת GoogleSQL הבאה, פסוקית STRUCT(30 AS horizon, 0.8 AS confidence_level) מציינת שהשאילתה חוזה 30 נקודות זמן עתידיות, ומפיקה מרווח חיזוי עם רמת סמך של 80%.
כדי לחזות נתונים באמצעות המודל:
במסוף Google Cloud , עוברים לדף BigQuery.
בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על 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 מספק את הנתונים עם התכונות העתידיות, שמשמשות לחיזוי הערכים העתידיים כדי להשוות אותם לנתונים בפועל.
כדי להעריך את רמת הדיוק של המודל:
במסוף Google Cloud , עוברים לדף BigQuery.
בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על 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%.
כדי להסביר את התוצאות של המודל:
במסוף Google Cloud , עוברים לדף BigQuery.
בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על 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 שיצרתם.
לוחצים על מחיקת מערך נתונים בצד שמאל של החלון. הפעולה הזו מוחקת את מערך הנתונים, את הטבלה ואת כל הנתונים.
בתיבת הדו-שיח מחיקת מערך נתונים, מקלידים את השם של מערך הנתונים (
bqml_tutorial) כדי לאשר את פקודת המחיקה, ואז לוחצים על מחיקה.
מחיקת פרויקט
כדי למחוק את הפרויקט:
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
המאמרים הבאים
- איך יוצרים תחזית של סדרת זמנים אחת באמצעות מודל חד-משתני
- איך יוצרים תחזית של כמה סדרות זמנים באמצעות מודל חד-משתני
- איך משתמשים במודל חד-משתני כדי לחזות כמה סדרות זמן בכמה שורות
- איך יוצרים תחזית היררכית של כמה סדרות זמן באמצעות מודל חד-משתני
- סקירה כללית על BigQuery ML זמינה במאמר מבוא ל-AI ול-ML ב-BigQuery.