שימוש בחגים מותאמים אישית במודל 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.
לפני שמתחילים
- נכנסים לחשבון 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.
Enable the BigQuery API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
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.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
יצירת מערך נתונים
יוצרים מערך נתונים ב-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" } }
הכנת נתונים של פעולות על ציר הזמן
צריך לצבור את נתוני הצפיות בדף של 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, לוחצים על הוספת תרשים ואז על תרשים סדרת הזמן:
ממקמים את התרשים בדוח.
בכרטיסייה הגדרה בחלונית תרשים, לוחצים על הוספת מדד ובוחרים באפשרות 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, לוחצים על הוספת תרשים, לוחצים על תרשים סדרת הזמן וממקמים את התרשים בדוח.
בכרטיסייה הגדרה בחלונית תרשים, לוחצים על הוספת מדד ובוחרים באפשרות 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.