שימוש בחגים בהתאמה אישית במודל חיזוי של סדרת זמנים מסוג ARIMA_PLUS
במדריך הזה מוסבר איך לבצע את הפעולות הבאות:
- יוצרים מודל חיזוי של סדרת זמנים ב-
ARIMA_PLUSשמשתמש רק בחגים מובְנים. - יוצרים מודל חיזוי של סדרת זמנים ב-
ARIMA_PLUSשמשתמש בחגים בהתאמה אישית בנוסף לחגים המובנים. - הצגת התוצאות החזויות מהמודלים האלה.
- כדי לראות אילו חגים נכללים במודל, צריך לבדוק את המודל.
- בודקים את ההשפעה של החגים בהתאמה אישית על התוצאות החזויות.
- משווים בין הביצועים של המודל שמשתמש רק בחגים מובנים לבין הביצועים של המודל שמשתמש בחגים בהתאמה אישית בנוסף לחגים מובנים.
במדריך הזה משתמשים בטבלאות הציבוריות של bigquery-public-data.wikipedia.pageviews_*.
ההרשאות הנדרשות
כדי ליצור את קבוצת הנתונים, אתם צריכים את ההרשאה
bigquery.datasets.createב-IAM.כדי ליצור את המודל, צריך את ההרשאות הבאות:
bigquery.jobs.createbigquery.models.createbigquery.models.getDatabigquery.models.updateData
כדי להריץ הסקה, צריך את ההרשאות הבאות:
bigquery.models.getDatabigquery.jobs.create
במאמר מבוא ל-IAM תוכלו לקרוא מידע נוסף על התפקידים וההרשאות של IAM ב-BigQuery.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
- BigQuery: You incur costs for the data you process in 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.
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" } }
הכנת הנתונים של פעולות על ציר הזמן
צוברים את נתוני הצפיות בדף של Google I/O בוויקיפדיה לטבלה אחת, בקיבוץ לפי יום:
נכנסים לדף BigQuery.
בחלונית של עורך ה-SQL, מריצים את הצהרת ה-SQL הבאה:
CREATE OR REPLACE TABLE `bqml_tutorial.googleio_page_views` AS SELECT DATETIME_TRUNC(datehour, DAY) AS date, SUM(views) AS views FROM `bigquery-public-data.wikipedia.pageviews_*` WHERE datehour >= '2017-01-01' AND datehour < '2023-01-01' AND title = 'Google_I/O' GROUP BY DATETIME_TRUNC(datehour, DAY)
יצירת מודל לחיזוי של סדרת זמנים שמשתמש בחגים מובנים
יוצרים מודל שחוזה את מספר הצפיות היומיות בדף "Google I/O" בוויקיפדיה, על סמך נתוני הצפיות בדף לפני 2022, תוך התחשבות בחגים מובנים:
נכנסים לדף BigQuery.
בחלונית של עורך ה-SQL, מריצים את הצהרת ה-SQL הבאה:
CREATE OR REPLACE MODEL `bqml_tutorial.forecast_googleio` OPTIONS ( model_type = 'ARIMA_PLUS', holiday_region = 'US', time_series_timestamp_col = 'date', time_series_data_col = 'views', data_frequency = 'DAILY', horizon = 365) AS SELECT * FROM `bqml_tutorial.googleio_page_views` WHERE date < '2022-01-01';
הצגה חזותית של תוצאות התחזית
אחרי שיוצרים את המודל באמצעות החגים המובְנים, מאחדים את הנתונים המקוריים מהטבלה bqml_tutorial.googleio_page_views עם הערך החזוי מהפונקציה ML.EXPLAIN_FORECAST, ואז ממחישים אותם באופן חזותי באמצעות Data Studio:
נכנסים לדף BigQuery.
בחלונית של עורך ה-SQL, מריצים את הצהרת ה-SQL הבאה:
SELECT original.date, original.views AS original_views, explain_forecast.time_series_adjusted_data AS adjusted_views_without_custom_holiday, FROM `bqml_tutorial.googleio_page_views` original INNER JOIN ( SELECT * FROM ML.EXPLAIN_FORECAST( MODEL `bqml_tutorial.forecast_googleio`, STRUCT(365 AS horizon)) ) explain_forecast ON TIMESTAMP(original.date) = explain_forecast.time_series_timestamp ORDER BY original.date;
בחלונית Query results, לוחצים על Open in > Data Studio. Data Studio נפתח בכרטיסייה חדשה.
בכרטיסייה Data Studio, לוחצים על Add a chart ואז על התרשים של סדרת הזמנים:
ממקמים את התרשים בדוח.
בכרטיסייה Setup בחלונית Chart, לוחצים על Add metric ובוחרים באפשרות adjusted_views_without_custom_holiday:
התרשים אמור להיראות כך:
אפשר לראות שמודל החיזוי מזהה את המגמה הכללית בצורה די טובה. עם זאת, הוא לא מתעד את העלייה בתנועה שקשורה לאירועי Google I/O קודמים, והוא לא יכול ליצור תחזית מדויקת לגבי
- בקטעים הבאים מוסבר איך להתמודד עם חלק מהמגבלות האלה.
יצירת מודל לחיזוי סדרות עתיות שמשתמש בחגים מובנים ובחגים בהתאמה אישית
כפי שאפשר לראות בהיסטוריה של Google I/O, אירוע Google I/O התרחש בתאריכים שונים בין 2017 ל-2022. כדי להביא בחשבון את השינוי הזה, יוצרים מודל שחוזה את הצפיות בדף Google_I/O בוויקיפדיה עד 2022, על סמך נתוני הצפיות בדף מלפני 2022, ומשתמשים בחגים בהתאמה אישית כדי לייצג את אירוע Google I/O בכל שנה. במודל הזה, אתם גם מתאימים את חלון ההשפעה של החג כך שיכסה שלושה ימים סביב תאריך האירוע, כדי לתעד טוב יותר את התנועה הפוטנציאלית בדף לפני האירוע ואחריו.
נכנסים לדף BigQuery.
בחלונית של עורך ה-SQL, מריצים את הצהרת ה-SQL הבאה:
CREATE OR REPLACE MODEL `bqml_tutorial.forecast_googleio_with_custom_holiday` OPTIONS ( model_type = 'ARIMA_PLUS', holiday_region = 'US', time_series_timestamp_col = 'date', time_series_data_col = 'views', data_frequency = 'DAILY', horizon = 365) AS ( training_data AS ( SELECT * FROM `bqml_tutorial.googleio_page_views` WHERE date < '2022-01-01' ), custom_holiday AS ( SELECT 'US' AS region, 'GoogleIO' AS holiday_name, primary_date, 1 AS preholiday_days, 2 AS postholiday_days FROM UNNEST( [ DATE('2017-05-17'), DATE('2018-05-08'), DATE('2019-05-07'), -- cancelled in 2020 due to pandemic DATE('2021-05-18'), DATE('2022-05-11')]) AS primary_date ) );
הצגה חזותית של תוצאות התחזית
אחרי שיוצרים את המודל באמצעות חגים בהתאמה אישית, מאחדים את הנתונים המקוריים מהטבלה bqml_tutorial.googleio_page_views עם הערך החזוי מהפונקציה ML.EXPLAIN_FORECAST, ואז ממחישים אותם באופן חזותי באמצעות Data Studio:
נכנסים לדף BigQuery.
בחלונית של עורך ה-SQL, מריצים את הצהרת ה-SQL הבאה:
SELECT original.date, original.views AS original_views, explain_forecast.time_series_adjusted_data AS adjusted_views_with_custom_holiday, FROM `bqml_tutorial.googleio_page_views` original INNER JOIN ( SELECT * FROM ML.EXPLAIN_FORECAST( MODEL `bqml_tutorial.forecast_googleio_with_custom_holiday`, STRUCT(365 AS horizon)) ) explain_forecast ON TIMESTAMP(original.date) = explain_forecast.time_series_timestamp ORDER BY original.date;
בחלונית Query results, לוחצים על Explore data ואז על Explore with Data Studio. Data Studio נפתח בכרטיסייה חדשה.
בכרטיסייה Data Studio, לוחצים על Add a chart, לוחצים על תרשים סדרת זמנים וממקמים את התרשים בדוח.
בכרטיסייה Setup בחלונית Chart, לוחצים על Add metric ובוחרים באפשרות adjusted_views_with_custom_holiday.
התרשים אמור להיראות כך:
כמו שאפשר לראות, החגים בהתאמה אישית שיפרו את הביצועים של מודל החיזוי. עכשיו הוא מתעד ביעילות את העלייה במספר הצפיות בדפים שנגרמה בעקבות Google I/O.
בדיקת פרטי החג
כדי לבדוק את רשימת החגים שנלקחו בחשבון במהלך בניית המודל, משתמשים בפונקציה ML.HOLIDAY_INFO:
נכנסים לדף BigQuery.
בחלונית של עורך ה-SQL, מריצים את הצהרת ה-SQL הבאה:
SELECT * FROM ML.HOLIDAY_INFO( MODEL `bqml_tutorial.forecast_googleio_with_custom_holiday`);
בתוצאות מוצגים גם Google I/O וגם החגים המובנים ברשימת החגים:
הערכת ההשפעות של החגים בהתאמה אישית
כדי להעריך את ההשפעות של החגים המותאמים אישית על תוצאות התחזית, משתמשים בפונקציה ML.EXPLAIN_FORECAST:
נכנסים לדף BigQuery.
בחלונית של עורך ה-SQL, מריצים את הצהרת ה-SQL הבאה:
SELECT time_series_timestamp, holiday_effect_GoogleIO, holiday_effect_US_Juneteenth, holiday_effect_Christmas, holiday_effect_NewYear FROM ML.EXPLAIN_FORECAST( model `bqml_tutorial.forecast_googleio_with_custom_holiday`, STRUCT(365 AS horizon)) WHERE holiday_effect != 0;
התוצאות מראות ש-Google I/O תורם כמות גדולה של השפעת חג לתוצאות החזויות:
השוואה בין ביצועי המודלים
משתמשים בפונקציה ML.EVALUATE כדי להשוות בין הביצועים של המודל הראשון שנוצר בלי חגים בהתאמה אישית לבין המודל השני שנוצר עם חגים בהתאמה אישית. כדי לראות את הביצועים של המודל השני בחיזוי של אירוע חג עתידי מותאם אישית, מגדירים את טווח התאריכים לשבוע של Google I/O בשנת 2022:
נכנסים לדף BigQuery.
בחלונית של עורך ה-SQL, מריצים את הצהרת ה-SQL הבאה:
SELECT "original" AS model_type, * FROM ml.evaluate( MODEL `bqml_tutorial.forecast_googleio`, ( SELECT * FROM `bqml_tutorial.googleio_page_views` WHERE date >= '2022-05-08' AND date < '2022-05-12' ), STRUCT( 365 AS horizon, TRUE AS perform_aggregation)) UNION ALL SELECT "with_custom_holiday" AS model_type, * FROM ml.evaluate( MODEL `bqml_tutorial.forecast_googleio_with_custom_holiday`, ( SELECT * FROM `bqml_tutorial.googleio_page_views` WHERE date >= '2022-05-08' AND date < '2022-05-12' ), STRUCT( 365 AS horizon, TRUE AS perform_aggregation));
התוצאות מראות שהמודל השני מציע שיפור משמעותי בביצועים:
הסרת המשאבים
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.