במדריך הזה נסביר איך להשתמש במודל רב-משתני של סדרות זמנים כדי לחזות את הערך העתידי של עמודה מסוימת, על סמך הערך ההיסטורי של כמה תכונות קלט.
במדריך הזה נלמד איך ליצור תחזית לסדרת זמן אחת. הערכים החזויים מחושבים פעם אחת לכל נקודת זמן בנתוני הקלט.
במדריך הזה נעשה שימוש בנתונים ממערך הנתונים הציבורי 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, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידים
ההרשאות הנדרשות
כדי ליצור את מערך הנתונים, אתם צריכים את ההרשאה
bigquery.datasets.createב-IAM.כדי ליצור את המודל, צריך את ההרשאות הבאות:
bigquery.jobs.createbigquery.models.createbigquery.models.getDatabigquery.models.updateData
כדי להריץ הסקה, אתם צריכים את ההרשאות הבאות:
bigquery.models.getDatabigquery.jobs.create
במאמר מבוא ל-IAM יש מידע נוסף על תפקידים והרשאות ב-IAM ב-BigQuery.
יצירת מערך נתונים
יוצרים מערך נתונים ב-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-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).
כדי ליצור את טבלת נתוני הקלט:
במסוף 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מוצגים המשקלים של כל תכונה והחיתוך במודל הרגרסיה הלינארית. אם התכונה היא תכונה מספרית, המשקל שלה מופיע בעמודה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, הפונקציה ML.EXPLAIN_FORECAST משתמשת בסעיף STRUCT(30 AS horizon, 0.8 AS confidence_level) כדי לציין שהשאילתה חוזה 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.